Ejemplo n.º 1
0
 def processUpdate():
     url = addonInfos["url"]
     if url.endswith('/'): url = url[0:-1]
     url = "%s.nvda-addon?%s" % (url, urlencode(paramsDL()))
     fp = os.path.join(globalVars.appArgs.configPath,
                       "%s.nvda-addon" % sectionName)
     try:
         dl = URLopener()
         dl.retrieve(url, fp)
         try:
             curAddons = []
             for addon in addonHandler.getAvailableAddons():
                 curAddons.append(addon)
             bundle = addonHandler.AddonBundle(fp)
             prevAddon = None
             bundleName = bundle.manifest['name']
             for addon in curAddons:
                 if not addon.isPendingRemove and bundleName == addon.manifest[
                         'name']:
                     prevAddon = addon
                     break
             if prevAddon: prevAddon.requestRemove()
             addonHandler.installAddonBundle(bundle)
             core.restart()
         except BaseException as e:
             log.error(e)
             os.startfile(fp)
     except BaseException as e:
         log.error(e)
         return wx.CallAfter(errorUpdateDialog)
Ejemplo n.º 2
0
 def processUpdate():
     url = configBE._addonURL + "latest?" + urlencode(paramsDL())
     fp = os.path.join(globalVars.appArgs.configPath,
                       "brailleExtender.nvda-addon")
     try:
         dl = URLopener()
         dl.retrieve(url, fp)
         try:
             curAddons = []
             for addon in addonHandler.getAvailableAddons():
                 curAddons.append(addon)
             bundle = addonHandler.AddonBundle(fp)
             prevAddon = None
             bundleName = bundle.manifest['name']
             for addon in curAddons:
                 if not addon.isPendingRemove and bundleName == addon.manifest[
                         'name']:
                     prevAddon = addon
                     break
             if prevAddon: prevAddon.requestRemove()
             addonHandler.installAddonBundle(bundle)
             core.restart()
         except BaseException as e:
             log.error(e)
             os.startfile(fp)
     except BaseException as e:
         log.error(e)
         ui.message(
             _("Unable to save or download update file. Opening your browser"
               ))
         os.startfile(url)
     return
Ejemplo n.º 3
0
 def install():
     # To remove the old version
     ourAddon.requestRemove()
     # to install the new version
     addonHandler.installAddonBundle(bundle)
     # to delete the downloads folder
     shutil.rmtree(directory, ignore_errors=True)
     # to restart NVDA
     core.restart()
Ejemplo n.º 4
0
 def processUpdate(expectedSHA256Sum):
     url = addonInfos["url"]
     if url.endswith('/'):
         url = url[0:-1]
     url = "%s.nvda-addon?%s" % (url, urlencode(paramsDL()))
     fp = os.path.join(globalVars.appArgs.configPath,
                       "%s.nvda-addon" % sectionName)
     try:
         with urllib.request.urlopen(url) as res:
             with open(fp, "wb") as out:
                 out.write(res.read())
         actualSHA256Sum = SHA256Sum(fp)
         if expectedSHA256Sum != actualSHA256Sum:
             log.info("Invalid hash for %s. Actual: %s, expected: %s" %
                      (fp, actualSHA256Sum, expectedSHA256Sum))
             msg = _(
                 "Hashes do not match! Actual value is '{actualHash}'. Expected is '{expectedHash}'."
             ).format(actualHash=actualSHA256Sum,
                      expectedHash=expectedSHA256Sum)
             wx.CallAfter(errorUpdateDialog, msg)
             return
         curAddons = []
         for addon in addonHandler.getAvailableAddons():
             curAddons.append(addon)
         bundle = addonHandler.AddonBundle(fp)
         prevAddon = None
         bundleName = bundle.manifest['name']
         for addon in curAddons:
             if not addon.isPendingRemove and bundleName == addon.manifest[
                     "name"]:
                 prevAddon = addon
                 break
         if prevAddon:
             prevAddon.requestRemove()
         addonHandler.installAddonBundle(bundle)
         core.restart()
     except BaseException as e:
         log.error(e)
         return wx.CallAfter(errorUpdateDialog, e)
Ejemplo n.º 5
0
 def onTimer(self):
     if self.inTimer is True or self.hasBeenUpdated is True:
         return
     self.inTimer = True
     try:
         evt = self.updater.queue.get_nowait()
     except queue.Empty:
         evt = None
     if evt is not None:
         filepath = evt.get("download", None)
         if filepath is not None:
             import addonHandler
             for prev in addonHandler.getAvailableAddons():
                 if prev.name == updater.ADDON_NAME:
                     prev.requestRemove()
             bundle = addonHandler.AddonBundle(filepath)
             addonHandler.installAddonBundle(bundle)
             logHandler.log.info(
                 "Installed version %s, restart NVDA to make the changes permanent"
                 % (evt["version"]))
             self.hasBeenUpdated = True
     self.inTimer = False
     wx.CallLater(1000, self.onTimer)
Ejemplo n.º 6
0
def installAddon(storeClient, addon, closeAfter=False, silent=False):
    if silent == False:
        ui.message(_("Downloading %s") % (addon.name))
    data = storeClient.getAddonFile(addon.id, addon.versionId)

    if data is None:
        if silent == False:
            ui.message(_("Unable to download the add-on."))
        return False
    tmp = os.path.join(config.getUserDefaultConfigPath(),
                       "storeDownloadedAddon.nvda-addon")
    logHandler.log.info(u"Saving to %s" % (tmp))
    f = file(tmp, "wb")
    f.write(data)
    f.close()
    path = tmp
    if path is None:
        if silent == False:
            ui.message(_("Unable to download %s") % (addon.name))
        return False
    if silent == False:
        ui.message(_("Installing"))
    try:
        bundle = addonHandler.AddonBundle(path)
    except:
        logHandler.log.error("Error opening addon bundle from %s" % path,
                             exc_info=True)
        # Translators: The message displayed when an error occurs when opening an add-on package for adding.
        if silent == False:
            gui.messageBox(
                _("Failed to open add-on package file at %s - missing file or invalid file format"
                  ) % path,
                # Translators: The title of a dialog presented when an error occurs.
                _("Error"),
                wx.OK | wx.ICON_ERROR)
        return False
    bundleName = bundle.manifest['name']
    prevAddon = None
    for addon in addonHandler.getAvailableAddons():
        if not addon.isPendingRemove and bundleName == addon.manifest['name']:
            prevAddon = addon
            break
    if prevAddon:
        prevAddon.requestRemove()
    if silent is False:
        progressDialog = gui.IndeterminateProgressDialog(
            gui.mainFrame,
            # Translators: The title of the dialog presented while an Addon is being installed.
            _("Installing Add-on"),
            # Translators: The message displayed while an addon is being installed.
            _("Please wait while the add-on is being installed."))
        try:
            gui.ExecAndPump(addonHandler.installAddonBundle, bundle)
        except:
            logHandler.log.error("Error installing  addon bundle from %s" %
                                 addonPath,
                                 exc_info=True)
            progressDialog.done()
            del progressDialog
            # Translators: The message displayed when an error occurs when installing an add-on package.
            gui.messageBox(
                _("Failed to install add-on from %s") % (addon.name),
                # Translators: The title of a dialog presented when an error occurs.
                _("Error"),
                wx.OK | wx.ICON_ERROR)
            return False
        progressDialog.done()
        del progressDialog
    else:
        try:
            addonHandler.installAddonBundle(bundle)
        except:
            return False
    if closeAfter:
        wx.CallLater(1, core.restart)
    return True