Fix services to use new serializer format

This commit is contained in:
Dávid Szabó 2016-08-26 01:50:43 +02:00 committed by Julian Descottes
parent dbbd57ae28
commit c2b283be67
5 changed files with 37 additions and 46 deletions

View File

@ -53,7 +53,7 @@
var isSnapshot = action.type === ns.HistoryService.SNAPSHOT;
var isAtAutoSnapshotInterval = this.currentIndex % ns.HistoryService.SNAPSHOT_PERIOD === 0;
if (isSnapshot || isAtAutoSnapshotInterval) {
state.piskel = this.piskelController.serialize(true);
state.piskel = this.piskelController.serialize();
}
this.stateQueue.push(state);
@ -124,13 +124,7 @@
var state = this.stateQueue[stateIndex];
var piskelSnapshot = state.piskel;
// If the snapshot is stringified, parse it and backup the result for faster access next time
// FIXME : Memory consumption might go crazy if we keep unpacking big piskels indefinitely
// ==> should ensure I remove some of them :)
if (typeof piskelSnapshot === 'string') {
piskelSnapshot = JSON.parse(piskelSnapshot);
state.piskel = piskelSnapshot;
}
state.piskel = piskelSnapshot;
return piskelSnapshot;
};

View File

@ -24,7 +24,7 @@
return Q.reject('Invalid file name');
}
var serialized = pskl.utils.Serializer.serializePiskel(piskel, false);
var serialized = pskl.utils.Serializer.serializePiskel(piskel);
savePath = this.addExtensionIfNeeded_(savePath);
piskel.savePath = savePath;
piskel.setName(this.extractFilename_(savePath));
@ -37,12 +37,11 @@
ns.DesktopStorageService.prototype.load = function (savePath) {
pskl.utils.FileUtilsDesktop.readFile(savePath).then(function (content) {
pskl.utils.PiskelFileUtils.decodePiskelFile(content, function (piskel, descriptor, fps) {
piskel.setDescriptor(descriptor);
pskl.utils.PiskelFileUtils.decodePiskelFile(content, function (piskel, extra) {
// store save path so we can re-save without opening the save dialog
piskel.savePath = savePath;
pskl.app.piskelController.setPiskel(piskel);
pskl.app.previewController.setFPS(fps);
pskl.app.previewController.setFPS(extra.fps);
});
});
};

View File

@ -5,21 +5,19 @@
ns.FileDownloadStorageService.prototype.init = function () {};
ns.FileDownloadStorageService.prototype.save = function (piskel) {
var serialized = pskl.utils.Serializer.serializePiskel(piskel, false);
var serialized = pskl.utils.Serializer.serializePiskel(piskel);
var deferred = Q.defer();
pskl.utils.BlobUtils.stringToBlob(serialized, function(blob) {
var piskelName = piskel.getDescriptor().name;
var timestamp = pskl.utils.DateUtils.format(new Date(), '{{Y}}{{M}}{{D}}-{{H}}{{m}}{{s}}');
var fileName = piskelName + '-' + timestamp + '.piskel';
var piskelName = piskel.getDescriptor().name;
var timestamp = pskl.utils.DateUtils.format(new Date(), '{{Y}}{{M}}{{D}}-{{H}}{{m}}{{s}}');
var fileName = piskelName + '-' + timestamp + '.piskel';
try {
pskl.utils.FileUtils.downloadAsFile(blob, fileName);
deferred.resolve();
} catch (e) {
deferred.reject(e.message);
}
}.bind(this), 'application/piskel+json');
try {
pskl.utils.FileUtils.downloadAsFile(serialized, fileName);
deferred.resolve();
} catch (e) {
deferred.reject(e.message);
}
return deferred.promise;
};

View File

@ -13,7 +13,13 @@
ns.LocalStorageService.prototype.save = function(piskel) {
var name = piskel.getDescriptor().name;
var description = piskel.getDescriptor().description;
var serialized = pskl.utils.Serializer.serializePiskel(piskel, false);
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 ?');
@ -25,7 +31,7 @@
try {
this.removeFromKeys_(name);
this.addToKeys_(name, description, Date.now());
window.localStorage.setItem('piskel.' + name, serialized);
window.localStorage.setItem('piskel.' + name, serializedString);
return Q.resolve();
} catch (e) {
return Q.reject(e.message);
@ -35,16 +41,15 @@
ns.LocalStorageService.prototype.load = function(name) {
var piskelString = this.getPiskel(name);
var key = this.getKey_(name);
var serializedPiskel = JSON.parse(piskelString);
// FIXME : should be moved to deserializer
// Deserializer should call callback with descriptor + fps information
var fps = serializedPiskel.piskel.fps;
var description = serializedPiskel.piskel.description;
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, function (piskel) {
piskel.setDescriptor(new pskl.model.piskel.Descriptor(name, description, true));
pskl.utils.serialization.Deserializer.deserialize(serializedPiskel.buffer, function (piskel, extra) {
pskl.app.piskelController.setPiskel(piskel);
pskl.app.previewController.setFPS(fps);
pskl.app.previewController.setFPS(extra.fps);
});
};

View File

@ -11,30 +11,25 @@
* @param {Function} onError NOT USED YET
*/
loadFromFile : function (file, onSuccess, onError) {
pskl.utils.FileUtils.readFile(file, function (content) {
var rawPiskel = pskl.utils.Base64.toText(content);
pskl.utils.FileUtils.readFileAsArrayBuffer(file, function (content) {
ns.PiskelFileUtils.decodePiskelFile(
rawPiskel,
function (piskel, descriptor, fps) {
content,
function (piskel, extra) {
// if using Node-Webkit, store the savePath on load
// Note: the 'path' property is unique to Node-Webkit, and holds the full path
if (pskl.utils.Environment.detectNodeWebkit()) {
piskel.savePath = file.path;
}
onSuccess(piskel, descriptor, fps);
onSuccess(piskel, extra);
},
onError
);
});
},
decodePiskelFile : function (rawPiskel, onSuccess, onError) {
var serializedPiskel = JSON.parse(rawPiskel);
var fps = serializedPiskel.piskel.fps;
var piskel = serializedPiskel.piskel;
var descriptor = new pskl.model.piskel.Descriptor(piskel.name, piskel.description, true);
pskl.utils.serialization.Deserializer.deserialize(serializedPiskel, function (piskel) {
onSuccess(piskel, descriptor, fps);
decodePiskelFile : function (serializedPiskel, onSuccess, onError) {
pskl.utils.serialization.Deserializer.deserialize(serializedPiskel, function (piskel, extra) {
onSuccess(piskel, extra);
});
}