commit 6a994a25a299b3ef32b5b3f4b5abf352036cbb53
parent a55b035761890dacafaeb6bb18c4b85978476e6f
Author: Dan Stillman <dstillman@zotero.org>
Date: Sat, 19 Aug 2006 23:28:49 +0000
Closes #193, need a function to add snapshots from folders
Scholar.Attachments.importSnapshotFromFile(file, url, title, mimeType, charset, sourceItemID)
file is primary file within directory -- file.parent is copied into the storage directory
url is the original URL associated with the snapshot
Diffstat:
1 file changed, 78 insertions(+), 24 deletions(-)
diff --git a/chrome/chromeFiles/content/scholar/xpcom/data_access.js b/chrome/chromeFiles/content/scholar/xpcom/data_access.js
@@ -1921,6 +1921,7 @@ Scholar.Attachments = new function(){
this.importFromFile = importFromFile;
this.linkFromFile = linkFromFile;
+ this.importSnapshotFromFile = importSnapshotFromFile;
this.importFromURL = importFromURL;
this.linkFromURL = linkFromURL;
this.linkFromDocument = linkFromDocument;
@@ -1933,38 +1934,48 @@ Scholar.Attachments = new function(){
Scholar.DB.beginTransaction();
- // Create a new attachment
- var attachmentItem = Scholar.Items.getNewItemByType(Scholar.ItemTypes.getID('attachment'));
- attachmentItem.setField('title', title);
- attachmentItem.save();
- var itemID = attachmentItem.getID();
-
- // Create directory for attachment files within storage directory
- var destDir = Scholar.getStorageDirectory();
- destDir.append(itemID);
- destDir.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0644);
-
try {
+ // Create a new attachment
+ var attachmentItem = Scholar.Items.getNewItemByType(Scholar.ItemTypes.getID('attachment'));
+ attachmentItem.setField('title', title);
+ attachmentItem.save();
+ var itemID = attachmentItem.getID();
+
+ // Create directory for attachment files within storage directory
+ var destDir = Scholar.getStorageDirectory();
+ destDir.append(itemID);
+ destDir.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0644);
+
file.copyTo(destDir, null);
+
+ // Point to copied file
+ var newFile = Components.classes["@mozilla.org/file/local;1"]
+ .createInstance(Components.interfaces.nsILocalFile);
+ newFile.initWithFile(destDir);
+ newFile.append(title);
+
+ var mimeType = Scholar.File.getMIMETypeFromFile(newFile);
+ var charsetID = _getCharsetIDFromFile(newFile);
+
+ _addToDB(newFile, null, null, this.LINK_MODE_IMPORTED_FILE,
+ mimeType, charsetID, sourceItemID, itemID);
+
+ Scholar.DB.commitTransaction();
}
catch (e){
// hmph
Scholar.DB.rollbackTransaction();
- destDir.remove(true);
+
+ // Clean up
+ if (itemID){
+ var itemDir = Scholar.getStorageDirectory();
+ itemDir.append(itemID);
+ if (itemDir.exists()){
+ itemDir.remove(true);
+ }
+ }
throw (e);
}
-
- // Point to copied file
- var newFile = Components.classes["@mozilla.org/file/local;1"]
- .createInstance(Components.interfaces.nsILocalFile);
- newFile.initWithFile(destDir);
- newFile.append(title);
-
- var mimeType = Scholar.File.getMIMETypeFromFile(newFile);
- var charsetID = _getCharsetIDFromFile(newFile);
-
- _addToDB(newFile, null, null, this.LINK_MODE_IMPORTED_FILE, mimeType, charsetID, sourceItemID, itemID);
- Scholar.DB.commitTransaction();
return itemID;
}
@@ -1977,6 +1988,49 @@ Scholar.Attachments = new function(){
}
+ function importSnapshotFromFile(file, url, title, mimeType, charset, sourceItemID){
+ var charsetID = Scholar.CharacterSets.getID(charset);
+
+ Scholar.DB.beginTransaction();
+
+ try {
+ // Create a new attachment
+ var attachmentItem = Scholar.Items.getNewItemByType(Scholar.ItemTypes.getID('attachment'));
+ attachmentItem.setField('title', title);
+ attachmentItem.save();
+ var itemID = attachmentItem.getID();
+
+ var storageDir = Scholar.getStorageDirectory();
+ file.parent.copyTo(storageDir, itemID);
+
+ // Point to copied file
+ var newFile = Components.classes["@mozilla.org/file/local;1"]
+ .createInstance(Components.interfaces.nsILocalFile);
+ newFile.initWithFile(storageDir);
+ newFile.append(itemID);
+ newFile.append(file.leafName);
+
+ _addToDB(newFile, url, null, this.LINK_MODE_IMPORTED_URL, mimeType,
+ charsetID, sourceItemID, itemID);
+ Scholar.DB.commitTransaction();
+ }
+ catch (e){
+ Scholar.DB.rollbackTransaction();
+
+ // Clean up
+ if (itemID){
+ var itemDir = Scholar.getStorageDirectory();
+ itemDir.append(itemID);
+ if (itemDir.exists()){
+ itemDir.remove(true);
+ }
+ }
+ throw (e);
+ }
+ return itemID;
+ }
+
+
function importFromURL(url, sourceItemID){
Scholar.Utilities.HTTP.doHead(url, function(obj){
var mimeType = obj.channel.contentType;