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
b30efe96
authored
Apr 18, 2019
by
olly
Committed by
Oliver Woodman
Apr 18, 2019
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Clean up database tables for launch
PiperOrigin-RevId: 244267255
parent
54a5d691
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
60 additions
and
87 deletions
library/core/src/main/java/com/google/android/exoplayer2/offline/DefaultDownloadIndex.java
library/core/src/main/java/com/google/android/exoplayer2/upstream/cache/CacheFileMetadataIndex.java
library/core/src/main/java/com/google/android/exoplayer2/upstream/cache/CachedContentIndex.java
library/core/src/test/java/com/google/android/exoplayer2/offline/DefaultDownloadIndexTest.java
library/core/src/main/java/com/google/android/exoplayer2/offline/DefaultDownloadIndex.java
View file @
b30efe96
...
...
@@ -23,7 +23,6 @@ import android.database.sqlite.SQLiteException;
import
android.net.Uri
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.VisibleForTesting
;
import
android.text.TextUtils
;
import
com.google.android.exoplayer2.database.DatabaseIOException
;
import
com.google.android.exoplayer2.database.DatabaseProvider
;
import
com.google.android.exoplayer2.database.VersionTable
;
...
...
@@ -37,32 +36,22 @@ public final class DefaultDownloadIndex implements WritableDownloadIndex {
private
static
final
String
TABLE_PREFIX
=
DatabaseProvider
.
TABLE_PREFIX
+
"Downloads"
;
@VisibleForTesting
/* package */
static
final
int
TABLE_VERSION
=
1
;
@VisibleForTesting
/* package */
static
final
int
TABLE_VERSION
=
2
;
private
static
final
String
COLUMN_ID
=
"id"
;
private
static
final
String
COLUMN_TYPE
=
"title"
;
private
static
final
String
COLUMN_URI
=
"
subtitle
"
;
private
static
final
String
COLUMN_URI
=
"
uri
"
;
private
static
final
String
COLUMN_STREAM_KEYS
=
"stream_keys"
;
private
static
final
String
COLUMN_CUSTOM_CACHE_KEY
=
"cache_key"
;
private
static
final
String
COLUMN_DATA
=
"
custom_meta
data"
;
private
static
final
String
COLUMN_CUSTOM_CACHE_KEY
=
"c
ustom_c
ache_key"
;
private
static
final
String
COLUMN_DATA
=
"data"
;
private
static
final
String
COLUMN_STATE
=
"state"
;
private
static
final
String
COLUMN_DOWNLOAD_PERCENTAGE
=
"download_percentage"
;
private
static
final
String
COLUMN_DOWNLOADED_BYTES
=
"downloaded_bytes"
;
private
static
final
String
COLUMN_TOTAL_BYTES
=
"total_bytes"
;
private
static
final
String
COLUMN_FAILURE_REASON
=
"failure_reason"
;
private
static
final
String
COLUMN_STOP_REASON
=
"manual_stop_reason"
;
private
static
final
String
COLUMN_START_TIME_MS
=
"start_time_ms"
;
private
static
final
String
COLUMN_UPDATE_TIME_MS
=
"update_time_ms"
;
/** @deprecated No longer used. */
@SuppressWarnings
(
"DeprecatedIsStillUsed"
)
@Deprecated
private
static
final
String
COLUMN_STOP_FLAGS
=
"stop_flags"
;
/** @deprecated No longer used. */
@SuppressWarnings
(
"DeprecatedIsStillUsed"
)
@Deprecated
private
static
final
String
COLUMN_NOT_MET_REQUIREMENTS
=
"not_met_requirements"
;
private
static
final
String
COLUMN_CONTENT_LENGTH
=
"content_length"
;
private
static
final
String
COLUMN_STOP_REASON
=
"stop_reason"
;
private
static
final
String
COLUMN_FAILURE_REASON
=
"failure_reason"
;
private
static
final
String
COLUMN_PERCENT_DOWNLOADED
=
"percent_downloaded"
;
private
static
final
String
COLUMN_BYTES_DOWNLOADED
=
"bytes_downloaded"
;
private
static
final
int
COLUMN_INDEX_ID
=
0
;
private
static
final
int
COLUMN_INDEX_TYPE
=
1
;
...
...
@@ -71,13 +60,13 @@ public final class DefaultDownloadIndex implements WritableDownloadIndex {
private
static
final
int
COLUMN_INDEX_CUSTOM_CACHE_KEY
=
4
;
private
static
final
int
COLUMN_INDEX_DATA
=
5
;
private
static
final
int
COLUMN_INDEX_STATE
=
6
;
private
static
final
int
COLUMN_INDEX_
DOWNLOAD_PERCENTAGE
=
7
;
private
static
final
int
COLUMN_INDEX_
DOWNLOADED_BYTE
S
=
8
;
private
static
final
int
COLUMN_INDEX_
TOTAL_BYTES
=
9
;
private
static
final
int
COLUMN_INDEX_
FAILURE
_REASON
=
10
;
private
static
final
int
COLUMN_INDEX_
STOP
_REASON
=
11
;
private
static
final
int
COLUMN_INDEX_
START_TIME_MS
=
12
;
private
static
final
int
COLUMN_INDEX_
UPDATE_TIME_MS
=
13
;
private
static
final
int
COLUMN_INDEX_
START_TIME_MS
=
7
;
private
static
final
int
COLUMN_INDEX_
UPDATE_TIME_M
S
=
8
;
private
static
final
int
COLUMN_INDEX_
CONTENT_LENGTH
=
9
;
private
static
final
int
COLUMN_INDEX_
STOP
_REASON
=
10
;
private
static
final
int
COLUMN_INDEX_
FAILURE
_REASON
=
11
;
private
static
final
int
COLUMN_INDEX_
PERCENT_DOWNLOADED
=
12
;
private
static
final
int
COLUMN_INDEX_
BYTES_DOWNLOADED
=
13
;
private
static
final
String
WHERE_ID_EQUALS
=
COLUMN_ID
+
" = ?"
;
private
static
final
String
WHERE_STATE_TERMINAL
=
...
...
@@ -92,13 +81,13 @@ public final class DefaultDownloadIndex implements WritableDownloadIndex {
COLUMN_CUSTOM_CACHE_KEY
,
COLUMN_DATA
,
COLUMN_STATE
,
COLUMN_DOWNLOAD_PERCENTAGE
,
COLUMN_DOWNLOADED_BYTES
,
COLUMN_TOTAL_BYTES
,
COLUMN_FAILURE_REASON
,
COLUMN_STOP_REASON
,
COLUMN_START_TIME_MS
,
COLUMN_UPDATE_TIME_MS
COLUMN_UPDATE_TIME_MS
,
COLUMN_CONTENT_LENGTH
,
COLUMN_STOP_REASON
,
COLUMN_FAILURE_REASON
,
COLUMN_PERCENT_DOWNLOADED
,
COLUMN_BYTES_DOWNLOADED
,
};
private
static
final
String
TABLE_SCHEMA
=
...
...
@@ -109,32 +98,28 @@ public final class DefaultDownloadIndex implements WritableDownloadIndex {
+
" TEXT NOT NULL,"
+
COLUMN_URI
+
" TEXT NOT NULL,"
+
COLUMN_STREAM_KEYS
+
" TEXT NOT NULL,"
+
COLUMN_CUSTOM_CACHE_KEY
+
" TEXT,"
+
COLUMN_DATA
+
" BLOB NOT NULL,"
+
COLUMN_STATE
+
" INTEGER NOT NULL,"
+
COLUMN_DOWNLOAD_PERCENTAGE
+
" REAL NOT NULL,"
+
COLUMN_DOWNLOADED_BYTES
+
" INTEGER NOT NULL,"
+
COLUMN_TOTAL_BYTES
+
" INTEGER NOT NULL,"
+
COLUMN_FAILURE_REASON
+
COLUMN_START_TIME_MS
+
" INTEGER NOT NULL,"
+
COLUMN_
STOP_FLAG
S
+
COLUMN_
UPDATE_TIME_M
S
+
" INTEGER NOT NULL,"
+
COLUMN_
NOT_MET_REQUIREMENTS
+
COLUMN_
CONTENT_LENGTH
+
" INTEGER NOT NULL,"
+
COLUMN_STOP_REASON
+
" INTEGER NOT NULL,"
+
COLUMN_START_TIME_MS
+
" INTEGER NOT NULL,"
+
COLUMN_UPDATE_TIME_MS
+
COLUMN_FAILURE_REASON
+
" INTEGER NOT NULL,"
+
COLUMN_
STREAM_KEYS
+
"
TEXT
NOT NULL,"
+
COLUMN_
DATA
+
"
BLOB
NOT NULL)"
;
+
COLUMN_
PERCENT_DOWNLOADED
+
"
REAL
NOT NULL,"
+
COLUMN_
BYTES_DOWNLOADED
+
"
INTEGER
NOT NULL)"
;
private
static
final
String
TRUE
=
"1"
;
...
...
@@ -170,8 +155,7 @@ public final class DefaultDownloadIndex implements WritableDownloadIndex {
* tables in which downloads are persisted.
*/
public
DefaultDownloadIndex
(
DatabaseProvider
databaseProvider
,
String
name
)
{
// TODO: Remove this backward compatibility hack for launch.
this
.
name
=
TextUtils
.
isEmpty
(
name
)
?
"singleton"
:
name
;
this
.
name
=
name
;
this
.
databaseProvider
=
databaseProvider
;
tableName
=
TABLE_PREFIX
+
name
;
}
...
...
@@ -211,13 +195,11 @@ public final class DefaultDownloadIndex implements WritableDownloadIndex {
values
.
put
(
COLUMN_STATE
,
download
.
state
);
values
.
put
(
COLUMN_START_TIME_MS
,
download
.
startTimeMs
);
values
.
put
(
COLUMN_UPDATE_TIME_MS
,
download
.
updateTimeMs
);
values
.
put
(
COLUMN_
TOTAL_BYTES
,
download
.
contentLength
);
values
.
put
(
COLUMN_
CONTENT_LENGTH
,
download
.
contentLength
);
values
.
put
(
COLUMN_STOP_REASON
,
download
.
stopReason
);
values
.
put
(
COLUMN_FAILURE_REASON
,
download
.
failureReason
);
values
.
put
(
COLUMN_DOWNLOAD_PERCENTAGE
,
download
.
getPercentDownloaded
());
values
.
put
(
COLUMN_DOWNLOADED_BYTES
,
download
.
getBytesDownloaded
());
values
.
put
(
COLUMN_STOP_FLAGS
,
0
);
values
.
put
(
COLUMN_NOT_MET_REQUIREMENTS
,
0
);
values
.
put
(
COLUMN_PERCENT_DOWNLOADED
,
download
.
getPercentDownloaded
());
values
.
put
(
COLUMN_BYTES_DOWNLOADED
,
download
.
getBytesDownloaded
());
try
{
SQLiteDatabase
writableDatabase
=
databaseProvider
.
getWritableDatabase
();
writableDatabase
.
replaceOrThrow
(
tableName
,
/* nullColumnHack= */
null
,
values
);
...
...
@@ -270,7 +252,7 @@ public final class DefaultDownloadIndex implements WritableDownloadIndex {
try
{
SQLiteDatabase
readableDatabase
=
databaseProvider
.
getReadableDatabase
();
int
version
=
VersionTable
.
getVersion
(
readableDatabase
,
VersionTable
.
FEATURE_OFFLINE
,
name
);
if
(
version
==
VersionTable
.
VERSION_UNSET
||
version
>
TABLE_VERSION
)
{
if
(
version
!=
TABLE_VERSION
)
{
SQLiteDatabase
writableDatabase
=
databaseProvider
.
getWritableDatabase
();
writableDatabase
.
beginTransaction
();
try
{
...
...
@@ -282,9 +264,6 @@ public final class DefaultDownloadIndex implements WritableDownloadIndex {
}
finally
{
writableDatabase
.
endTransaction
();
}
}
else
if
(
version
<
TABLE_VERSION
)
{
// There is no previous version currently.
throw
new
IllegalStateException
();
}
initialized
=
true
;
}
catch
(
SQLException
e
)
{
...
...
@@ -330,23 +309,23 @@ public final class DefaultDownloadIndex implements WritableDownloadIndex {
private
static
Download
getDownloadForCurrentRow
(
Cursor
cursor
)
{
DownloadRequest
request
=
new
DownloadRequest
(
cursor
.
getString
(
COLUMN_INDEX_ID
),
cursor
.
getString
(
COLUMN_INDEX_TYPE
),
Uri
.
parse
(
cursor
.
getString
(
COLUMN_INDEX_URI
)),
decodeStreamKeys
(
cursor
.
getString
(
COLUMN_INDEX_STREAM_KEYS
)),
cursor
.
getString
(
COLUMN_INDEX_CUSTOM_CACHE_KEY
),
cursor
.
getBlob
(
COLUMN_INDEX_DATA
));
/* id= */
cursor
.
getString
(
COLUMN_INDEX_ID
),
/* type= */
cursor
.
getString
(
COLUMN_INDEX_TYPE
),
/* uri= */
Uri
.
parse
(
cursor
.
getString
(
COLUMN_INDEX_URI
)),
/* streamKeys= */
decodeStreamKeys
(
cursor
.
getString
(
COLUMN_INDEX_STREAM_KEYS
)),
/* customCacheKey= */
cursor
.
getString
(
COLUMN_INDEX_CUSTOM_CACHE_KEY
),
/* data= */
cursor
.
getBlob
(
COLUMN_INDEX_DATA
));
DownloadProgress
downloadProgress
=
new
DownloadProgress
();
downloadProgress
.
bytesDownloaded
=
cursor
.
getLong
(
COLUMN_INDEX_
DOWNLOADED_BYTES
);
downloadProgress
.
percentDownloaded
=
cursor
.
getFloat
(
COLUMN_INDEX_
DOWNLOAD_PERCENTAGE
);
downloadProgress
.
bytesDownloaded
=
cursor
.
getLong
(
COLUMN_INDEX_
BYTES_DOWNLOADED
);
downloadProgress
.
percentDownloaded
=
cursor
.
getFloat
(
COLUMN_INDEX_
PERCENT_DOWNLOADED
);
return
new
Download
(
request
,
cursor
.
getInt
(
COLUMN_INDEX_STATE
),
cursor
.
getLong
(
COLUMN_INDEX_START_TIME_MS
),
cursor
.
getLong
(
COLUMN_INDEX_UPDATE_TIME_MS
),
cursor
.
getLong
(
COLUMN_INDEX_TOTAL_BYTES
),
cursor
.
getInt
(
COLUMN_INDEX_STOP_REASON
),
cursor
.
getInt
(
COLUMN_INDEX_FAILURE_REASON
),
/* state= */
cursor
.
getInt
(
COLUMN_INDEX_STATE
),
/* startTimeMs= */
cursor
.
getLong
(
COLUMN_INDEX_START_TIME_MS
),
/* updateTimeMs= */
cursor
.
getLong
(
COLUMN_INDEX_UPDATE_TIME_MS
),
/* contentLength= */
cursor
.
getLong
(
COLUMN_INDEX_CONTENT_LENGTH
),
/* stopReason= */
cursor
.
getInt
(
COLUMN_INDEX_STOP_REASON
),
/* failureReason= */
cursor
.
getInt
(
COLUMN_INDEX_FAILURE_REASON
),
downloadProgress
);
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/upstream/cache/CacheFileMetadataIndex.java
View file @
b30efe96
...
...
@@ -107,7 +107,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
int
version
=
VersionTable
.
getVersion
(
readableDatabase
,
VersionTable
.
FEATURE_CACHE_FILE_METADATA
,
hexUid
);
if
(
version
==
VersionTable
.
VERSION_UNSET
||
version
>
TABLE_VERSION
)
{
if
(
version
!=
TABLE_VERSION
)
{
SQLiteDatabase
writableDatabase
=
databaseProvider
.
getWritableDatabase
();
writableDatabase
.
beginTransaction
();
try
{
...
...
@@ -119,9 +119,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
}
finally
{
writableDatabase
.
endTransaction
();
}
}
else
if
(
version
<
TABLE_VERSION
)
{
// There is no previous version currently.
throw
new
IllegalStateException
();
}
}
catch
(
SQLException
e
)
{
throw
new
DatabaseIOException
(
e
);
...
...
library/core/src/main/java/com/google/android/exoplayer2/upstream/cache/CachedContentIndex.java
View file @
b30efe96
...
...
@@ -63,12 +63,8 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
/* package */
static
final
String
FILE_NAME_ATOMIC
=
"cached_content_index.exi"
;
private
static
final
int
VERSION
=
2
;
private
static
final
int
VERSION_METADATA_INTRODUCED
=
2
;
private
static
final
int
INCREMENTAL_METADATA_READ_LENGTH
=
10
*
1024
*
1024
;
private
static
final
int
FLAG_ENCRYPTED_INDEX
=
1
;
private
final
HashMap
<
String
,
CachedContent
>
keyToContent
;
/**
* Maps assigned ids to their corresponding keys. Also contains (id -> null) entries for ids that
...
...
@@ -464,6 +460,10 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
/** {@link Storage} implementation that uses an {@link AtomicFile}. */
private
static
class
LegacyStorage
implements
Storage
{
private
static
final
int
VERSION
=
2
;
private
static
final
int
VERSION_METADATA_INTRODUCED
=
2
;
private
static
final
int
FLAG_ENCRYPTED_INDEX
=
1
;
private
final
boolean
encrypt
;
@Nullable
private
final
Cipher
cipher
;
@Nullable
private
final
SecretKeySpec
secretKeySpec
;
...
...
@@ -770,7 +770,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
databaseProvider
.
getReadableDatabase
(),
VersionTable
.
FEATURE_CACHE_CONTENT_METADATA
,
hexUid
);
if
(
version
==
VersionTable
.
VERSION_UNSET
||
version
>
TABLE_VERSION
)
{
if
(
version
!=
TABLE_VERSION
)
{
SQLiteDatabase
writableDatabase
=
databaseProvider
.
getWritableDatabase
();
writableDatabase
.
beginTransaction
();
try
{
...
...
@@ -779,9 +779,6 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
}
finally
{
writableDatabase
.
endTransaction
();
}
}
else
if
(
version
<
TABLE_VERSION
)
{
// There is no previous version currently.
throw
new
IllegalStateException
();
}
try
(
Cursor
cursor
=
getCursor
())
{
...
...
library/core/src/test/java/com/google/android/exoplayer2/offline/DefaultDownloadIndexTest.java
View file @
b30efe96
...
...
@@ -32,7 +32,7 @@ import org.junit.runner.RunWith;
@RunWith
(
AndroidJUnit4
.
class
)
public
class
DefaultDownloadIndexTest
{
private
static
final
String
EMPTY_NAME
=
"
singleton
"
;
private
static
final
String
EMPTY_NAME
=
""
;
private
ExoDatabaseProvider
databaseProvider
;
private
DefaultDownloadIndex
downloadIndex
;
...
...
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