www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit 0b83c8c166598911a9c8e2ba9460a940b1680ffb
parent 9dad2c60482f6c9b845273cedcb585a33a1d0fa7
Author: Dan Stillman <dstillman@zotero.org>
Date:   Tue, 13 Jul 2010 18:33:47 +0000

Auto-empty trash items older than 30 days by default

- Warning needed on upgrade about this
- Controlled by trashAutoEmptyDays hidden pref, with 0 disabling the functionality


Diffstat:
Mchrome/content/zotero/overlay.js | 9+++++++++
Mchrome/content/zotero/xpcom/data/items.js | 15+++++++++++----
Mchrome/content/zotero/xpcom/schema.js | 5+++++
Mdefaults/preferences/zotero.js | 1+
Muserdata.sql | 3++-
5 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/chrome/content/zotero/overlay.js b/chrome/content/zotero/overlay.js @@ -417,6 +417,15 @@ var ZoteroPane = new function() // Focus the quicksearch on pane open setTimeout("document.getElementById('zotero-tb-search').inputField.select();", 1); + // Auto-empty trashed items older than a certain number of days + var days = Zotero.Prefs.get('trashAutoEmptyDays'); + if (days) { + var d = new Date(); + var deleted = Zotero.Items.emptyTrash(days); + var d2 = new Date(); + Zotero.debug("Emptied old items from trash in " + (d2 - d) + " ms"); + } + var d = new Date(); Zotero.purgeDataObjects(); var d2 = new Date(); diff --git a/chrome/content/zotero/xpcom/data/items.js b/chrome/content/zotero/xpcom/data/items.js @@ -130,8 +130,11 @@ Zotero.Items = new function() { * Zotero.Item objects * @return {Zotero.Item[]|Integer[]} */ - this.getDeleted = function (asIDs) { + this.getDeleted = function (asIDs, days) { var sql = "SELECT itemID FROM deletedItems"; + if (days) { + sql += " WHERE dateDeleted<=DATE('NOW', '-" + parseInt(days) + " DAYS')"; + } var ids = Zotero.DB.columnQuery(sql); if (asIDs) { return ids; @@ -397,14 +400,18 @@ Zotero.Items = new function() { } - this.emptyTrash = function () { + /** + * @param {Integer} days Only delete items deleted more than this many days ago + */ + this.emptyTrash = function (days) { Zotero.DB.beginTransaction(); - var deletedIDs = this.getDeleted(true); + var deletedIDs = this.getDeleted(true, days); if (deletedIDs) { this.erase(deletedIDs); + Zotero.Notifier.trigger('refresh', 'collection', 0); } - Zotero.Notifier.trigger('refresh', 'collection', 0); Zotero.DB.commitTransaction(); + return deletedIDs ? deletedIDs.length : 0; } diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js @@ -2906,6 +2906,11 @@ Zotero.Schema = new function(){ Zotero.DB.query("UPDATE savedSearchConditions SET condition='libraryCatalog' WHERE condition='repository'"); } + // 2.1 + if (i==74) { + Zotero.DB.query("CREATE INDEX deletedItems_dateDeleted ON deletedItems(dateDeleted)"); + } + Zotero.wait(); } diff --git a/defaults/preferences/zotero.js b/defaults/preferences/zotero.js @@ -35,6 +35,7 @@ pref("extensions.zotero.launchNonNativeFiles", false); pref("extensions.zotero.sortNotesChronologically", false); pref("extensions.zotero.sortAttachmentsChronologically", false); pref("extensions.zotero.showTrashWhenEmpty", true); +pref("extensions.zotero.trashAutoEmptyDays", 30); pref("extensions.zotero.viewOnDoubleClick", true); pref("extensions.zotero.groups.copyChildLinks", true); diff --git a/userdata.sql b/userdata.sql @@ -1,4 +1,4 @@ --- 73 +-- 74 -- Copyright (c) 2009 Center for History and New Media -- George Mason University, Fairfax, Virginia, USA @@ -212,6 +212,7 @@ CREATE TABLE deletedItems ( itemID INTEGER PRIMARY KEY, dateDeleted DEFAULT CURRENT_TIMESTAMP NOT NULL ); +CREATE INDEX deletedItems_dateDeleted ON deletedItems(dateDeleted); CREATE TABLE relations ( libraryID INT NOT NULL,