2021-03-09 12:55:44 +01:00
|
|
|
import Storage from '@converse/skeletor/src/storage.js';
|
2021-03-23 14:52:08 +01:00
|
|
|
import { _converse, api } from '@converse/headless/core';
|
2021-03-09 12:55:44 +01:00
|
|
|
|
2021-04-22 11:31:04 +02:00
|
|
|
export function getDefaultStore () {
|
|
|
|
if (_converse.config.get('trusted')) {
|
|
|
|
const is_non_persistent = api.settings.get('persistent_store') === 'sessionStorage';
|
|
|
|
return is_non_persistent ? 'session': 'persistent';
|
|
|
|
} else {
|
|
|
|
return 'session';
|
|
|
|
}
|
|
|
|
}
|
2021-03-09 12:55:44 +01:00
|
|
|
|
2021-07-08 15:57:06 +02:00
|
|
|
function storeUsesIndexedDB (store) {
|
|
|
|
return store === 'persistent' && api.settings.get('persistent_store') === 'IndexedDB';
|
|
|
|
}
|
|
|
|
|
2021-03-23 14:52:08 +01:00
|
|
|
export function createStore (id, store) {
|
|
|
|
const name = store || getDefaultStore();
|
|
|
|
const s = _converse.storage[name];
|
2021-04-22 11:31:04 +02:00
|
|
|
if (typeof s === 'undefined') {
|
2021-05-11 15:46:57 +02:00
|
|
|
throw new TypeError(`createStore: Could not find store for ${id}`);
|
2021-04-22 11:31:04 +02:00
|
|
|
}
|
2021-07-08 15:57:06 +02:00
|
|
|
return new Storage(id, s, storeUsesIndexedDB(store));
|
2021-03-23 14:52:08 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
export function initStorage (model, id, type) {
|
|
|
|
const store = type || getDefaultStore();
|
2021-09-09 16:20:33 +02:00
|
|
|
model.browserStorage = createStore(id, store);
|
2021-07-08 15:57:06 +02:00
|
|
|
if (storeUsesIndexedDB(store)) {
|
2021-03-23 14:52:08 +01:00
|
|
|
const flush = () => model.browserStorage.flush();
|
|
|
|
window.addEventListener(_converse.unloadevent, flush);
|
|
|
|
model.on('destroy', () => window.removeEventListener(_converse.unloadevent, flush));
|
|
|
|
model.listenTo(_converse, 'beforeLogout', flush);
|
|
|
|
}
|
2021-03-09 12:55:44 +01:00
|
|
|
}
|