Commit 7cf06202 by olly Committed by Ian Baker

Rollback of https://github.com/google/ExoPlayer/commit/f6928c0ef9a196fa0f6d298937ec207f4b1d3447

*** Original commit ***

Keep download in completed state if only metadata is updated

Issue: #8116

***

PiperOrigin-RevId: 343102068
parent c529a0b9
...@@ -666,28 +666,21 @@ public final class DownloadManager { ...@@ -666,28 +666,21 @@ public final class DownloadManager {
/* package */ static Download mergeRequest( /* package */ static Download mergeRequest(
Download download, DownloadRequest request, int stopReason, long nowMs) { Download download, DownloadRequest request, int stopReason, long nowMs) {
DownloadRequest mergedRequest = download.request.copyWithMergedRequest(request);
@Download.State int state = download.state; @Download.State int state = download.state;
// Treat the merge as creating a new download if we're currently removing the existing one, or // Treat the merge as creating a new download if we're currently removing the existing one, or
// if the existing download has failed. Else treat the merge as updating the existing download. // if the existing download is in a terminal state. Else treat the merge as updating the
// existing download.
long startTimeMs = long startTimeMs =
state == STATE_REMOVING || state == STATE_FAILED ? nowMs : download.startTimeMs; state == STATE_REMOVING || download.isTerminalState() ? nowMs : download.startTimeMs;
if (state == STATE_REMOVING || state == STATE_RESTARTING) {
if (state == STATE_COMPLETED
&& mergedRequest.streamKeys.size() == download.request.streamKeys.size()) {
// A completed download is still completed if no new streams are added.
state = STATE_COMPLETED;
} else if (state == STATE_REMOVING || state == STATE_RESTARTING) {
state = STATE_RESTARTING; state = STATE_RESTARTING;
} else if (stopReason != STOP_REASON_NONE) { } else if (stopReason != STOP_REASON_NONE) {
state = STATE_STOPPED; state = STATE_STOPPED;
} else { } else {
state = STATE_QUEUED; state = STATE_QUEUED;
} }
return new Download( return new Download(
mergedRequest, download.request.copyWithMergedRequest(request),
state, state,
startTimeMs, startTimeMs,
/* updateTimeMs= */ nowMs, /* updateTimeMs= */ nowMs,
......
...@@ -635,45 +635,22 @@ public class DownloadManagerTest { ...@@ -635,45 +635,22 @@ public class DownloadManagerTest {
} }
@Test @Test
public void mergeRequest_completedWithStopReason_mergesNewKeyAndBecomesStopped() { public void mergeRequest_completedWithStopReason_becomesStopped() {
StreamKey streamKey1 = new StreamKey(/* groupIndex= */ 0, /* trackIndex= */ 0); DownloadRequest downloadRequest = createDownloadRequest(ID1);
StreamKey streamKey2 = new StreamKey(/* groupIndex= */ 0, /* trackIndex= */ 1);
DownloadRequest downloadRequest1 = createDownloadRequest(ID1, streamKey1);
DownloadBuilder downloadBuilder = DownloadBuilder downloadBuilder =
new DownloadBuilder(downloadRequest1) new DownloadBuilder(downloadRequest)
.setState(Download.STATE_COMPLETED) .setState(Download.STATE_COMPLETED)
.setStopReason(/* stopReason= */ 1); .setStopReason(/* stopReason= */ 1);
Download download = downloadBuilder.build(); Download download = downloadBuilder.build();
DownloadRequest downloadRequest2 = createDownloadRequest(ID1, streamKey2);
Download mergedDownload = Download mergedDownload =
DownloadManager.mergeRequest(download, downloadRequest2, download.stopReason, NOW_MS); DownloadManager.mergeRequest(download, downloadRequest, download.stopReason, NOW_MS);
Download expectedDownload = Download expectedDownload =
downloadBuilder downloadBuilder.setStartTimeMs(NOW_MS).setState(Download.STATE_STOPPED).build();
.setStreamKeys(streamKey1, streamKey2)
.setState(Download.STATE_STOPPED)
.build();
assertEqualIgnoringUpdateTime(mergedDownload, expectedDownload); assertEqualIgnoringUpdateTime(mergedDownload, expectedDownload);
} }
@Test
public void mergeRequest_completed_staysCompleted() {
StreamKey streamKey = new StreamKey(/* groupIndex= */ 0, /* trackIndex= */ 0);
DownloadRequest downloadRequest1 = createDownloadRequest(ID1, streamKey);
DownloadBuilder downloadBuilder =
new DownloadBuilder(downloadRequest1).setState(Download.STATE_COMPLETED);
Download download = downloadBuilder.build();
DownloadRequest downloadRequest2 = createDownloadRequest(ID1, streamKey);
Download mergedDownload =
DownloadManager.mergeRequest(download, downloadRequest2, /* stopReason= */ 0, NOW_MS);
assertEqualIgnoringUpdateTime(mergedDownload, download);
}
private void setupDownloadManager(int maxParallelDownloads) throws Exception { private void setupDownloadManager(int maxParallelDownloads) throws Exception {
if (downloadManager != null) { if (downloadManager != null) {
releaseDownloadManager(); releaseDownloadManager();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment