DashMediaSource$Iso8601Parser.smali
.class final Lcom/google/android/exoplayer2/source/dash/DashMediaSource$Iso8601Parser;
.super Ljava/lang/Object;
.source "DashMediaSource.java"
# interfaces
.implements Lcom/google/android/exoplayer2/upstream/ParsingLoadable$Parser;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/source/dash/DashMediaSource;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x18
name = "Iso8601Parser"
.end annotation
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/lang/Object;",
"Lcom/google/android/exoplayer2/upstream/ParsingLoadable$Parser<",
"Ljava/lang/Long;",
">;"
}
.end annotation
# static fields
.field private static final TIMESTAMP_WITH_TIMEZONE_PATTERN:Ljava/util/regex/Pattern;
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 1342
nop
.line 1343
const-string v0, "(.+?)(Z|((\\+|-|\u2212)(\\d\\d)(:?(\\d\\d))?))"
invoke-static {v0}, Ljava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;
move-result-object v0
sput-object v0, Lcom/google/android/exoplayer2/source/dash/DashMediaSource$Iso8601Parser;->TIMESTAMP_WITH_TIMEZONE_PATTERN:Ljava/util/regex/Pattern;
.line 1342
return-void
.end method
.method constructor <init>()V
.registers 1
.line 1340
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public parse(Landroid/net/Uri;Ljava/io/InputStream;)Ljava/lang/Long;
.registers 22
.param p1, "uri" # Landroid/net/Uri;
.param p2, "inputStream" # Ljava/io/InputStream;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 1347
new-instance v0, Ljava/io/BufferedReader;
new-instance v1, Ljava/io/InputStreamReader;
.line 1348
const-string v2, "UTF-8"
invoke-static {v2}, Ljava/nio/charset/Charset;->forName(Ljava/lang/String;)Ljava/nio/charset/Charset;
move-result-object v2
move-object/from16 v3, p2
invoke-direct {v1, v3, v2}, Ljava/io/InputStreamReader;-><init>(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V
invoke-direct {v0, v1}, Ljava/io/BufferedReader;-><init>(Ljava/io/Reader;)V
.line 1349
invoke-virtual {v0}, Ljava/io/BufferedReader;->readLine()Ljava/lang/String;
move-result-object v1
.line 1351
.local v1, "firstLine":Ljava/lang/String;
:try_start_16
sget-object v0, Lcom/google/android/exoplayer2/source/dash/DashMediaSource$Iso8601Parser;->TIMESTAMP_WITH_TIMEZONE_PATTERN:Ljava/util/regex/Pattern;
invoke-virtual {v0, v1}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
move-result-object v0
.line 1352
.local v0, "matcher":Ljava/util/regex/Matcher;
invoke-virtual {v0}, Ljava/util/regex/Matcher;->matches()Z
move-result v2
if-eqz v2, :cond_92
.line 1356
const/4 v2, 0x1
invoke-virtual {v0, v2}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v2
.line 1357
.local v2, "timestampWithoutTimezone":Ljava/lang/String;
new-instance v4, Ljava/text/SimpleDateFormat;
const-string/jumbo v5, "yyyy-MM-dd\'T\'HH:mm:ss"
sget-object v6, Ljava/util/Locale;->US:Ljava/util/Locale;
invoke-direct {v4, v5, v6}, Ljava/text/SimpleDateFormat;-><init>(Ljava/lang/String;Ljava/util/Locale;)V
.line 1358
.local v4, "format":Ljava/text/SimpleDateFormat;
const-string v5, "UTC"
invoke-static {v5}, Ljava/util/TimeZone;->getTimeZone(Ljava/lang/String;)Ljava/util/TimeZone;
move-result-object v5
invoke-virtual {v4, v5}, Ljava/text/SimpleDateFormat;->setTimeZone(Ljava/util/TimeZone;)V
.line 1359
invoke-virtual {v4, v2}, Ljava/text/SimpleDateFormat;->parse(Ljava/lang/String;)Ljava/util/Date;
move-result-object v5
invoke-virtual {v5}, Ljava/util/Date;->getTime()J
move-result-wide v5
.line 1361
.local v5, "timestampMs":J
const/4 v7, 0x2
invoke-virtual {v0, v7}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v7
.line 1362
.local v7, "timezone":Ljava/lang/String;
const-string v8, "Z"
invoke-virtual {v8, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v8
if-eqz v8, :cond_50
goto :goto_8d
.line 1365
:cond_50
const-string v8, "+"
const/4 v9, 0x4
invoke-virtual {v0, v9}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v9
invoke-virtual {v8, v9}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v8
if-eqz v8, :cond_60
const-wide/16 v8, 0x1
goto :goto_62
:cond_60
const-wide/16 v8, -0x1
.line 1366
.local v8, "sign":J
:goto_62
const/4 v10, 0x5
invoke-virtual {v0, v10}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v10
invoke-static {v10}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J
move-result-wide v10
.line 1367
.local v10, "hours":J
const/4 v12, 0x7
invoke-virtual {v0, v12}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v12
.line 1368
.local v12, "minutesString":Ljava/lang/String;
invoke-static {v12}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
move-result v13
if-eqz v13, :cond_79
const-wide/16 v13, 0x0
goto :goto_7d
:cond_79
invoke-static {v12}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J
move-result-wide v13
.line 1369
.local v13, "minutes":J
:goto_7d
const-wide/16 v15, 0x3c
mul-long v17, v10, v15
add-long v17, v17, v13
mul-long v17, v17, v15
const-wide/16 v15, 0x3e8
mul-long v17, v17, v15
mul-long v17, v17, v8
.line 1370
.local v17, "timestampOffsetMs":J
sub-long v5, v5, v17
.line 1372
.end local v8 # "sign":J
.end local v10 # "hours":J
.end local v12 # "minutesString":Ljava/lang/String;
.end local v13 # "minutes":J
.end local v17 # "timestampOffsetMs":J
:goto_8d
invoke-static {v5, v6}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v8
return-object v8
.line 1353
.end local v2 # "timestampWithoutTimezone":Ljava/lang/String;
.end local v4 # "format":Ljava/text/SimpleDateFormat;
.end local v5 # "timestampMs":J
.end local v7 # "timezone":Ljava/lang/String;
:cond_92
new-instance v2, Lcom/google/android/exoplayer2/ParserException;
new-instance v4, Ljava/lang/StringBuilder;
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
const-string v5, "Couldn\'t parse timestamp: "
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v4, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v4
invoke-direct {v2, v4}, Lcom/google/android/exoplayer2/ParserException;-><init>(Ljava/lang/String;)V
.end local v1 # "firstLine":Ljava/lang/String;
.end local p1 # "uri":Landroid/net/Uri;
.end local p2 # "inputStream":Ljava/io/InputStream;
throw v2
:try_end_a9
.catch Ljava/text/ParseException; {:try_start_16 .. :try_end_a9} :catch_a9
.line 1373
.end local v0 # "matcher":Ljava/util/regex/Matcher;
.restart local v1 # "firstLine":Ljava/lang/String;
.restart local p1 # "uri":Landroid/net/Uri;
.restart local p2 # "inputStream":Ljava/io/InputStream;
:catch_a9
move-exception v0
.line 1374
.local v0, "e":Ljava/text/ParseException;
new-instance v2, Lcom/google/android/exoplayer2/ParserException;
invoke-direct {v2, v0}, Lcom/google/android/exoplayer2/ParserException;-><init>(Ljava/lang/Throwable;)V
throw v2
.end method
.method public bridge synthetic parse(Landroid/net/Uri;Ljava/io/InputStream;)Ljava/lang/Object;
.registers 3
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 1340
invoke-virtual {p0, p1, p2}, Lcom/google/android/exoplayer2/source/dash/DashMediaSource$Iso8601Parser;->parse(Landroid/net/Uri;Ljava/io/InputStream;)Ljava/lang/Long;
move-result-object p1
return-object p1
.end method