diff --git a/src/Mod/AddonManager/AddonManager.py b/src/Mod/AddonManager/AddonManager.py index affd955280..31bde2ca53 100644 --- a/src/Mod/AddonManager/AddonManager.py +++ b/src/Mod/AddonManager/AddonManager.py @@ -587,4 +587,13 @@ class CommandAddonManager: pref.SetBool("AutoCheck",self.config.checkUpdates.isChecked()) pref.SetString("CustomRepositories",self.config.customRepositories.toPlainText()) +def check_updates(addon_name,callback): + + """Checks for updates for a given addon""" + + oname = "update_checker_"+addon_name + setattr(FreeCAD,oname,CheckSingleWorker(addon_name)) + getattr(FreeCAD,oname).updateAvailable.connect(callback) + getattr(FreeCAD,oname).start() + ## @} diff --git a/src/Mod/AddonManager/addonmanager_workers.py b/src/Mod/AddonManager/addonmanager_workers.py index 87e9b26c2d..ddf9f54a60 100644 --- a/src/Mod/AddonManager/addonmanager_workers.py +++ b/src/Mod/AddonManager/addonmanager_workers.py @@ -713,3 +713,36 @@ class InstallWorker(QtCore.QThread): if bakdir: shutil.rmtree(bakdir) return translate("AddonsInstaller", "Successfully installed") + " " + zipurl + + +class CheckSingleWorker(QtCore.QThread): + + """Worker to check for updates for a single addon""" + + updateAvailable = QtCore.Signal(bool) + + def __init__(self, name): + + QtCore.QThread.__init__(self) + self.name = name + + def run(self): + + try: + import git + except: + return + FreeCAD.Console.PrintLog("Checking for available updates of the "+name+" addon\n") + addondir = os.path.join(FreeCAD.getUserAppDataDir(),"Mod",name) + if os.path.exists(addondir): + if os.path.exists(addondir + os.sep + '.git'): + gitrepo = git.Git(addondir) + try: + gitrepo.fetch() + if "git pull" in gitrepo.status(): + self.updateAvailable.emit(True) + return + except: + # can fail for any number of reasons, ex. not being online + pass + self.updateAvailable.emit(False)