'use strict';
/**
* @module dataStore
* @exports dataStore
*/
const {ipcRenderer} = require('electron');
let loadedState = null;
/**
* Update entity by sending information to backend
*
* @param {any} entity
* @param {string} channel
* @function storeEntity
*/
function storeEntity(entity, channel) {
let data = entity.serialize();
ipcRenderer.send(channel, data);
};
/**
* Store entities as autosave
*
* @param {module:entity/Entity~Entity} entity
*/
module.exports.autosaveEntity = function(entity) {
storeEntity(entity, 'saveEntity');
};
/**
*
* @param {any} entity
* @deprecated
*/
module.exports.manualSaveState = function() {
ipcRenderer.send('manualSaveState', true);
};
/**
* Get a list of save states
*
* @return {Promise} - Promise with list of save states
*/
module.exports.getSaveStates = function() {
ipcRenderer.send('listSaveStates', true);
return new Promise(function(resolve, reject) {
ipcRenderer.on('reply-listSaveStates', (ev, arg) => {
if (!arg.success) reject('Failed to list keys');
resolve(arg.data);
});
});
};
/**
* Load a state given a save state key
*
* @param {string} key - Save State Key
* @return {Promise} - Promise with saved data
*/
module.exports.loadState = function(key) {
ipcRenderer.send('loadState', key);
loadedState = new Promise(function(resolve, reject) {
ipcRenderer.on('reply-loadState', (ev, arg) => {
if (!arg.success) reject('Failed to load key');
resolve(arg.data);
});
});
return loadedState;
};
/**
* Get the previously loaded state as a Promise
*
* @param {any} key
* @return {Promise} - Promise with previously loaded data
*/
module.exports.getLoadedState = function(key) {
return loadedState;
};
/**
* Invalidate the previously loaded state
*/
module.exports.resetLoadState = function() {
loadedState = null;
};