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