Fixes #724, PDF indexing binaries not downloading
And adds Zotero.File.download(uri, path)
This commit is contained in:
parent
6b87c641d9
commit
ebe41ac51a
4 changed files with 296 additions and 266 deletions
|
@ -161,148 +161,126 @@ Zotero_Preferences.Search = {
|
||||||
* Check available versions of PDF tools from server and prompt for installation
|
* Check available versions of PDF tools from server and prompt for installation
|
||||||
* if a newer version is available
|
* if a newer version is available
|
||||||
*/
|
*/
|
||||||
checkPDFToolsDownloadVersion: function () {
|
checkPDFToolsDownloadVersion: Zotero.Promise.coroutine(function* () {
|
||||||
var url = Zotero.Fulltext.pdfToolsDownloadBaseURL + 'latest.json';
|
var url = Zotero.Fulltext.pdfToolsDownloadBaseURL + 'latest.json';
|
||||||
|
|
||||||
// Find latest version for this platform
|
// Find latest version for this platform
|
||||||
var self = this;
|
try {
|
||||||
var sent = Zotero.HTTP.doGet(url, function (xmlhttp) {
|
var xmlhttp = yield Zotero.HTTP.request("GET", url, { successCodes: [200, 404] });
|
||||||
try {
|
|
||||||
if (xmlhttp.status != 200) {
|
if (xmlhttp.status == 404) {
|
||||||
throw new Error("Unexpected response code " + xmlhttp.status);
|
throw 404;
|
||||||
}
|
|
||||||
|
|
||||||
var platform = Zotero.platform.replace(/\s/g, '-');
|
|
||||||
var json = JSON.parse(xmlhttp.responseText);
|
|
||||||
var latestVersion = json[platform] || json['default'];
|
|
||||||
|
|
||||||
Zotero.debug("Latest PDF tools version for " + platform + " is " + latestVersion);
|
|
||||||
|
|
||||||
var converterIsRegistered = Zotero.Fulltext.pdfConverterIsRegistered();
|
|
||||||
var infoIsRegistered = Zotero.Fulltext.pdfInfoIsRegistered();
|
|
||||||
var bothRegistered = converterIsRegistered && infoIsRegistered;
|
|
||||||
|
|
||||||
// On Windows, install if not installed or anything other than 3.02a
|
|
||||||
if (Zotero.isWin) {
|
|
||||||
var converterVersionAvailable = !converterIsRegistered
|
|
||||||
|| Zotero.Fulltext.pdfConverterVersion != '3.02a';
|
|
||||||
var infoVersionAvailable = !infoIsRegistered
|
|
||||||
|| Zotero.Fulltext.pdfInfoVersion != '3.02a';
|
|
||||||
var bothAvailable = converterVersionAvailable && infoVersionAvailable;
|
|
||||||
latestVersion = "3.02a";
|
|
||||||
}
|
|
||||||
// Install if not installed, version unknown, outdated, or
|
|
||||||
// Xpdf 3.02/3.04 (to upgrade to Poppler),
|
|
||||||
else {
|
|
||||||
var converterVersionAvailable = (!converterIsRegistered ||
|
|
||||||
Zotero.Fulltext.pdfConverterVersion == 'UNKNOWN'
|
|
||||||
|| latestVersion > Zotero.Fulltext.pdfConverterVersion
|
|
||||||
|| (!latestVersion.startsWith('3.02')
|
|
||||||
&& Zotero.Fulltext.pdfConverterVersion.startsWith('3.02'))
|
|
||||||
|| (!latestVersion.startsWith('3.02') && latestVersion != '3.04'
|
|
||||||
&& Zotero.Fulltext.pdfConverterVersion == '3.04'));
|
|
||||||
var infoVersionAvailable = (!infoIsRegistered ||
|
|
||||||
Zotero.Fulltext.pdfInfoVersion == 'UNKNOWN'
|
|
||||||
|| latestVersion > Zotero.Fulltext.pdfInfoVersion
|
|
||||||
|| (!latestVersion.startsWith('3.02')
|
|
||||||
&& Zotero.Fulltext.pdfInfoVersion.startsWith('3.02'))
|
|
||||||
|| (!latestVersion.startsWith('3.02') && latestVersion != '3.04'
|
|
||||||
&& Zotero.Fulltext.pdfInfoVersion == '3.04'));
|
|
||||||
var bothAvailable = converterVersionAvailable && infoVersionAvailable;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Up to date -- disable update button
|
|
||||||
if (!converterVersionAvailable && !infoVersionAvailable) {
|
|
||||||
var button = document.getElementById('pdftools-update-button');
|
|
||||||
button.setAttribute('label', Zotero.getString('zotero.preferences.update.upToDate'));
|
|
||||||
button.setAttribute('disabled', true);
|
|
||||||
}
|
|
||||||
// New version available -- display update prompt
|
|
||||||
else {
|
|
||||||
var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].
|
|
||||||
createInstance(Components.interfaces.nsIPromptService);
|
|
||||||
var buttonFlags = (ps.BUTTON_POS_0) * (ps.BUTTON_TITLE_IS_STRING)
|
|
||||||
+ (ps.BUTTON_POS_1) * (ps.BUTTON_TITLE_CANCEL);
|
|
||||||
|
|
||||||
var msg = Zotero.getString('zotero.preferences.search.pdf.available'
|
|
||||||
+ ((converterIsRegistered || infoIsRegistered) ? 'Updates' : 'Downloads'),
|
|
||||||
[Zotero.platform, 'zotero.org']) + '\n\n';
|
|
||||||
|
|
||||||
if (converterVersionAvailable) {
|
|
||||||
let tvp = Zotero.getString('zotero.preferences.search.pdf.toolVersionPlatform',
|
|
||||||
[Zotero.Fulltext.pdfConverterName, latestVersion]);
|
|
||||||
msg += '- ' + tvp + '\n';
|
|
||||||
}
|
|
||||||
if (infoVersionAvailable) {
|
|
||||||
let tvp = Zotero.getString('zotero.preferences.search.pdf.toolVersionPlatform',
|
|
||||||
[Zotero.Fulltext.pdfInfoName, latestVersion]);
|
|
||||||
msg += '- ' + tvp + '\n';
|
|
||||||
}
|
|
||||||
msg += '\n';
|
|
||||||
msg += Zotero.getString('zotero.preferences.search.pdf.zoteroCanInstallVersion'
|
|
||||||
+ (bothAvailable ? 's' : ''));
|
|
||||||
|
|
||||||
var index = ps.confirmEx(null,
|
|
||||||
converterIsRegistered ?
|
|
||||||
Zotero.getString('general.updateAvailable') : '',
|
|
||||||
msg,
|
|
||||||
buttonFlags,
|
|
||||||
converterIsRegistered ?
|
|
||||||
Zotero.getString('general.upgrade') :
|
|
||||||
Zotero.getString('general.install'),
|
|
||||||
null, null, null, {});
|
|
||||||
|
|
||||||
if (index == 0) {
|
|
||||||
document.getElementById('pdftools-update-button').disabled = true;
|
|
||||||
var str = Zotero.getString('zotero.preferences.search.pdf.downloading');
|
|
||||||
document.getElementById('pdftools-update-button').setAttribute('label', str);
|
|
||||||
|
|
||||||
if (converterVersionAvailable && infoVersionAvailable) {
|
|
||||||
Zotero.Fulltext.downloadPDFTool('converter', latestVersion, function (success) {
|
|
||||||
if (!success) {
|
|
||||||
self.onPDFToolsDownloadError("Error downloading pdftotext");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Zotero.Fulltext.downloadPDFTool('info', latestVersion, function (success) {
|
|
||||||
if (!success) {
|
|
||||||
self.onPDFToolsDownloadError("Error downloading pdfinfo");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
self.updatePDFToolsStatus();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else if (converterVersionAvailable) {
|
|
||||||
Zotero.Fulltext.downloadPDFTool('converter', latestVersion, function (success) {
|
|
||||||
if (!success) {
|
|
||||||
self.onPDFToolsDownloadError("Error downloading pdftotext");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
self.updatePDFToolsStatus();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Zotero.Fulltext.downloadPDFTool('info', latestVersion, function (success) {
|
|
||||||
if (!success) {
|
|
||||||
self.onPDFToolsDownloadError("Error downloading pdfinfo");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
self.updatePDFToolsStatus();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (e) {
|
|
||||||
self.onPDFToolsDownloadError(e);
|
var platform = Zotero.platform.replace(/\s/g, '-');
|
||||||
|
var json = JSON.parse(xmlhttp.responseText);
|
||||||
|
var latestVersion = json[platform] || json['default'];
|
||||||
|
|
||||||
|
Zotero.debug("Latest PDF tools version for " + platform + " is " + latestVersion);
|
||||||
|
|
||||||
|
var converterIsRegistered = Zotero.Fulltext.pdfConverterIsRegistered();
|
||||||
|
var infoIsRegistered = Zotero.Fulltext.pdfInfoIsRegistered();
|
||||||
|
var bothRegistered = converterIsRegistered && infoIsRegistered;
|
||||||
|
|
||||||
|
// On Windows, install if not installed or anything other than 3.02a
|
||||||
|
if (Zotero.isWin) {
|
||||||
|
var converterVersionAvailable = !converterIsRegistered
|
||||||
|
|| Zotero.Fulltext.pdfConverterVersion != '3.02a';
|
||||||
|
var infoVersionAvailable = !infoIsRegistered
|
||||||
|
|| Zotero.Fulltext.pdfInfoVersion != '3.02a';
|
||||||
|
var bothAvailable = converterVersionAvailable && infoVersionAvailable;
|
||||||
|
latestVersion = "3.02a";
|
||||||
}
|
}
|
||||||
});
|
// Install if not installed, version unknown, outdated, or
|
||||||
|
// Xpdf 3.02/3.04 (to upgrade to Poppler),
|
||||||
// Browser is offline
|
else {
|
||||||
if (!sent) {
|
var converterVersionAvailable = (!converterIsRegistered ||
|
||||||
this.onPDFToolsDownloadError();
|
Zotero.Fulltext.pdfConverterVersion == 'UNKNOWN'
|
||||||
|
|| latestVersion > Zotero.Fulltext.pdfConverterVersion
|
||||||
|
|| (!latestVersion.startsWith('3.02')
|
||||||
|
&& Zotero.Fulltext.pdfConverterVersion.startsWith('3.02'))
|
||||||
|
|| (!latestVersion.startsWith('3.02') && latestVersion != '3.04'
|
||||||
|
&& Zotero.Fulltext.pdfConverterVersion == '3.04'));
|
||||||
|
var infoVersionAvailable = (!infoIsRegistered ||
|
||||||
|
Zotero.Fulltext.pdfInfoVersion == 'UNKNOWN'
|
||||||
|
|| latestVersion > Zotero.Fulltext.pdfInfoVersion
|
||||||
|
|| (!latestVersion.startsWith('3.02')
|
||||||
|
&& Zotero.Fulltext.pdfInfoVersion.startsWith('3.02'))
|
||||||
|
|| (!latestVersion.startsWith('3.02') && latestVersion != '3.04'
|
||||||
|
&& Zotero.Fulltext.pdfInfoVersion == '3.04'));
|
||||||
|
var bothAvailable = converterVersionAvailable && infoVersionAvailable;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Up to date -- disable update button
|
||||||
|
if (!converterVersionAvailable && !infoVersionAvailable) {
|
||||||
|
var button = document.getElementById('pdftools-update-button');
|
||||||
|
button.setAttribute('label', Zotero.getString('zotero.preferences.update.upToDate'));
|
||||||
|
button.setAttribute('disabled', true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// New version available -- display update prompt
|
||||||
|
var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].
|
||||||
|
createInstance(Components.interfaces.nsIPromptService);
|
||||||
|
var buttonFlags = (ps.BUTTON_POS_0) * (ps.BUTTON_TITLE_IS_STRING)
|
||||||
|
+ (ps.BUTTON_POS_1) * (ps.BUTTON_TITLE_CANCEL);
|
||||||
|
|
||||||
|
var msg = Zotero.getString('zotero.preferences.search.pdf.available'
|
||||||
|
+ ((converterIsRegistered || infoIsRegistered) ? 'Updates' : 'Downloads'),
|
||||||
|
[Zotero.platform, 'zotero.org']) + '\n\n';
|
||||||
|
|
||||||
|
if (converterVersionAvailable) {
|
||||||
|
let tvp = Zotero.getString('zotero.preferences.search.pdf.toolVersionPlatform',
|
||||||
|
[Zotero.Fulltext.pdfConverterName, latestVersion]);
|
||||||
|
msg += '- ' + tvp + '\n';
|
||||||
|
}
|
||||||
|
if (infoVersionAvailable) {
|
||||||
|
let tvp = Zotero.getString('zotero.preferences.search.pdf.toolVersionPlatform',
|
||||||
|
[Zotero.Fulltext.pdfInfoName, latestVersion]);
|
||||||
|
msg += '- ' + tvp + '\n';
|
||||||
|
}
|
||||||
|
msg += '\n';
|
||||||
|
msg += Zotero.getString('zotero.preferences.search.pdf.zoteroCanInstallVersion'
|
||||||
|
+ (bothAvailable ? 's' : ''));
|
||||||
|
|
||||||
|
var index = ps.confirmEx(null,
|
||||||
|
converterIsRegistered ?
|
||||||
|
Zotero.getString('general.updateAvailable') : '',
|
||||||
|
msg,
|
||||||
|
buttonFlags,
|
||||||
|
converterIsRegistered ?
|
||||||
|
Zotero.getString('general.upgrade') :
|
||||||
|
Zotero.getString('general.install'),
|
||||||
|
null, null, null, {});
|
||||||
|
|
||||||
|
if (index != 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById('pdftools-update-button').disabled = true;
|
||||||
|
var str = Zotero.getString('zotero.preferences.search.pdf.downloading');
|
||||||
|
document.getElementById('pdftools-update-button').setAttribute('label', str);
|
||||||
|
|
||||||
|
if (converterVersionAvailable) {
|
||||||
|
yield Zotero.Fulltext.downloadPDFTool('converter', latestVersion)
|
||||||
|
.catch(function (e) {
|
||||||
|
Zotero.logError(e);
|
||||||
|
throw new Error("Error downloading pdftotext");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (infoVersionAvailable) {
|
||||||
|
yield Zotero.Fulltext.downloadPDFTool('info', latestVersion)
|
||||||
|
.catch(function (e) {
|
||||||
|
Zotero.logError(e);
|
||||||
|
throw new Error("Error downloading pdfinfo");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.updatePDFToolsStatus();
|
||||||
}
|
}
|
||||||
},
|
catch (e) {
|
||||||
|
this.onPDFToolsDownloadError(e);
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
|
||||||
|
|
||||||
onPDFToolsDownloadError: function (e) {
|
onPDFToolsDownloadError: function (e) {
|
||||||
|
@ -311,17 +289,11 @@ Zotero_Preferences.Search = {
|
||||||
Zotero.Fulltext.pdfToolsName) + ' '
|
Zotero.Fulltext.pdfToolsName) + ' '
|
||||||
+ Zotero.getString('zotero.preferences.search.pdf.viewManualInstructions');
|
+ Zotero.getString('zotero.preferences.search.pdf.viewManualInstructions');
|
||||||
}
|
}
|
||||||
else if (e) {
|
else {
|
||||||
Components.utils.reportError(e);
|
Components.utils.reportError(e);
|
||||||
var str = Zotero.getString('zotero.preferences.search.pdf.toolsDownloadError', Zotero.Fulltext.pdfToolsName)
|
var str = Zotero.getString('zotero.preferences.search.pdf.toolsDownloadError', Zotero.Fulltext.pdfToolsName)
|
||||||
+ ' ' + Zotero.getString('zotero.preferences.search.pdf.tryAgainOrViewManualInstructions');
|
+ ' ' + Zotero.getString('zotero.preferences.search.pdf.tryAgainOrViewManualInstructions');
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
var info = Components.classes["@mozilla.org/xre/app-info;1"]
|
|
||||||
.getService(Components.interfaces.nsIXULAppInfo);
|
|
||||||
var browser = info.name; // Returns "Firefox" for Firefox
|
|
||||||
var str = Zotero.getString('general.browserIsOffline', browser);
|
|
||||||
}
|
|
||||||
|
|
||||||
var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
|
var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
|
||||||
.createInstance(Components.interfaces.nsIPromptService);
|
.createInstance(Components.interfaces.nsIPromptService);
|
||||||
|
|
|
@ -355,7 +355,7 @@ Zotero.File = new function(){
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a stream for async stream copying
|
// Convert text data to stream
|
||||||
if(!(data instanceof Components.interfaces.nsIInputStream)) {
|
if(!(data instanceof Components.interfaces.nsIInputStream)) {
|
||||||
var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].
|
var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].
|
||||||
createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
|
createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
|
||||||
|
@ -363,9 +363,9 @@ Zotero.File = new function(){
|
||||||
data = converter.convertToInputStream(data);
|
data = converter.convertToInputStream(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
var deferred = Zotero.Promise.defer(),
|
var deferred = Zotero.Promise.defer();
|
||||||
ostream = FileUtils.openSafeFileOutputStream(path);
|
var os = FileUtils.openSafeFileOutputStream(new FileUtils.File(path));
|
||||||
NetUtil.asyncCopy(data, ostream, function(inputStream, status) {
|
NetUtil.asyncCopy(data, os, function(inputStream, status) {
|
||||||
if (!Components.isSuccessCode(status)) {
|
if (!Components.isSuccessCode(status)) {
|
||||||
deferred.reject(new Components.Exception("File write operation failed", status));
|
deferred.reject(new Components.Exception("File write operation failed", status));
|
||||||
return;
|
return;
|
||||||
|
@ -376,6 +376,23 @@ Zotero.File = new function(){
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
this.download = Zotero.Promise.coroutine(function* (uri, path) {
|
||||||
|
var msg = "Saving " + (uri.spec ? uri.spec : uri) + " to " + (path.path ? path.path : path);
|
||||||
|
|
||||||
|
var deferred = Zotero.Promise.defer();
|
||||||
|
NetUtil.asyncFetch(uri, function (is, status, request) {
|
||||||
|
if (!Components.isSuccessCode(status)) {
|
||||||
|
Zotero.logError(status);
|
||||||
|
deferred.reject(new Error("Download failed with status " + status));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
deferred.resolve(is);
|
||||||
|
});
|
||||||
|
var is = yield deferred.promise;
|
||||||
|
yield Zotero.File.putContentsAsync(path, is);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete a file if it exists, asynchronously
|
* Delete a file if it exists, asynchronously
|
||||||
*
|
*
|
||||||
|
|
|
@ -30,7 +30,7 @@ Zotero.Fulltext = new function(){
|
||||||
this.pdfInfoIsRegistered = pdfInfoIsRegistered;
|
this.pdfInfoIsRegistered = pdfInfoIsRegistered;
|
||||||
this.isCachedMIMEType = isCachedMIMEType;
|
this.isCachedMIMEType = isCachedMIMEType;
|
||||||
|
|
||||||
this.__defineGetter__("pdfToolsDownloadBaseURL", function() { return 'https://www.zotero.org/download/xpdf/'; });
|
this.pdfToolsDownloadBaseURL = 'https://www.zotero.org/download/xpdf/';
|
||||||
this.__defineGetter__("pdfToolsName", function() { return 'Xpdf'; });
|
this.__defineGetter__("pdfToolsName", function() { return 'Xpdf'; });
|
||||||
this.__defineGetter__("pdfToolsURL", function() { return 'http://www.foolabs.com/xpdf/'; });
|
this.__defineGetter__("pdfToolsURL", function() { return 'http://www.foolabs.com/xpdf/'; });
|
||||||
this.__defineGetter__("pdfConverterName", function() { return 'pdftotext'; });
|
this.__defineGetter__("pdfConverterName", function() { return 'pdftotext'; });
|
||||||
|
@ -132,129 +132,99 @@ Zotero.Fulltext = new function(){
|
||||||
/*
|
/*
|
||||||
* Download and install latest PDF tool
|
* Download and install latest PDF tool
|
||||||
*/
|
*/
|
||||||
this.downloadPDFTool = function (tool, version, callback) {
|
this.downloadPDFTool = Zotero.Promise.coroutine(function* (tool, version) {
|
||||||
try {
|
var ioService = Components.classes["@mozilla.org/network/io-service;1"]
|
||||||
var ioService = Components.classes["@mozilla.org/network/io-service;1"]
|
.getService(Components.interfaces.nsIIOService);
|
||||||
.getService(Components.interfaces.nsIIOService);
|
|
||||||
|
if (tool == 'converter') {
|
||||||
if (tool == 'converter') {
|
var fileName = this.pdfConverterFileName;
|
||||||
var fileName = this.pdfConverterFileName;
|
}
|
||||||
|
else {
|
||||||
|
var fileName = this.pdfInfoFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
var spec = this.pdfToolsDownloadBaseURL + version + "/" + fileName;
|
||||||
|
var uri = ioService.newURI(spec, null, null);
|
||||||
|
var tmpFile = OS.Path.join(Zotero.getTempDirectory().path, fileName);
|
||||||
|
|
||||||
|
yield Zotero.File.download(uri, tmpFile);
|
||||||
|
|
||||||
|
var fileInfo = yield OS.File.stat(tmpFile);
|
||||||
|
|
||||||
|
// Delete if too small, since a 404 might not be detected above
|
||||||
|
if (fileInfo.size < 50000) {
|
||||||
|
let msg = tmpFile + " is too small -- deleting";
|
||||||
|
Zotero.logError(msg);
|
||||||
|
try {
|
||||||
|
yield OS.File.remove(tmpFile);
|
||||||
}
|
}
|
||||||
else {
|
catch (e) {
|
||||||
var fileName = this.pdfInfoFileName;
|
Zotero.logError(e);
|
||||||
}
|
}
|
||||||
|
throw new Error(msg);
|
||||||
var spec = this.pdfToolsDownloadBaseURL + version + "/" + fileName;
|
}
|
||||||
var uri = ioService.newURI(spec, null, null);
|
|
||||||
|
var scriptExt = _getScriptExtension();
|
||||||
var file = Zotero.getTempDirectory();
|
// On Windows, write out script to hide pdftotext console window
|
||||||
file.append(fileName);
|
// TEMP: disabled
|
||||||
|
if (false && tool == 'converter') {
|
||||||
Components.utils.import("resource://gre/modules/NetUtil.jsm");
|
if (Zotero.isWin) {
|
||||||
Components.utils.import("resource://gre/modules/FileUtils.jsm");
|
let content = yield Zotero.File.getContentsFromURLAsync(
|
||||||
|
'resource://zotero/hide.' + scriptExt
|
||||||
Zotero.debug("Saving " + uri.spec + " to " + file.path);
|
);
|
||||||
NetUtil.asyncFetch(uri, function (is, status) {
|
var tmpScriptFile = OS.Path.join(
|
||||||
if (!Components.isSuccessCode(status)) {
|
Zotero.getTempDirectory().path,
|
||||||
Zotero.debug(status, 1);
|
'pdftotext.' + scriptExt
|
||||||
Components.utils.reportError(status);
|
);
|
||||||
if (callback) {
|
yield Zotero.File.putContentsAsync(tmpScriptFile, content);
|
||||||
callback(false);
|
}
|
||||||
}
|
}
|
||||||
return;
|
// Write out output redirection script for pdfinfo
|
||||||
}
|
// TEMP: disabled on Windows
|
||||||
|
else if (!Zotero.isWin && tool == 'info') {
|
||||||
Zotero.File.putContentsAsync(file, is)
|
let content = yield Zotero.File.getContentsFromURLAsync(
|
||||||
.then(function () {
|
'resource://zotero/redirect.' + scriptExt
|
||||||
// Delete if too small, since a 404 might not be detected above
|
);
|
||||||
if (file.fileSize < 50000) {
|
var tmpScriptFile = OS.Path.join(
|
||||||
var msg = file.path + " is too small -- deleting";
|
Zotero.getTempDirectory().path,
|
||||||
Zotero.debug(msg, 1);
|
'pdfinfo.' + scriptExt
|
||||||
Components.utils.reportError(msg);
|
);
|
||||||
try {
|
yield Zotero.File.putContentsAsync(tmpScriptFile, content);
|
||||||
file.remove(false);
|
}
|
||||||
}
|
|
||||||
catch (e) {
|
// Set permissions to 755
|
||||||
Zotero.debug(e, 1);
|
if (Zotero.isMac || Zotero.isLinux) {
|
||||||
Components.utils.reportError(e);
|
yield OS.File.setPermissions(tmpFile, {
|
||||||
}
|
unixMode: 0o755
|
||||||
if (callback) {
|
|
||||||
callback(false);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var scriptExt = _getScriptExtension();
|
|
||||||
// On Windows, write out script to hide pdftotext console window
|
|
||||||
// TEMP: disabled
|
|
||||||
if (false && tool == 'converter') {
|
|
||||||
if (Zotero.isWin) {
|
|
||||||
var content = Zotero.File.getContentsFromURL('resource://zotero/hide.' + scriptExt);
|
|
||||||
var scriptFile = Zotero.getTempDirectory();
|
|
||||||
scriptFile.append('pdftotext.' + scriptExt);
|
|
||||||
Zotero.File.putContents(scriptFile, content);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Write out output redirection script for pdfinfo
|
|
||||||
// TEMP: disabled on Windows
|
|
||||||
else if (!Zotero.isWin && tool == 'info') {
|
|
||||||
var content = Zotero.File.getContentsFromURL('resource://zotero/redirect.' + scriptExt);
|
|
||||||
var scriptFile = Zotero.getTempDirectory();
|
|
||||||
scriptFile.append('pdfinfo.' + scriptExt);
|
|
||||||
Zotero.File.putContents(scriptFile, content);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set permissions to 755
|
|
||||||
if (Zotero.isMac) {
|
|
||||||
file.permissions = 33261;
|
|
||||||
if (scriptFile) {
|
|
||||||
scriptFile.permissions = 33261;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (Zotero.isLinux) {
|
|
||||||
file.permissions = 493;
|
|
||||||
if (scriptFile) {
|
|
||||||
scriptFile.permissions = 493;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var destDir = Zotero.getZoteroDirectory()
|
|
||||||
// Move redirect script and executable into data dir
|
|
||||||
if (scriptFile) {
|
|
||||||
scriptFile.moveTo(destDir, null);
|
|
||||||
}
|
|
||||||
file.moveTo(destDir, null);
|
|
||||||
|
|
||||||
// Write the version number to a file
|
|
||||||
var versionFile = destDir.clone();
|
|
||||||
versionFile.append(fileName + '.version');
|
|
||||||
// TEMP
|
|
||||||
if (Zotero.isWin) {
|
|
||||||
version = '3.02a';
|
|
||||||
}
|
|
||||||
Zotero.File.putContents(versionFile, version + '');
|
|
||||||
|
|
||||||
Zotero.Fulltext.registerPDFTool(tool);
|
|
||||||
|
|
||||||
if (callback) {
|
|
||||||
callback(true);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(function (e) {
|
|
||||||
Zotero.debug(e, 1);
|
|
||||||
Components.utils.reportError(e);
|
|
||||||
callback(false);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
if (tmpScriptFile) {
|
||||||
catch (e) {
|
yield OS.File.setPermissions(tmpScriptFile, {
|
||||||
Zotero.debug(e, 1);
|
unixMode: 0o755
|
||||||
Components.utils.reportError(e);
|
});
|
||||||
if (callback) {
|
|
||||||
callback(false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
var destDir = Zotero.getZoteroDirectory()
|
||||||
|
// Move redirect script and executable into data dir
|
||||||
|
if (tmpScriptFile) {
|
||||||
|
yield OS.File.move(
|
||||||
|
tmpScriptFile,
|
||||||
|
OS.Path.join(destDir.path, OS.Path.basename(tmpScriptFile))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
yield OS.File.move(tmpFile, OS.Path.join(destDir.path, fileName));
|
||||||
|
|
||||||
|
// Write the version number to a file
|
||||||
|
var versionFile = destDir.clone();
|
||||||
|
versionFile.append(fileName + '.version');
|
||||||
|
// TEMP
|
||||||
|
if (Zotero.isWin) {
|
||||||
|
version = '3.02a';
|
||||||
|
}
|
||||||
|
yield Zotero.File.putContentsAsync(versionFile, version + '');
|
||||||
|
|
||||||
|
yield Zotero.Fulltext.registerPDFTool(tool);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
71
test/tests/fulltextTest.js
Normal file
71
test/tests/fulltextTest.js
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
describe("Zotero.Fulltext", function () {
|
||||||
|
describe("#downloadPDFTool()", function () {
|
||||||
|
var originalBaseURL;
|
||||||
|
before(function* () {
|
||||||
|
originalBaseURL = Zotero.Fulltext.pdfToolsDownloadBaseURL;
|
||||||
|
})
|
||||||
|
after(function () {
|
||||||
|
Zotero.Fulltext.pdfToolsDownloadBaseURL = originalBaseURL;
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should install the PDF tools", function* () {
|
||||||
|
var version = "3.04";
|
||||||
|
var dataDir = Zotero.getZoteroDirectory().path;
|
||||||
|
var execFileName = 'pdfinfo-' + Zotero.platform;
|
||||||
|
var execContents = new Array(50001).join('a');
|
||||||
|
var execPath = OS.Path.join(dataDir, execFileName);
|
||||||
|
var versionFileName = execFileName + '.version';
|
||||||
|
var versionPath = OS.Path.join(dataDir, versionFileName);
|
||||||
|
var scriptExt = Zotero.isWin ? 'vbs' : 'sh';
|
||||||
|
var scriptPath = OS.Path.join(dataDir, 'pdfinfo.' + scriptExt);
|
||||||
|
var scriptContents = yield Zotero.File.getContentsFromURLAsync(
|
||||||
|
'resource://zotero/redirect.' + scriptExt
|
||||||
|
);
|
||||||
|
|
||||||
|
// Delete existing files
|
||||||
|
try {
|
||||||
|
yield OS.File.remove(execPath);
|
||||||
|
}
|
||||||
|
catch (e) {}
|
||||||
|
try {
|
||||||
|
yield OS.File.remove(versionPath);
|
||||||
|
}
|
||||||
|
catch (e) {}
|
||||||
|
try {
|
||||||
|
yield OS.File.remove(scriptPath);
|
||||||
|
}
|
||||||
|
catch (e) {}
|
||||||
|
|
||||||
|
var tmpDir = Zotero.getTempDirectory();
|
||||||
|
// Create temp version directory
|
||||||
|
var tmpVersionDir = OS.Path.join(tmpDir.path, version);
|
||||||
|
yield OS.File.makeDir(tmpVersionDir);
|
||||||
|
// Create dummy executable file to download
|
||||||
|
var tmpExecPath = OS.Path.join(tmpVersionDir, execFileName);
|
||||||
|
yield Zotero.File.putContentsAsync(tmpExecPath, execContents);
|
||||||
|
|
||||||
|
// Override the download URL with a file URL for the temp directory
|
||||||
|
Zotero.Fulltext.pdfToolsDownloadBaseURL = OS.Path.toFileURI(tmpDir.path) + "/";
|
||||||
|
|
||||||
|
yield Zotero.Fulltext.downloadPDFTool('info', version);
|
||||||
|
|
||||||
|
assert.ok(Zotero.Fulltext.pdfInfoIsRegistered());
|
||||||
|
assert.equal(
|
||||||
|
(yield Zotero.File.getContentsAsync(execPath)),
|
||||||
|
execContents
|
||||||
|
);
|
||||||
|
assert.equal((yield OS.File.stat(execPath)).unixMode, 0o755);
|
||||||
|
assert.equal(
|
||||||
|
(yield Zotero.File.getContentsAsync(versionPath)),
|
||||||
|
version
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
(yield Zotero.File.getContentsAsync(scriptPath)),
|
||||||
|
scriptContents
|
||||||
|
);
|
||||||
|
assert.equal((yield OS.File.stat(scriptPath)).unixMode, 0o755);
|
||||||
|
|
||||||
|
yield OS.File.removeDir(tmpVersionDir);
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
Loading…
Add table
Add a link
Reference in a new issue