mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
66 lines
2.0 KiB
JavaScript
66 lines
2.0 KiB
JavaScript
(function () {
|
|
var ns = $.namespace('pskl.service');
|
|
|
|
// 1 minute = 1000 * 60
|
|
var BACKUP_INTERVAL = 1000 * 60;
|
|
|
|
ns.BackupService = function (piskelController) {
|
|
this.piskelController = piskelController;
|
|
this.lastHash = null;
|
|
};
|
|
|
|
ns.BackupService.prototype.init = function () {
|
|
var previousPiskel = window.localStorage.getItem('bkp.next.piskel');
|
|
var previousInfo = window.localStorage.getItem('bkp.next.info');
|
|
if (previousPiskel && previousInfo) {
|
|
this.savePiskel_('prev', previousPiskel, previousInfo);
|
|
}
|
|
|
|
window.setInterval(this.backup.bind(this), BACKUP_INTERVAL);
|
|
};
|
|
|
|
ns.BackupService.prototype.backup = function () {
|
|
var piskel = this.piskelController.getPiskel();
|
|
var descriptor = piskel.getDescriptor();
|
|
var hash = piskel.getHash();
|
|
var info = {
|
|
name : descriptor.name,
|
|
description : descriptor.info,
|
|
date : Date.now(),
|
|
hash : hash
|
|
};
|
|
|
|
// Do not save an unchanged piskel
|
|
if (hash !== this.lastHash) {
|
|
this.lastHash = hash;
|
|
var serializedPiskel = pskl.utils.serialization.Serializer.serialize(piskel);
|
|
this.savePiskel_('next', serializedPiskel, JSON.stringify(info));
|
|
}
|
|
};
|
|
|
|
ns.BackupService.prototype.getPreviousPiskelInfo = function () {
|
|
var previousInfo = window.localStorage.getItem('bkp.prev.info');
|
|
if (previousInfo) {
|
|
return JSON.parse(previousInfo);
|
|
}
|
|
};
|
|
|
|
ns.BackupService.prototype.load = function() {
|
|
var previousPiskel = window.localStorage.getItem('bkp.prev.piskel');
|
|
previousPiskel = JSON.parse(previousPiskel);
|
|
|
|
pskl.utils.serialization.Deserializer.deserialize(previousPiskel, function (piskel) {
|
|
pskl.app.piskelController.setPiskel(piskel);
|
|
});
|
|
};
|
|
|
|
ns.BackupService.prototype.savePiskel_ = function (type, piskel, info) {
|
|
try {
|
|
window.localStorage.setItem('bkp.' + type + '.piskel', piskel);
|
|
window.localStorage.setItem('bkp.' + type + '.info', info);
|
|
} catch (e) {
|
|
console.error('Could not save piskel backup in localStorage.', e);
|
|
}
|
|
};
|
|
})();
|