mirror of
https://github.com/shaka-project/shaka-player.git
synced 2026-06-26 17:46:26 +03:00
c81389741f
A coming update to the Google eslint config will require using "const" over "let". This makes that one change to isolate the big changes. Change-Id: I7d0974c3ae15c53cc45a6b07bf9f6586e2d34aca
100 lines
2.9 KiB
JavaScript
100 lines
2.9 KiB
JavaScript
/**
|
|
* @license
|
|
* Copyright 2016 Google Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
goog.provide('shaka.offline.indexeddb.DBConnection');
|
|
|
|
goog.require('shaka.offline.indexeddb.DBOperation');
|
|
goog.require('shaka.util.ArrayUtils');
|
|
|
|
|
|
/**
|
|
* DBConnection is used to manage an IndexedDB connection. It can create new
|
|
* operations. If the connection is killed (via |destroy|) all pending
|
|
* operations will be cancelled.
|
|
*/
|
|
shaka.offline.indexeddb.DBConnection = class {
|
|
/**
|
|
* @param {IDBDatabase} connection A connection to an IndexedDB instance.
|
|
*/
|
|
constructor(connection) {
|
|
/** @private {IDBDatabase} */
|
|
this.connection_ = connection;
|
|
/** @private {!Array.<shaka.offline.indexeddb.DBOperation>} */
|
|
this.pending_ = [];
|
|
}
|
|
|
|
/**
|
|
* @return {!Promise}
|
|
*/
|
|
destroy() {
|
|
return Promise.all(this.pending_.map((op) => {
|
|
return op.abort();
|
|
}));
|
|
}
|
|
|
|
/**
|
|
* @param {string} store The name of the store that the operation should
|
|
* occur on.
|
|
* @return {!shaka.offline.indexeddb.DBOperation}
|
|
*/
|
|
startReadOnlyOperation(store) {
|
|
return this.startOperation_(store, 'readonly');
|
|
}
|
|
|
|
/**
|
|
* @param {string} store The name of the store that the operation should
|
|
* occur on.
|
|
* @return {!shaka.offline.indexeddb.DBOperation}
|
|
*/
|
|
startReadWriteOperation(store) {
|
|
return this.startOperation_(store, 'readwrite');
|
|
}
|
|
|
|
/**
|
|
* @param {string} store The name of the store that the operation should
|
|
* occur on.
|
|
* @param {string} type The type of operation being performed on the store.
|
|
* This determines what commands may be performed. This
|
|
* can either be "readonly" or "readwrite".
|
|
* @return {!shaka.offline.indexeddb.DBOperation}
|
|
* @private
|
|
*/
|
|
startOperation_(store, type) {
|
|
const transaction = this.connection_.transaction([store], type);
|
|
const operation =
|
|
new shaka.offline.indexeddb.DBOperation(transaction, store);
|
|
|
|
this.pending_.push(operation);
|
|
|
|
// Once the operation is done (regardless of outcome) stop tracking it.
|
|
operation.promise().then(
|
|
() => this.stopTracking_(operation),
|
|
() => this.stopTracking_(operation)
|
|
);
|
|
|
|
return operation;
|
|
}
|
|
|
|
/**
|
|
* @param {!shaka.offline.indexeddb.DBOperation} operation
|
|
* @private
|
|
*/
|
|
stopTracking_(operation) {
|
|
shaka.util.ArrayUtils.remove(this.pending_, operation);
|
|
}
|
|
};
|