ID3v2FrameBody.smali

.class public Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;
.super Ljava/lang/Object;
.source "ID3v2FrameBody.java"


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody$Buffer;
    }
.end annotation


# static fields
.field static final textBuffer:Ljava/lang/ThreadLocal;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/lang/ThreadLocal<",
            "Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody$Buffer;",
            ">;"
        }
    .end annotation
.end field


# instance fields
.field private final data:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;

.field private final frameHeader:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;

.field private final input:Lim/tpelyyftgw/messenger/audioinfo/util/RangeInputStream;

.field private final tagHeader:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;


# direct methods
.method static constructor <clinit>()V
    .registers 1

    .line 44
    new-instance v0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody$1;

    invoke-direct {v0}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody$1;-><init>()V

    sput-object v0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->textBuffer:Ljava/lang/ThreadLocal;

    return-void
.end method

.method constructor <init>(Ljava/io/InputStream;JILim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;)V
    .registers 14
    .param p1, "delegate"    # Ljava/io/InputStream;
    .param p2, "position"    # J
    .param p4, "dataLength"    # I
    .param p5, "tagHeader"    # Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;
    .param p6, "frameHeader"    # Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/IOException;
        }
    .end annotation

    .line 56
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 57
    new-instance v6, Lim/tpelyyftgw/messenger/audioinfo/util/RangeInputStream;

    int-to-long v4, p4

    move-object v0, v6

    move-object v1, p1

    move-wide v2, p2

    invoke-direct/range {v0 .. v5}, Lim/tpelyyftgw/messenger/audioinfo/util/RangeInputStream;-><init>(Ljava/io/InputStream;JJ)V

    iput-object v6, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->input:Lim/tpelyyftgw/messenger/audioinfo/util/RangeInputStream;

    .line 58
    new-instance v0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;

    invoke-direct {v0, v6}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;-><init>(Ljava/io/InputStream;)V

    iput-object v0, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->data:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;

    .line 59
    iput-object p5, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->tagHeader:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;

    .line 60
    iput-object p6, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->frameHeader:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;

    .line 61
    return-void
.end method

