Addon manager: Added a button to check for available updates (git mode only)
This commit is contained in:
@@ -113,6 +113,11 @@ class AddonsInstaller(QtGui.QDialog):
|
||||
self.horizontalLayout = QtGui.QHBoxLayout()
|
||||
spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.horizontalLayout.addItem(spacerItem)
|
||||
self.buttonCheck = QtGui.QPushButton()
|
||||
icon = QtGui.QIcon.fromTheme("reload")
|
||||
self.buttonCheck.setIcon(icon)
|
||||
self.horizontalLayout.addWidget(self.buttonCheck)
|
||||
self.buttonCheck.hide()
|
||||
self.buttonInstall = QtGui.QPushButton()
|
||||
icon = QtGui.QIcon.fromTheme("download")
|
||||
self.buttonInstall.setIcon(icon)
|
||||
@@ -124,6 +129,7 @@ class AddonsInstaller(QtGui.QDialog):
|
||||
self.buttonCancel = QtGui.QPushButton()
|
||||
icon = QtGui.QIcon.fromTheme("cancel")
|
||||
self.buttonCancel.setIcon(icon)
|
||||
self.buttonCancel.setDefault(True)
|
||||
self.horizontalLayout.addWidget(self.buttonCancel)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||
|
||||
@@ -136,12 +142,23 @@ class AddonsInstaller(QtGui.QDialog):
|
||||
QtCore.QObject.connect(self.listWorkbenches, QtCore.SIGNAL("currentRowChanged(int)"), self.show)
|
||||
QtCore.QObject.connect(self.tabWidget, QtCore.SIGNAL("currentChanged(int)"), self.switchtab)
|
||||
QtCore.QObject.connect(self.listMacros, QtCore.SIGNAL("currentRowChanged(int)"), self.show_macro)
|
||||
QtCore.QObject.connect(self.buttonCheck, QtCore.SIGNAL("clicked()"), self.check_updates)
|
||||
QtCore.QMetaObject.connectSlotsByName(self)
|
||||
|
||||
self.update()
|
||||
|
||||
if not NOGIT:
|
||||
try:
|
||||
import git
|
||||
except:
|
||||
self.buttonCheck.hide()
|
||||
else:
|
||||
self.buttonCheck.show()
|
||||
|
||||
def retranslateUi(self):
|
||||
self.setWindowTitle(translate("AddonsInstaller","Addon manager"))
|
||||
self.labelDescription.setText(translate("AddonsInstaller", "Downloading addon list..."))
|
||||
self.buttonCheck.setToolTip(translate("AddonsInstaller", "Check for available updates"))
|
||||
self.buttonCancel.setText(translate("AddonsInstaller", "Close"))
|
||||
self.buttonInstall.setText(translate("AddonsInstaller", "Install / update"))
|
||||
self.buttonRemove.setText(translate("AddonsInstaller", "Remove"))
|
||||
@@ -159,6 +176,14 @@ class AddonsInstaller(QtGui.QDialog):
|
||||
self.update_worker.progressbar_show.connect(self.show_progress_bar)
|
||||
self.update_worker.start()
|
||||
|
||||
def check_updates(self):
|
||||
if self.tabWidget.currentIndex() == 0:
|
||||
self.check_worker = CheckWBWorker(self.repos)
|
||||
self.check_worker.mark.connect(self.mark)
|
||||
self.check_worker.info_label.connect(self.set_information_label)
|
||||
self.check_worker.progressbar_show.connect(self.show_progress_bar)
|
||||
self.check_worker.start()
|
||||
|
||||
def add_addon_repo(self, addon_repo):
|
||||
self.repos.append(addon_repo)
|
||||
if addon_repo[2] == 1 :
|
||||
@@ -195,6 +220,9 @@ class AddonsInstaller(QtGui.QDialog):
|
||||
self.macro_worker.info_label.connect(self.set_information_label)
|
||||
self.macro_worker.progressbar_show.connect(self.show_progress_bar)
|
||||
self.macro_worker.start()
|
||||
self.buttonCheck.setEnabled(False)
|
||||
else:
|
||||
self.buttonCheck.setEnabled(True)
|
||||
|
||||
def update_repos(self, repos):
|
||||
self.repos = repos
|
||||
@@ -244,6 +272,7 @@ class AddonsInstaller(QtGui.QDialog):
|
||||
self.listMacros.setEnabled(False)
|
||||
self.buttonInstall.setEnabled(False)
|
||||
self.buttonRemove.setEnabled(False)
|
||||
self.buttonCheck.setEnabled(False)
|
||||
self.progressBar.show()
|
||||
else:
|
||||
self.progressBar.hide()
|
||||
@@ -251,6 +280,8 @@ class AddonsInstaller(QtGui.QDialog):
|
||||
self.listMacros.setEnabled(True)
|
||||
self.buttonInstall.setEnabled(True)
|
||||
self.buttonRemove.setEnabled(True)
|
||||
if self.tabWidget.currentIndex() == 0:
|
||||
self.buttonCheck.setEnabled(True)
|
||||
|
||||
def remove(self):
|
||||
if self.tabWidget.currentIndex() == 0:
|
||||
@@ -296,6 +327,13 @@ class AddonsInstaller(QtGui.QDialog):
|
||||
self.listMacros.addItem(" "+str(macro[0]))
|
||||
macro[1] = 0
|
||||
|
||||
def mark(self,repo):
|
||||
for i in range(self.listWorkbenches.count()):
|
||||
w = self.listWorkbenches.item(i)
|
||||
if w.text().startswith(str(repo)):
|
||||
w.setText(str(repo) + str(" (Update available)"))
|
||||
w.setIcon(QtGui.QIcon.fromTheme("reload"))
|
||||
|
||||
|
||||
class UpdateWorker(QtCore.QThread):
|
||||
|
||||
@@ -369,6 +407,47 @@ class InfoWorker(QtCore.QThread):
|
||||
self.stop = True
|
||||
|
||||
|
||||
class CheckWBWorker(QtCore.QThread):
|
||||
info_label = QtCore.Signal(str)
|
||||
mark = QtCore.Signal(str)
|
||||
progressbar_show = QtCore.Signal(bool)
|
||||
|
||||
def __init__(self,repos):
|
||||
QtCore.QThread.__init__(self)
|
||||
self.repos = repos
|
||||
|
||||
def run(self):
|
||||
if NOGIT:
|
||||
self.stop = True
|
||||
return
|
||||
try:
|
||||
import git
|
||||
except:
|
||||
self.stop = True
|
||||
return
|
||||
self.progressbar_show.emit(True)
|
||||
basedir = FreeCAD.ConfigGet("UserAppData")
|
||||
moddir = basedir + os.sep + "Mod"
|
||||
self.info_label.emit(translate("AddonsInstaller", "Checking for new versions..."))
|
||||
upds = 0
|
||||
for repo in self.repos:
|
||||
if repo[2] == 1: #installed
|
||||
self.info_label.emit(translate("AddonsInstaller","Checking repo")+" "+repo[0]+"...")
|
||||
clonedir = moddir + os.sep + repo[0]
|
||||
if os.path.exists(clonedir):
|
||||
gitrepo = git.Git(clonedir)
|
||||
gitrepo.fetch()
|
||||
if "git pull" in gitrepo.status():
|
||||
self.mark.emit(repo[0])
|
||||
upds += 1
|
||||
self.progressbar_show.emit(False)
|
||||
if upds:
|
||||
self.info_label.emit(str(upds)+" "+translate("AddonsInstaller", "update(s) available"))
|
||||
else:
|
||||
self.info_label.emit(translate("AddonsInstaller","Everything is up to date"))
|
||||
self.stop = True
|
||||
|
||||
|
||||
class MacroWorker(QtCore.QThread):
|
||||
|
||||
add_macro = QtCore.Signal(object)
|
||||
|
||||
Reference in New Issue
Block a user