CacheDataSource.smali
.class public final Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;
.super Ljava/lang/Object;
.source "CacheDataSource.java"
# interfaces
.implements Lcom/google/android/exoplayer2/upstream/DataSource;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource$EventListener;,
Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource$CacheIgnoredReason;,
Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource$Flags;
}
.end annotation
# static fields
.field public static final CACHE_IGNORED_REASON_ERROR:I
.field public static final CACHE_IGNORED_REASON_UNSET_LENGTH:I
.field private static final CACHE_NOT_IGNORED:I
.field public static final FLAG_BLOCK_ON_CACHE:I
.field public static final FLAG_IGNORE_CACHE_FOR_UNSET_LENGTH_REQUESTS:I
.field public static final FLAG_IGNORE_CACHE_ON_ERROR:I
.field private static final MIN_READ_BEFORE_CHECKING_CACHE:J = 0x19000L
# instance fields
.field private actualUri:Landroid/net/Uri;
.field private final blockOnCache:Z
.field private bytesRemaining:J
.field private final cache:Lcom/google/android/exoplayer2/upstream/cache/Cache;
.field private final cacheKeyFactory:Lcom/google/android/exoplayer2/upstream/cache/CacheKeyFactory;
.field private final cacheReadDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.field private final cacheWriteDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.field private checkCachePosition:J
.field private currentDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.field private currentDataSpecLengthUnset:Z
.field private currentHoleSpan:Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
.field private currentRequestIgnoresCache:Z
.field private final eventListener:Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource$EventListener;
.field private flags:I
.field private httpMethod:I
.field private final ignoreCacheForUnsetLengthRequests:Z
.field private final ignoreCacheOnError:Z
.field private key:Ljava/lang/String;
.field private readPosition:J
.field private seenCacheError:Z
.field private totalCachedBytesRead:J
.field private final upstreamDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.field private uri:Landroid/net/Uri;
# direct methods
.method static constructor <clinit>()V
.registers 1
const v0, 0x156f
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->CACHE_IGNORED_REASON_ERROR:I
const v0, 0x156e
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->CACHE_IGNORED_REASON_UNSET_LENGTH:I
const v0, -0x1570
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->CACHE_NOT_IGNORED:I
const v0, 0x156e
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->FLAG_BLOCK_ON_CACHE:I
const v0, 0x156b
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->FLAG_IGNORE_CACHE_FOR_UNSET_LENGTH_REQUESTS:I
const v0, 0x156d
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->FLAG_IGNORE_CACHE_ON_ERROR:I
return-void
.end method
.method public constructor <init>(Lcom/google/android/exoplayer2/upstream/cache/Cache;Lcom/google/android/exoplayer2/upstream/DataSource;)V
.registers 4
.param p1, "cache" # Lcom/google/android/exoplayer2/upstream/cache/Cache;
.param p2, "upstream" # Lcom/google/android/exoplayer2/upstream/DataSource;
.line 158
const/4 v0, 0x0
invoke-direct {p0, p1, p2, v0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;-><init>(Lcom/google/android/exoplayer2/upstream/cache/Cache;Lcom/google/android/exoplayer2/upstream/DataSource;I)V
.line 159
return-void
.end method
.method public constructor <init>(Lcom/google/android/exoplayer2/upstream/cache/Cache;Lcom/google/android/exoplayer2/upstream/DataSource;I)V
.registers 11
.param p1, "cache" # Lcom/google/android/exoplayer2/upstream/cache/Cache;
.param p2, "upstream" # Lcom/google/android/exoplayer2/upstream/DataSource;
.param p3, "flags" # I
.line 171
new-instance v3, Lcom/google/android/exoplayer2/upstream/FileDataSource;
invoke-direct {v3}, Lcom/google/android/exoplayer2/upstream/FileDataSource;-><init>()V
new-instance v4, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSink;
const-wide/32 v0, 0x500000
invoke-direct {v4, p1, v0, v1}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSink;-><init>(Lcom/google/android/exoplayer2/upstream/cache/Cache;J)V
const/4 v6, 0x0
move-object v0, p0
move-object v1, p1
move-object v2, p2
move v5, p3
invoke-direct/range {v0 .. v6}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;-><init>(Lcom/google/android/exoplayer2/upstream/cache/Cache;Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSink;ILcom/google/android/exoplayer2/upstream/cache/CacheDataSource$EventListener;)V
.line 178
return-void
.end method
.method public constructor <init>(Lcom/google/android/exoplayer2/upstream/cache/Cache;Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSink;ILcom/google/android/exoplayer2/upstream/cache/CacheDataSource$EventListener;)V
.registers 15
.param p1, "cache" # Lcom/google/android/exoplayer2/upstream/cache/Cache;
.param p2, "upstream" # Lcom/google/android/exoplayer2/upstream/DataSource;
.param p3, "cacheReadDataSource" # Lcom/google/android/exoplayer2/upstream/DataSource;
.param p4, "cacheWriteDataSink" # Lcom/google/android/exoplayer2/upstream/DataSink;
.param p5, "flags" # I
.param p6, "eventListener" # Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource$EventListener;
.line 201
const/4 v7, 0x0
move-object v0, p0
move-object v1, p1
move-object v2, p2
move-object v3, p3
move-object v4, p4
move v5, p5
move-object v6, p6
invoke-direct/range {v0 .. v7}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;-><init>(Lcom/google/android/exoplayer2/upstream/cache/Cache;Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSink;ILcom/google/android/exoplayer2/upstream/cache/CacheDataSource$EventListener;Lcom/google/android/exoplayer2/upstream/cache/CacheKeyFactory;)V
.line 209
return-void
.end method
.method public constructor <init>(Lcom/google/android/exoplayer2/upstream/cache/Cache;Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSink;ILcom/google/android/exoplayer2/upstream/cache/CacheDataSource$EventListener;Lcom/google/android/exoplayer2/upstream/cache/CacheKeyFactory;)V
.registers 11
.param p1, "cache" # Lcom/google/android/exoplayer2/upstream/cache/Cache;
.param p2, "upstream" # Lcom/google/android/exoplayer2/upstream/DataSource;
.param p3, "cacheReadDataSource" # Lcom/google/android/exoplayer2/upstream/DataSource;
.param p4, "cacheWriteDataSink" # Lcom/google/android/exoplayer2/upstream/DataSink;
.param p5, "flags" # I
.param p6, "eventListener" # Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource$EventListener;
.param p7, "cacheKeyFactory" # Lcom/google/android/exoplayer2/upstream/cache/CacheKeyFactory;
.line 233
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 234
iput-object p1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cache:Lcom/google/android/exoplayer2/upstream/cache/Cache;
.line 235
iput-object p3, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cacheReadDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.line 236
if-eqz p7, :cond_b
move-object v0, p7
goto :goto_d
:cond_b
sget-object v0, Lcom/google/android/exoplayer2/upstream/cache/CacheUtil;->DEFAULT_CACHE_KEY_FACTORY:Lcom/google/android/exoplayer2/upstream/cache/CacheKeyFactory;
:goto_d
iput-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cacheKeyFactory:Lcom/google/android/exoplayer2/upstream/cache/CacheKeyFactory;
.line 238
and-int/lit8 v0, p5, 0x1
const/4 v1, 0x0
const/4 v2, 0x1
if-eqz v0, :cond_17
const/4 v0, 0x1
goto :goto_18
:cond_17
const/4 v0, 0x0
:goto_18
iput-boolean v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->blockOnCache:Z
.line 239
and-int/lit8 v0, p5, 0x2
if-eqz v0, :cond_20
const/4 v0, 0x1
goto :goto_21
:cond_20
const/4 v0, 0x0
:goto_21
iput-boolean v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->ignoreCacheOnError:Z
.line 240
and-int/lit8 v0, p5, 0x4
if-eqz v0, :cond_28
const/4 v1, 0x1
:cond_28
iput-boolean v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->ignoreCacheForUnsetLengthRequests:Z
.line 242
iput-object p2, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->upstreamDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.line 243
if-eqz p4, :cond_36
.line 244
new-instance v0, Lcom/google/android/exoplayer2/upstream/TeeDataSource;
invoke-direct {v0, p2, p4}, Lcom/google/android/exoplayer2/upstream/TeeDataSource;-><init>(Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSink;)V
iput-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cacheWriteDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
goto :goto_39
.line 246
:cond_36
const/4 v0, 0x0
iput-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cacheWriteDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.line 248
:goto_39
iput-object p6, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->eventListener:Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource$EventListener;
.line 249
return-void
.end method
.method private closeCurrentSource()V
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 518
iget-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
if-nez v0, :cond_5
.line 519
return-void
.line 522
:cond_5
const/4 v1, 0x0
const/4 v2, 0x0
:try_start_7
invoke-interface {v0}, Lcom/google/android/exoplayer2/upstream/DataSource;->close()V
:try_end_a
.catchall {:try_start_7 .. :try_end_a} :catchall_1a
.line 524
iput-object v2, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.line 525
iput-boolean v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentDataSpecLengthUnset:Z
.line 526
iget-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentHoleSpan:Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
if-eqz v0, :cond_19
.line 527
iget-object v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cache:Lcom/google/android/exoplayer2/upstream/cache/Cache;
invoke-interface {v1, v0}, Lcom/google/android/exoplayer2/upstream/cache/Cache;->releaseHoleSpan(Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;)V
.line 528
iput-object v2, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentHoleSpan:Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
.line 531
:cond_19
return-void
.line 524
:catchall_1a
move-exception v0
iput-object v2, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.line 525
iput-boolean v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentDataSpecLengthUnset:Z
.line 526
iget-object v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentHoleSpan:Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
if-eqz v1, :cond_2a
.line 527
iget-object v3, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cache:Lcom/google/android/exoplayer2/upstream/cache/Cache;
invoke-interface {v3, v1}, Lcom/google/android/exoplayer2/upstream/cache/Cache;->releaseHoleSpan(Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;)V
.line 528
iput-object v2, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentHoleSpan:Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
.line 530
:cond_2a
throw v0
.end method
.method private static getRedirectedUriOrDefault(Lcom/google/android/exoplayer2/upstream/cache/Cache;Ljava/lang/String;Landroid/net/Uri;)Landroid/net/Uri;
.registers 5
.param p0, "cache" # Lcom/google/android/exoplayer2/upstream/cache/Cache;
.param p1, "key" # Ljava/lang/String;
.param p2, "defaultUri" # Landroid/net/Uri;
.line 483
invoke-interface {p0, p1}, Lcom/google/android/exoplayer2/upstream/cache/Cache;->getContentMetadata(Ljava/lang/String;)Lcom/google/android/exoplayer2/upstream/cache/ContentMetadata;
move-result-object v0
invoke-static {v0}, Lcom/google/android/exoplayer2/upstream/cache/ContentMetadata$-CC;->getRedirectedUri(Lcom/google/android/exoplayer2/upstream/cache/ContentMetadata;)Landroid/net/Uri;
move-result-object v0
.line 484
.local v0, "redirectedUri":Landroid/net/Uri;
if-eqz v0, :cond_c
move-object v1, v0
goto :goto_d
:cond_c
move-object v1, p2
:goto_d
return-object v1
.end method
.method private handleBeforeThrow(Ljava/io/IOException;)V
.registers 3
.param p1, "exception" # Ljava/io/IOException;
.line 534
invoke-direct {p0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->isReadingFromCache()Z
move-result v0
if-nez v0, :cond_a
instance-of v0, p1, Lcom/google/android/exoplayer2/upstream/cache/Cache$CacheException;
if-eqz v0, :cond_d
.line 535
:cond_a
const/4 v0, 0x1
iput-boolean v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->seenCacheError:Z
.line 537
:cond_d
return-void
.end method
.method private isBypassingCache()Z
.registers 3
.line 506
iget-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
iget-object v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->upstreamDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
if-ne v0, v1, :cond_8
const/4 v0, 0x1
goto :goto_9
:cond_8
const/4 v0, 0x0
:goto_9
return v0
.end method
.method private static isCausedByPositionOutOfRange(Ljava/io/IOException;)Z
.registers 4
.param p0, "e" # Ljava/io/IOException;
.line 488
move-object v0, p0
.line 489
.local v0, "cause":Ljava/lang/Throwable;
:goto_1
if-eqz v0, :cond_15
.line 490
instance-of v1, v0, Lcom/google/android/exoplayer2/upstream/DataSourceException;
if-eqz v1, :cond_10
.line 491
move-object v1, v0
check-cast v1, Lcom/google/android/exoplayer2/upstream/DataSourceException;
iget v1, v1, Lcom/google/android/exoplayer2/upstream/DataSourceException;->reason:I
.line 492
.local v1, "reason":I
if-nez v1, :cond_10
.line 493
const/4 v2, 0x1
return v2
.line 496
.end local v1 # "reason":I
:cond_10
invoke-virtual {v0}, Ljava/lang/Throwable;->getCause()Ljava/lang/Throwable;
move-result-object v0
goto :goto_1
.line 498
:cond_15
const/4 v1, 0x0
return v1
.end method
.method private isReadingFromCache()Z
.registers 3
.line 510
iget-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
iget-object v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cacheReadDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
if-ne v0, v1, :cond_8
const/4 v0, 0x1
goto :goto_9
:cond_8
const/4 v0, 0x0
:goto_9
return v0
.end method
.method private isReadingFromUpstream()Z
.registers 2
.line 502
invoke-direct {p0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->isReadingFromCache()Z
move-result v0
xor-int/lit8 v0, v0, 0x1
return v0
.end method
.method private isWritingToCache()Z
.registers 3
.line 514
iget-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
iget-object v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cacheWriteDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
if-ne v0, v1, :cond_8
const/4 v0, 0x1
goto :goto_9
:cond_8
const/4 v0, 0x0
:goto_9
return v0
.end method
.method private notifyBytesRead()V
.registers 8
.line 556
iget-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->eventListener:Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource$EventListener;
if-eqz v0, :cond_19
iget-wide v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->totalCachedBytesRead:J
const-wide/16 v3, 0x0
cmp-long v5, v1, v3
if-lez v5, :cond_19
.line 557
iget-object v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cache:Lcom/google/android/exoplayer2/upstream/cache/Cache;
invoke-interface {v1}, Lcom/google/android/exoplayer2/upstream/cache/Cache;->getCacheSpace()J
move-result-wide v1
iget-wide v5, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->totalCachedBytesRead:J
invoke-interface {v0, v1, v2, v5, v6}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource$EventListener;->onCachedBytesRead(JJ)V
.line 558
iput-wide v3, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->totalCachedBytesRead:J
.line 560
:cond_19
return-void
.end method
.method private notifyCacheIgnored(I)V
.registers 3
.param p1, "reason" # I
.line 550
iget-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->eventListener:Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource$EventListener;
if-eqz v0, :cond_7
.line 551
invoke-interface {v0, p1}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource$EventListener;->onCacheIgnored(I)V
.line 553
:cond_7
return-void
.end method
.method private openNextSource(Z)V
.registers 22
.param p1, "checkCache" # Z
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 374
move-object/from16 v1, p0
iget-boolean v0, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentRequestIgnoresCache:Z
if-eqz v0, :cond_8
.line 375
const/4 v0, 0x0
.local v0, "nextSpan":Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
goto :goto_2f
.line 376
.end local v0 # "nextSpan":Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
:cond_8
iget-boolean v0, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->blockOnCache:Z
if-eqz v0, :cond_25
.line 378
:try_start_c
iget-object v0, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cache:Lcom/google/android/exoplayer2/upstream/cache/Cache;
iget-object v2, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->key:Ljava/lang/String;
iget-wide v3, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->readPosition:J
invoke-interface {v0, v2, v3, v4}, Lcom/google/android/exoplayer2/upstream/cache/Cache;->startReadWrite(Ljava/lang/String;J)Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
move-result-object v0
:try_end_16
.catch Ljava/lang/InterruptedException; {:try_start_c .. :try_end_16} :catch_17
.line 382
.restart local v0 # "nextSpan":Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
goto :goto_2f
.line 379
.end local v0 # "nextSpan":Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
:catch_17
move-exception v0
.line 380
.local v0, "e":Ljava/lang/InterruptedException;
invoke-static {}, Ljava/lang/Thread;->currentThread()Ljava/lang/Thread;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/Thread;->interrupt()V
.line 381
new-instance v2, Ljava/io/InterruptedIOException;
invoke-direct {v2}, Ljava/io/InterruptedIOException;-><init>()V
throw v2
.line 384
.end local v0 # "e":Ljava/lang/InterruptedException;
:cond_25
iget-object v0, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cache:Lcom/google/android/exoplayer2/upstream/cache/Cache;
iget-object v2, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->key:Ljava/lang/String;
iget-wide v3, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->readPosition:J
invoke-interface {v0, v2, v3, v4}, Lcom/google/android/exoplayer2/upstream/cache/Cache;->startReadWriteNonBlocking(Ljava/lang/String;J)Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
move-result-object v0
.line 389
.local v0, "nextSpan":Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
:goto_2f
const-wide/16 v2, -0x1
if-nez v0, :cond_50
.line 392
iget-object v4, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->upstreamDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.line 393
.local v4, "nextDataSource":Lcom/google/android/exoplayer2/upstream/DataSource;
new-instance v17, Lcom/google/android/exoplayer2/upstream/DataSpec;
iget-object v6, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->uri:Landroid/net/Uri;
iget v7, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->httpMethod:I
const/4 v8, 0x0
iget-wide v11, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->readPosition:J
iget-wide v13, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->bytesRemaining:J
iget-object v15, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->key:Ljava/lang/String;
iget v9, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->flags:I
move-object/from16 v5, v17
move/from16 v16, v9
move-wide v9, v11
invoke-direct/range {v5 .. v16}, Lcom/google/android/exoplayer2/upstream/DataSpec;-><init>(Landroid/net/Uri;I[BJJJLjava/lang/String;I)V
move-object v7, v4
move-object v4, v0
.local v5, "nextDataSpec":Lcom/google/android/exoplayer2/upstream/DataSpec;
goto/16 :goto_c8
.line 396
.end local v4 # "nextDataSource":Lcom/google/android/exoplayer2/upstream/DataSource;
.end local v5 # "nextDataSpec":Lcom/google/android/exoplayer2/upstream/DataSpec;
:cond_50
iget-boolean v4, v0, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;->isCached:Z
if-eqz v4, :cond_88
.line 398
iget-object v4, v0, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;->file:Ljava/io/File;
invoke-static {v4}, Landroid/net/Uri;->fromFile(Ljava/io/File;)Landroid/net/Uri;
move-result-object v4
.line 399
.local v4, "fileUri":Landroid/net/Uri;
iget-wide v5, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->readPosition:J
iget-wide v7, v0, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;->position:J
sub-long v15, v5, v7
.line 400
.local v15, "filePosition":J
iget-wide v5, v0, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;->length:J
sub-long/2addr v5, v15
.line 401
.local v5, "length":J
iget-wide v7, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->bytesRemaining:J
cmp-long v9, v7, v2
if-eqz v9, :cond_70
.line 402
invoke-static {v5, v6, v7, v8}, Ljava/lang/Math;->min(JJ)J
move-result-wide v5
move-wide/from16 v17, v5
goto :goto_72
.line 401
:cond_70
move-wide/from16 v17, v5
.line 404
.end local v5 # "length":J
.local v17, "length":J
:goto_72
new-instance v19, Lcom/google/android/exoplayer2/upstream/DataSpec;
iget-wide v7, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->readPosition:J
iget-object v13, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->key:Ljava/lang/String;
iget v14, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->flags:I
move-object/from16 v5, v19
move-object v6, v4
move-wide v9, v15
move-wide/from16 v11, v17
invoke-direct/range {v5 .. v14}, Lcom/google/android/exoplayer2/upstream/DataSpec;-><init>(Landroid/net/Uri;JJJLjava/lang/String;I)V
.line 405
.local v5, "nextDataSpec":Lcom/google/android/exoplayer2/upstream/DataSpec;
iget-object v4, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cacheReadDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.line 406
.end local v15 # "filePosition":J
.end local v17 # "length":J
.local v4, "nextDataSource":Lcom/google/android/exoplayer2/upstream/DataSource;
move-object v7, v4
move-object v4, v0
goto :goto_c8
.line 409
.end local v4 # "nextDataSource":Lcom/google/android/exoplayer2/upstream/DataSource;
.end local v5 # "nextDataSpec":Lcom/google/android/exoplayer2/upstream/DataSpec;
:cond_88
invoke-virtual {v0}, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;->isOpenEnded()Z
move-result v4
if-eqz v4, :cond_91
.line 410
iget-wide v4, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->bytesRemaining:J
.local v4, "length":J
goto :goto_9d
.line 412
.end local v4 # "length":J
:cond_91
iget-wide v4, v0, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;->length:J
.line 413
.restart local v4 # "length":J
iget-wide v6, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->bytesRemaining:J
cmp-long v8, v6, v2
if-eqz v8, :cond_9d
.line 414
invoke-static {v4, v5, v6, v7}, Ljava/lang/Math;->min(JJ)J
move-result-wide v4
.line 417
:cond_9d
:goto_9d
new-instance v18, Lcom/google/android/exoplayer2/upstream/DataSpec;
iget-object v7, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->uri:Landroid/net/Uri;
iget v8, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->httpMethod:I
const/4 v9, 0x0
iget-wide v12, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->readPosition:J
iget-object v14, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->key:Ljava/lang/String;
iget v15, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->flags:I
move-object/from16 v6, v18
move-wide v10, v12
move-object/from16 v16, v14
move/from16 v17, v15
move-wide v14, v4
invoke-direct/range {v6 .. v17}, Lcom/google/android/exoplayer2/upstream/DataSpec;-><init>(Landroid/net/Uri;I[BJJJLjava/lang/String;I)V
.line 419
.local v6, "nextDataSpec":Lcom/google/android/exoplayer2/upstream/DataSpec;
iget-object v7, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cacheWriteDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
if-eqz v7, :cond_be
.line 420
iget-object v7, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cacheWriteDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
move-object v4, v0
move-object v5, v6
.local v7, "nextDataSource":Lcom/google/android/exoplayer2/upstream/DataSource;
goto :goto_c8
.line 422
.end local v7 # "nextDataSource":Lcom/google/android/exoplayer2/upstream/DataSource;
:cond_be
iget-object v7, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->upstreamDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.line 423
.restart local v7 # "nextDataSource":Lcom/google/android/exoplayer2/upstream/DataSource;
iget-object v8, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cache:Lcom/google/android/exoplayer2/upstream/cache/Cache;
invoke-interface {v8, v0}, Lcom/google/android/exoplayer2/upstream/cache/Cache;->releaseHoleSpan(Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;)V
.line 424
const/4 v0, 0x0
move-object v4, v0
move-object v5, v6
.line 428
.end local v0 # "nextSpan":Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
.end local v6 # "nextDataSpec":Lcom/google/android/exoplayer2/upstream/DataSpec;
.local v4, "nextSpan":Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
.restart local v5 # "nextDataSpec":Lcom/google/android/exoplayer2/upstream/DataSpec;
:goto_c8
iget-boolean v0, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentRequestIgnoresCache:Z
if-nez v0, :cond_d7
iget-object v0, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->upstreamDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
if-ne v7, v0, :cond_d7
iget-wide v8, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->readPosition:J
const-wide/32 v10, 0x19000
add-long/2addr v8, v10
goto :goto_dc
:cond_d7
const-wide v8, 0x7fffffffffffffffL
:goto_dc
iput-wide v8, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->checkCachePosition:J
.line 432
if-eqz p1, :cond_ff
.line 433
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->isBypassingCache()Z
move-result v0
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(Z)V
.line 434
iget-object v0, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->upstreamDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
if-ne v7, v0, :cond_ec
.line 436
return-void
.line 440
:cond_ec
:try_start_ec
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->closeCurrentSource()V
:try_end_ef
.catchall {:try_start_ec .. :try_end_ef} :catchall_f0
.line 447
goto :goto_ff
.line 441
:catchall_f0
move-exception v0
move-object v2, v0
move-object v0, v2
.line 442
.local v0, "e":Ljava/lang/Throwable;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;->isHoleSpan()Z
move-result v2
if-eqz v2, :cond_fe
.line 444
iget-object v2, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cache:Lcom/google/android/exoplayer2/upstream/cache/Cache;
invoke-interface {v2, v4}, Lcom/google/android/exoplayer2/upstream/cache/Cache;->releaseHoleSpan(Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;)V
.line 446
:cond_fe
throw v0
.line 450
.end local v0 # "e":Ljava/lang/Throwable;
:cond_ff
:goto_ff
if-eqz v4, :cond_109
invoke-virtual {v4}, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;->isHoleSpan()Z
move-result v0
if-eqz v0, :cond_109
.line 451
iput-object v4, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentHoleSpan:Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
.line 453
:cond_109
iput-object v7, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.line 454
iget-wide v8, v5, Lcom/google/android/exoplayer2/upstream/DataSpec;->length:J
const/4 v0, 0x1
cmp-long v6, v8, v2
if-nez v6, :cond_114
const/4 v6, 0x1
goto :goto_115
:cond_114
const/4 v6, 0x0
:goto_115
iput-boolean v6, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentDataSpecLengthUnset:Z
.line 455
invoke-interface {v7, v5}, Lcom/google/android/exoplayer2/upstream/DataSource;->open(Lcom/google/android/exoplayer2/upstream/DataSpec;)J
move-result-wide v8
.line 458
.local v8, "resolvedLength":J
new-instance v6, Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;
invoke-direct {v6}, Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;-><init>()V
.line 459
.local v6, "mutations":Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;
iget-boolean v10, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentDataSpecLengthUnset:Z
if-eqz v10, :cond_130
cmp-long v10, v8, v2
if-eqz v10, :cond_130
.line 460
iput-wide v8, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->bytesRemaining:J
.line 461
iget-wide v2, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->readPosition:J
add-long/2addr v2, v8
invoke-static {v6, v2, v3}, Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;->setContentLength(Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;J)Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;
.line 463
:cond_130
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->isReadingFromUpstream()Z
move-result v2
if-eqz v2, :cond_14e
.line 464
iget-object v2, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
invoke-interface {v2}, Lcom/google/android/exoplayer2/upstream/DataSource;->getUri()Landroid/net/Uri;
move-result-object v2
iput-object v2, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->actualUri:Landroid/net/Uri;
.line 465
iget-object v3, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->uri:Landroid/net/Uri;
invoke-virtual {v3, v2}, Landroid/net/Uri;->equals(Ljava/lang/Object;)Z
move-result v2
xor-int/2addr v0, v2
.line 466
.local v0, "isRedirected":Z
if-eqz v0, :cond_14a
iget-object v2, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->actualUri:Landroid/net/Uri;
goto :goto_14b
:cond_14a
const/4 v2, 0x0
:goto_14b
invoke-static {v6, v2}, Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;->setRedirectedUri(Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;Landroid/net/Uri;)Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;
.line 468
.end local v0 # "isRedirected":Z
:cond_14e
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->isWritingToCache()Z
move-result v0
if-eqz v0, :cond_15b
.line 469
iget-object v0, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cache:Lcom/google/android/exoplayer2/upstream/cache/Cache;
iget-object v2, v1, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->key:Ljava/lang/String;
invoke-interface {v0, v2, v6}, Lcom/google/android/exoplayer2/upstream/cache/Cache;->applyContentMetadataMutations(Ljava/lang/String;Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;)V
.line 471
:cond_15b
return-void
.end method
.method private setNoBytesRemainingAndMaybeStoreLength()V
.registers 4
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 474
const-wide/16 v0, 0x0
iput-wide v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->bytesRemaining:J
.line 475
invoke-direct {p0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->isWritingToCache()Z
move-result v0
if-eqz v0, :cond_1b
.line 476
new-instance v0, Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;
invoke-direct {v0}, Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;-><init>()V
.line 477
.local v0, "mutations":Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;
iget-wide v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->readPosition:J
invoke-static {v0, v1, v2}, Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;->setContentLength(Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;J)Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;
.line 478
iget-object v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cache:Lcom/google/android/exoplayer2/upstream/cache/Cache;
iget-object v2, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->key:Ljava/lang/String;
invoke-interface {v1, v2, v0}, Lcom/google/android/exoplayer2/upstream/cache/Cache;->applyContentMetadataMutations(Ljava/lang/String;Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;)V
.line 480
.end local v0 # "mutations":Lcom/google/android/exoplayer2/upstream/cache/ContentMetadataMutations;
:cond_1b
return-void
.end method
.method private shouldIgnoreCacheForRequest(Lcom/google/android/exoplayer2/upstream/DataSpec;)I
.registers 7
.param p1, "dataSpec" # Lcom/google/android/exoplayer2/upstream/DataSpec;
.line 540
iget-boolean v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->ignoreCacheOnError:Z
if-eqz v0, :cond_a
iget-boolean v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->seenCacheError:Z
if-eqz v0, :cond_a
.line 541
const/4 v0, 0x0
return v0
.line 542
:cond_a
iget-boolean v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->ignoreCacheForUnsetLengthRequests:Z
if-eqz v0, :cond_18
iget-wide v0, p1, Lcom/google/android/exoplayer2/upstream/DataSpec;->length:J
const-wide/16 v2, -0x1
cmp-long v4, v0, v2
if-nez v4, :cond_18
.line 543
const/4 v0, 0x1
return v0
.line 545
:cond_18
const/4 v0, -0x1
return v0
.end method
# virtual methods
.method public addTransferListener(Lcom/google/android/exoplayer2/upstream/TransferListener;)V
.registers 3
.param p1, "transferListener" # Lcom/google/android/exoplayer2/upstream/TransferListener;
.line 253
iget-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cacheReadDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
invoke-interface {v0, p1}, Lcom/google/android/exoplayer2/upstream/DataSource;->addTransferListener(Lcom/google/android/exoplayer2/upstream/TransferListener;)V
.line 254
iget-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->upstreamDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
invoke-interface {v0, p1}, Lcom/google/android/exoplayer2/upstream/DataSource;->addTransferListener(Lcom/google/android/exoplayer2/upstream/TransferListener;)V
.line 255
return-void
.end method
.method public close()V
.registers 2
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 346
const/4 v0, 0x0
iput-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->uri:Landroid/net/Uri;
.line 347
iput-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->actualUri:Landroid/net/Uri;
.line 348
const/4 v0, 0x1
iput v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->httpMethod:I
.line 349
invoke-direct {p0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->notifyBytesRead()V
.line 351
:try_start_b
invoke-direct {p0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->closeCurrentSource()V
:try_end_e
.catch Ljava/io/IOException; {:try_start_b .. :try_end_e} :catch_10
.line 355
nop
.line 356
return-void
.line 352
:catch_10
move-exception v0
.line 353
.local v0, "e":Ljava/io/IOException;
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->handleBeforeThrow(Ljava/io/IOException;)V
.line 354
throw v0
.end method
.method public getResponseHeaders()Ljava/util/Map;
.registers 2
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/Map<",
"Ljava/lang/String;",
"Ljava/util/List<",
"Ljava/lang/String;",
">;>;"
}
.end annotation
.line 339
invoke-direct {p0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->isReadingFromUpstream()Z
move-result v0
if-eqz v0, :cond_d
iget-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->upstreamDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.line 340
invoke-interface {v0}, Lcom/google/android/exoplayer2/upstream/DataSource;->getResponseHeaders()Ljava/util/Map;
move-result-object v0
goto :goto_11
.line 341
:cond_d
invoke-static {}, Ljava/util/Collections;->emptyMap()Ljava/util/Map;
move-result-object v0
.line 339
:goto_11
return-object v0
.end method
.method public getUri()Landroid/net/Uri;
.registers 2
.line 333
iget-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->actualUri:Landroid/net/Uri;
return-object v0
.end method
.method public open(Lcom/google/android/exoplayer2/upstream/DataSpec;)J
.registers 9
.param p1, "dataSpec" # Lcom/google/android/exoplayer2/upstream/DataSpec;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 260
:try_start_0
iget-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cacheKeyFactory:Lcom/google/android/exoplayer2/upstream/cache/CacheKeyFactory;
invoke-interface {v0, p1}, Lcom/google/android/exoplayer2/upstream/cache/CacheKeyFactory;->buildCacheKey(Lcom/google/android/exoplayer2/upstream/DataSpec;)Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->key:Ljava/lang/String;
.line 261
iget-object v0, p1, Lcom/google/android/exoplayer2/upstream/DataSpec;->uri:Landroid/net/Uri;
iput-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->uri:Landroid/net/Uri;
.line 262
iget-object v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cache:Lcom/google/android/exoplayer2/upstream/cache/Cache;
iget-object v2, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->key:Ljava/lang/String;
invoke-static {v1, v2, v0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->getRedirectedUriOrDefault(Lcom/google/android/exoplayer2/upstream/cache/Cache;Ljava/lang/String;Landroid/net/Uri;)Landroid/net/Uri;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->actualUri:Landroid/net/Uri;
.line 263
iget v0, p1, Lcom/google/android/exoplayer2/upstream/DataSpec;->httpMethod:I
iput v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->httpMethod:I
.line 264
iget v0, p1, Lcom/google/android/exoplayer2/upstream/DataSpec;->flags:I
iput v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->flags:I
.line 265
iget-wide v0, p1, Lcom/google/android/exoplayer2/upstream/DataSpec;->position:J
iput-wide v0, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->readPosition:J
.line 267
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->shouldIgnoreCacheForRequest(Lcom/google/android/exoplayer2/upstream/DataSpec;)I
move-result v0
.line 268
.local v0, "reason":I
const/4 v1, -0x1
const/4 v2, 0x0
if-eq v0, v1, :cond_2c
const/4 v1, 0x1
goto :goto_2d
:cond_2c
const/4 v1, 0x0
:goto_2d
iput-boolean v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentRequestIgnoresCache:Z
.line 269
if-eqz v1, :cond_34
.line 270
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->notifyCacheIgnored(I)V
.line 273
:cond_34
iget-wide v3, p1, Lcom/google/android/exoplayer2/upstream/DataSpec;->length:J
const-wide/16 v5, -0x1
cmp-long v1, v3, v5
if-nez v1, :cond_65
iget-boolean v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentRequestIgnoresCache:Z
if-eqz v1, :cond_41
goto :goto_65
.line 276
:cond_41
iget-object v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->cache:Lcom/google/android/exoplayer2/upstream/cache/Cache;
iget-object v3, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->key:Ljava/lang/String;
invoke-interface {v1, v3}, Lcom/google/android/exoplayer2/upstream/cache/Cache;->getContentMetadata(Ljava/lang/String;)Lcom/google/android/exoplayer2/upstream/cache/ContentMetadata;
move-result-object v1
invoke-static {v1}, Lcom/google/android/exoplayer2/upstream/cache/ContentMetadata$-CC;->getContentLength(Lcom/google/android/exoplayer2/upstream/cache/ContentMetadata;)J
move-result-wide v3
iput-wide v3, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->bytesRemaining:J
.line 277
cmp-long v1, v3, v5
if-eqz v1, :cond_69
.line 278
iget-wide v5, p1, Lcom/google/android/exoplayer2/upstream/DataSpec;->position:J
sub-long/2addr v3, v5
iput-wide v3, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->bytesRemaining:J
.line 279
const-wide/16 v5, 0x0
cmp-long v1, v3, v5
if-lez v1, :cond_5f
goto :goto_69
.line 280
:cond_5f
new-instance v1, Lcom/google/android/exoplayer2/upstream/DataSourceException;
invoke-direct {v1, v2}, Lcom/google/android/exoplayer2/upstream/DataSourceException;-><init>(I)V
.end local p1 # "dataSpec":Lcom/google/android/exoplayer2/upstream/DataSpec;
throw v1
.line 274
.restart local p1 # "dataSpec":Lcom/google/android/exoplayer2/upstream/DataSpec;
:cond_65
:goto_65
iget-wide v3, p1, Lcom/google/android/exoplayer2/upstream/DataSpec;->length:J
iput-wide v3, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->bytesRemaining:J
.line 284
:cond_69
:goto_69
invoke-direct {p0, v2}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->openNextSource(Z)V
.line 285
iget-wide v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->bytesRemaining:J
:try_end_6e
.catch Ljava/io/IOException; {:try_start_0 .. :try_end_6e} :catch_6f
return-wide v1
.line 286
.end local v0 # "reason":I
:catch_6f
move-exception v0
.line 287
.local v0, "e":Ljava/io/IOException;
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->handleBeforeThrow(Ljava/io/IOException;)V
.line 288
throw v0
.end method
.method public read([BII)I
.registers 14
.param p1, "buffer" # [B
.param p2, "offset" # I
.param p3, "readLength" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 294
const/4 v0, 0x0
if-nez p3, :cond_4
.line 295
return v0
.line 297
:cond_4
iget-wide v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->bytesRemaining:J
const-wide/16 v3, 0x0
const/4 v5, -0x1
cmp-long v6, v1, v3
if-nez v6, :cond_e
.line 298
return v5
.line 301
:cond_e
:try_start_e
iget-wide v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->readPosition:J
iget-wide v6, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->checkCachePosition:J
cmp-long v8, v1, v6
if-ltz v8, :cond_1a
.line 302
const/4 v1, 0x1
invoke-direct {p0, v1}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->openNextSource(Z)V
.line 304
:cond_1a
iget-object v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
invoke-interface {v1, p1, p2, p3}, Lcom/google/android/exoplayer2/upstream/DataSource;->read([BII)I
move-result v1
.line 305
.local v1, "bytesRead":I
const-wide/16 v6, -0x1
if-eq v1, v5, :cond_43
.line 306
invoke-direct {p0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->isReadingFromCache()Z
move-result v0
if-eqz v0, :cond_30
.line 307
iget-wide v2, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->totalCachedBytesRead:J
int-to-long v8, v1
add-long/2addr v2, v8
iput-wide v2, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->totalCachedBytesRead:J
.line 309
:cond_30
iget-wide v2, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->readPosition:J
int-to-long v8, v1
add-long/2addr v2, v8
iput-wide v2, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->readPosition:J
.line 310
iget-wide v2, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->bytesRemaining:J
cmp-long v0, v2, v6
if-eqz v0, :cond_58
.line 311
iget-wide v2, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->bytesRemaining:J
int-to-long v6, v1
sub-long/2addr v2, v6
iput-wide v2, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->bytesRemaining:J
goto :goto_58
.line 313
:cond_43
iget-boolean v2, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentDataSpecLengthUnset:Z
if-eqz v2, :cond_4b
.line 314
invoke-direct {p0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->setNoBytesRemainingAndMaybeStoreLength()V
goto :goto_58
.line 315
:cond_4b
iget-wide v8, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->bytesRemaining:J
cmp-long v2, v8, v3
if-gtz v2, :cond_59
iget-wide v2, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->bytesRemaining:J
cmp-long v4, v2, v6
if-nez v4, :cond_58
goto :goto_59
.line 320
:cond_58
:goto_58
return v1
.line 316
:cond_59
:goto_59
invoke-direct {p0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->closeCurrentSource()V
.line 317
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->openNextSource(Z)V
.line 318
invoke-virtual {p0, p1, p2, p3}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->read([BII)I
move-result v0
:try_end_63
.catch Ljava/io/IOException; {:try_start_e .. :try_end_63} :catch_64
return v0
.line 321
.end local v1 # "bytesRead":I
:catch_64
move-exception v0
.line 322
.local v0, "e":Ljava/io/IOException;
iget-boolean v1, p0, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->currentDataSpecLengthUnset:Z
if-eqz v1, :cond_73
invoke-static {v0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->isCausedByPositionOutOfRange(Ljava/io/IOException;)Z
move-result v1
if-eqz v1, :cond_73
.line 323
invoke-direct {p0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->setNoBytesRemainingAndMaybeStoreLength()V
.line 324
return v5
.line 326
:cond_73
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/upstream/cache/CacheDataSource;->handleBeforeThrow(Ljava/io/IOException;)V
.line 327
throw v0
.end method