.method private extractString([BIILim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;Z)Ljava/lang/String;
    .registers 10
    .param p1, "bytes"    # [B
    .param p2, "offset"    # I
    .param p3, "length"    # I
    .param p4, "encoding"    # Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;
    .param p5, "searchZeros"    # Z

    .line 84
    if-eqz p5, :cond_2d

    .line 85
    const/4 v0, 0x0

    .line 86
    .local v0, "zeros":I
    const/4 v1, 0x0

    .local v1, "i":I
    :goto_4
    if-ge v1, p3, :cond_2d

    .line 88
    add-int v2, p2, v1

    aget-byte v2, p1, v2

    if-nez v2, :cond_29

    sget-object v2, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;->UTF_16:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;

    if-ne p4, v2, :cond_18

    if-nez v0, :cond_18

    add-int v2, p2, v1

    rem-int/lit8 v2, v2, 0x2

    if-nez v2, :cond_29

    .line 89
    :cond_18
    add-int/lit8 v0, v0, 0x1

    invoke-virtual {p4}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;->getZeroBytes()I

    move-result v2

    if-ne v0, v2, :cond_2a

    .line 90
    add-int/lit8 v2, v1, 0x1

    invoke-virtual {p4}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;->getZeroBytes()I

    move-result v3

    sub-int p3, v2, v3

    .line 91
    goto :goto_2d

    .line 94
    :cond_29
    const/4 v0, 0x0

    .line 86
    :cond_2a
    add-int/lit8 v1, v1, 0x1

    goto :goto_4

    .line 99
    .end local v0    # "zeros":I
    .end local v1    # "i":I
    :cond_2d
    :goto_2d
    :try_start_2d
    new-instance v0, Ljava/lang/String;

    invoke-virtual {p4}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;->getCharset()Ljava/nio/charset/Charset;

    move-result-object v1

    invoke-virtual {v1}, Ljava/nio/charset/Charset;->name()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, p1, p2, p3, v1}, Ljava/lang/String;-><init>([BIILjava/lang/String;)V

    .line 100
    .local v0, "string":Ljava/lang/String;
    invoke-virtual {v0}, Ljava/lang/String;->length()I

    move-result v1

    if-lez v1, :cond_50

    const/4 v1, 0x0

    invoke-virtual {v0, v1}, Ljava/lang/String;->charAt(I)C

    move-result v1

    const v2, 0xfeff

    if-ne v1, v2, :cond_50

    .line 101
    const/4 v1, 0x1

    invoke-virtual {v0, v1}, Ljava/lang/String;->substring(I)Ljava/lang/String;

    move-result-object v1
    :try_end_4f
    .catch Ljava/lang/Exception; {:try_start_2d .. :try_end_4f} :catch_51

    move-object v0, v1

    .line 103
    :cond_50
    return-object v0

    .line 104
    .end local v0    # "string":Ljava/lang/String;
    :catch_51
    move-exception v0

    .line 105
    .local v0, "e":Ljava/lang/Exception;
    const-string v1, ""

    return-object v1
.end method


# virtual methods
.method public getData()Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;
    .registers 2

    .line 64
    iget-object v0, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->data:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;

    return-object v0
.end method

.method public getFrameHeader()Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;
    .registers 2

    .line 80
    iget-object v0, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->frameHeader:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;

    return-object v0
.end method

.method public getPosition()J
    .registers 3

    .line 68
    iget-object v0, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->input:Lim/tpelyyftgw/messenger/audioinfo/util/RangeInputStream;

    invoke-virtual {v0}, Lim/tpelyyftgw/messenger/audioinfo/util/RangeInputStream;->getPosition()J

    move-result-wide v0

    return-wide v0
.end method

.method public getRemainingLength()J
    .registers 3

    .line 72
    iget-object v0, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->input:Lim/tpelyyftgw/messenger/audioinfo/util/RangeInputStream;

    invoke-virtual {v0}, Lim/tpelyyftgw/messenger/audioinfo/util/RangeInputStream;->getRemainingLength()J

    move-result-wide v0

    return-wide v0
.end method

.method public getTagHeader()Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;
    .registers 2

    .line 76
    iget-object v0, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->tagHeader:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;

    return-object v0
.end method

.method public readEncoding()Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;
    .registers 5
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/IOException;,
            Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Exception;
        }
    .end annotation

    .line 136
    iget-object v0, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->data:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;

    invoke-virtual {v0}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readByte()B

    move-result v0

    .line 137
    .local v0, "value":B
    if-eqz v0, :cond_31

    const/4 v1, 0x1

    if-eq v0, v1, :cond_2e

    const/4 v1, 0x2

    if-eq v0, v1, :cond_2b

    const/4 v1, 0x3

    if-ne v0, v1, :cond_14

    .line 145
    sget-object v1, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;->UTF_8:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;

    return-object v1

    .line 149
    :cond_14
    new-instance v1, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Exception;

    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "Invalid encoding: "

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v2

    invoke-direct {v1, v2}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Exception;-><init>(Ljava/lang/String;)V

    throw v1

    .line 143
    :cond_2b
    sget-object v1, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;->UTF_16BE:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;

    return-object v1

    .line 141
    :cond_2e
    sget-object v1, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;->UTF_16:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;

    return-object v1

    .line 139
    :cond_31
    sget-object v1, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;->ISO_8859_1:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;

    return-object v1
.end method

