Add option to add entries in an ActionFile to DownloadIndex as completed
PiperOrigin-RevId: 244864742
This commit is contained in:
parent
06586b75b0
commit
03313fb5e2
@ -115,8 +115,10 @@ public class DemoApplication extends Application {
|
||||
private synchronized void initDownloadManager() {
|
||||
if (downloadManager == null) {
|
||||
DefaultDownloadIndex downloadIndex = new DefaultDownloadIndex(getDatabaseProvider());
|
||||
upgradeActionFile(DOWNLOAD_TRACKER_ACTION_FILE, downloadIndex);
|
||||
upgradeActionFile(DOWNLOAD_ACTION_FILE, downloadIndex);
|
||||
upgradeActionFile(
|
||||
DOWNLOAD_ACTION_FILE, downloadIndex, /* addNewDownloadsAsCompleted= */ false);
|
||||
upgradeActionFile(
|
||||
DOWNLOAD_TRACKER_ACTION_FILE, downloadIndex, /* addNewDownloadsAsCompleted= */ true);
|
||||
DownloaderConstructorHelper downloaderConstructorHelper =
|
||||
new DownloaderConstructorHelper(getDownloadCache(), buildHttpDataSourceFactory());
|
||||
downloadManager =
|
||||
@ -127,13 +129,15 @@ public class DemoApplication extends Application {
|
||||
}
|
||||
}
|
||||
|
||||
private void upgradeActionFile(String fileName, DefaultDownloadIndex downloadIndex) {
|
||||
private void upgradeActionFile(
|
||||
String fileName, DefaultDownloadIndex downloadIndex, boolean addNewDownloadsAsCompleted) {
|
||||
try {
|
||||
ActionFileUpgradeUtil.upgradeAndDelete(
|
||||
new File(getDownloadDirectory(), fileName),
|
||||
/* downloadIdProvider= */ null,
|
||||
downloadIndex,
|
||||
/* deleteOnFailure= */ true);
|
||||
/* deleteOnFailure= */ true,
|
||||
addNewDownloadsAsCompleted);
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Failed to upgrade action file: " + fileName, e);
|
||||
}
|
||||
|
@ -52,6 +52,7 @@ public final class ActionFileUpgradeUtil {
|
||||
* each download will be its custom cache key if one is specified, or else its URL.
|
||||
* @param downloadIndex The index into which the requests will be merged.
|
||||
* @param deleteOnFailure Whether to delete the action file if the merge fails.
|
||||
* @param addNewDownloadsAsCompleted Whether to add new downloads as completed.
|
||||
* @throws IOException If an error occurs loading or merging the requests.
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
@ -59,7 +60,8 @@ public final class ActionFileUpgradeUtil {
|
||||
File actionFilePath,
|
||||
@Nullable DownloadIdProvider downloadIdProvider,
|
||||
DefaultDownloadIndex downloadIndex,
|
||||
boolean deleteOnFailure)
|
||||
boolean deleteOnFailure,
|
||||
boolean addNewDownloadsAsCompleted)
|
||||
throws IOException {
|
||||
ActionFile actionFile = new ActionFile(actionFilePath);
|
||||
if (actionFile.exists()) {
|
||||
@ -69,7 +71,7 @@ public final class ActionFileUpgradeUtil {
|
||||
if (downloadIdProvider != null) {
|
||||
request = request.copyWithId(downloadIdProvider.getId(request));
|
||||
}
|
||||
mergeRequest(request, downloadIndex);
|
||||
mergeRequest(request, downloadIndex, addNewDownloadsAsCompleted);
|
||||
}
|
||||
success = true;
|
||||
} finally {
|
||||
@ -85,10 +87,14 @@ public final class ActionFileUpgradeUtil {
|
||||
*
|
||||
* @param request The request to be merged.
|
||||
* @param downloadIndex The index into which the request will be merged.
|
||||
* @param addNewDownloadAsCompleted Whether to add new downloads as completed.
|
||||
* @throws IOException If an error occurs merging the request.
|
||||
*/
|
||||
/* package */ static void mergeRequest(
|
||||
DownloadRequest request, DefaultDownloadIndex downloadIndex) throws IOException {
|
||||
DownloadRequest request,
|
||||
DefaultDownloadIndex downloadIndex,
|
||||
boolean addNewDownloadAsCompleted)
|
||||
throws IOException {
|
||||
Download download = downloadIndex.getDownload(request.id);
|
||||
if (download != null) {
|
||||
download = DownloadManager.mergeRequest(download, request, download.stopReason);
|
||||
@ -97,7 +103,7 @@ public final class ActionFileUpgradeUtil {
|
||||
download =
|
||||
new Download(
|
||||
request,
|
||||
STATE_QUEUED,
|
||||
addNewDownloadAsCompleted ? Download.STATE_COMPLETED : STATE_QUEUED,
|
||||
/* startTimeMs= */ nowMs,
|
||||
/* updateTimeMs= */ nowMs,
|
||||
/* contentLength= */ C.LENGTH_UNSET,
|
||||
|
@ -88,7 +88,11 @@ public class ActionFileUpgradeUtilTest {
|
||||
new byte[] {5, 4, 3, 2, 1});
|
||||
|
||||
ActionFileUpgradeUtil.upgradeAndDelete(
|
||||
tempFile, /* downloadIdProvider= */ null, downloadIndex, /* deleteOnFailure= */ true);
|
||||
tempFile,
|
||||
/* downloadIdProvider= */ null,
|
||||
downloadIndex,
|
||||
/* deleteOnFailure= */ true,
|
||||
/* addNewDownloadsAsCompleted= */ false);
|
||||
|
||||
assertDownloadIndexContainsRequest(expectedRequest1, Download.STATE_QUEUED);
|
||||
assertDownloadIndexContainsRequest(expectedRequest2, Download.STATE_QUEUED);
|
||||
@ -108,7 +112,8 @@ public class ActionFileUpgradeUtilTest {
|
||||
/* customCacheKey= */ "key123",
|
||||
data);
|
||||
|
||||
ActionFileUpgradeUtil.mergeRequest(request, downloadIndex);
|
||||
ActionFileUpgradeUtil.mergeRequest(
|
||||
request, downloadIndex, /* addNewDownloadAsCompleted= */ false);
|
||||
|
||||
assertDownloadIndexContainsRequest(request, Download.STATE_QUEUED);
|
||||
}
|
||||
@ -135,8 +140,10 @@ public class ActionFileUpgradeUtilTest {
|
||||
asList(streamKey2),
|
||||
/* customCacheKey= */ "key123",
|
||||
new byte[] {5, 4, 3, 2, 1});
|
||||
ActionFileUpgradeUtil.mergeRequest(request1, downloadIndex);
|
||||
ActionFileUpgradeUtil.mergeRequest(request2, downloadIndex);
|
||||
ActionFileUpgradeUtil.mergeRequest(
|
||||
request1, downloadIndex, /* addNewDownloadAsCompleted= */ false);
|
||||
ActionFileUpgradeUtil.mergeRequest(
|
||||
request2, downloadIndex, /* addNewDownloadAsCompleted= */ false);
|
||||
|
||||
Download download = downloadIndex.getDownload(request2.id);
|
||||
assertThat(download).isNotNull();
|
||||
@ -148,6 +155,42 @@ public class ActionFileUpgradeUtilTest {
|
||||
assertThat(download.state).isEqualTo(Download.STATE_QUEUED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void mergeRequest_addNewDownloadAsCompleted() throws IOException {
|
||||
StreamKey streamKey1 =
|
||||
new StreamKey(/* periodIndex= */ 3, /* groupIndex= */ 4, /* trackIndex= */ 5);
|
||||
StreamKey streamKey2 =
|
||||
new StreamKey(/* periodIndex= */ 0, /* groupIndex= */ 1, /* trackIndex= */ 2);
|
||||
DownloadRequest request1 =
|
||||
new DownloadRequest(
|
||||
"id1",
|
||||
TYPE_PROGRESSIVE,
|
||||
Uri.parse("https://www.test.com/download1"),
|
||||
asList(streamKey1),
|
||||
/* customCacheKey= */ "key123",
|
||||
new byte[] {1, 2, 3, 4});
|
||||
DownloadRequest request2 =
|
||||
new DownloadRequest(
|
||||
"id2",
|
||||
TYPE_PROGRESSIVE,
|
||||
Uri.parse("https://www.test.com/download2"),
|
||||
asList(streamKey2),
|
||||
/* customCacheKey= */ "key123",
|
||||
new byte[] {5, 4, 3, 2, 1});
|
||||
ActionFileUpgradeUtil.mergeRequest(
|
||||
request1, downloadIndex, /* addNewDownloadAsCompleted= */ false);
|
||||
|
||||
// Merging existing download, keeps it queued.
|
||||
ActionFileUpgradeUtil.mergeRequest(
|
||||
request1, downloadIndex, /* addNewDownloadAsCompleted= */ true);
|
||||
assertThat(downloadIndex.getDownload(request1.id).state).isEqualTo(Download.STATE_QUEUED);
|
||||
|
||||
// New download is merged as completed.
|
||||
ActionFileUpgradeUtil.mergeRequest(
|
||||
request2, downloadIndex, /* addNewDownloadAsCompleted= */ true);
|
||||
assertThat(downloadIndex.getDownload(request2.id).state).isEqualTo(Download.STATE_COMPLETED);
|
||||
}
|
||||
|
||||
private void assertDownloadIndexContainsRequest(DownloadRequest request, int state)
|
||||
throws IOException {
|
||||
Download download = downloadIndex.getDownload(request.id);
|
||||
|
Loading…
x
Reference in New Issue
Block a user