Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
f7f6489f
authored
Apr 23, 2019
by
eguven
Committed by
Oliver Woodman
Apr 26, 2019
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Add option to add entries in an ActionFile to DownloadIndex as completed
PiperOrigin-RevId: 244864742
parent
61551398
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
65 additions
and
12 deletions
demos/main/src/main/java/com/google/android/exoplayer2/demo/DemoApplication.java
library/core/src/main/java/com/google/android/exoplayer2/offline/ActionFileUpgradeUtil.java
library/core/src/test/java/com/google/android/exoplayer2/offline/ActionFileUpgradeUtilTest.java
demos/main/src/main/java/com/google/android/exoplayer2/demo/DemoApplication.java
View file @
f7f6489f
...
@@ -115,8 +115,10 @@ public class DemoApplication extends Application {
...
@@ -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 {
...
@@ -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
);
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/offline/ActionFileUpgradeUtil.java
View file @
f7f6489f
...
@@ -52,6 +52,7 @@ public final class ActionFileUpgradeUtil {
...
@@ -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 {
...
@@ -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 {
...
@@ -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 {
...
@@ -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 {
...
@@ -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
,
...
...
library/core/src/test/java/com/google/android/exoplayer2/offline/ActionFileUpgradeUtilTest.java
View file @
f7f6489f
...
@@ -88,7 +88,11 @@ public class ActionFileUpgradeUtilTest {
...
@@ -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 {
...
@@ -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 {
...
@@ -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 {
...
@@ -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
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment