diff --git a/js/dropbox-provider.js b/js/dropbox-provider.js
index 13aaca74..c1469e60 100644
--- a/js/dropbox-provider.js
+++ b/js/dropbox-provider.js
@@ -68,7 +68,7 @@ define(["core", "utils", "extension-manager", "dropbox-helper"], function(core,
var importPaths = [];
_.each(paths, function(path) {
var syncIndex = createSyncIndex(path);
- var fileDesc = core.fileManager.getFileFromSync(syncIndex);
+ var fileDesc = core.fileManager.getFileFromSyncIndex(syncIndex);
if(fileDesc !== undefined) {
core.showError('"' + fileDesc.title + '" was already imported');
return;
@@ -87,7 +87,7 @@ define(["core", "utils", "extension-manager", "dropbox-helper"], function(core,
}
// Check that file is not synchronized with an other one
var syncIndex = createSyncIndex(path);
- var fileDesc = core.fileManager.getFileFromSync(syncIndex);
+ var fileDesc = core.fileManager.getFileFromSyncIndex(syncIndex);
if(fileDesc !== undefined) {
var existingTitle = fileDesc.title;
core.showError('File path is already synchronized with "' + existingTitle + '"');
@@ -101,7 +101,7 @@ define(["core", "utils", "extension-manager", "dropbox-helper"], function(core,
}
var syncAttributes = createSyncAttributes(result.path, result.versionTag, content);
localStorage[syncAttributes.syncIndex] = utils.serializeAttributes(syncAttributes);
- callback(undefined, syncIndex, syncAttributes);
+ callback(undefined, syncAttributes);
});
}
@@ -168,7 +168,7 @@ define(["core", "utils", "extension-manager", "dropbox-helper"], function(core,
_.each(changes, function(change) {
var syncAttributes = change.syncAttributes;
var syncIndex = syncAttributes.syncIndex;
- var fileDesc = core.fileManager.getFileFromSync(syncIndex);
+ var fileDesc = core.fileManager.getFileFromSyncIndex(syncIndex);
// No file corresponding (file may have been deleted locally)
if(fileDesc === undefined) {
return;
@@ -177,10 +177,10 @@ define(["core", "utils", "extension-manager", "dropbox-helper"], function(core,
// File deleted
if (change.wasRemoved === true) {
core.showError('"' + localTitle + '" has been removed from Dropbox.');
- core.fileManager.removeSync(syncIndex);
+ core.fileManager.removeSync(syncAttributes);
return;
}
- var localContent = localStorage[fileDesc.index + ".content"];
+ var localContent = localStorage[fileDesc.fileIndex + ".content"];
var localContentChanged = syncAttributes.contentCRC != utils.crc32(localContent);
var file = change.stat;
var remoteContentCRC = utils.crc32(file.content);
@@ -194,7 +194,7 @@ define(["core", "utils", "extension-manager", "dropbox-helper"], function(core,
}
// If file content changed
if(fileContentChanged && remoteContentChanged === true) {
- localStorage[fileDesc.index + ".content"] = file.content;
+ localStorage[fileDesc.fileIndex + ".content"] = file.content;
core.showMessage('"' + localTitle + '" has been updated from Dropbox.');
if(core.fileManager.isCurrentFile(fileDesc)) {
updateFileTitles = false; // Done by next function
diff --git a/js/extensions/document-selector.js b/js/extensions/document-selector.js
index 8bfe60b9..5251be0a 100644
--- a/js/extensions/document-selector.js
+++ b/js/extensions/document-selector.js
@@ -36,7 +36,7 @@ define( [ "jquery", "underscore" ], function($) {
$("#file-selector li:not(.stick)").empty();
_.each(sortedDescriptor, function(fileDescToPrint) {
- var a = $("").html(composeTitle(fileDescToPrint.index));
+ var a = $("").html(composeTitle(fileDescToPrint.fileIndex));
var li = $("").append(a);
if (fileDescToPrint === fileDesc) {
li.addClass("disabled");
diff --git a/js/extensions/manage-publication.js b/js/extensions/manage-publication.js
index f56929cf..43b42ba1 100644
--- a/js/extensions/manage-publication.js
+++ b/js/extensions/manage-publication.js
@@ -46,7 +46,7 @@ define( [ "jquery", "underscore" ], function($) {
publishDesc: publishDesc
}));
lineElement.append($(removeButtonTemplate).click(function() {
- fileManager.removePublish(publishIndex);
+ fileManager.removePublish(publishAttributes);
}));
publishList.append(lineElement);
});
diff --git a/js/file-manager.js b/js/file-manager.js
index 9c4581f3..d149a36f 100644
--- a/js/file-manager.js
+++ b/js/file-manager.js
@@ -18,7 +18,7 @@ define([
.reduce(function(fileSystemDescriptor, fileIndex) {
var title = localStorage[fileIndex + ".title"];
var fileDesc = {
- index : fileIndex,
+ fileIndex : fileIndex,
title : title,
syncLocations: {},
publishLocations: {}
@@ -52,8 +52,8 @@ define([
if(fileDesc === undefined) {
localStorage.removeItem("file.current");
}
- else if(fileDesc.index != TEMPORARY_FILE_INDEX) {
- localStorage["file.current"] = fileDesc.index;
+ else if(fileDesc.fileIndex != TEMPORARY_FILE_INDEX) {
+ localStorage["file.current"] = fileDesc.fileIndex;
}
};
@@ -78,7 +78,7 @@ define([
extensionManager.onFileSelected(fileDesc);
// Hide the viewer pencil button
- if(fileDesc.index == TEMPORARY_FILE_INDEX) {
+ if(fileDesc.fileIndex == TEMPORARY_FILE_INDEX) {
$(".action-edit-document").removeClass("hide");
}
else {
@@ -86,7 +86,7 @@ define([
}
// Recreate the editor
- $("#wmd-input").val(localStorage[fileDesc.index + ".content"]);
+ $("#wmd-input").val(localStorage[fileDesc.fileIndex + ".content"]);
core.createEditor(function() {
// Callback to save content when textarea changes
fileManager.saveFile();
@@ -128,7 +128,7 @@ define([
// Create the file descriptor
var fileDesc = {
- index : fileIndex,
+ fileIndex : fileIndex,
title : title,
syncLocations: syncLocations,
publishLocations: {}
@@ -151,17 +151,17 @@ define([
}
// Remove synchronized locations
- _.each(fileDesc.syncLocations, function(syncAttributes, syncIndex) {
- fileManager.removeSync(syncIndex, true);
+ _.each(fileDesc.syncLocations, function(syncAttributes) {
+ fileManager.removeSync(syncAttributes, true);
});
// Remove publish locations
- _.each(fileDesc.publishLocations, function(publishAttributes, publishIndex) {
- fileManager.removePublish(publishIndex);
+ _.each(fileDesc.publishLocations, function(publishAttributes) {
+ fileManager.removePublish(publishAttributes, true);
});
// Remove the index from the file list
- var fileIndex = fileDesc.index;
+ var fileIndex = fileDesc.fileIndex;
localStorage["file.list"] = localStorage["file.list"].replace(";"
+ fileIndex + ";", ";");
localStorage.removeItem(fileIndex + ".title");
@@ -176,29 +176,28 @@ define([
fileManager.saveFile = function() {
var content = $("#wmd-input").val();
var fileDesc = fileManager.getCurrentFile();
- localStorage[fileDesc.index + ".content"] = content;
+ localStorage[fileDesc.fileIndex + ".content"] = content;
extensionManager.onFileChanged(fileDesc);
synchronizer.notifyChange(fileDesc);
};
- // Add a syncIndex (synchronized location) to a file
- fileManager.addSync = function(fileDesc, syncIndex, syncAttributes) {
- localStorage[fileDesc.index + ".sync"] += syncIndex + ";";
- fileDesc.syncLocations[syncIndex] = syncAttributes;
+ // Add a synchronized location to a file
+ fileManager.addSync = function(fileDesc, syncAttributes) {
+ localStorage[fileDesc.fileIndex + ".sync"] += syncAttributes.syncIndex + ";";
+ fileDesc.syncLocations[syncAttributes.syncIndex] = syncAttributes;
// addSync is only used for export, not for import
- extensionManager.onSyncExportSuccess(fileDesc, syncIndex, syncAttributes);
+ extensionManager.onSyncExportSuccess(fileDesc, syncAttributes);
};
- // Remove a syncIndex (synchronized location)
- fileManager.removeSync = function(syncIndex, skipExtensions) {
- var fileDesc = fileManager.getFileFromSync(syncIndex);
+ // Remove a synchronized location
+ fileManager.removeSync = function(syncAttributes, skipExtensions) {
+ var fileDesc = fileManager.getFileFromSyncIndex(syncAttributes.syncIndex);
if(fileDesc !== undefined) {
- localStorage[fileDesc.index + ".sync"] = localStorage[fileDesc.index + ".sync"].replace(";"
- + syncIndex + ";", ";");
+ localStorage[fileDesc.fileIndex + ".sync"] = localStorage[fileDesc.fileIndex + ".sync"].replace(";"
+ + syncAttributes.syncIndex + ";", ";");
}
// Remove sync attributes
- localStorage.removeItem(syncIndex);
- var syncAttributes = fileDesc.syncLocations[syncIndex];
+ localStorage.removeItem(syncAttributes.syncIndex);
fileDesc.syncLocations.removeItem(syncIndex);
if(!skipExtensions) {
extensionManager.onSyncRemoved(fileDesc, syncAttributes);
@@ -206,7 +205,7 @@ define([
};
// Get the file descriptor associated to a syncIndex
- fileManager.getFileFromSync = function(syncIndex) {
+ fileManager.getFileFromSyncIndex = function(syncIndex) {
return _.find(fileSystemDescriptor, function(fileDesc) {
return _.has(fileDesc.syncLocations, syncIndex);
});
@@ -214,7 +213,7 @@ define([
// Get syncAttributes from syncIndex
fileManager.getSyncAttributes = function(syncIndex) {
- var fileDesc = fileManager.getFileFromSync(syncIndex);
+ var fileDesc = fileManager.getFileFromSyncIndex(syncIndex);
return fileDesc && fileDesc.syncLocations[syncIndex];
};
@@ -228,25 +227,24 @@ define([
};
// Add a publishIndex (publish location) to a file
- fileManager.addPublish = function(fileDesc, publishIndex, publishAttributes) {
- localStorage[fileDesc.index + ".publish"] += publishIndex + ";";
- fileDesc.publishLocations[publishIndex] = publishAttributes;
- extensionManager.onNewPublishSuccess(fileDesc, publishIndex, publishAttributes);
+ fileManager.addPublish = function(fileDesc, publishAttributes) {
+ localStorage[fileDesc.fileIndex + ".publish"] += publishAttributes.publishIndex + ";";
+ fileDesc.publishLocations[publishAttributes.publishIndex] = publishAttributes;
+ extensionManager.onNewPublishSuccess(fileDesc, publishAttributes);
};
// Remove a publishIndex (publish location)
- fileManager.removePublish = function(publishIndex, skipExtensions) {
- var fileDesc = fileManager.getFileFromPublish(publishIndex);
+ fileManager.removePublish = function(publishAttributes, skipExtensions) {
+ var fileDesc = fileManager.getFileFromPublish(publishAttributes.publishIndex);
if(fileDesc !== undefined) {
- localStorage[fileDesc.index + ".publish"] = localStorage[fileDesc.index + ".publish"].replace(";"
- + publishIndex + ";", ";");
+ localStorage[fileDesc.fileIndex + ".publish"] = localStorage[fileDesc.fileIndex + ".publish"].replace(";"
+ + publishAttributes.publishIndex + ";", ";");
if(fileManager.isCurrentFile(fileDesc)) {
publisher.notifyPublish();
}
}
// Remove publish attributes
- localStorage.removeItem(publishIndex);
- var publishAttributes = fileDesc.publishLocations[publishIndex];
+ localStorage.removeItem(publishAttributes.publishIndex);
fileDesc.publishLocations.removeItem(publishIndex);
if(!skipExtensions) {
extensionManager.onPublishRemoved(fileDesc, publishAttributes);
@@ -308,7 +306,7 @@ define([
$("#file-title").show();
var title = $.trim(input.val());
var fileDesc = fileManager.getCurrentFile();
- var fileIndexTitle = fileDesc.index + ".title";
+ var fileIndexTitle = fileDesc.fileIndex + ".title";
if (title) {
if (title != localStorage[fileIndexTitle]) {
localStorage[fileIndexTitle] = title;
diff --git a/js/gdrive-provider.js b/js/gdrive-provider.js
index df2b12b5..006d1695 100644
--- a/js/gdrive-provider.js
+++ b/js/gdrive-provider.js
@@ -9,6 +9,10 @@ define(["core", "utils", "extension-manager", "google-helper", "underscore"], fu
exportPreferencesInputIds: ["gdrive-parentid"]
};
+ function createSyncIndex(id) {
+ return "sync." + PROVIDER_GDRIVE + "." + id;
+ }
+
function createSyncAttributes(id, etag, content, title) {
var syncAttributes = {};
syncAttributes.provider = gdriveProvider;
@@ -16,13 +20,10 @@ define(["core", "utils", "extension-manager", "google-helper", "underscore"], fu
syncAttributes.etag = etag;
syncAttributes.contentCRC = utils.crc32(content);
syncAttributes.titleCRC = utils.crc32(title);
+ syncAttributes.syncIndex = createSyncIndex(id);
return syncAttributes;
}
- function createSyncIndex(id) {
- return "sync." + PROVIDER_GDRIVE + "." + id;
- }
-
function importFilesFromIds(ids) {
googleHelper.downloadMetadata(ids, function(error, result) {
if(error) {
@@ -35,10 +36,9 @@ define(["core", "utils", "extension-manager", "google-helper", "underscore"], fu
var fileDescList = [];
_.each(result, function(file) {
var syncAttributes = createSyncAttributes(file.id, file.etag, file.content, file.title);
- var syncIndex = createSyncIndex(syncAttributes.id);
- localStorage[syncIndex] = utils.serializeAttributes(syncAttributes);
+ localStorage[syncAttributes.syncIndex] = utils.serializeAttributes(syncAttributes);
var syncLocations = {};
- syncLocations[syncIndex] = syncAttributes;
+ syncLocations[syncAttributes.syncIndex] = syncAttributes;
var fileDesc = core.fileManager.createFile(file.title, file.content, syncLocations);
core.fileManager.selectFile(fileDesc);
fileDescList.push(fileDesc);
@@ -56,7 +56,7 @@ define(["core", "utils", "extension-manager", "google-helper", "underscore"], fu
var importIds = [];
_.each(ids, function(id) {
var syncIndex = createSyncIndex(id);
- var fileDesc = core.fileManager.getFileFromSync(syncIndex);
+ var fileDesc = core.fileManager.getFileFromSyncIndex(syncIndex);
if(fileDesc !== undefined) {
core.showError('"' + fileDesc.title + '" was already imported');
return;
@@ -75,9 +75,8 @@ define(["core", "utils", "extension-manager", "google-helper", "underscore"], fu
return;
}
var syncAttributes = createSyncAttributes(result.id, result.etag, content, title);
- var syncIndex = createSyncIndex(syncAttributes.id);
- localStorage[syncIndex] = utils.serializeAttributes(syncAttributes);
- callback(undefined, syncIndex, syncAttributes);
+ localStorage[syncAttributes.syncIndex] = utils.serializeAttributes(syncAttributes);
+ callback(undefined, syncAttributes);
});
};
@@ -88,7 +87,7 @@ define(["core", "utils", "extension-manager", "google-helper", "underscore"], fu
}
// Check that file is not synchronized with an other one
var syncIndex = createSyncIndex(id);
- var fileDesc = core.fileManager.getFileFromSync(syncIndex);
+ var fileDesc = core.fileManager.getFileFromSyncIndex(syncIndex);
if(fileDesc !== undefined) {
core.showError('File ID is already synchronized with "' + fileDesc.title + '"');
callback(true);
@@ -100,9 +99,8 @@ define(["core", "utils", "extension-manager", "google-helper", "underscore"], fu
return;
}
var syncAttributes = createSyncAttributes(result.id, result.etag, content, title);
- var syncIndex = createSyncIndex(syncAttributes.id);
- localStorage[syncIndex] = utils.serializeAttributes(syncAttributes);
- callback(undefined, syncIndex, syncAttributes);
+ localStorage[syncAttributes.syncIndex] = utils.serializeAttributes(syncAttributes);
+ callback(undefined, syncAttributes);
});
};
@@ -140,8 +138,8 @@ define(["core", "utils", "extension-manager", "google-helper", "underscore"], fu
if(syncAttributes === undefined) {
return;
}
- // Store syncIndex to avoid 2 times formating
- change.syncIndex = syncIndex;
+ // Store syncAttributes to avoid 2 times searching
+ change.syncAttributes = syncAttributes;
// Delete
if(change.deleted === true) {
interestingChanges.push(change);
@@ -150,8 +148,6 @@ define(["core", "utils", "extension-manager", "google-helper", "underscore"], fu
// Modify
if(syncAttributes.etag != change.file.etag) {
interestingChanges.push(change);
- // Store syncAttributes to avoid 2 times searching
- change.syncAttributes = syncAttributes;
}
});
googleHelper.downloadContent(interestingChanges, function(error, changes) {
@@ -161,8 +157,9 @@ define(["core", "utils", "extension-manager", "google-helper", "underscore"], fu
}
var updateFileTitles = false;
_.each(changes, function(change) {
- var syncIndex = change.syncIndex;
- var fileDesc = core.fileManager.getFileFromSync(syncIndex);
+ var syncAttributes = change.syncAttributes;
+ var syncIndex = syncAttributes.syncIndex;
+ var fileDesc = core.fileManager.getFileFromSyncIndex(syncIndex);
// No file corresponding (file may have been deleted locally)
if(fileDesc === undefined) {
return;
@@ -171,12 +168,11 @@ define(["core", "utils", "extension-manager", "google-helper", "underscore"], fu
// File deleted
if (change.deleted === true) {
core.showError('"' + localTitle + '" has been removed from Google Drive.');
- core.fileManager.removeSync(syncIndex);
+ core.fileManager.removeSync(syncAttributes);
return;
}
- var syncAttributes = change.syncAttributes;
var localTitleChanged = syncAttributes.titleCRC != utils.crc32(localTitle);
- var localContent = localStorage[fileDesc.index + ".content"];
+ var localContent = localStorage[fileDesc.fileIndex + ".content"];
var localContentChanged = syncAttributes.contentCRC != utils.crc32(localContent);
var file = change.file;
var remoteTitleCRC = utils.crc32(file.title);
@@ -194,14 +190,14 @@ define(["core", "utils", "extension-manager", "google-helper", "underscore"], fu
}
// If file title changed
if(fileTitleChanged && remoteTitleChanged === true) {
- localStorage[fileDesc.index + ".title"] = file.title;
+ localStorage[fileDesc.fileIndex + ".title"] = file.title;
fileDesc.title = file.title;
updateFileTitles = true;
core.showMessage('"' + localTitle + '" has been renamed to "' + file.title + '" on Google Drive.');
}
// If file content changed
if(fileContentChanged && remoteContentChanged === true) {
- localStorage[fileDesc.index + ".content"] = file.content;
+ localStorage[fileDesc.fileIndex + ".content"] = file.content;
core.showMessage('"' + file.title + '" has been updated from Google Drive.');
if(core.fileManager.isCurrentFile(fileDesc)) {
updateFileTitles = false; // Done by next function
@@ -264,8 +260,11 @@ define(["core", "utils", "extension-manager", "google-helper", "underscore"], fu
if(error) {
return;
}
- var syncIndex = createSyncAttributes(file.id, file.etag, file.content, file.title);
- var fileDesc = core.fileManager.createFile(file.title, file.content, [syncIndex]);
+ var syncAttributes = createSyncAttributes(file.id, file.etag, file.content, file.title);
+ localStorage[syncAttributes.syncIndex] = utils.serializeAttributes(syncAttributes);
+ var syncLocations = {};
+ syncLocations[syncAttributes.syncIndex] = syncAttributes;
+ var fileDesc = core.fileManager.createFile(file.title, file.content, syncAttributes);
core.fileManager.selectFile(fileDesc);
core.showMessage('"' + file.title + '" created successfully on Google Drive.');
});
@@ -274,7 +273,7 @@ define(["core", "utils", "extension-manager", "google-helper", "underscore"], fu
var importIds = [];
_.each(state.ids, function(id) {
var syncIndex = createSyncIndex(id);
- var fileDesc = core.fileManager.getFileFromSync(syncIndex);
+ var fileDesc = core.fileManager.getFileFromSyncIndex(syncIndex);
if(fileDesc !== undefined) {
core.fileManager.selectFile(fileDesc);
}
diff --git a/js/publisher.js b/js/publisher.js
index 31d940fd..5bb7c266 100644
--- a/js/publisher.js
+++ b/js/publisher.js
@@ -96,8 +96,7 @@ define([
}
// Dequeue a synchronized location
- var publishIndex = publishAttributesList.pop();
- var publishAttributes = JSON.parse(localStorage[publishIndex]);
+ var publishAttributes = publishAttributesList.pop();
var content = getPublishContent(publishAttributes);
// Call the provider
@@ -106,7 +105,7 @@ define([
if(error !== undefined) {
var errorMsg = error.toString();
if(errorMsg.indexOf("|removePublish") !== -1) {
- core.fileManager.removePublish(publishIndex);
+ core.fileManager.removePublish(publishAttributes);
}
if(errorMsg.indexOf("|stopPublish") !== -1) {
callback(error);
@@ -144,8 +143,9 @@ define([
do {
publishIndex = "publish." + utils.randomString();
} while(_.has(localStorage, publishIndex));
+ publishAttributes.publishIndex = publishIndex;
localStorage[publishIndex] = JSON.stringify(publishAttributes);
- core.fileManager.addPublish(fileDesc, publishIndex, publishAttributes);
+ core.fileManager.addPublish(fileDesc, publishAttributes);
}
// Initialize the "New publication" dialog
@@ -210,7 +210,7 @@ define([
// Retrieve file's publish locations from localStorage
publisher.populatePublishLocations = function(fileDesc) {
- _.chain(localStorage[fileDesc.index + ".publish"].split(";"))
+ _.chain(localStorage[fileDesc.fileIndex + ".publish"].split(";"))
.compact()
.each(function(publishIndex) {
var publishAttributes = JSON.parse(localStorage[publishIndex]);
diff --git a/js/synchronizer.js b/js/synchronizer.js
index 998cc96f..9de3f6a6 100644
--- a/js/synchronizer.js
+++ b/js/synchronizer.js
@@ -108,7 +108,7 @@ define([
}
// Get document title/content
- uploadContent = localStorage[fileDesc.index + ".content"];
+ uploadContent = localStorage[fileDesc.fileIndex + ".content"];
uploadContentCRC = utils.crc32(uploadContent);
uploadTitle = fileDesc.title;
uploadTitleCRC = utils.crc32(uploadTitle);
@@ -202,7 +202,7 @@ define([
// Retrieve file's sync locations from localStorage
publisher.populateSyncLocations = function(fileDesc) {
- _.chain(localStorage[fileDesc.index + ".sync"].split(";"))
+ _.chain(localStorage[fileDesc.fileIndex + ".sync"].split(";"))
.compact()
.each(function(syncIndex) {
var syncAttributes = JSON.parse(localStorage[syncIndex]);
@@ -249,12 +249,12 @@ define([
// Perform the provider's export
var fileDesc = core.fileManager.getCurrentFile();
var title = fileDesc.title;
- var content = localStorage[fileDesc.index + ".content"];
- provider.exportFile(event, title, content, function(error, syncIndex, syncAttributes) {
+ var content = localStorage[fileDesc.fileIndex + ".content"];
+ provider.exportFile(event, title, content, function(error, syncAttributes) {
if(error) {
return;
}
- core.fileManager.addSync(fileDesc, syncIndex, syncAttributes);
+ core.fileManager.addSync(fileDesc, syncAttributes);
});
// Store input values as preferences for next time we open the export dialog
@@ -268,12 +268,12 @@ define([
$(".action-sync-manual-" + provider.providerId).click(function(event) {
var fileDesc = core.fileManager.getCurrentFile();
var title = fileDesc.title;
- var content = localStorage[fileDesc.index + ".content"];
- provider.exportManual(event, title, content, function(error, syncIndex, syncAttributes) {
+ var content = localStorage[fileDesc.fileIndex + ".content"];
+ provider.exportManual(event, title, content, function(error, syncAttributes) {
if(error) {
return;
}
- core.fileManager.addSync(fileDesc, syncIndex, syncAttributes);
+ core.fileManager.addSync(fileDesc, syncAttributes);
});
});
});