2026-07-06 19:54:44 +08:00

272 lines
6.5 KiB
Smali

.class public abstract Lcom/danikula/videocache/file/LruDiskUsage;
.super Ljava/lang/Object;
.source "LruDiskUsage.java"
# interfaces
.implements Lcom/danikula/videocache/file/DiskUsage;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/danikula/videocache/file/LruDiskUsage$TouchCallable;
}
.end annotation
# instance fields
.field private final workerThread:Ljava/util/concurrent/ExecutorService;
# direct methods
.method public constructor <init>()V
.locals 1
.line 17
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 19
invoke-static {}, Ljava/util/concurrent/Executors;->newSingleThreadExecutor()Ljava/util/concurrent/ExecutorService;
move-result-object v0
iput-object v0, p0, Lcom/danikula/videocache/file/LruDiskUsage;->workerThread:Ljava/util/concurrent/ExecutorService;
return-void
.end method
.method static synthetic access$000(Lcom/danikula/videocache/file/LruDiskUsage;Ljava/io/File;)V
.locals 0
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 17
invoke-direct {p0, p1}, Lcom/danikula/videocache/file/LruDiskUsage;->touchInBackground(Ljava/io/File;)V
return-void
.end method
.method private countTotalSize(Ljava/util/List;)J
.locals 4
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/List<",
"Ljava/io/File;",
">;)J"
}
.end annotation
.line 55
invoke-interface {p1}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object p1
const-wide/16 v0, 0x0
:goto_0
invoke-interface {p1}, Ljava/util/Iterator;->hasNext()Z
move-result v2
if-eqz v2, :cond_0
invoke-interface {p1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v2
check-cast v2, Ljava/io/File;
.line 56
invoke-virtual {v2}, Ljava/io/File;->length()J
move-result-wide v2
add-long/2addr v0, v2
goto :goto_0
:cond_0
return-wide v0
.end method
.method private touchInBackground(Ljava/io/File;)V
.locals 0
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 27
invoke-static {p1}, Lcom/danikula/videocache/file/Files;->setLastModifiedNow(Ljava/io/File;)V
.line 28
invoke-virtual {p1}, Ljava/io/File;->getParentFile()Ljava/io/File;
move-result-object p1
invoke-static {p1}, Lcom/danikula/videocache/file/Files;->getLruListFiles(Ljava/io/File;)Ljava/util/List;
move-result-object p1
.line 29
invoke-direct {p0, p1}, Lcom/danikula/videocache/file/LruDiskUsage;->trim(Ljava/util/List;)V
return-void
.end method
.method private trim(Ljava/util/List;)V
.locals 7
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/List<",
"Ljava/io/File;",
">;)V"
}
.end annotation
.line 35
invoke-direct {p0, p1}, Lcom/danikula/videocache/file/LruDiskUsage;->countTotalSize(Ljava/util/List;)J
move-result-wide v0
.line 36
invoke-interface {p1}, Ljava/util/List;->size()I
move-result v2
.line 37
invoke-interface {p1}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object p1
:cond_0
:goto_0
invoke-interface {p1}, Ljava/util/Iterator;->hasNext()Z
move-result v3
if-eqz v3, :cond_2
invoke-interface {p1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v3
check-cast v3, Ljava/io/File;
.line 38
invoke-virtual {p0, v3, v0, v1, v2}, Lcom/danikula/videocache/file/LruDiskUsage;->accept(Ljava/io/File;JI)Z
move-result v4
if-nez v4, :cond_0
.line 40
invoke-virtual {v3}, Ljava/io/File;->length()J
move-result-wide v4
.line 41
invoke-virtual {v3}, Ljava/io/File;->delete()Z
move-result v6
if-eqz v6, :cond_1
add-int/lit8 v2, v2, -0x1
sub-long/2addr v0, v4
.line 45
new-instance v4, Ljava/lang/StringBuilder;
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
const-string v5, "Cache file "
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v4
invoke-virtual {v4, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v3
const-string v4, " is deleted because it exceeds cache limit"
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v3
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
invoke-static {v3}, Lcom/danikula/videocache/Logger;->info(Ljava/lang/String;)V
goto :goto_0
.line 47
:cond_1
new-instance v4, Ljava/lang/StringBuilder;
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
const-string v5, "Error deleting file "
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v4
invoke-virtual {v4, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v3
const-string v4, " for trimming cache"
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v3
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
invoke-static {v3}, Lcom/danikula/videocache/Logger;->error(Ljava/lang/String;)V
goto :goto_0
:cond_2
return-void
.end method
# virtual methods
.method protected abstract accept(Ljava/io/File;JI)Z
.end method
.method public touch(Ljava/io/File;)V
.locals 2
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 23
iget-object v0, p0, Lcom/danikula/videocache/file/LruDiskUsage;->workerThread:Ljava/util/concurrent/ExecutorService;
new-instance v1, Lcom/danikula/videocache/file/LruDiskUsage$TouchCallable;
invoke-direct {v1, p0, p1}, Lcom/danikula/videocache/file/LruDiskUsage$TouchCallable;-><init>(Lcom/danikula/videocache/file/LruDiskUsage;Ljava/io/File;)V
invoke-interface {v0, v1}, Ljava/util/concurrent/ExecutorService;->submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;
return-void
.end method