Abstracted the DB layer for use by Zotero utilities
All the former Zotero.DB methods are now part of an instantiable Zotero.DBConnection object, and Zotero.DB is just one instance of it. Utilities can create and access a new SQLite database within the Zotero data folder by instantiating the DBConnection object: this.DB = new Zotero.DBConnection('myutility'); Utilities have access to everything the DB layer provides, including automatic backup and restore of databases. Utility writers are on their own for schema management, at least for now. Also: - Cleared non-English DB restore localized strings after change. - Disabled shutdown observer in Zotero object after moving DB backup code to DB layer
This commit is contained in:
parent
f35f9f4827
commit
49b0f28f26
File diff suppressed because it is too large
Load Diff
|
@ -22,7 +22,6 @@
|
|||
|
||||
const ZOTERO_CONFIG = {
|
||||
GUID: 'zotero@chnm.gmu.edu',
|
||||
DB_FILE: 'zotero.sqlite',
|
||||
DB_REBUILD: false, // erase DB and recreate from schema
|
||||
REPOSITORY_URL: 'http://www.zotero.org/repo',
|
||||
REPOSITORY_CHECK_INTERVAL: 86400, // 24 hours
|
||||
|
@ -36,17 +35,16 @@ var Zotero = new function(){
|
|||
var _initialized = false;
|
||||
var _debugLogging;
|
||||
var _debugLevel;
|
||||
var _shutdown = false;
|
||||
//var _shutdown = false;
|
||||
var _localizedStringBundle;
|
||||
|
||||
// Privileged (public) methods
|
||||
this.init = init;
|
||||
this.shutdown = shutdown;
|
||||
//this.shutdown = shutdown;
|
||||
this.getProfileDirectory = getProfileDirectory;
|
||||
this.getZoteroDirectory = getZoteroDirectory;
|
||||
this.getStorageDirectory = getStorageDirectory;
|
||||
this.getZoteroDatabase = getZoteroDatabase;
|
||||
this.backupDatabase = backupDatabase;
|
||||
this.debug = debug;
|
||||
this.varDump = varDump;
|
||||
this.safeDebug = safeDebug;
|
||||
|
@ -77,6 +75,7 @@ var Zotero = new function(){
|
|||
}
|
||||
|
||||
// Register shutdown handler to call Zotero.shutdown()
|
||||
/*
|
||||
var observerService = Components.classes["@mozilla.org/observer-service;1"]
|
||||
.getService(Components.interfaces.nsIObserverService);
|
||||
observerService.addObserver({
|
||||
|
@ -84,6 +83,7 @@ var Zotero = new function(){
|
|||
Zotero.shutdown(subject, topic, data)
|
||||
}
|
||||
}, "xpcom-shutdown", false);
|
||||
*/
|
||||
|
||||
// Load in the preferences branch for the extension
|
||||
Zotero.Prefs.init();
|
||||
|
@ -143,24 +143,15 @@ var Zotero = new function(){
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
function shutdown(subject, topic, data){
|
||||
// Called twice otherwise, for some reason
|
||||
if (_shutdown){
|
||||
return false;
|
||||
}
|
||||
|
||||
var level = Zotero.DB.commitAllTransactions();
|
||||
if (level){
|
||||
level = level===true ? '0' : level;
|
||||
Zotero.debug("A transaction was still open! (level " + level + ")", 2);
|
||||
}
|
||||
|
||||
_shutdown = true;
|
||||
|
||||
Zotero.backupDatabase();
|
||||
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
function getProfileDirectory(){
|
||||
|
@ -193,66 +184,16 @@ var Zotero = new function(){
|
|||
return file;
|
||||
}
|
||||
|
||||
function getZoteroDatabase(ext){
|
||||
function getZoteroDatabase(name, ext){
|
||||
name = name ? name + '.sqlite' : 'zotero.sqlite';
|
||||
ext = ext ? '.' + ext : '';
|
||||
|
||||
var file = Zotero.getZoteroDirectory();
|
||||
file.append(ZOTERO_CONFIG['DB_FILE'] + ext);
|
||||
file.append(name + ext);
|
||||
return file;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Back up the main database file
|
||||
*/
|
||||
function backupDatabase(){
|
||||
if (Zotero.DB.transactionInProgress()){
|
||||
Zotero.debug('Transaction in progress--skipping DB backup', 2);
|
||||
return false;
|
||||
}
|
||||
|
||||
Zotero.debug('Backing up database');
|
||||
|
||||
var file = Zotero.getZoteroDatabase();
|
||||
var backupFile = Zotero.getZoteroDatabase('bak');
|
||||
|
||||
// Copy via a temporary file so we don't run into disk space issues
|
||||
// after deleting the old backup file
|
||||
var tmpFile = Zotero.getZoteroDatabase('tmp');
|
||||
if (tmpFile.exists()){
|
||||
tmpFile.remove(null);
|
||||
}
|
||||
|
||||
try {
|
||||
file.copyTo(file.parent, tmpFile.leafName);
|
||||
}
|
||||
catch (e){
|
||||
// TODO: deal with low disk space
|
||||
throw (e);
|
||||
}
|
||||
|
||||
try {
|
||||
var store = Components.classes["@mozilla.org/storage/service;1"].
|
||||
getService(Components.interfaces.mozIStorageService);
|
||||
|
||||
var connection = store.openDatabase(tmpFile);
|
||||
}
|
||||
catch (e){
|
||||
Zotero.debug("Database file is corrupt--skipping backup");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Remove old backup file
|
||||
if (backupFile.exists()){
|
||||
backupFile.remove(null);
|
||||
}
|
||||
|
||||
tmpFile.moveTo(tmpFile.parent, backupFile.leafName);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Debug logging function
|
||||
*
|
||||
|
|
|
@ -217,10 +217,6 @@ ingester.scrapeComplete=Artikel gespeichert.
|
|||
ingester.scrapeError=Artikel konnte nicht gespeichert werden.
|
||||
ingester.scrapeErrorDescription=Ein Fehler ist aufgetreten bei dem Versuch, diesen Artikel zu speichern. Wenn dieser Fehler weiterhin auftritt, kontaktieren Sie bitte den Autor des Übersetzers.
|
||||
|
||||
db.dbCorruptedNoBackup=Die Zotero-Datenbank wurde offensichtlich beschädigt und es gibt kein automatisches Backup.\n\nEine neue Datenbank wurde erstellt. Die beschädigte Datei bleibt im Zotero-Ordner gespeichert.
|
||||
db.dbRestored=Die Zotero-Datenbank wurde offensichtlich beschädigt.\n\nDie Daten wurde aus dem letztigen automatischen Backup vom %1$S um %2$S wiederhergestellt. Die beschädigte Datei bleibt im Zotero-Ordner gespeichert.
|
||||
db.dbRestoreFailed=Die Zotero-Datenbank wurde offensichtlich beschädigt, und der Versuch, die Daten aus dem letztigen automatischen Backup wiederherzustellen, hat nicht funktioniert.\n\nEine neue Datenbank wurde erstellt. Die beschädigte Datei bleibt im Zotero-Ordner gespeichert.
|
||||
|
||||
zotero.preferences.update.updated=Updated
|
||||
zotero.preferences.update.upToDate=Up to date
|
||||
zotero.preferences.update.error=Error
|
||||
|
|
|
@ -217,10 +217,6 @@ ingester.scrapeComplete=Artikel gespeichert.
|
|||
ingester.scrapeError=Artikel konnte nicht gespeichert werden.
|
||||
ingester.scrapeErrorDescription=Ein Fehler ist aufgetreten bei dem Versuch, diesen Artikel zu speichern. Wenn dieser Fehler weiterhin auftritt, kontaktieren Sie bitte den Autor des Übersetzers.
|
||||
|
||||
db.dbCorruptedNoBackup=Die Zotero-Datenbank wurde offensichtlich beschädigt und es gibt kein automatisches Backup.\n\nEine neue Datenbank wurde erstellt. Die beschädigte Datei bleibt im Zotero-Ordner gespeichert.
|
||||
db.dbRestored=Die Zotero-Datenbank wurde offensichtlich beschädigt.\n\nDie Daten wurde aus dem letztigen automatischen Backup vom %1$S um %2$S wiederhergestellt. Die beschädigte Datei bleibt im Zotero-Ordner gespeichert.
|
||||
db.dbRestoreFailed=Die Zotero-Datenbank wurde offensichtlich beschädigt, und der Versuch, die Daten aus dem letztigen automatischen Backup wiederherzustellen, hat nicht funktioniert.\n\nEine neue Datenbank wurde erstellt. Die beschädigte Datei bleibt im Zotero-Ordner gespeichert.
|
||||
|
||||
zotero.preferences.update.updated=Updated
|
||||
zotero.preferences.update.upToDate=Up to date
|
||||
zotero.preferences.update.error=Error
|
||||
|
|
|
@ -217,10 +217,6 @@ ingester.scrapeComplete=Artikel gespeichert.
|
|||
ingester.scrapeError=Artikel konnte nicht gespeichert werden.
|
||||
ingester.scrapeErrorDescription=Ein Fehler ist aufgetreten bei dem Versuch, diesen Artikel zu speichern. Wenn dieser Fehler weiterhin auftritt, kontaktieren Sie bitte den Autor des Übersetzers.
|
||||
|
||||
db.dbCorruptedNoBackup=Die Zotero-Datenbank wurde offensichtlich beschädigt und es gibt kein automatisches Backup.\n\nEine neue Datenbank wurde erstellt. Die beschädigte Datei bleibt im Zotero-Ordner gespeichert.
|
||||
db.dbRestored=Die Zotero-Datenbank wurde offensichtlich beschädigt.\n\nDie Daten wurde aus dem letztigen automatischen Backup vom %1$S um %2$S wiederhergestellt. Die beschädigte Datei bleibt im Zotero-Ordner gespeichert.
|
||||
db.dbRestoreFailed=Die Zotero-Datenbank wurde offensichtlich beschädigt, und der Versuch, die Daten aus dem letztigen automatischen Backup wiederherzustellen, hat nicht funktioniert.\n\nEine neue Datenbank wurde erstellt. Die beschädigte Datei bleibt im Zotero-Ordner gespeichert.
|
||||
|
||||
zotero.preferences.update.updated=Updated
|
||||
zotero.preferences.update.upToDate=Up to date
|
||||
zotero.preferences.update.error=Error
|
||||
|
|
|
@ -226,9 +226,9 @@ ingester.scrapeComplete = Item Saved.
|
|||
ingester.scrapeError = Could Not Save Item.
|
||||
ingester.scrapeErrorDescription = An error occurred while saving this item. Please try again. If this error persists, contact the translator author.
|
||||
|
||||
db.dbCorruptedNoBackup = The Zotero database appears to have become corrupted, and no automatic backup is available.\n\nA new database file has been created. The damaged file was saved in your Zotero directory.
|
||||
db.dbRestored = The Zotero database appears to have become corrupted.\n\nYour data was restored from the last automatic backup made on %1$S at %2$S. The damaged file was saved in your Zotero directory.
|
||||
db.dbRestoreFailed = The Zotero database appears to have become corrupted, and an attempt to restore from the last automatic backup failed.\n\nA new database file has been created. The damaged file was saved in your Zotero directory.
|
||||
db.dbCorruptedNoBackup = The Zotero database '%S' appears to have become corrupted, and no automatic backup is available.\n\nA new database file has been created. The damaged file was saved in your Zotero directory.
|
||||
db.dbRestored = The Zotero database '%1$S' appears to have become corrupted.\n\nYour data was restored from the last automatic backup made on %2$S at %3$S. The damaged file was saved in your Zotero directory.
|
||||
db.dbRestoreFailed = The Zotero database '%S' appears to have become corrupted, and an attempt to restore from the last automatic backup failed.\n\nA new database file has been created. The damaged file was saved in your Zotero directory.
|
||||
|
||||
zotero.preferences.update.updated = Updated
|
||||
zotero.preferences.update.upToDate = Up to date
|
||||
|
|
|
@ -217,10 +217,6 @@ ingester.scrapeComplete=Élément enregistré.
|
|||
ingester.scrapeError=Échec de l'enregistrement.
|
||||
ingester.scrapeErrorDescription=Une erreur s'est produite lors de l'enregistrement de cet élément. Veuillez réessayer. Si cette erreur persiste, contactez l'auteur du collecteur de données.
|
||||
|
||||
db.dbCorruptedNoBackup=La base de données Zotero semble avoir été corrompue et aucune sauvegarde automatique n'est disponible.\n\nUn nouveau fichier de base de données a été créé. Le fichier endommagé a été enregistré dans le dossier Zotero.
|
||||
db.dbRestored=La base de données Zotero semble avoir été corrompue.\n\nVos données ont été rétablies à partir de la dernière sauvegarde automatique faite le %1$S à %2$S. Le fichier endommagé a été enregistré dans le dossier Zotero.
|
||||
db.dbRestoreFailed=La base de données Zotero semble avoir été corrompue et une tentative de rétablissement à partir de la dernière sauvegarde automatique a échoué.\n\nUn nouveau fichier de base de données a été créé. Le fichier endommagé a été enregistré dans le dossier Zotero.
|
||||
|
||||
zotero.preferences.update.updated=Updated
|
||||
zotero.preferences.update.upToDate=Up to date
|
||||
zotero.preferences.update.error=Error
|
||||
|
|
|
@ -217,10 +217,6 @@ ingester.scrapeComplete=Elemento salvato
|
|||
ingester.scrapeError=Impossibile salvare elemento
|
||||
ingester.scrapeErrorDescription=Si è verificato un errore durante il salvataggio dell'elemento. Provare nuovamente. Se l'errore persiste, contattare l'autore del motore di ricerca.
|
||||
|
||||
db.dbCorruptedNoBackup=Il database di Zotero risulta essere corrotto e nessun backup risulta essere disponibile. \n\nÈ stato creato un nuovo database. Il file danneggiato è stato salvato all'interno della cartella di Zotero.
|
||||
db.dbRestored=Il database di Zotero risulta essere corrotto. \n\nI dati sono stati ripristinati dall'ultimo backup automatico eseguito il %1$S alle %2$S. Il file danneggiato è stato salvato all'interno della cartella di Zotero.
|
||||
db.dbRestoreFailed=Il database di Zotero risulta essere corrotto e il tentativo di ripristinare l'ultimo backup automatico ha dato esito negativo. \n\nÈ stato creato un nuovo database. Il file danneggiato è stato salvato all'interno della cartella di Zotero.
|
||||
|
||||
zotero.preferences.update.updated=Updated
|
||||
zotero.preferences.update.upToDate=Up to date
|
||||
zotero.preferences.update.error=Error
|
||||
|
|
|
@ -217,10 +217,6 @@ ingester.scrapeComplete=アイテムを保存しました。
|
|||
ingester.scrapeError=アイテムを保存できませんでした。
|
||||
ingester.scrapeErrorDescription=アイテムの保存中にエラーが発生しました。もう一度試してください。それでもエラーが発生する場合、スクレーパの作成者までご連絡ください。
|
||||
|
||||
db.dbCorruptedNoBackup=Zoteroのデータベースが破損しているようですが、自動バックアップはありません。\n\n新規データベース・ファイルが作成されました。破損されたファイルをZoteroフォルダに保存しました。
|
||||
db.dbRestored=Zoteroのデータベースが破損しているようです。\n\nデータは最終の自動バックアップ(%1$S %2$S)から復元されました。破損されたファイルをZoteroフォルダに保存しました。
|
||||
db.dbRestoreFailed=Zoteroのデータベースが破損しているようですが、データを最終の自動バックアップから復元できませんでした。\n\n新規データベース・ファイルが作成されました。破損されたファイルをZoteroフォルダに保存しました。
|
||||
|
||||
zotero.preferences.update.updated=Updated
|
||||
zotero.preferences.update.upToDate=Up to date
|
||||
zotero.preferences.update.error=Error
|
||||
|
|
|
@ -217,10 +217,6 @@ ingester.scrapeComplete=항목 저장됨.
|
|||
ingester.scrapeError=항목을 저장할 수 없습니다.
|
||||
ingester.scrapeErrorDescription=항목 저장중 오류가 발생했습니다. 다시 시도해 주세요. 오류가 지족적으로 발생하는 경우, 작성자에게 연락해 주십시오.
|
||||
|
||||
db.dbCorruptedNoBackup=Zotero의 데이타베이스가 훼손되어 있는 것으로 보이며, 자동 백업본이 존재하지 않습니다. \n\n신규 데이타베이스·파일이 생성되었습니다. 파손된 파일을 Zotero 폴더에 저장했습니다.
|
||||
db.dbRestored=Zotero의 데이타베이스가 훼손되어 있는 것으로 보입니다. \n\n데이터는 최종 자동 백업(%1$S %2$S)으로부터 복원되었습니다. 파손된 파일을 Zotero 폴더에 저장했습니다.
|
||||
db.dbRestoreFailed=Zotero의 데이타베이스가 훼손되어 있는 것으로 보이며, 최종 자동 백업으로부터 복원에 실패했습니다. \n\n신규 데이타베이스 파일이 생성되었습니다. 파손된 파일을 Zotero 폴더에 저장했습니다.
|
||||
|
||||
zotero.preferences.update.updated=Updated
|
||||
zotero.preferences.update.upToDate=Up to date
|
||||
zotero.preferences.update.error=Error
|
||||
|
|
|
@ -217,10 +217,6 @@ ingester.scrapeComplete=Element lagret.
|
|||
ingester.scrapeError=Kunne ikke lagre element.
|
||||
ingester.scrapeErrorDescription=En feil oppsto mens dette elementet ble forsøkt lagret. Vennligst prøv igjen. Vennligst kontakt forfatteren av oversetteren dersom denne feilen vedvarer.
|
||||
|
||||
db.dbCorruptedNoBackup=Zotero-databasen synes å ha blitt korrupt, og ingen automatisk backup er tilgjengelig.\n\nEn ny database har blitt skapt. Den skadde filen ble lagret i Zotero-mappen.
|
||||
db.dbRestored=Zotero-databasen synes å ha blitt korrupt.\n\nDataene dine ble gjenopprettet fra den siste automatiske backupfilen, skapt %1$S den %2$S. Den skadde filen ble lagret i Zotero-mappen.
|
||||
db.dbRestoreFailed=Zotero-databasen synes å ha blitt korrupt, og et forsøk på å gjenopprette fra sist backup feilet.\n\nEn ny database har blitt skapt. Den skadde filen ble lagret i Zotero-mappen.
|
||||
|
||||
zotero.preferences.update.updated=Updated
|
||||
zotero.preferences.update.upToDate=Up to date
|
||||
zotero.preferences.update.error=Error
|
||||
|
|
|
@ -217,10 +217,6 @@ ingester.scrapeComplete=Item Opgeslagen.
|
|||
ingester.scrapeError=Dit Item Kon Niet Opgeslagen Worden.
|
||||
ingester.scrapeErrorDescription=Er trad een fout op bij het opslagen van dit item. Probeer nogmaals. Indien deze fout zich nog voordoet, contacteer dan auteur van de site-vertaler.
|
||||
|
||||
db.dbCorruptedNoBackup=De Zotero gegevensbank blijkt corrupt, en er is geen automatische backup beschikbaar. Er werd een nieuwe gevevensbank aangemaakt. Het beschadigde bestand werd opgeslagen in je Zotero map.
|
||||
db.dbRestored=De Zotero gegevensbank blijkt corrupt.\n\nJe data werden hersteld sinds de laatste automatische backup, aangemaakt op %1$S om %2$S. Het beschadigde bestand werd opgeslagen in je Zotero map.
|
||||
db.dbRestoreFailed=De Zotero gegevensbank blijkt corrupt, en een poging om te herstellen sinds de laatste automatische backup mislukte. Er werd een nieuwe gegevensbank aangemaakt. Het beschadigde bestand werd opgeslagen in je Zotero map.
|
||||
|
||||
zotero.preferences.update.updated=Updated
|
||||
zotero.preferences.update.upToDate=Up to date
|
||||
zotero.preferences.update.error=Error
|
||||
|
|
|
@ -217,10 +217,6 @@ ingester.scrapeComplete=Ставка сачувана.
|
|||
ingester.scrapeError=Ставка није могле бити сачувана.
|
||||
ingester.scrapeErrorDescription=Грешка је начињена током сачувавања ставке. Покушајте поново. Ако грешка остане, контактирајте аутора „преводиоца странице“.
|
||||
|
||||
db.dbCorruptedNoBackup=Зотеро датабаза се игледа оштетила, а нема ни једне самонаправљене резервне копије. \n\nНова датотека датабазе је направљена. Остећена дадотека је сачувана у вашем Зотеро директоријуму.
|
||||
db.dbRestored=Зотеро дата база се изгледа оштетила.\n\nВаши подаци су обновљени из задње резервне копије самонаправљене %1$S у %2$S. Оштећена датотека је сачувана у вашем Зотеро директоријуму.
|
||||
db.dbRestoreFailed=Зотеро датабаза се игледа оштетила, а покушај да се подаци обнове из задње сачуване резервне копије није успео. \n\nНова датотека датабазе је направљена. Остећена дадотека је сачувана у вашем Зотеро директоријуму.
|
||||
|
||||
zotero.preferences.update.updated=Updated
|
||||
zotero.preferences.update.upToDate=Up to date
|
||||
zotero.preferences.update.error=Error
|
||||
|
|
|
@ -217,10 +217,6 @@ ingester.scrapeComplete=条目已保存.
|
|||
ingester.scrapeError=无法保存条目.
|
||||
ingester.scrapeErrorDescription=保存条目时发生错误. 请重试. 如果错误依旧, 请联系转换器作者.
|
||||
|
||||
db.dbCorruptedNoBackup=Zotero 数据库似乎已损坏, 而且无可用的自动备份.\n\n已建立一新的数据库. 损坏的文件已保存到您的 Zotero 目录中.
|
||||
db.dbRestored=Zotero 数据库似乎已损坏.\n\n您的数据已经从最新的自动备份里恢复, 所使用的备份建立于%1$S 位于 %2$S. 损坏的文件已保存到您的 Zotero 目录中.
|
||||
db.dbRestoreFailed=Zotero 数据库似乎已损坏. 试图从最新的自动备份里恢复时失败. \n\n已创建一新的数据库. 损坏的文件已保存到您的 Zotero 目录中.
|
||||
|
||||
zotero.preferences.update.updated=Updated
|
||||
zotero.preferences.update.upToDate=Up to date
|
||||
zotero.preferences.update.error=Error
|
||||
|
|
Loading…
Reference in New Issue
Block a user