Skip to content

Commit

Permalink
Expose Delete Storage API
Browse files Browse the repository at this point in the history
Expose a function through Storage to allow developers to delete the
database that backs storage.

Issue #1230
Issue #1248

Change-Id: Icb20b6c43966a299d8903b2d14f33666f672bd15
  • Loading branch information
vaage authored and joeyparrish committed Jan 30, 2018
1 parent 9049f41 commit 9c2ba23
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 6 deletions.
11 changes: 11 additions & 0 deletions lib/offline/storage.js
Expand Up @@ -1087,4 +1087,15 @@ shaka.offline.Storage.getAllSegmentIds_ = function(manifest) {
};


/**
* Delete the on-disk storage and all content it contains. This should not
* be done regularly, only when storage is rendered unusable.
* @return {!Promise}
*/
shaka.offline.Storage.deleteAll = function() {
return shaka.offline.StorageEngineFactory.deleteStorage();
};



shaka.Player.registerSupportPlugin('offline', shaka.offline.Storage.support);
41 changes: 35 additions & 6 deletions lib/offline/storage_engine_factory.js
Expand Up @@ -27,6 +27,12 @@ goog.require('shaka.util.Error');
*/


/**
* @const{string}
* @private
*/
shaka.offline.StorageEngineFactory.NAME_ = 'shaka_offline_db';

/**
* Determines if this platform supports any form of storage engine.
* @return {boolean}
Expand All @@ -42,17 +48,40 @@ shaka.offline.StorageEngineFactory.isSupported = function() {
* @return {!Promise<!shaka.offline.IStorageEngine>}
*/
shaka.offline.StorageEngineFactory.createStorageEngine = function() {
const name = shaka.offline.StorageEngineFactory.NAME_;

return shaka.offline.StorageEngineFactory.ensureSupport().then(() => {
let engine = new shaka.offline.DBEngine(name);
return engine.init().then(() => engine);
});
};


/**
* Delete the storage engine and all its contents. This operation is
* non-reversible.
* @return {!Promise}
*/
shaka.offline.StorageEngineFactory.deleteStorage = function() {
const name = shaka.offline.StorageEngineFactory.NAME_;

return shaka.offline.StorageEngineFactory.ensureSupport().then(() => {
return shaka.offline.DBEngine.deleteDatabase(name);
});
};


/** @return {!Promise} */
shaka.offline.StorageEngineFactory.ensureSupport = function() {
// Use our method to check in case it was replaced.
var supportsStorage = shaka.offline.StorageEngineFactory.isSupported();
let support = shaka.offline.StorageEngineFactory.isSupported();

if (!supportsStorage) {
if (support) {
return Promise.resolve();
} else {
return Promise.reject(new shaka.util.Error(
shaka.util.Error.Severity.CRITICAL,
shaka.util.Error.Category.STORAGE,
shaka.util.Error.Code.STORAGE_NOT_SUPPORTED));
}

/** @type {!shaka.offline.DBEngine} */
var engine = new shaka.offline.DBEngine('shaka_offline_db');
return engine.init().then(function() { return engine; });
};

0 comments on commit 9c2ba23

Please sign in to comment.