Files
rr3-apk/decompiled-community/sources/com/mbridge/msdk/playercommon/exoplayer2/offline/SegmentDownloader.java
Daniel Elliott c080f0d97f Add Discord community version (64-bit only)
- Added realracing3-community.apk (71.57 MB)
- Removed 32-bit support (armeabi-v7a)
- Only includes arm64-v8a libraries
- Decompiled source code included
- Added README-community.md with analysis
2026-02-18 15:48:36 -08:00

151 lines
6.2 KiB
Java

package com.mbridge.msdk.playercommon.exoplayer2.offline;
import android.net.Uri;
import androidx.annotation.NonNull;
import com.mbridge.msdk.playercommon.exoplayer2.offline.FilterableManifest;
import com.mbridge.msdk.playercommon.exoplayer2.upstream.DataSource;
import com.mbridge.msdk.playercommon.exoplayer2.upstream.DataSpec;
import com.mbridge.msdk.playercommon.exoplayer2.upstream.cache.Cache;
import com.mbridge.msdk.playercommon.exoplayer2.upstream.cache.CacheDataSource;
import com.mbridge.msdk.playercommon.exoplayer2.upstream.cache.CacheUtil;
import com.mbridge.msdk.playercommon.exoplayer2.util.PriorityTaskManager;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
/* loaded from: classes4.dex */
public abstract class SegmentDownloader<M extends FilterableManifest<M, K>, K> implements Downloader {
private static final int BUFFER_SIZE_BYTES = 131072;
private final Cache cache;
private final CacheDataSource dataSource;
private volatile long downloadedBytes;
private volatile int downloadedSegments;
private final Uri manifestUri;
private final CacheDataSource offlineDataSource;
private final PriorityTaskManager priorityTaskManager;
private final ArrayList<K> streamKeys;
private volatile int totalSegments = -1;
private final AtomicBoolean isCanceled = new AtomicBoolean();
@Override // com.mbridge.msdk.playercommon.exoplayer2.offline.Downloader
public final float getDownloadPercentage() {
int i = this.totalSegments;
int i2 = this.downloadedSegments;
if (i == -1 || i2 == -1) {
return -1.0f;
}
if (i == 0) {
return 100.0f;
}
return (i2 * 100.0f) / i;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.offline.Downloader
public final long getDownloadedBytes() {
return this.downloadedBytes;
}
public abstract M getManifest(DataSource dataSource, Uri uri) throws IOException;
public abstract List<Segment> getSegments(DataSource dataSource, M m, boolean z) throws InterruptedException, IOException;
public static class Segment implements Comparable<Segment> {
public final DataSpec dataSpec;
public final long startTimeUs;
public Segment(long j, DataSpec dataSpec) {
this.startTimeUs = j;
this.dataSpec = dataSpec;
}
@Override // java.lang.Comparable
public int compareTo(@NonNull Segment segment) {
long j = this.startTimeUs - segment.startTimeUs;
if (j == 0) {
return 0;
}
return j < 0 ? -1 : 1;
}
}
public SegmentDownloader(Uri uri, List<K> list, DownloaderConstructorHelper downloaderConstructorHelper) {
this.manifestUri = uri;
this.streamKeys = new ArrayList<>(list);
this.cache = downloaderConstructorHelper.getCache();
this.dataSource = downloaderConstructorHelper.buildCacheDataSource(false);
this.offlineDataSource = downloaderConstructorHelper.buildCacheDataSource(true);
this.priorityTaskManager = downloaderConstructorHelper.getPriorityTaskManager();
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.offline.Downloader
public final void download() throws IOException, InterruptedException {
this.priorityTaskManager.add(-1000);
try {
List<Segment> initDownload = initDownload();
Collections.sort(initDownload);
byte[] bArr = new byte[131072];
CacheUtil.CachingCounters cachingCounters = new CacheUtil.CachingCounters();
for (int i = 0; i < initDownload.size(); i++) {
try {
CacheUtil.cache(initDownload.get(i).dataSpec, this.cache, this.dataSource, bArr, this.priorityTaskManager, -1000, cachingCounters, this.isCanceled, true);
this.downloadedSegments++;
this.downloadedBytes += cachingCounters.newlyCachedBytes;
} finally {
}
}
this.priorityTaskManager.remove(-1000);
} catch (Throwable th) {
this.priorityTaskManager.remove(-1000);
throw th;
}
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.offline.Downloader
public void cancel() {
this.isCanceled.set(true);
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.offline.Downloader
public final void remove() throws InterruptedException {
try {
List<Segment> segments = getSegments(this.offlineDataSource, getManifest(this.offlineDataSource, this.manifestUri), true);
for (int i = 0; i < segments.size(); i++) {
removeUri(segments.get(i).dataSpec.uri);
}
} catch (IOException unused) {
} catch (Throwable th) {
removeUri(this.manifestUri);
throw th;
}
removeUri(this.manifestUri);
}
/* JADX WARN: Multi-variable type inference failed */
private List<Segment> initDownload() throws IOException, InterruptedException {
FilterableManifest manifest = getManifest(this.dataSource, this.manifestUri);
if (!this.streamKeys.isEmpty()) {
manifest = (FilterableManifest) manifest.copy(this.streamKeys);
}
List<Segment> segments = getSegments(this.dataSource, manifest, false);
CacheUtil.CachingCounters cachingCounters = new CacheUtil.CachingCounters();
this.totalSegments = segments.size();
this.downloadedSegments = 0;
this.downloadedBytes = 0L;
for (int size = segments.size() - 1; size >= 0; size--) {
CacheUtil.getCached(segments.get(size).dataSpec, this.cache, cachingCounters);
this.downloadedBytes += cachingCounters.alreadyCachedBytes;
if (cachingCounters.alreadyCachedBytes == cachingCounters.contentLength) {
this.downloadedSegments++;
segments.remove(size);
}
}
return segments;
}
private void removeUri(Uri uri) {
CacheUtil.remove(this.cache, CacheUtil.generateKey(uri));
}
}