commit ed2b6ccec3f4a1b8c21fe6054401f5300ba9abd4
parent cf9ec26eb4f518ecbe48a4b89d7af2a1b9e2cda7
Author: Aurimas Vinckevicius <aurimas.dev@gmail.com>
Date: Wed, 4 Feb 2015 03:00:13 -0600
Don't promote attachment.url to attachment.path
...but allow demoting from path to url if necessary.
Diffstat:
1 file changed, 51 insertions(+), 40 deletions(-)
diff --git a/chrome/content/zotero/xpcom/translation/translate_item.js b/chrome/content/zotero/xpcom/translation/translate_item.js
@@ -226,32 +226,64 @@ Zotero.Translate.ItemSaver.prototype = {
return false;
}
- if(!attachment.path) {
- let url = Zotero.Attachments.cleanAttachmentURI(attachment.url);
- if (!url) {
- Zotero.debug("Translate: Invalid attachment.url specified <" + attachment.url + "> Will attempt to treat it as path.");
- attachment.path = attachment.url;
- attachment.url = false;
- } else {
- attachment.url = url;
- url = Components.classes["@mozilla.org/network/io-service;1"]
- .getService(Components.interfaces.nsIIOService)
- .newURI(url, null, null); // This cannot fail, since we check above
-
- // see if this is actually a file URL
- if(url.scheme == "file") {
- attachment.path = attachment.url;
- attachment.url = false;
- } else if(url.scheme != "http" && url.scheme != "https") {
- let e = "Translate: " + url.scheme + " protocol is not allowed for attachments from translators.";
+ let done = false;
+ if (attachment.path) {
+ var file = this._parsePath(attachment.path);
+ if(!file) {
+ let asUrl = Zotero.Attachments.cleanAttachmentURI(attachment.path);
+ if (!attachment.url && !asUrl) {
+ let e = "Translate: Could not parse attachment path <" + attachment.path + ">";
Zotero.debug(e, 2);
attachmentCallback(attachment, false, e);
return false;
+ } else if (!attachment.url && asUrl) {
+ Zotero.debug("Translate: attachment path looks like a URI: " + attachment.path);
+ attachment.url = asUrl;
+ delete attachment.path;
+ }
+ } else {
+ if (attachment.url) {
+ attachment.linkMode = "imported_url";
+ var myID = Zotero.Attachments.importSnapshotFromFile(file,
+ attachment.url, attachment.title, attachment.mimeType, attachment.charset,
+ parentID);
+ }
+ else {
+ attachment.linkMode = "imported_file";
+ var myID = Zotero.Attachments.importFromFile(file, parentID);
}
+ attachmentCallback(attachment, 100);
+ done = true;
}
}
- if(!attachment.path) {
+ if(!done) {
+ let url = Zotero.Attachments.cleanAttachmentURI(attachment.url);
+ if (!url) {
+ let e = "Translate: Invalid attachment.url specified <" + attachment.url + ">";
+ Zotero.debug(e, 2);
+ attachmentCallback(attachment, false, e);
+ return false;
+ }
+
+ attachment.url = url;
+ url = Components.classes["@mozilla.org/network/io-service;1"]
+ .getService(Components.interfaces.nsIIOService)
+ .newURI(url, null, null); // This cannot fail, since we check above
+
+ // see if this is actually a file URL
+ if(url.scheme == "file") {
+ let e = "Translate: Local file attachments cannot be specified in attachment.url";
+ Zotero.debug(e, 2);
+ attachmentCallback(attachment, false, e);
+ return false;
+ } else if(url.scheme != "http" && url.scheme != "https") {
+ let e = "Translate: " + url.scheme + " protocol is not allowed for attachments from translators.";
+ Zotero.debug(e, 2);
+ attachmentCallback(attachment, false, e);
+ return false;
+ }
+
// At this point, must be a valid HTTP/HTTPS url
attachment.linkMode = "linked_file";
try {
@@ -265,27 +297,6 @@ Zotero.Translate.ItemSaver.prototype = {
}
Zotero.debug("Translate: Created attachment; id is "+myID, 4);
attachmentCallback(attachment, 100);
- var newItem = Zotero.Items.get(myID);
- } else {
- var file = this._parsePath(attachment.path);
- if(!file) {
- let e = "Translate: Could not parse attachment path <" + attachment.path + ">";
- Zotero.debug(e, 2);
- attachmentCallback(attachment, false, e);
- return false;
- }
-
- if (attachment.url) {
- attachment.linkMode = "imported_url";
- var myID = Zotero.Attachments.importSnapshotFromFile(file,
- attachment.url, attachment.title, attachment.mimeType, attachment.charset,
- parentID);
- }
- else {
- attachment.linkMode = "imported_file";
- var myID = Zotero.Attachments.importFromFile(file, parentID);
- }
- attachmentCallback(attachment, 100);
}
var newItem = Zotero.Items.get(myID);