.method public readFixedLengthString(ILim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;)Ljava/lang/String;
    .registers 10
    .param p1, "length"    # I
    .param p2, "encoding"    # Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/IOException;,
            Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Exception;
        }
    .end annotation

    .line 127
    int-to-long v0, p1

    invoke-virtual {p0}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->getRemainingLength()J

    move-result-wide v2

    cmp-long v4, v0, v2

    if-gtz v4, :cond_26

    .line 130
    sget-object v0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->textBuffer:Ljava/lang/ThreadLocal;

    invoke-virtual {v0}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody$Buffer;

    invoke-virtual {v0, p1}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody$Buffer;->bytes(I)[B

    move-result-object v0

    .line 131
    .local v0, "bytes":[B
    iget-object v1, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->data:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;

    const/4 v2, 0x0

    invoke-virtual {v1, v0, v2, p1}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readFully([BII)V

    .line 132
    const/4 v3, 0x0

    const/4 v6, 0x1

    move-object v1, p0

    move-object v2, v0

    move v4, p1

    move-object v5, p2

    invoke-direct/range {v1 .. v6}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->extractString([BIILim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;Z)Ljava/lang/String;

    move-result-object v1

    return-object v1

    .line 128
    .end local v0    # "bytes":[B
    :cond_26
    new-instance v0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Exception;

    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    const-string v2, "Could not read fixed-length string of length: "

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Exception;-><init>(Ljava/lang/String;)V

    throw v0
.end method

.method public readZeroTerminatedString(ILim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;)Ljava/lang/String;
    .registers 13
    .param p1, "maxLength"    # I
    .param p2, "encoding"    # Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/IOException;,
            Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Exception;
        }
    .end annotation

    .line 110
    const/4 v0, 0x0

    .line 111
    .local v0, "zeros":I
    invoke-virtual {p0}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->getRemainingLength()J

    move-result-wide v1

    long-to-int v2, v1

    invoke-static {p1, v2}, Ljava/lang/Math;->min(II)I

    move-result v1

    .line 112
    .local v1, "length":I
    sget-object v2, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->textBuffer:Ljava/lang/ThreadLocal;

    invoke-virtual {v2}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody$Buffer;

    invoke-virtual {v2, v1}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody$Buffer;->bytes(I)[B

    move-result-object v2

    .line 113
    .local v2, "bytes":[B
    const/4 v3, 0x0

    move v9, v3

    .local v9, "i":I
    :goto_18
    if-ge v9, v1, :cond_4c

    .line 115
    iget-object v3, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->data:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;

    invoke-virtual {v3}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readByte()B

    move-result v3

    aput-byte v3, v2, v9

    if-nez v3, :cond_48

    sget-object v3, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;->UTF_16:Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;

    if-ne p2, v3, :cond_2e

    if-nez v0, :cond_2e

    rem-int/lit8 v3, v9, 0x2

    if-nez v3, :cond_48

    .line 116
    :cond_2e
    add-int/lit8 v0, v0, 0x1

    invoke-virtual {p2}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;->getZeroBytes()I

    move-result v3

    if-ne v0, v3, :cond_49

    .line 117
    const/4 v5, 0x0

    add-int/lit8 v3, v9, 0x1

    invoke-virtual {p2}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;->getZeroBytes()I

    move-result v4

    sub-int v6, v3, v4

    const/4 v8, 0x0

    move-object v3, p0

    move-object v4, v2

    move-object v7, p2

    invoke-direct/range {v3 .. v8}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->extractString([BIILim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Encoding;Z)Ljava/lang/String;

    move-result-object v3

    return-object v3

    .line 120
    :cond_48
    const/4 v0, 0x0

    .line 113
    :cond_49
    add-int/lit8 v9, v9, 0x1

    goto :goto_18

    .line 123
    .end local v9    # "i":I
    :cond_4c
    new-instance v3, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Exception;

    const-string v4, "Could not read zero-termiated string"

    invoke-direct {v3, v4}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Exception;-><init>(Ljava/lang/String;)V

    goto :goto_55

    :goto_54
    throw v3

    :goto_55
    goto :goto_54
.end method

.method public toString()Ljava/lang/String;
    .registers 4

    .line 153
    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    const-string v1, "id3v2frame[pos="

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {p0}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->getPosition()J

    move-result-wide v1

    invoke-virtual {v0, v1, v2}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;

    const-string v1, ", "

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {p0}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameBody;->getRemainingLength()J

    move-result-wide v1

    invoke-virtual {v0, v1, v2}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;

    const-string v1, " left]"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    return-object v0
.end method