commit 62fa86af8217edadea3c1c3d7068c97deca43d40
parent d2421825c96acbc6bc325bc75f35350d425a18d6
Author: Dan Stillman <dstillman@zotero.org>
Date: Wed, 12 Jul 2017 01:16:25 -0400
Fix error on account unlink, and delete more files
Delete everything from data directory except for PDF tools
Diffstat:
1 file changed, 53 insertions(+), 12 deletions(-)
diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js
@@ -470,31 +470,72 @@ Services.scriptloader.loadSubScript("resource://zotero/polyfill.js");
if (result.some(r => r)) {
[Zotero.restoreFromServer, Zotero.resetDataDir] = result;
try {
+ yield Zotero.DB.closeDatabase();
+
// TODO: better error handling
// TODO: prompt for location
// TODO: Back up database
+ // TODO: Reset translators and styles
- var dbfile = Zotero.DataDirectory.getDatabase();
- yield OS.File.remove(dbfile, {ignoreAbsent: true});
if (Zotero.restoreFromServer) {
+ let dbfile = Zotero.DataDirectory.getDatabase();
+ Zotero.debug("Deleting " + dbfile);
+ yield OS.File.remove(dbfile, { ignoreAbsent: true });
+ let storageDir = OS.Path.join(dataDir, 'storage');
+ Zotero.debug("Deleting " + storageDir.path);
+ OS.File.removeDir(storageDir, { ignoreAbsent: true }),
yield OS.File.remove(restoreFile);
Zotero.restoreFromServer = true;
- } else if (Zotero.resetDataDir) {
+ }
+ else if (Zotero.resetDataDir) {
Zotero.initAutoSync = true;
- var storageDir = OS.Path.join(dataDir, 'storage');
- yield Zotero.Promise.all([
- OS.File.removeDir(storageDir, {ignoreAbsent: true}),
- OS.File.remove(resetDataDirFile)
- ]);
+
+ // Clear some user prefs
+ [
+ 'sync.server.username',
+ 'sync.storage.username'
+ ].forEach(p => Zotero.Prefs.clear(p));
+
+ // Clear data directory
+ Zotero.debug("Deleting data directory files");
+ let lastError;
+ // Delete all files in directory rather than removing directory, in case it's
+ // a symlink
+ yield Zotero.File.iterateDirectory(dataDir, function* (iterator) {
+ while (true) {
+ let entry = yield iterator.next();
+ // Don't delete some files
+ if (entry.name == 'pipes'
+ || entry.name.startsWith(Zotero.Fulltext.pdfInfoName)
+ || entry.name.startsWith(Zotero.Fulltext.pdfConverterName)) {
+ continue;
+ }
+ Zotero.debug("Deleting " + entry.path);
+ try {
+ if (entry.isDir) {
+ yield OS.File.removeDir(entry.path);
+ }
+ else {
+ yield OS.File.remove(entry.path);
+ }
+ }
+ // Keep trying to delete as much as we can
+ catch (e) {
+ lastError = e;
+ Zotero.logError(e);
+ }
+ }
+ });
+ if (lastError) {
+ throw lastError;
+ }
}
+ Zotero.debug("Done with reset");
- // Recreate database with no quick start guide
- Zotero.Schema.skipDefaultData = true;
- yield Zotero.Schema.updateSchema();
-
+ if (!(yield _initDB())) return false;
}
catch (e) {
// Restore from backup?