/usr/share/xul-ext/google-tasks-sync/chrome/content/fileio_bridge.js is in xul-ext-google-tasks-sync 0.5.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | /*
Google Tasks sync for Mozilla Thunderbird
*/
//hardcoded to overwrite data.json in <profile dir>/google_tasks_sync/ with dataToWrite
gt_tasks_sync.writeToFile = function(dataToWrite, successCallback)
{
var file = FileUtils.getFile("ProfD", ["google_tasks_sync", "data.json"]);
file = gt_tasks_sync.FileIO.open(file.path);
if(!file) {
gt_tasks_sync.handleReturnedError("Unable to open file data.json for writing");
return;
}
var success = gt_tasks_sync.FileIO.write(file,dataToWrite,'w',"UTF-8");
if(!success) {
gt_tasks_sync.handleReturnedError("Error while writing to file data.json");
return;
}
if(successCallback)
successCallback();
}
//writes the gt_tasks_sync.queuedMoves "global var" to disk
gt_tasks_sync.saveQueuedMoves = function(successCallback) {
var file = FileUtils.getFile("ProfD", ["google_tasks_sync", "queuedMoves.json"]);
file = gt_tasks_sync.FileIO.open(file.path);
if(!file) {
gt_tasks_sync.handleReturnedError("Unable to open file queuedMoves.json for writing");
return;
}
var dataToWrite = JSON.stringify(gt_tasks_sync.queuedMoves);
var success = gt_tasks_sync.FileIO.write(file,dataToWrite,'w',"UTF-8");
if(!success) {
gt_tasks_sync.handleReturnedError("Error while writing to file queuedMoves.json");
return;
}
if(successCallback)
successCallback();
}
//hardcoded to read everything from data.json in <profile dir>/google_tasks_sync/
//also reads queued moves from queuedMoves.json
gt_tasks_sync.readFromFile = function(successCallback)
{
//data.json
var file = FileUtils.getFile("ProfD", ["google_tasks_sync", "data.json"]);
file = gt_tasks_sync.FileIO.open(file.path);
if(!file) {
gt_tasks_sync.handleReturnedError("Unable to open file data.json for reading");
return;
}
var localData = gt_tasks_sync.FileIO.read(file, "UTF-8");
//queuedMoves.json - not passed to callback, instead loaded directly into a global var
//TODO: make all file I/O functions work directly with global vars and not pass data as arguments
var file = FileUtils.getFile("ProfD", ["google_tasks_sync", "queuedMoves.json"]);
file = gt_tasks_sync.FileIO.open(file.path);
if(!file) {
gt_tasks_sync.handleReturnedError("Unable to open file queuedMoves.json for reading");
return;
}
var parseThis = gt_tasks_sync.FileIO.read(file, "UTF-8");
try {
gt_tasks_sync.queuedMoves = JSON.parse(parseThis);
} catch(e) {
gt_tasks_sync.queuedMoves = new Object();
}
successCallback(localData);
}
//create backup by copying data.json
gt_tasks_sync.createBackup = function(callback)
{
var backupDir = FileUtils.getDir("ProfD", ["google_tasks_sync", "backup"]);
var backupDirContents = backupDir.directoryEntries;
var oldestFile;
var fileCount = 0;
while(backupDirContents.hasMoreElements()) { //TODO: some error handling here might be a good idea
var currentFile = backupDirContents.getNext().QueryInterface(Components.interfaces.nsIFile);
fileCount++;
if(!oldestFile)
oldestFile = currentFile;
else if (oldestFile.lastModifiedTime > currentFile.lastModifiedTime)
oldestFile = currentFile;
}
if(fileCount >= 10)
oldestFile.remove(0); //if there are too many backups, axe the oldest one
//copy data.json to create a new backup file
var processedPath = FileUtils.getFile("ProfD", ["google_tasks_sync", "data.json"]).path;
var currentDataFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
currentDataFile.initWithPath(processedPath);
var newFilename = new Date().toISOString();
newFilename = newFilename.replace(new RegExp(/:/g), "-") + ".json";
currentDataFile.copyTo(backupDir, newFilename);
callback();
}
gt_tasks_sync.ensureFilesExist = function() {
var backupDir = FileUtils.getDir("ProfD", ["google_tasks_sync", "backup"]);
if(!backupDir.exists()) {
backupDir.create(1, 0775); //create a directory, will create parent dirs as needed
}
var file = FileUtils.getFile("ProfD", ["google_tasks_sync", "data.json"]);
if(!file.exists()) {
file.create(0, 0664); //create a file
}
var file = FileUtils.getFile("ProfD", ["google_tasks_sync", "queuedMoves.json"]);
if(!file.exists()) {
file.create(0, 0664);
}
}
|