www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit 0d5ea8520a2de05f9443e11f64a2776802ff6d63
parent e3dee4dee74fc8ca0da8950ca609b8430bd7fe1c
Author: Martynas Bagdonas <martbgd@gmail.com>
Date:   Mon, 15 Jan 2018 19:09:38 +0200

Use the bundled PDF tools

Diffstat:
Mchrome/content/zotero/downloadOverlay.js | 13+------------
Mchrome/content/zotero/downloadOverlay.xul | 1-
Mchrome/content/zotero/preferences/preferences_search.js | 254-------------------------------------------------------------------------------
Mchrome/content/zotero/preferences/preferences_search.xul | 32--------------------------------
Mchrome/content/zotero/recognizePDF.js | 5-----
Mchrome/content/zotero/xpcom/data/item.js | 5-----
Mchrome/content/zotero/xpcom/fulltext.js | 359++++++++-----------------------------------------------------------------------
Mchrome/content/zotero/xpcom/schema.js | 113-------------------------------------------------------------------------------
Mchrome/content/zotero/xpcom/zotero.js | 4+---
Mchrome/content/zotero/zoteroPane.js | 46++--------------------------------------------
Mtest/content/runtests.js | 41-----------------------------------------
Mtest/content/support.js | 21---------------------
Mtest/tests/fulltextTest.js | 82+------------------------------------------------------------------------------
Mtest/tests/preferences_searchTest.js | 17+----------------
Mtest/tests/recognizePDFTest.js | 3+--
15 files changed, 42 insertions(+), 954 deletions(-)

