mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
105 lines
3.2 KiB
JavaScript
105 lines
3.2 KiB
JavaScript
(function () {
|
|
var ns = $.namespace('pskl.service.storage');
|
|
|
|
ns.LocalStorageService = function (piskelController) {
|
|
if (piskelController === undefined) {
|
|
throw 'Bad LocalStorageService initialization: <undefined piskelController>';
|
|
}
|
|
this.piskelController = piskelController;
|
|
};
|
|
|
|
ns.LocalStorageService.prototype.init = function() {};
|
|
|
|
ns.LocalStorageService.prototype.save = function(piskel) {
|
|
var name = piskel.getDescriptor().name;
|
|
var description = piskel.getDescriptor().description;
|
|
var serialized = pskl.utils.Serializer.serializePiskel(piskel);
|
|
|
|
var serializedString = '';
|
|
var uint16 = new Uint16Array(serialized);
|
|
for (var i = 0, length = uint16.length; i < length; i++) {
|
|
serializedString += String.fromCharCode(uint16[i]);
|
|
}
|
|
|
|
if (pskl.app.localStorageService.getPiskel(name)) {
|
|
var confirmOverwrite = window.confirm('There is already a piskel saved as ' + name + '. Overwrite ?');
|
|
if (!confirmOverwrite) {
|
|
return Q.reject('Cancelled by user, "' + name + '" already exists');
|
|
}
|
|
}
|
|
|
|
try {
|
|
this.removeFromKeys_(name);
|
|
this.addToKeys_(name, description, Date.now());
|
|
window.localStorage.setItem('piskel.' + name, serializedString);
|
|
return Q.resolve();
|
|
} catch (e) {
|
|
return Q.reject(e.message);
|
|
}
|
|
};
|
|
|
|
ns.LocalStorageService.prototype.load = function(name) {
|
|
var piskelString = this.getPiskel(name);
|
|
var key = this.getKey_(name);
|
|
|
|
var serializedPiskel = new Uint16Array(piskelString.length);
|
|
for (var i = 0, length = piskelString.length; i < length; i++) {
|
|
serializedPiskel[i] = piskelString.charCodeAt(i);
|
|
}
|
|
|
|
pskl.utils.serialization.Deserializer.deserialize(serializedPiskel.buffer, function (piskel, extra) {
|
|
pskl.app.piskelController.setPiskel(piskel);
|
|
pskl.app.previewController.setFPS(extra.fps);
|
|
});
|
|
};
|
|
|
|
ns.LocalStorageService.prototype.remove = function(name) {
|
|
this.removeFromKeys_(name);
|
|
window.localStorage.removeItem('piskel.' + name);
|
|
};
|
|
|
|
ns.LocalStorageService.prototype.saveKeys_ = function(keys) {
|
|
window.localStorage.setItem('piskel.keys', JSON.stringify(keys));
|
|
};
|
|
|
|
ns.LocalStorageService.prototype.removeFromKeys_ = function(name) {
|
|
var keys = this.getKeys();
|
|
var otherKeys = keys.filter(function (key) {
|
|
return key.name !== name;
|
|
});
|
|
|
|
this.saveKeys_(otherKeys);
|
|
};
|
|
|
|
ns.LocalStorageService.prototype.getKey_ = function(name) {
|
|
var matches = this.getKeys().filter(function (key) {
|
|
return key.name === name;
|
|
});
|
|
if (matches.length > 0) {
|
|
return matches[0];
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
ns.LocalStorageService.prototype.addToKeys_ = function(name, description, date) {
|
|
var keys = this.getKeys();
|
|
keys.push({
|
|
name : name,
|
|
description : description,
|
|
date : date
|
|
});
|
|
this.saveKeys_(keys);
|
|
};
|
|
|
|
ns.LocalStorageService.prototype.getPiskel = function(name) {
|
|
return window.localStorage.getItem('piskel.' + name);
|
|
};
|
|
|
|
ns.LocalStorageService.prototype.getKeys = function(name) {
|
|
var keysString = window.localStorage.getItem('piskel.keys');
|
|
return JSON.parse(keysString) || [];
|
|
};
|
|
|
|
})();
|