Remove tmp-* directories when attachment download fails. Closes #1128

This commit is contained in:
Adomas Venčkauskas 2017-01-06 17:06:21 +02:00 committed by Dan Stillman
parent 43dad62150
commit 74d358bd19

View File

@ -326,54 +326,52 @@ Zotero.Attachments = new function(){
yield deferred.promise; yield deferred.promise;
let sample = yield Zotero.File.getSample(tmpFile); let sample = yield Zotero.File.getSample(tmpFile);
if (contentType == 'application/pdf' && try {
if (contentType == 'application/pdf' &&
Zotero.MIME.sniffForMIMEType(sample) != 'application/pdf') { Zotero.MIME.sniffForMIMEType(sample) != 'application/pdf') {
let errString = "Downloaded PDF did not have MIME type " let errString = "Downloaded PDF did not have MIME type "
+ "'application/pdf' in Attachments.importFromURL()"; + "'application/pdf' in Attachments.importFromURL()";
Zotero.debug(errString, 2); Zotero.debug(errString, 2);
Zotero.debug(sample, 3); Zotero.debug(sample, 3);
throw(new Error(errString)); throw(new Error(errString));
}
// Create DB item
var attachmentItem;
var destDir;
yield Zotero.DB.executeTransaction(function* () {
// Create a new attachment
attachmentItem = new Zotero.Item('attachment');
if (libraryID) {
attachmentItem.libraryID = libraryID;
} }
else if (parentItemID) {
let {libraryID: parentLibraryID, key: parentKey} =
Zotero.Items.getLibraryAndKeyFromID(parentItemID);
attachmentItem.libraryID = parentLibraryID;
}
attachmentItem.setField('title', title ? title : fileName);
attachmentItem.setField('url', url);
attachmentItem.setField('accessDate', "CURRENT_TIMESTAMP");
attachmentItem.parentID = parentItemID;
attachmentItem.attachmentLinkMode = Zotero.Attachments.LINK_MODE_IMPORTED_URL;
attachmentItem.attachmentContentType = contentType;
if (collections) {
attachmentItem.setCollections(collections);
}
var itemID = yield attachmentItem.save(saveOptions);
// Create a new folder for this item in the storage directory // Create DB item
destDir = this.getStorageDirectory(attachmentItem); var attachmentItem;
yield OS.File.move(tmpDir.path, destDir.path); var destDir;
var destFile = destDir.clone(); yield Zotero.DB.executeTransaction(function*() {
destFile.append(fileName); // Create a new attachment
attachmentItem = new Zotero.Item('attachment');
if (libraryID) {
attachmentItem.libraryID = libraryID;
}
else if (parentItemID) {
let {libraryID: parentLibraryID, key: parentKey} =
Zotero.Items.getLibraryAndKeyFromID(parentItemID);
attachmentItem.libraryID = parentLibraryID;
}
attachmentItem.setField('title', title ? title : fileName);
attachmentItem.setField('url', url);
attachmentItem.setField('accessDate', "CURRENT_TIMESTAMP");
attachmentItem.parentID = parentItemID;
attachmentItem.attachmentLinkMode = Zotero.Attachments.LINK_MODE_IMPORTED_URL;
attachmentItem.attachmentContentType = contentType;
if (collections) {
attachmentItem.setCollections(collections);
}
var itemID = yield attachmentItem.save(saveOptions);
// Refetch item to update path // Create a new folder for this item in the storage directory
attachmentItem.attachmentPath = destFile.path; destDir = this.getStorageDirectory(attachmentItem);
yield attachmentItem.save(saveOptions); yield OS.File.move(tmpDir.path, destDir.path);
}.bind(this)) var destFile = destDir.clone();
.catch(function (e) { destFile.append(fileName);
Zotero.debug(e, 1);
// Clean up // Refetch item to update path
attachmentItem.attachmentPath = destFile.path;
yield attachmentItem.save(saveOptions);
}.bind(this));
} catch (e) {
try { try {
if (tmpDir && tmpDir.exists()) { if (tmpDir && tmpDir.exists()) {
tmpDir.remove(true); tmpDir.remove(true);
@ -385,9 +383,8 @@ Zotero.Attachments = new function(){
catch (e) { catch (e) {
Zotero.debug(e, 1); Zotero.debug(e, 1);
} }
throw e; throw e;
}); }
// We don't have any way of knowing that the file is flushed to disk, // We don't have any way of knowing that the file is flushed to disk,
// so we just wait a second before indexing and hope for the best. // so we just wait a second before indexing and hope for the best.