commit a5329880d791f93a45201199210ba0973c6a86d6
parent 244c411c11a69fa89f4df8874b971b9b9e043556
Author: Dan Stillman <dstillman@zotero.org>
Date: Wed, 27 Jan 2010 10:39:35 +0000
- Purge tags immediately on delete from tag selector
- Adds optional tagIDs parameter to Zotero.Tags.purge()
Diffstat:
2 files changed, 38 insertions(+), 20 deletions(-)
diff --git a/chrome/content/zotero/bindings/tagselector.xml b/chrome/content/zotero/bindings/tagselector.xml
@@ -682,6 +682,7 @@
}
Zotero.Tags.erase(tagIDs);
+ Zotero.Tags.purge(tagIDs);
Zotero.DB.commitTransaction()
}
diff --git a/chrome/content/zotero/xpcom/data/tags.js b/chrome/content/zotero/xpcom/data/tags.js
@@ -399,37 +399,54 @@ Zotero.Tags = new function() {
}
- /*
+ /**
* Delete obsolete tags from database and clear internal array entries
*
- * Returns removed tagIDs on success
+ * @param [Integer[]|Integer] [tagIDs] tagID or array of tagIDs to purge
*/
- function purge() {
- if (!Zotero.Prefs.get('purge.tags')) {
+ function purge(tagIDs) {
+ if (!tagIDs && !Zotero.Prefs.get('purge.tags')) {
return;
}
+ if (tagIDs) {
+ tagIDs = Zotero.flattenArguments(tagIDs);
+ }
+
Zotero.UnresponsiveScriptIndicator.disable();
try {
Zotero.DB.beginTransaction();
- var sql = "CREATE TEMPORARY TABLE tagDelete AS "
- + "SELECT tagID FROM tags WHERE tagID "
- + "NOT IN (SELECT tagID FROM itemTags)";
- Zotero.DB.query(sql);
-
- sql = "CREATE INDEX tagDelete_tagID ON tagDelete(tagID)";
- Zotero.DB.query(sql);
-
- sql = "SELECT * FROM tagDelete";
- var toDelete = Zotero.DB.columnQuery(sql);
-
- if (!toDelete) {
- sql = "DROP TABLE tagDelete";
+ // Use given tags
+ if (tagIDs) {
+ var sql = "CREATE TEMPORARY TABLE tagDelete (tagID INT PRIMARY KEY)";
Zotero.DB.query(sql);
- Zotero.DB.commitTransaction();
- Zotero.Prefs.set('purge.tags', false);
- return;
+ for each(var id in tagIDs) {
+ Zotero.DB.query("INSERT OR IGNORE INTO tagDelete VALUES (?)", id);
+ }
+ // Remove duplicates
+ var toDelete = Zotero.DB.columnQuery("SELECT * FROM tagDelete");
+ }
+ // Look for orphaned tags
+ else {
+ var sql = "CREATE TEMPORARY TABLE tagDelete AS "
+ + "SELECT tagID FROM tags WHERE tagID "
+ + "NOT IN (SELECT tagID FROM itemTags)";
+ Zotero.DB.query(sql);
+
+ sql = "CREATE INDEX tagDelete_tagID ON tagDelete(tagID)";
+ Zotero.DB.query(sql);
+
+ sql = "SELECT * FROM tagDelete";
+ var toDelete = Zotero.DB.columnQuery(sql);
+
+ if (!toDelete) {
+ sql = "DROP TABLE tagDelete";
+ Zotero.DB.query(sql);
+ Zotero.DB.commitTransaction();
+ Zotero.Prefs.set('purge.tags', false);
+ return;
+ }
}
var notifierData = {};