diff --git a/blackbox/Functions.py b/blackbox/Functions.py index a4e4f07..5bf0540 100644 --- a/blackbox/Functions.py +++ b/blackbox/Functions.py @@ -14,7 +14,7 @@ from datetime import datetime from datetime import timedelta from datetime import time import shutil - +import Functions as fn from Settings import Settings from Package import Package @@ -372,8 +372,143 @@ def refresh_ui( if content is not None: for widget in content.get_children(): content.remove(widget) - - + # DOCS: https://docs.gtk.org/gtk3/class.Label.html + lbl_install = Gtk.Label(xalign=0, yalign=0) + # DOCS: https://stackoverflow.com/questions/40072104/multi-color-text-in-one-gtk-label + lbl_install.set_markup( + "Package %s installed." % pkg.name + ) + content.add(lbl_install) + if self.timeout_id is not None: + # DOCS: https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib/source/fn.source_remove.html + GLib.source_remove(self.timeout_id) + self.timeout_id = None + self.timeout_id = GLib.timeout_add( + 100, + reveal_infobar, + self, + progress_dialog, + ) + if installed is False and action == "install": + logger.debug("Toggle switch state = False") + if progress_dialog is not None: + switch.set_sensitive(True) + switch.set_state(False) + switch.set_active(False) + if progress_dialog.pkg_dialog_closed is False: + progress_dialog.set_title("%s install failed" % pkg.name) + progress_dialog.infobar.set_name("infobar_error") + content = progress_dialog.infobar.get_content_area() + if content is not None: + for widget in content.get_children(): + content.remove(widget) + lbl_install = Gtk.Label(xalign=0, yalign=0) + lbl_install.set_markup( + "Package %s installed failed." % pkg.name + ) + content.add(lbl_install) + if self.timeout_id is not None: + # DOCS: https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib/source/fn.source_remove.html + GLib.source_remove(self.timeout_id) + self.timeout_id = None + self.timeout_id = GLib.timeout_add( + 100, + reveal_infobar, + self, + progress_dialog, + ) + else: + logger.debug(" ".join(process_stdout_lst)) + message_dialog = MessageDialog( + "Errors occured suring installation", + "Errors occured during installation of %s failed" % pkg.name, + "Pacman failed to install %s" %pkg.name, + " ".join(process_stdout_lst), + "error", + True, + ) + message_dialog.show_all() + result = message_dialog.run() + message_dialog.destroy() + elif progress_dialog is None or progress_dialog.pkg_dialog_closed is True: + # DOCS: https://bbs.archlinux.org/viewtopic.php?id=48234 + if ( + "error: failed to init transaction (unable to lock database)\n" in process_stdout_lst + ): + if progress_dialog is None: + logger.debug("Holding Package") + if self.display_package_progress is False: + inst_str = [ + "pacman", + "-S", + pkg.name, + "--needed", + "--noconfirm", + ] + self.pkg_holding_queue.put( + ( + pkg, + action, + switch, + inst_str, + progress_dialog, + ), + ) + else: + logger.debug(" ".join(process_stdout_lst)) + switch.set_sensitive(True) + switch.set_state(False) + switch.set_active(False) + proc = fn.get_pacman_process() + message_dialog = MessageDialog( + "Warning", + "Unable to proceed, pacman lock found!", + "Pacman is unable to lock the database inside: %s" % fn.pacman_lockfile, + "Pacman is processing: %s" % proc, + "warning", + False, + ) + message_dialog.show_all() + result = message_dialog.run() + message_dialog.destroy() + elif "error: traget not found: %s\n" %pkg.name in process_stdout_lst: + switch.set_sensitive(True) + switch.set_state(False) + switch.set_active(False) + message_dialog = MessageDialog( + "Error", + "%s not found!" % pkg.name, + "Blackbox unable to process the request!", + "Are you sure pacman config is correct?", + "error", + False, + ) + message_dialog.show_all() + result = message_dialog.run() + message_dialog.destroy() + else: + switch.set_sensitive(True) + switch.set_state(False) + switch.set_active(False) + message_dialog = MessageDialog( + "Errors occured", + "Errors occured during installation of %s failed" % pkg.name, + "Pacman failed to install %s\n" %pkg.name, + " ".join(process_stdout_lst), + "error", + True, + ) + message_dialog.show_all() + result = message_dialog.run() + message_dialog.destroy() +def reveal_infobar( + self, + progress_dialog, +): + progress_dialog.infobar.set_revealed(True) + progress_dialog.infobar.show_all() + GLib.source_remove(self.timeout_id) + self.timeout_id = None def update_progress_textview( self, diff --git a/blackbox/ui/GUI.py b/blackbox/ui/GUI.py index f32ca86..955cb98 100644 --- a/blackbox/ui/GUI.py +++ b/blackbox/ui/GUI.py @@ -691,7 +691,7 @@ def setup_headerbar(self, Gtk, settings): vbox_buttons.pack_start(self.modelbtn_pacmanlog, False, True, 0) vbox_buttons.pack_start(modelbtn_packages_export, False, True, 0) vbox_buttons.pack_start(modelbtn_packages_import, False, True, 0) - vbox_buttons.pack_start(modelbtn_iso_packages_list, False, True, 0) + # vbox_buttons.pack_start(modelbtn_iso_packages_list, False, True, 0) vbox_buttons.pack_start(modelbtn_package_search, False, True, 0) vbox_buttons.pack_start(modelbtn_about_app, False, True, 0)