diff --git a/picard/ui/infostatus.py b/picard/ui/infostatus.py index 7a40f1dfd..8ac54494e 100644 --- a/picard/ui/infostatus.py +++ b/picard/ui/infostatus.py @@ -66,16 +66,22 @@ class InfoStatus(QtWidgets.QWidget, Ui_InfoStatus): self.val4.setToolTip(t4) self.label4.setToolTip(t4) - def setFiles(self, num): + def update(self, files=0, albums=0, pending_files=0, pending_requests=0): + self.set_files(files) + self.set_albums(albums) + self.set_pending_files(pending_files) + self.set_pending_requests(pending_requests) + + def set_files(self, num): self.val1.setText(str(num)) - def setAlbums(self, num): + def set_albums(self, num): self.val2.setText(str(num)) - def setPendingFiles(self, num): + def set_pending_files(self, num): self.val3.setText(str(num)) - def setPendingRequests(self, num): + def set_pending_requests(self, num): if num <= 0: enabled = QtGui.QIcon.Disabled else: diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index 86122e37a..24d0ff4bf 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -115,6 +115,7 @@ class MainWindow(QtWidgets.QMainWindow, PreserveGeometry): self.ignore_selection_changes = False self.toolbar = None self.player = None + self.status_indicators = [] player = Player(self) if player.available: self.player = player @@ -213,6 +214,9 @@ class MainWindow(QtWidgets.QMainWindow, PreserveGeometry): self.saveWindowState() event.accept() + def register_status_indicator(self, indicator): + self.status_indicators.append(indicator) + def show_quit_confirmation(self): unsaved_files = sum(a.get_num_unsaved_files() for a in self.tagger.albums.values()) QMessageBox = QtWidgets.QMessageBox @@ -267,7 +271,7 @@ class MainWindow(QtWidgets.QMainWindow, PreserveGeometry): def create_statusbar(self): """Creates a new status bar.""" self.statusBar().showMessage(_("Ready")) - self.infostatus = InfoStatus(self) + infostatus = InfoStatus(self) self.listening_label = QtWidgets.QLabel() self.listening_label.setVisible(False) self.listening_label.setToolTip("" + _( @@ -275,20 +279,24 @@ class MainWindow(QtWidgets.QMainWindow, PreserveGeometry): "you \"Search\" or \"Open in Browser\" from Picard, clicking the " "\"Tagger\" button on the web page loads the release into Picard." )) - self.statusBar().addPermanentWidget(self.infostatus) + self.statusBar().addPermanentWidget(infostatus) self.statusBar().addPermanentWidget(self.listening_label) self.tagger.tagger_stats_changed.connect(self.update_statusbar_stats) self.tagger.listen_port_changed.connect(self.update_statusbar_listen_port) + self.register_status_indicator(infostatus) self.update_statusbar_stats() @throttle(100) def update_statusbar_stats(self): """Updates the status bar information.""" - self.infostatus.setFiles(len(self.tagger.files)) - self.infostatus.setAlbums(len(self.tagger.albums)) - self.infostatus.setPendingFiles(File.num_pending_files) - ws = self.tagger.webservice - self.infostatus.setPendingRequests(ws.num_pending_web_requests) + total_files = len(self.tagger.files) + total_albums = len(self.tagger.albums) + pending_files = File.num_pending_files + pending_requests = self.tagger.webservice.num_pending_web_requests + + for indicator in self.status_indicators: + indicator.update(files=total_files, albums=total_albums, + pending_files=pending_files, pending_requests=pending_requests) def update_statusbar_listen_port(self, listen_port): if listen_port: