Example #1
0
 def _installGPG(self, phase=0, dt=None):
     if getPlatform() == PLATFORM_MAC:
         # TODO handle errors
         if phase == 0:
             self._ui.setInteractive(False)
             
             self._setStatus("Searching for latest version...")
             dt = DownloadThread(getValidQtParent(), self.logger, "https://gpgtools.org/releases/macgpg2/appcast.xml")
             dt.success.connect(partial(self._install_gpg_finished, 0))
             dt.error.connect(partial(self._install_gpg_failed, 0))
             dt.start()
             
         elif phase == 1:
             xmlContent = dt.getResult()
             dt.close()
             
             e = ElementTree.fromstring(xmlContent)
             dmgURL = e.iter("channel").next().iter("item").next().iter("enclosure").next().attrib["url"]
             
             tmpFile = tempfile.NamedTemporaryFile(suffix=".dmg", prefix="macgpg", delete=False)
             self.logger.debug("Downloading %s to %s", dmgURL, tmpFile.name)
             self._setStatus("Downloading MacGPG...", progress=True)
             self._ui.setProgress(0)
             
             dt = DownloadThread(getValidQtParent(), self.logger, dmgURL, target=tmpFile, progress=True)
             dt.success.connect(partial(self._install_gpg_finished, 1))
             dt.error.connect(partial(self._install_gpg_failed, 1))
             dt.progressChanged.connect(self._downloadProgressChanged)
             dt.start()
             
         elif phase == 2:
             # indeterminate
             self._ui.setProgressIndeterminate(True)
             self._setStatus("Installing MacGPG...", progress=True)
             
             dmgFile = dt.target.name
             dt.close()
             
             st = ShellThread(getValidQtParent(), self.logger, [get_settings().get_resource('bin', 'mac_gpg_installer.sh'), dmgFile], context=dmgFile, quiet=False)
             st.finished.connect(partial(self._install_gpg_finished, 2))
             st.start()
             
         elif phase == 3:
             dmgFile = dt.context
             if os.path.exists(dmgFile):
                 os.remove(dmgFile)
             
             self._ui.setProgressIndeterminate(False)
             if dt.exitCode == 0:
                 self._setStatus("MacGPG installed successfully.")
             else:
                 self._setStatus("Error installing MacGPG.", err=True)
                 if dt.pErr:
                     self.logger.error("Error installing MacGPG.\nConsole output: %s", dt.pErr.strip())
             
             self._updateCheckButtonText()
             self._ui.setInteractive(True)
 def changeNextLunchTime(self, begin = None, end = None):
     if begin == None:
         if self.mainWindow == None:
             getCoreLogger().error("mainWindow is not initialized")
             return
         from lunchinator.timespan_input_dialog import TimespanInputDialog
         dialog = TimespanInputDialog(self.mainWindow, "Change Lunch Time", "When are you free for lunch today?", get_settings().get_next_lunch_begin(), get_settings().get_next_lunch_end())
         dialog.exec_()
         if dialog.result() == QDialog.Accepted:
             get_settings().set_next_lunch_time(dialog.getBeginTimeString(), dialog.getEndTimeString())
         else:
             return        
     else:
         get_settings().set_next_lunch_time(begin, end) 
         
     if self.resetNextLunchTimeTimer != None:
         self.resetNextLunchTimeTimer.stop()
         self.resetNextLunchTimeTimer.deleteLater()
         
     td = get_settings().get_next_lunch_reset_time()
     if td > 0:
         self.resetNextLunchTimeTimer = QTimer(getValidQtParent())
         self.resetNextLunchTimeTimer.timeout.connect(self._resetNextLunchTime)
         self.resetNextLunchTimeTimer.setSingleShot(True)
         self.resetNextLunchTimeTimer.start(abs(td) + 1000)
         
     get_server().call_info()
Example #3
0
 def checkForUpdate(self):
     self._setStatus("Checking for update...")
     from lunchinator.callables import AsyncCall
     AsyncCall(getValidQtParent(),
               self.logger,
               self._gitHandler.needsPull,
               self._checkUpdateSuccess,
               self._checkUpdateError)(returnReason=True)
Example #4
0
 def _checkForUpdates(self):
     if self._ui.getTable().model().rowCount() == 0:
         return
     
     from lunchinator.callables import AsyncCall
     self._setStatus("Checking for updates...", True)
     AsyncCall(getValidQtParent(),
               self.logger,
               self._checkAllRepositories,
               self._processUpdates,
               self._checkingError)()
Example #5
0
 def create_widget(self, parent):
     from PyQt4.QtGui import QTextEdit, QSizePolicy
     from lunchinator.callables import AsyncCall
     self._textview = QTextEdit(parent)
     self._textview.setLineWrapMode(QTextEdit.WidgetWidth)
     self._textview.setReadOnly(True)
     self._textview.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.MinimumExpanding)
     
     AsyncCall(getValidQtParent(), self.logger, self._downloadText, self._updateText, self._errorDownloadingText)()
     
     return self._textview
