mirror of https://github.com/AMT-Cheif/drift.git
Basic support for Web Workers (#468)
This commit is contained in:
parent
aed9b40c30
commit
e0c3f4b647
|
@ -39,20 +39,32 @@ abstract class MoorWebStorage {
|
||||||
/// However, older browsers might not support IndexedDB.
|
/// However, older browsers might not support IndexedDB.
|
||||||
@experimental
|
@experimental
|
||||||
factory MoorWebStorage.indexedDb(String name,
|
factory MoorWebStorage.indexedDb(String name,
|
||||||
{bool migrateFromLocalStorage}) = _IndexedDbStorage;
|
{bool migrateFromLocalStorage, bool inWebWorker}) = _IndexedDbStorage;
|
||||||
|
|
||||||
/// Uses [MoorWebStorage.indexedDb] if the current browser supports it.
|
/// Uses [MoorWebStorage.indexedDb] if the current browser supports it.
|
||||||
/// Otherwise, falls back to the local storage based implementation.
|
/// Otherwise, falls back to the local storage based implementation.
|
||||||
factory MoorWebStorage.indexedDbIfSupported(String name) {
|
factory MoorWebStorage.indexedDbIfSupported(String name,
|
||||||
return supportsIndexedDb
|
{bool inWebWorker = false}) {
|
||||||
? MoorWebStorage.indexedDb(name)
|
return supportsIndexedDb(inWebWorker: inWebWorker)
|
||||||
|
? MoorWebStorage.indexedDb(name, inWebWorker: inWebWorker)
|
||||||
: MoorWebStorage(name);
|
: MoorWebStorage(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Attempts to check whether the current browser supports the
|
/// Attempts to check whether the current browser supports the
|
||||||
/// [MoorWebStorage.indexedDb] storage implementation.
|
/// [MoorWebStorage.indexedDb] storage implementation.
|
||||||
static bool get supportsIndexedDb =>
|
static bool supportsIndexedDb({bool inWebWorker = false}) {
|
||||||
IdbFactory.supported && context.hasProperty('FileReader');
|
var isIndexedDbSupported = false;
|
||||||
|
if (inWebWorker && WorkerGlobalScope.instance.indexedDB != null) {
|
||||||
|
isIndexedDbSupported = true;
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
isIndexedDbSupported = IdbFactory.supported;
|
||||||
|
} catch (error) {
|
||||||
|
isIndexedDbSupported = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return isIndexedDbSupported && context.hasProperty('FileReader');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class _CustomSchemaVersionSave implements MoorWebStorage {
|
abstract class _CustomSchemaVersionSave implements MoorWebStorage {
|
||||||
|
@ -123,16 +135,21 @@ class _IndexedDbStorage implements MoorWebStorage {
|
||||||
|
|
||||||
final String name;
|
final String name;
|
||||||
final bool migrateFromLocalStorage;
|
final bool migrateFromLocalStorage;
|
||||||
|
final bool inWebWorker;
|
||||||
|
|
||||||
Database _database;
|
Database _database;
|
||||||
|
|
||||||
_IndexedDbStorage(this.name, {this.migrateFromLocalStorage = true});
|
_IndexedDbStorage(this.name,
|
||||||
|
{this.migrateFromLocalStorage = true, this.inWebWorker = false});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> open() async {
|
Future<void> open() async {
|
||||||
var wasCreated = false;
|
var wasCreated = false;
|
||||||
|
|
||||||
_database = await window.indexedDB.open(
|
final indexedDb =
|
||||||
|
inWebWorker ? WorkerGlobalScope.instance.indexedDB : window.indexedDB;
|
||||||
|
|
||||||
|
_database = await indexedDb.open(
|
||||||
_objectStoreName,
|
_objectStoreName,
|
||||||
version: 1,
|
version: 1,
|
||||||
onUpgradeNeeded: (event) {
|
onUpgradeNeeded: (event) {
|
||||||
|
|
Loading…
Reference in New Issue