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() {
|
private synchronized void initDownloadManager() {
|
||||||
if (downloadManager == null) {
|
if (downloadManager == null) {
|
||||||
DefaultDownloadIndex downloadIndex = new DefaultDownloadIndex(getDatabaseProvider());
|
DefaultDownloadIndex downloadIndex = new DefaultDownloadIndex(getDatabaseProvider());
|
||||||
upgradeActionFile(DOWNLOAD_TRACKER_ACTION_FILE, downloadIndex);
|
upgradeActionFile(
|
||||||
upgradeActionFile(DOWNLOAD_ACTION_FILE, downloadIndex);
|
DOWNLOAD_ACTION_FILE, downloadIndex, /* addNewDownloadsAsCompleted= */ false);
|
||||||
|
upgradeActionFile(
|
||||||
|
DOWNLOAD_TRACKER_ACTION_FILE, downloadIndex, /* addNewDownloadsAsCompleted= */ true);
|
||||||
DownloaderConstructorHelper downloaderConstructorHelper =
|
DownloaderConstructorHelper downloaderConstructorHelper =
|
||||||
new DownloaderConstructorHelper(getDownloadCache(), buildHttpDataSourceFactory());
|
new DownloaderConstructorHelper(getDownloadCache(), buildHttpDataSourceFactory());
|
||||||
downloadManager =
|
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 {
|
try {
|
||||||
ActionFileUpgradeUtil.upgradeAndDelete(
|
ActionFileUpgradeUtil.upgradeAndDelete(
|
||||||
new File(getDownloadDirectory(), fileName),
|
new File(getDownloadDirectory(), fileName),
|
||||||
/* downloadIdProvider= */ null,
|
/* downloadIdProvider= */ null,
|
||||||
downloadIndex,
|
downloadIndex,
|
||||||
/* deleteOnFailure= */ true);
|
/* deleteOnFailure= */ true,
|
||||||
|
addNewDownloadsAsCompleted);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log.e(TAG, "Failed to upgrade action file: " + fileName, 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.
|
* 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 downloadIndex The index into which the requests will be merged.
|
||||||
* @param deleteOnFailure Whether to delete the action file if the merge fails.
|
* @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.
|
* @throws IOException If an error occurs loading or merging the requests.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
@ -59,7 +60,8 @@ public final class ActionFileUpgradeUtil {
|
|||||||
File actionFilePath,
|
File actionFilePath,
|
||||||
@Nullable DownloadIdProvider downloadIdProvider,
|
@Nullable DownloadIdProvider downloadIdProvider,
|
||||||
DefaultDownloadIndex downloadIndex,
|
DefaultDownloadIndex downloadIndex,
|
||||||
boolean deleteOnFailure)
|
boolean deleteOnFailure,
|
||||||
|
boolean addNewDownloadsAsCompleted)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
ActionFile actionFile = new ActionFile(actionFilePath);
|
ActionFile actionFile = new ActionFile(actionFilePath);
|
||||||
if (actionFile.exists()) {
|
if (actionFile.exists()) {
|
||||||
@ -69,7 +71,7 @@ public final class ActionFileUpgradeUtil {
|
|||||||
if (downloadIdProvider != null) {
|
if (downloadIdProvider != null) {
|
||||||
request = request.copyWithId(downloadIdProvider.getId(request));
|
request = request.copyWithId(downloadIdProvider.getId(request));
|
||||||
}
|
}
|
||||||
mergeRequest(request, downloadIndex);
|
mergeRequest(request, downloadIndex, addNewDownloadsAsCompleted);
|
||||||
}
|
}
|
||||||
success = true;
|
success = true;
|
||||||
} finally {
|
} finally {
|
||||||
@ -85,10 +87,14 @@ public final class ActionFileUpgradeUtil {
|
|||||||
*
|
*
|
||||||
* @param request The request to be merged.
|
* @param request The request to be merged.
|
||||||
* @param downloadIndex The index into which the request will 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.
|
* @throws IOException If an error occurs merging the request.
|
||||||
*/
|
*/
|
||||||
/* package */ static void mergeRequest(
|
/* package */ static void mergeRequest(
|
||||||
DownloadRequest request, DefaultDownloadIndex downloadIndex) throws IOException {
|
DownloadRequest request,
|
||||||
|
DefaultDownloadIndex downloadIndex,
|
||||||
|
boolean addNewDownloadAsCompleted)
|
||||||
|
throws IOException {
|
||||||
Download download = downloadIndex.getDownload(request.id);
|
Download download = downloadIndex.getDownload(request.id);
|
||||||
if (download != null) {
|
if (download != null) {
|
||||||
download = DownloadManager.mergeRequest(download, request, download.stopReason);
|
download = DownloadManager.mergeRequest(download, request, download.stopReason);
|
||||||
@ -97,7 +103,7 @@ public final class ActionFileUpgradeUtil {
|
|||||||
download =
|
download =
|
||||||
new Download(
|
new Download(
|
||||||
request,
|
request,
|
||||||
STATE_QUEUED,
|
addNewDownloadAsCompleted ? Download.STATE_COMPLETED : STATE_QUEUED,
|
||||||
/* startTimeMs= */ nowMs,
|
/* startTimeMs= */ nowMs,
|
||||||
/* updateTimeMs= */ nowMs,
|
/* updateTimeMs= */ nowMs,
|
||||||
/* contentLength= */ C.LENGTH_UNSET,
|
/* contentLength= */ C.LENGTH_UNSET,
|
||||||
|
@ -88,7 +88,11 @@ public class ActionFileUpgradeUtilTest {
|
|||||||
new byte[] {5, 4, 3, 2, 1});
|
new byte[] {5, 4, 3, 2, 1});
|
||||||
|
|
||||||
ActionFileUpgradeUtil.upgradeAndDelete(
|
ActionFileUpgradeUtil.upgradeAndDelete(
|
||||||
tempFile, /* downloadIdProvider= */ null, downloadIndex, /* deleteOnFailure= */ true);
|
tempFile,
|
||||||
|
/* downloadIdProvider= */ null,
|
||||||
|
downloadIndex,
|
||||||
|
/* deleteOnFailure= */ true,
|
||||||
|
/* addNewDownloadsAsCompleted= */ false);
|
||||||
|
|
||||||
assertDownloadIndexContainsRequest(expectedRequest1, Download.STATE_QUEUED);
|
assertDownloadIndexContainsRequest(expectedRequest1, Download.STATE_QUEUED);
|
||||||
assertDownloadIndexContainsRequest(expectedRequest2, Download.STATE_QUEUED);
|
assertDownloadIndexContainsRequest(expectedRequest2, Download.STATE_QUEUED);
|
||||||
@ -108,7 +112,8 @@ public class ActionFileUpgradeUtilTest {
|
|||||||
/* customCacheKey= */ "key123",
|
/* customCacheKey= */ "key123",
|
||||||
data);
|
data);
|
||||||
|
|
||||||
ActionFileUpgradeUtil.mergeRequest(request, downloadIndex);
|
ActionFileUpgradeUtil.mergeRequest(
|
||||||
|
request, downloadIndex, /* addNewDownloadAsCompleted= */ false);
|
||||||
|
|
||||||
assertDownloadIndexContainsRequest(request, Download.STATE_QUEUED);
|
assertDownloadIndexContainsRequest(request, Download.STATE_QUEUED);
|
||||||
}
|
}
|
||||||
@ -135,8 +140,10 @@ public class ActionFileUpgradeUtilTest {
|
|||||||
asList(streamKey2),
|
asList(streamKey2),
|
||||||
/* customCacheKey= */ "key123",
|
/* customCacheKey= */ "key123",
|
||||||
new byte[] {5, 4, 3, 2, 1});
|
new byte[] {5, 4, 3, 2, 1});
|
||||||
ActionFileUpgradeUtil.mergeRequest(request1, downloadIndex);
|
ActionFileUpgradeUtil.mergeRequest(
|
||||||
ActionFileUpgradeUtil.mergeRequest(request2, downloadIndex);
|
request1, downloadIndex, /* addNewDownloadAsCompleted= */ false);
|
||||||
|
ActionFileUpgradeUtil.mergeRequest(
|
||||||
|
request2, downloadIndex, /* addNewDownloadAsCompleted= */ false);
|
||||||
|
|
||||||
Download download = downloadIndex.getDownload(request2.id);
|
Download download = downloadIndex.getDownload(request2.id);
|
||||||
assertThat(download).isNotNull();
|
assertThat(download).isNotNull();
|
||||||
@ -148,6 +155,42 @@ public class ActionFileUpgradeUtilTest {
|
|||||||
assertThat(download.state).isEqualTo(Download.STATE_QUEUED);
|
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)
|
private void assertDownloadIndexContainsRequest(DownloadRequest request, int state)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
Download download = downloadIndex.getDownload(request.id);
|
Download download = downloadIndex.getDownload(request.id);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user