Example #6
0
 def checkForUpdate(self):
     if not self._has_gpg():
         # user clicked on "Install GPG"
         return self._installGPG()
     
     self._setStatus("Checking %s for Update..."%self._urlBase)
     
     if self._getCheckURLBase() == None:
         self._setStatus("Auto Update does not work on your OS yet.", True)
         return
     
     url = self._getCheckURLBase() + "/latest_version.asc"
     version_download = DownloadThread(getValidQtParent(), self.logger, url)
     version_download.success.connect(self._versionInfoDownloaded)
     version_download.error.connect(self._errorDownloading)
     version_download.finished.connect(version_download.deleteLater)
     version_download.start()
Example #7
0
 def activate(self):
     iface_general_plugin.activate(self)
     
     try:
         from PyQt4.QtCore import QTimer
         from online_update.appupdate.git_update import GitUpdateHandler
         from online_update.appupdate.mac_update import MacUpdateHandler
         from online_update.appupdate.external_update import ExternalUpdateHandler
         from online_update.appupdate.win_update import WinUpdateHandler
         from online_update.appupdate.app_update_handler import AppUpdateHandler
         from online_update.repoupdate.repo_update_handler import RepoUpdateHandler
         self._activated = True
     except ImportError:
         self._activated = False
         self.logger.warning("ImportError, cannot activate Auto Update")
         return
     
     if GitUpdateHandler.appliesToConfiguration(self.logger):
         self._appUpdateHandler = GitUpdateHandler(self.logger)
     elif MacUpdateHandler.appliesToConfiguration(self.logger):
         self._appUpdateHandler = MacUpdateHandler(self.logger, self.hidden_options["check_url"])
     elif ExternalUpdateHandler.appliesToConfiguration(self.logger):
         self._appUpdateHandler = ExternalUpdateHandler(self.logger)
     elif WinUpdateHandler.appliesToConfiguration(self.logger):
         self._appUpdateHandler = WinUpdateHandler(self.logger, self.hidden_options["check_url"])
     else:
         self._appUpdateHandler = AppUpdateHandler(self.logger)
         
     self._repoUpdateHandler = RepoUpdateHandler(self.logger)
         
     self._appUpdateHandler.activate()
     self._repoUpdateHandler.activate()
     
     get_notification_center().connectInstallUpdates(self.installUpdates)
     get_notification_center().connectRepositoriesChanged(self._repoUpdateHandler.checkForUpdates)
         
     if lunchinator_has_gui():
         self._scheduleTimer = QTimer(getValidQtParent())
         self._scheduleTimer.timeout.connect(self.checkForUpdate)
         self._scheduleTimer.start(online_update.CHECK_INTERVAL)
Example #8
0
 def _versionInfoDownloaded(self, thread, _url):
     try:
         signedString = thread.getResult()
     except:
         self._setStatus("Version info not available", True)
         return
     
     self.logger.debug("Update: Got version info, checking signature %s", signedString)
     
     ver_result = False
     try:
         ver_result = self._verifySignature(signedString)
     except:
         self.logger.exception("Error verifying signature")
         self._setStatus("Signature could not be verified because of unknown error", True)
         return
     
     if not ver_result:
         self._setStatus("Signature could not be verified", True)
         return
             
     self.logger.debug("Updater: Signature OK, checking version info")
     
     for l in signedString.splitlines():
         info = l.split(":", 1)
         if len(info) > 1:
             self._version_info[info[0]] = info[1].strip()
             
     if not self._version_info.has_key("URL") or not self._version_info.has_key("Commit Count"):
         self._setStatus("Version Info corrupt - URL and/or Commit Count missing", True)
         self.logger.debug(str(self._version_info))
         return
     else:
         try:
             self._version_info["Commit Count"] = int(self._version_info["Commit Count"])
         except:
             self._setStatus("Commit Count has wrong format: " % self._version_info["Commit Count"], True)
             return
             
     self._updateVersionLabel()
     
     self._installer_url = self._getCheckURLBase() + self._version_info["URL"]
     self._local_installer_file = os.path.join(get_settings().get_main_config_dir(), self._installer_url.rsplit('/', 1)[1])
     
     if self._hasNewVersion() and u"Change Log" in self._version_info:
         try:
             changeLog = json.loads(self._version_info[u"Change Log"])
             self._setChangeLog(changeLog)
         except:
             self.logger.exception("Error reading change log.")
             self._setChangeLog(["Error loading change log"])
     
     if self._hasNewVersion():
         # check if we already downloaded this version before
         if not self._checkHash(errorOnBadHash=False):
             self._setStatus("New version %s available, downloading ..." % (self._getDownloadedVersion()), progress=True)
             
             installer_download = DownloadThread(getValidQtParent(), self.logger, self._installer_url, target=open(self._local_installer_file, "wb"), progress=True)
             installer_download.progressChanged.connect(self._downloadProgressChanged)
             installer_download.success.connect(self._installerDownloaded)
             installer_download.error.connect(self._errorDownloading)
             installer_download.finished.connect(installer_download.deleteLater)
             installer_download.start()
     else:
         self._setStatus("No new version available")
 def checkForUpdates(self):
     AsyncCall(getValidQtParent(),
               self.logger,
               get_settings().get_plugin_repositories().checkForUpdates)()