diff --git a/chrome/content/zotero/downloadOverlay.js b/chrome/content/zotero/downloadOverlay.js @@ -145,15 +145,7 @@ var Zotero_DownloadOverlay = new function() { // to happen automatically if(zoteroSelected) document.getElementById('rememberChoice').selected = false; document.getElementById('rememberChoice').disabled = zoteroSelected; - - // disable recognizePDF checkbox as necessary - if(!Zotero.Fulltext.pdfConverterIsRegistered()) { - document.getElementById('zotero-noPDFTools-description').hidden = !zoteroSelected; - document.getElementById('zotero-recognizePDF').disabled = true; - window.sizeToContent(); - } else { - document.getElementById('zotero-recognizePDF').disabled = !zoteroSelected; - } + document.getElementById('zotero-recognizePDF').disabled = !zoteroSelected; Zotero_DownloadOverlay.updateLibraryNote(); }; @@ -212,9 +204,6 @@ var Zotero_DownloadOverlay = new function() { recognizePDF.label = Zotero.getString("pane.items.menu.recognizePDF"); recognizePDF.hidden = false; recognizePDF.disabled = true; - if(!Zotero.Fulltext.pdfConverterIsRegistered()) { - recognizePDF.checked = false; - } } }; } diff --git a/chrome/content/zotero/downloadOverlay.xul b/chrome/content/zotero/downloadOverlay.xul @@ -43,7 +43,6 @@ <vbox style="margin-left: 15px"> <description id="zotero-saveToLibrary-description" style="font: small-caption; font-weight: normal" hidden="true">&zotero.downloadManager.saveToLibrary.description;</description> <checkbox id="zotero-recognizePDF" hidden="true" persist="checked" disabled="true"/> - <description style="margin-left: 20px; font: small-caption; font-weight: normal" id="zotero-noPDFTools-description" hidden="true">&zotero.downloadManager.noPDFTools.description;</description> </vbox> </vbox> </radiogroup> diff --git a/chrome/content/zotero/preferences/preferences_search.js b/chrome/content/zotero/preferences/preferences_search.js @@ -33,264 +33,10 @@ Zotero_Preferences.Search = { document.getElementById('fulltext-clearIndex').setAttribute('label', Zotero.getString('zotero.preferences.search.clearIndex') + Zotero.getString('punctuation.ellipsis')); - this.updatePDFToolsStatus(); this.updateIndexStats(); - - // Quick hack to support install prompt from PDF recognize option - var io = window.arguments[0]; - if (io.action && io.action == 'pdftools-install') { - this.checkPDFToolsDownloadVersion(); - } - }, - - /* - * Update window according to installation status for PDF tools - * (e.g. status line, install/update button, etc.) - */ - updatePDFToolsStatus: function () { - var converterIsRegistered = Zotero.Fulltext.pdfConverterIsRegistered(); - var infoIsRegistered = Zotero.Fulltext.pdfInfoIsRegistered(); - - var converterStatusLabel = document.getElementById('pdfconverter-status'); - var infoStatusLabel = document.getElementById('pdfinfo-status'); - var requiredLabel = document.getElementById('pdftools-required'); - var updateButton = document.getElementById('pdftools-update-button'); - var documentationLink = document.getElementById('pdftools-documentation-link'); - var settingsBox = document.getElementById('pdftools-settings'); - - // If we haven't already generated the required and documentation messages - if (!converterIsRegistered && !requiredLabel.hasChildNodes()) { - - // Xpdf link - var str = Zotero.getString('zotero.preferences.search.pdf.toolsRequired', - [Zotero.Fulltext.pdfConverterName, Zotero.Fulltext.pdfInfoName, - '<a href="' + Zotero.Fulltext.pdfToolsURL + '">' - + Zotero.Fulltext.pdfToolsName + '</a>']); - var parts = Zotero.Utilities.parseMarkup(str); - for (var i=0; i<parts.length; i++) { - var part = parts[i]; - if (part.type == 'text') { - var elem = document.createTextNode(part.text); - } - else if (part.type == 'link') { - var elem = document.createElement('label'); - elem.setAttribute('value', part.text); - elem.setAttribute('class', 'zotero-text-link'); - for (var key in part.attributes) { - elem.setAttribute(key, part.attributes[key]); - - if (key == 'href') { - elem.setAttribute('tooltiptext', part.attributes[key]); - } - } - } - requiredLabel.appendChild(elem); - } - - requiredLabel.appendChild(document.createTextNode(' ' - + Zotero.getString('zotero.preferences.search.pdf.automaticInstall'))); - - // Documentation link - var link = '<a href="http://www.zotero.org/documentation/pdf_fulltext_indexing">' - + Zotero.getString('zotero.preferences.search.pdf.documentationLink') - + '</a>'; - var str = Zotero.getString('zotero.preferences.search.pdf.advancedUsers', link); - var parts = Zotero.Utilities.parseMarkup(str); - - for (var i=0; i<parts.length; i++) { - var part = parts[i]; - if (part.type == 'text') { - var elem = document.createTextNode(part.text); - } - else if (part.type == 'link') { - var elem = document.createElement('label'); - elem.setAttribute('value', part.text); - elem.setAttribute('class', 'zotero-text-link'); - for (var key in part.attributes) { - elem.setAttribute(key, part.attributes[key]); - - if (key == 'href') { - elem.setAttribute('tooltiptext', part.attributes[key]); - } - } - } - documentationLink.appendChild(elem); - } - } - - // converter status line - var prefix = 'zotero.preferences.search.pdf.tool'; - if (converterIsRegistered) { - var version = Zotero.Fulltext.pdfConverterVersion; - str = Zotero.getString(prefix + 'Registered', - Zotero.getString('zotero.preferences.search.pdf.toolVersionPlatform', - [Zotero.Fulltext.pdfConverterName, version])); - } - else { - str = Zotero.getString(prefix + 'NotRegistered', - [Zotero.Fulltext.pdfConverterFileName]); - } - converterStatusLabel.setAttribute('value', str); - - // pdfinfo status line - if (infoIsRegistered) { - var version = Zotero.Fulltext.pdfInfoVersion; - str = Zotero.getString(prefix + 'Registered', - Zotero.getString('zotero.preferences.search.pdf.toolVersionPlatform', - [Zotero.Fulltext.pdfInfoName, version])); - } - else { - str = Zotero.getString(prefix + 'NotRegistered', - [Zotero.Fulltext.pdfInfoFileName]); - } - infoStatusLabel.setAttribute('value', str); - - str = converterIsRegistered ? - Zotero.getString('general.checkForUpdate') : - Zotero.getString('zotero.preferences.search.pdf.checkForInstaller'); - updateButton.setAttribute('label', str); - - requiredLabel.setAttribute('hidden', converterIsRegistered); - documentationLink.setAttribute('hidden', converterIsRegistered); - settingsBox.setAttribute('hidden', !converterIsRegistered); - }, - - - /* - * Check available versions of PDF tools from server and prompt for installation - * if a newer version is available - */ - checkPDFToolsDownloadVersion: Zotero.Promise.coroutine(function* () { - try { - var latestVersion = yield Zotero.Fulltext.getLatestPDFToolsVersion(); - - 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; - } - // 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); - 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) { - if (e == 404) { - var str = Zotero.getString('zotero.preferences.search.pdf.toolDownloadsNotAvailable', - Zotero.Fulltext.pdfToolsName) + ' ' - + Zotero.getString('zotero.preferences.search.pdf.viewManualInstructions'); - } - else { - Components.utils.reportError(e); - var str = Zotero.getString('zotero.preferences.search.pdf.toolsDownloadError', Zotero.Fulltext.pdfToolsName) - + ' ' + Zotero.getString('zotero.preferences.search.pdf.tryAgainOrViewManualInstructions'); - } - - var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] - .createInstance(Components.interfaces.nsIPromptService); - ps.alert( - null, - Zotero.getString('pane.item.attachments.PDF.installTools.title'), - str - ); }, - updateIndexStats: Zotero.Promise.coroutine(function* () { var stats = yield Zotero.Fulltext.getIndexStats(); document.getElementById('fulltext-stats-indexed'). diff --git a/chrome/content/zotero/preferences/preferences_search.xul b/chrome/content/zotero/preferences/preferences_search.xul @@ -51,38 +51,6 @@ </hbox> </groupbox> - <groupbox id="pdftools-box"> - <caption label="&zotero.preferences.search.pdfIndexing;"/> - - <label id="pdfconverter-status"/> - <separator class="thin"/> - <label id="pdfinfo-status"/> - - <separator class="thin"/> - - <!-- This doesn't wrap without an explicit width --> - <label id="pdftools-required" width="45em" hidden="true"/> - - <separator class="thin"/> - - <hbox> - <button id="pdftools-update-button" flex="1" oncommand="Zotero_Preferences.Search.checkPDFToolsDownloadVersion()"/> - </hbox> - - <separator class="thin"/> - - <!-- This doesn't wrap without an explicit width --> - <label id="pdftools-documentation-link" width="45em" hidden="true"/> - - <separator class="thin"/> - - <hbox id="pdftools-settings" align="center" hidden="true"> - <label value="&zotero.preferences.fulltext.pdfMaxPages;"/> - <textbox size="5" preference="pref-fulltext-pdfmaxpages"/> - <label value="(&zotero.preferences.default; 100)"/> - </hbox> - </groupbox> - <groupbox id="fulltext-stats"> <caption label="&zotero.preferences.search.indexStats;"/> diff --git a/chrome/content/zotero/recognizePDF.js b/chrome/content/zotero/recognizePDF.js @@ -49,11 +49,6 @@ var Zotero_RecognizePDF = new function() { * of the new items */ this.recognizeSelected = function() { - var installed = ZoteroPane_Local.checkPDFConverter(); - if (!installed) { - return; - } - var items = ZoteroPane_Local.getSelectedItems(); if (!items) return; var itemRecognizer = new Zotero_RecognizePDF.ItemRecognizer(); diff --git a/chrome/content/zotero/xpcom/data/item.js b/chrome/content/zotero/xpcom/data/item.js @@ -3140,7 +3140,6 @@ Zotero.defineProperty(Zotero.Item.prototype, 'attachmentHash', { * * - Currently works on HTML, PDF and plaintext attachments * - Paragraph breaks will be lost in PDF content - * - For PDFs, will return empty string if Zotero.Fulltext.pdfConverterIsRegistered() is false * * @return {Promise<String>} - A promise for attachment text or empty string if unavailable */ @@ -3194,10 +3193,6 @@ Zotero.defineProperty(Zotero.Item.prototype, 'attachmentText', { } if (reindex) { - if (!Zotero.Fulltext.pdfConverterIsRegistered()) { - Zotero.debug("PDF converter is unavailable -- returning empty .attachmentText", 3); - return ''; - } yield Zotero.Fulltext.indexItems(this.id, false); } diff --git a/chrome/content/zotero/xpcom/fulltext.js b/chrome/content/zotero/xpcom/fulltext.js @@ -24,15 +24,8 @@ */ Zotero.Fulltext = Zotero.FullText = new function(){ - const CACHE_FILE = '.zotero-ft-cache'; - - this.pdfConverterIsRegistered = pdfConverterIsRegistered; - this.pdfInfoIsRegistered = pdfInfoIsRegistered; this.isCachedMIMEType = isCachedMIMEType; - this.pdfToolsDownloadBaseURL = ZOTERO_CONFIG.PDF_TOOLS_URL; - this.__defineGetter__("pdfToolsName", function() { return 'Xpdf'; }); - this.__defineGetter__("pdfToolsURL", function() { return 'http://www.foolabs.com/xpdf/'; }); this.__defineGetter__("pdfConverterName", function() { return 'pdftotext'; }); this.__defineGetter__("pdfInfoName", function() { return 'pdfinfo'; }); this.__defineGetter__("pdfConverterCacheFile", function () { return '.zotero-ft-cache'; }); @@ -60,16 +53,12 @@ Zotero.Fulltext = Zotero.FullText = new function(){ const kWbClassHiraganaLetter = 5; const kWbClassHWKatakanaLetter = 6; const kWbClassThaiLetter = 7; - - var _pdfConverterVersion = null; var _pdfConverterFileName = null; - var _pdfConverterScript = null; // nsIFile of hidden window script on Windows var _pdfConverter = null; // nsIFile to executable - var _pdfInfoVersion = null; var _pdfInfoFileName = null; - var _pdfInfoScript = null; // nsIFile of redirection script var _pdfInfo = null; // nsIFile to executable + var _popplerDatadir = null; var _idleObserverIsRegistered = false; var _idleObserverDelay = 30; @@ -84,22 +73,34 @@ Zotero.Fulltext = Zotero.FullText = new function(){ this.decoder = Components.classes["@mozilla.org/intl/utf8converterservice;1"]. getService(Components.interfaces.nsIUTF8ConverterService); - - var platform = Zotero.platform.replace(/ /g, '-'); - _pdfConverterFileName = this.pdfConverterName + '-' + platform; - _pdfInfoFileName = this.pdfInfoName + '-' + platform; + + _pdfConverterFileName = this.pdfConverterName; + _pdfInfoFileName = this.pdfInfoName; + if (Zotero.isWin) { _pdfConverterFileName += '.exe'; _pdfInfoFileName += '.exe'; } - this.__defineGetter__("pdfConverterFileName", function() { return _pdfConverterFileName; }); - this.__defineGetter__("pdfConverterVersion", function() { return _pdfConverterVersion; }); - this.__defineGetter__("pdfInfoFileName", function() { return _pdfInfoFileName; }); - this.__defineGetter__("pdfInfoVersion", function() { return _pdfInfoVersion; }); + let dir = FileUtils.getFile('AChrom', []).parent; - yield this.registerPDFTool('converter'); - yield this.registerPDFTool('info'); + _popplerDatadir = dir.clone(); + _popplerDatadir.append('poppler-data'); + _popplerDatadir = _popplerDatadir.path; + + _pdfConverter = dir.clone(); + _pdfInfo = dir.clone(); + + if(Zotero.isMac) { + _pdfConverter = _pdfConverter.parent; + _pdfConverter.append('MacOS'); + + _pdfInfo = _pdfInfo.parent; + _pdfInfo.append('MacOS'); + } + + _pdfConverter.append(_pdfConverterFileName); + _pdfInfo.append(_pdfInfoFileName); Zotero.uiReadyPromise.delay(30000).then(() => { this.registerContentProcessor(); @@ -197,279 +198,12 @@ Zotero.Fulltext = Zotero.FullText = new function(){ } - this.getLatestPDFToolsVersion = Zotero.Promise.coroutine(function* () { - if (Zotero.isWin) { - return "3.02a"; - } - - // Find latest version for this platform - var url = Zotero.Fulltext.pdfToolsDownloadBaseURL + 'latest.json'; - var xmlhttp = yield Zotero.HTTP.request("GET", url, { responseType: "json" }); - var json = xmlhttp.response; - - var platform = Zotero.platform.replace(/\s/g, '-'); - var version = json[platform] || json['default']; - - Zotero.debug("Latest PDF tools version for " + platform + " is " + version); - - return version; - }); - - - /* - * Download and install latest PDF tool - */ - this.downloadPDFTool = Zotero.Promise.coroutine(function* (tool, version) { - var ioService = Components.classes["@mozilla.org/network/io-service;1"] - .getService(Components.interfaces.nsIIOService); - - if (tool == 'converter') { - 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); - } - catch (e) { - Zotero.logError(e); - } - throw new Error(msg); - } - - var scriptExt = _getScriptExtension(); - // On Windows, write out script to hide pdftotext console window - // TEMP: disabled - if (false && tool == 'converter') { - if (Zotero.isWin) { - let content = yield Zotero.File.getContentsFromURLAsync( - 'resource://zotero/hide.' + scriptExt - ); - var tmpScriptFile = OS.Path.join( - Zotero.getTempDirectory().path, - 'pdftotext.' + scriptExt - ); - yield Zotero.File.putContentsAsync(tmpScriptFile, content); - } - } - // Write out output redirection script for pdfinfo - // TEMP: disabled on Windows - else if (!Zotero.isWin && tool == 'info') { - let content = yield Zotero.File.getContentsFromURLAsync( - 'resource://zotero/redirect.' + scriptExt - ); - var tmpScriptFile = OS.Path.join( - Zotero.getTempDirectory().path, - 'pdfinfo.' + scriptExt - ); - yield Zotero.File.putContentsAsync(tmpScriptFile, content); - } - - // Set permissions to 755 - if (Zotero.isMac || Zotero.isLinux) { - yield OS.File.setPermissions(tmpFile, { - unixMode: 0o755 - }); - if (tmpScriptFile) { - yield OS.File.setPermissions(tmpScriptFile, { - unixMode: 0o755 - }); - } - } - - var destDir = Zotero.File.pathToFile(Zotero.DataDirectory.dir); - // 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); - }); - - - /* - * Looks for pdftotext-{platform}[.exe] in the Zotero data directory - * - * {platform} is navigator.platform, with spaces replaced by hyphens - * e.g. "Win32", "Linux-i686", "MacPPC", "MacIntel", etc. - */ - this.registerPDFTool = Zotero.Promise.coroutine(function* (tool) { - var errMsg = false; - var exec = Zotero.File.pathToFile(Zotero.DataDirectory.dir); - - switch (tool) { - case 'converter': - var toolName = this.pdfConverterName; - var fileName = _pdfConverterFileName; - break; - - case 'info': - var toolName = this.pdfInfoName; - var fileName = _pdfInfoFileName; - break; - - default: - throw ("Invalid PDF tool type '" + tool + "' in Zotero.Fulltext.registerPDFTool()"); - } - - exec.append(fileName); - if (!exec.exists()) { - exec = null; - errMsg = fileName + ' not found'; - } - - if (!exec) { - if (tool == 'converter') { - Zotero.debug(errMsg + ' -- PDF indexing disabled'); - } - return false; - } - - var versionFile = exec.parent; - versionFile.append(fileName + '.version'); - if (versionFile.exists()) { - try { - var version = (yield Zotero.File.getSample(versionFile)).split(/[\r\n\s]/)[0]; - } - catch (e) { - Zotero.debug(e, 1); - Components.utils.reportError(e); - } - } - if (!version) { - var version = 'UNKNOWN'; - } - - // If scripts exist, use those instead - switch (tool) { - case 'converter': - // TEMP: disabled - if (false && Zotero.isWin) { - var script = Zotero.File.pathToFile(Zotero.DataDirectory.dir); - script.append('pdftotext.' + _getScriptExtension()) - if (script.exists()) { - Zotero.debug(script.leafName + " registered"); - _pdfConverterScript = script; - } - } - break; - - case 'info': - // Modified 3.02 version doesn't use redirection script - if (version.startsWith('3.02')) break; - - var script = Zotero.File.pathToFile(Zotero.DataDirectory.dir); - // TEMP: disabled on Win - if (!Zotero.isWin) { - script.append('pdfinfo.' + _getScriptExtension()) - // The redirection script is necessary to run pdfinfo - if (!script.exists()) { - Zotero.debug(script.leafName + " not found -- PDF statistics disabled"); - return false; - } - Zotero.debug(toolName + " redirection script registered"); - _pdfInfoScript = script; - } - break; - } - - switch (tool) { - case 'converter': - _pdfConverter = exec; - _pdfConverterVersion = version; - break; - - case 'info': - _pdfInfo = exec; - _pdfInfoVersion = version; - break; - } - - Zotero.debug(toolName + ' version ' + version + ' registered'); - - return true; - }); - - - /** - * Unregister and delete PDF tools - * - * Used only for tests - */ - this.uninstallPDFTools = Zotero.Promise.coroutine(function* () { - Zotero.debug("Uninstalling PDF tools"); - - if (_pdfConverter) { - yield Zotero.File.removeIfExists(_pdfConverter.path); - yield Zotero.File.removeIfExists(_pdfConverter.path + ".version"); - } - if (_pdfInfo) { - yield Zotero.File.removeIfExists(_pdfInfo.path); - yield Zotero.File.removeIfExists(_pdfInfo.path + ".version"); - } - if (_pdfConverterScript) yield Zotero.File.removeIfExists(_pdfConverterScript.path); - if (_pdfInfoScript) yield Zotero.File.removeIfExists(_pdfInfoScript.path); - - _pdfConverter = null; - _pdfInfo = null; - _pdfInfoScript = null; - }); - - - function pdfConverterIsRegistered() { - return !!_pdfConverter; - } - - - function pdfInfoIsRegistered() { - return !!_pdfInfo; - } - - this.getPDFConverterExecAndArgs = function () { - if (!this.pdfConverterIsRegistered()) { - throw new Error("PDF converter is not registered"); - } - - if (_pdfConverterScript) { - return { - exec: _pdfConverterScript, - args: [_pdfConverter.path] - } - } - return { exec: _pdfConverter, - args: [] + args: ['-datadir', _popplerDatadir] } - } + }; /* @@ -674,11 +408,6 @@ Zotero.Fulltext = Zotero.FullText = new function(){ * @return {Promise} */ this.indexPDF = Zotero.Promise.coroutine(function* (filePath, itemID, allPages) { - if (!_pdfConverter) { - Zotero.debug("PDF tools are not installed -- skipping indexing"); - return false; - } - var maxPages = Zotero.Prefs.get('fulltext.pdfMaxPages'); if (maxPages == 0) { return false; @@ -697,38 +426,20 @@ Zotero.Fulltext = Zotero.FullText = new function(){ var infoFilePath = OS.Path.join(parentDirPath, this.pdfInfoCacheFile); var cacheFilePath = OS.Path.join(parentDirPath, this.pdfConverterCacheFile); - // Modified 3.02 version that can output a text file directly - if (_pdfInfo && _pdfInfoVersion.startsWith('3.02')) { - let args = [filePath, infoFilePath]; - - try { - yield Zotero.Utilities.Internal.exec(_pdfInfo, args); - var totalPages = yield getTotalPagesFromFile(itemID); - } - catch (e) { - Zotero.debug("Error running pdfinfo"); - } - } - // Use redirection script - else if (_pdfInfoScript) { - let args = [_pdfInfo.path, filePath, infoFilePath]; - - try { - yield Zotero.Utilities.Internal.exec(_pdfInfoScript, args); - var totalPages = yield getTotalPagesFromFile(itemID); - } - catch (e) { - Components.utils.reportError(e); - Zotero.debug("Error running pdfinfo", 1); - Zotero.debug(e, 1); - } + + var args = [filePath, infoFilePath]; + + try { + yield Zotero.Utilities.Internal.exec(_pdfInfo, args); + var totalPages = yield getTotalPagesFromFile(itemID); } - else { - Zotero.debug(this.pdfInfoName + " is not available"); + catch (e) { + Zotero.debug("Error running pdfinfo"); } + var {exec, args} = this.getPDFConverterExecAndArgs(); - args.push('-enc', 'UTF-8', '-nopgbrk'); + args.push('-nopgbrk'); if (allPages) { if (totalPages) { diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js @@ -1633,116 +1633,6 @@ Zotero.Schema = new function(){ var translatorUpdates = xmlhttp.responseXML.getElementsByTagName('translator'); var styleUpdates = xmlhttp.responseXML.getElementsByTagName('style'); - var updatePDFTools = function () { - // No updates for PPC - if (Zotero.platform == 'MacPPC') return; - - let pdfToolsUpdates = xmlhttp.responseXML.getElementsByTagName('pdftools'); - if (pdfToolsUpdates.length) { - let availableVersion = pdfToolsUpdates[0].getAttribute('version'); - let installInfo = false; - let installConverter = false; - - // Don't auto-install if not installed - if (!Zotero.Fulltext.pdfInfoIsRegistered() && !Zotero.Fulltext.pdfConverterIsRegistered()) { - return; - } - - // TEMP - if (Zotero.isWin) { - if (Zotero.Fulltext.pdfInfoIsRegistered()) { - if (Zotero.Fulltext.pdfInfoVersion != '3.02a') { - installInfo = true; - } - } - // Install missing component if one is installed - else if (Zotero.Fulltext.pdfConverterIsRegistered()) { - installInfo = true; - } - if (Zotero.Fulltext.pdfConverterIsRegistered()) { - if (Zotero.Fulltext.pdfConverterVersion != '3.02a') { - installConverter = true; - } - } - // Install missing component if one is installed - else if (Zotero.Fulltext.pdfInfoIsRegistered()) { - installConverter = true; - } - availableVersion = '3.02'; - } - else { - if (Zotero.Fulltext.pdfInfoIsRegistered()) { - let currentVersion = Zotero.Fulltext.pdfInfoVersion; - if (currentVersion < availableVersion || currentVersion.startsWith('3.02') - || currentVersion == 'UNKNOWN') { - installInfo = true; - } - } - // Install missing component if one is installed - else if (Zotero.Fulltext.pdfConverterIsRegistered()) { - installInfo = true; - } - if (Zotero.Fulltext.pdfConverterIsRegistered()) { - let currentVersion = Zotero.Fulltext.pdfConverterVersion; - if (currentVersion < availableVersion || currentVersion.startsWith('3.02') - || currentVersion == 'UNKNOWN') { - installConverter = true; - } - } - // Install missing component if one is installed - else if (Zotero.Fulltext.pdfInfoIsRegistered()) { - installConverter = true; - } - } - - let prefKey = 'pdfToolsInstallError'; - let lastTry = 0, delay = 43200000; // half a day, so doubles to a day initially - try { - [lastTry, delay] = Zotero.Prefs.get(prefKey).split(';'); - } - catch (e) {} - - // Allow an additional minute, since repo updates might not be exact - if (Date.now() < (parseInt(lastTry) + parseInt(delay) - 60000)) { - Zotero.debug("Now enough time since last PDF tools installation failure -- skipping", 2); - return; - } - - var checkResult = function (success) { - if (success) { - try { - Zotero.Prefs.clear(prefKey); - } - catch (e) {} - } - else { - // Keep doubling delay, to a max of 1 week - Zotero.Prefs.set(prefKey, Date.now() + ";" + Math.min(delay * 2, 7*24*60*60*1000)); - - let msg = "Error downloading PDF tool"; - Zotero.debug(msg, 1); - throw new Error(msg); - } - }; - - if (installConverter && installInfo) { - Zotero.Fulltext.downloadPDFTool('converter', availableVersion, function (success) { - checkResult(success); - Zotero.Fulltext.downloadPDFTool('info', availableVersion, checkResult); - }); - } - else if (installConverter) { - Zotero.Fulltext.downloadPDFTool('converter', availableVersion, checkResult); - } - else if (installInfo) { - Zotero.Fulltext.downloadPDFTool('info', availableVersion, checkResult); - } - else { - Zotero.debug("PDF tools are up to date"); - } - } - }; - if (!translatorUpdates.length && !styleUpdates.length){ await Zotero.DB.executeTransaction(function* (conn) { // Store the timestamp provided by the server @@ -1756,7 +1646,6 @@ Zotero.Schema = new function(){ if (!force) { _setRepositoryTimer(ZOTERO_CONFIG.REPOSITORY_CHECK_INTERVAL); } - updatePDFTools(); return true; } @@ -1790,8 +1679,6 @@ Zotero.Schema = new function(){ }); } - updatePDFTools(); - return updated; } diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js @@ -581,9 +581,7 @@ Services.scriptloader.loadSubScript("resource://zotero/polyfill.js"); while (true) { let entry = yield iterator.next(); // Don't delete some files - if (entry.name == 'pipes' - || entry.name.startsWith(Zotero.Fulltext.pdfInfoName) - || entry.name.startsWith(Zotero.Fulltext.pdfConverterName)) { + if (entry.name == 'pipes') { continue; } Zotero.debug("Deleting " + entry.path); diff --git a/chrome/content/zotero/zoteroPane.js b/chrome/content/zotero/zoteroPane.js @@ -1735,30 +1735,6 @@ var ZoteroPane = new function() }; - this.checkPDFConverter = function () { - if (Zotero.Fulltext.pdfConverterIsRegistered()) { - return true; - } - - var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] - .getService(Components.interfaces.nsIPromptService); - var buttonFlags = (ps.BUTTON_POS_0) * (ps.BUTTON_TITLE_IS_STRING) - + (ps.BUTTON_POS_1) * (ps.BUTTON_TITLE_CANCEL); - var index = ps.confirmEx( - null, - Zotero.getString('pane.item.attachments.PDF.installTools.title'), - Zotero.getString('pane.item.attachments.PDF.installTools.text'), - buttonFlags, - Zotero.getString('general.openPreferences'), - null, null, null, {} - ); - if (index == 0) { - ZoteroPane_Local.openPreferences('zotero-prefpane-search', { action: 'pdftools-install' }); - } - return false; - } - - /** * @return {Promise} */ @@ -1769,24 +1745,11 @@ var ZoteroPane = new function() } var itemIDs = []; - var checkPDF = false; + for (var i=0; i<items.length; i++) { - // If any PDFs, we need to make sure the converter is installed and - // prompt for installation if not - if (!checkPDF && items[i].attachmentContentType && items[i].attachmentContentType == "application/pdf") { - checkPDF = true; - } itemIDs.push(items[i].id); } - if (checkPDF) { - var installed = this.checkPDFConverter(); - if (!installed) { - yield document.getElementById('zotero-attachment-box').updateItemIndexedState(); - return; - } - } - yield Zotero.Fulltext.indexItems(itemIDs, true); yield document.getElementById('zotero-attachment-box').updateItemIndexedState(); }); @@ -2810,10 +2773,6 @@ var ZoteroPane = new function() var canMarkRead = collectionTreeRow.isFeed(); var markUnread = true; - if (!Zotero.Fulltext.pdfConverterIsRegistered()) { - canIndex = false; - } - for (let i = 0; i < items.length; i++) { let item = items[i]; if (canMerge && !item.isRegularItem() || item.isFeedItem || collectionTreeRow.isDuplicates()) { @@ -2935,8 +2894,7 @@ var ZoteroPane = new function() } // If not linked URL, show reindex line - if (Zotero.Fulltext.pdfConverterIsRegistered() - && (yield Zotero.Fulltext.canReindex(item))) { + if (yield Zotero.Fulltext.canReindex(item)) { show.push(m.reindexItem); showSep4 = true; } diff --git a/test/content/runtests.js b/test/content/runtests.js @@ -293,47 +293,6 @@ if(run) { window.onload = function() { Zotero.spawn(function* () { yield Zotero.Schema.schemaUpdatePromise; - - // Download and cache PDF tools for this platform - // - // To reset, delete test/tests/data/pdf/ directory - var cachePDFTools = Zotero.Promise.coroutine(function* () { - var path = OS.Path.join(getTestDataDirectory().path, 'pdf'); - yield OS.File.makeDir(path, { ignoreExisting: true }); - - var baseURL = Zotero.Fulltext.pdfToolsDownloadBaseURL; - // Point full-text code to the cache directory, so downloads come from there - Zotero.Fulltext.pdfToolsDownloadBaseURL = OS.Path.toFileURI(path) + "/"; - - // Get latest tools version for the current platform - yield Zotero.File.download(baseURL + 'latest.json', OS.Path.join(path, 'latest.json')); - - var platform = Zotero.platform.replace(/\s/g, '-'); - var version = yield Zotero.Fulltext.getLatestPDFToolsVersion(); - - // Create version directory (e.g., data/pdf/3.04) and download tools to it if - // they don't exist - yield OS.File.makeDir(OS.Path.join(path, version), { ignoreExisting: true }); - - var fileName = "pdfinfo-" + platform + (Zotero.isWin ? ".exe" : ""); - var execPath = OS.Path.join(path, version, fileName); - if (!(yield OS.File.exists(execPath))) { - yield Zotero.File.download(baseURL + version + "/" + fileName, execPath); - } - fileName = "pdftotext-" + platform + (Zotero.isWin ? ".exe" : "");; - execPath = OS.Path.join(path, version, fileName); - if (!(yield OS.File.exists(execPath))) { - yield Zotero.File.download(baseURL + version + "/" + fileName, execPath); - } - }); - - try { - yield cachePDFTools(); - } - catch (e) { - Zotero.logError(e); - } - return mocha.run(); }) }; diff --git a/test/content/support.js b/test/content/support.js @@ -474,27 +474,6 @@ function getPromiseError(promise) { } /** - * Ensures that the PDF tools are installed, or installs them if not. - * - * @return {Promise} - */ -var installPDFTools = Zotero.Promise.coroutine(function* () { - if(Zotero.Fulltext.pdfConverterIsRegistered() && Zotero.Fulltext.pdfInfoIsRegistered()) { - return; - } - var version = yield Zotero.Fulltext.getLatestPDFToolsVersion(); - yield Zotero.Fulltext.downloadPDFTool('info', version); - yield Zotero.Fulltext.downloadPDFTool('converter', version); -}); - -/** - * @return {Promise} - */ -function uninstallPDFTools() { - return Zotero.Fulltext.uninstallPDFTools(); -} - -/** * Returns the nsIFile corresponding to the test data directory * (i.e., test/tests/data) */ diff --git a/test/tests/fulltextTest.js b/test/tests/fulltextTest.js @@ -1,12 +1,10 @@ describe("Zotero.Fulltext", function () { - var win, pdfToolsVersion; + var win; before(function* () { // Hidden browser, which requires a browser window, needed for charset detection // (until we figure out a better way) win = yield loadBrowserWindow(); - - pdfToolsVersion = Zotero.isWin ? '3.02a' : '3.04'; }); after(function () { if (win) { @@ -15,11 +13,6 @@ describe("Zotero.Fulltext", function () { }); describe("Indexing", function () { - before(function* () { - yield Zotero.Fulltext.downloadPDFTool('info', pdfToolsVersion); - yield Zotero.Fulltext.downloadPDFTool('converter', pdfToolsVersion); - }); - beforeEach(function () { Zotero.Prefs.clear('fulltext.textMaxLength'); Zotero.Prefs.clear('fulltext.pdfMaxPages'); @@ -92,80 +85,7 @@ describe("Zotero.Fulltext", function () { }); }); - describe("#downloadPDFTool()", function () { - it("should install the PDF tools", function* () { - yield Zotero.Fulltext.uninstallPDFTools(); - assert.isFalse(Zotero.Fulltext.pdfInfoIsRegistered()); - - var dataDir = Zotero.DataDirectory.dir; - var execFileName = Zotero.Fulltext.pdfInfoFileName; - 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 - ); - var cacheExecPath = OS.Path.join( - getTestDataDirectory().path, "pdf", pdfToolsVersion, execFileName - ); - - // 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) {} - - yield Zotero.Fulltext.downloadPDFTool('info', pdfToolsVersion); - - assert.ok(Zotero.Fulltext.pdfInfoIsRegistered()); - - assert.equal( - (yield Zotero.Utilities.Internal.md5Async(cacheExecPath, false)), - (yield Zotero.Utilities.Internal.md5Async(execPath, false)) - ); - - if (!Zotero.isWin) { - assert.equal((yield OS.File.stat(execPath)).unixMode, 0o755); - } - assert.equal( - (yield Zotero.File.getContentsAsync(versionPath)), - pdfToolsVersion - ); - - //Temp: disabled on Windows - if (!Zotero.isWin) { - assert.equal( - (yield Zotero.File.getContentsAsync(scriptPath)), - scriptContents - ); - assert.equal((yield OS.File.stat(scriptPath)).unixMode, 0o755); - } - - yield uninstallPDFTools(); - assert.isFalse(Zotero.Fulltext.pdfInfoIsRegistered()); - }) - }) - - describe("#getUnsyncedContent()", function () { - before(function* () { - yield installPDFTools(); - }) - - after(function* () { - yield uninstallPDFTools(); - }) - it("should get content that hasn't been uploaded", function* () { var toSync = []; var group = yield getGroup(); diff --git a/test/tests/preferences_searchTest.js b/test/tests/preferences_searchTest.js @@ -1,20 +1,5 @@ describe("Search Preferences", function () { describe("PDF Indexing", function () { - it("should install PDF tools if not installed", function* () { - // Begin install procedure - var win = yield loadWindow("chrome://zotero/content/preferences/preferences.xul", { - pane: 'zotero-prefpane-search', - action: 'pdftools-install' - }); - // Wait for confirmation dialog - yield waitForDialog(); - - // Wait for install to finish - yield waitForCallback(function() { - return Zotero.Fulltext.pdfConverterIsRegistered() - && Zotero.Fulltext.pdfInfoIsRegistered(); - }, 500) - .finally(() => win.close()); - }) + }) }) diff --git a/test/tests/recognizePDFTest.js b/test/tests/recognizePDFTest.js @@ -7,8 +7,7 @@ describe("PDF Recognition", function() { this.timeout(60000); // Load Zotero pane and install PDF tools yield Zotero.Promise.all([ - loadZoteroPane().then(w => win = w), - installPDFTools(), + loadZoteroPane().then(w => win = w) ]); });