From f405ae4ddf5c12a3e2b9570d749d5dbb8eaf34e4 Mon Sep 17 00:00:00 2001 From: Sergio Costas Date: Tue, 5 Aug 2014 01:13:52 +0200 Subject: [PATCH] Added checking capabilities for the needed programs --- data/interface/wneeded.ui | 95 ++++++++++++++++++++++ data/interface/wselect_disk.ui | 28 +++++++ data/interface/wsettings.ui | 28 ++++++- src/devede/choose_disc_type.py | 142 ++++++++++++++++++++++++++++++++- src/devede/converter.py | 28 ++++++- src/devede/settings.py | 35 +++++--- src/devede_ng.py | 3 +- 7 files changed, 345 insertions(+), 14 deletions(-) create mode 100644 data/interface/wneeded.ui diff --git a/data/interface/wneeded.ui b/data/interface/wneeded.ui new file mode 100644 index 0000000..c98ab1d --- /dev/null +++ b/data/interface/wneeded.ui @@ -0,0 +1,95 @@ + + + + + + + 640 + 350 + False + dialog + + + False + vertical + 2 + + + False + center + + + gtk-ok + True + True + True + True + + + False + True + 0 + + + + + False + True + end + 0 + + + + + True + False + vertical + + + True + False + 4 + 4 + Programs needed for Devede NG + + + False + True + 0 + + + + + True + True + in + + + True + True + False + False + textbuffer + + + + + True + True + 1 + + + + + True + True + 1 + + + + + + button1 + + + diff --git a/data/interface/wselect_disk.ui b/data/interface/wselect_disk.ui index 5a24485..9d9064f 100644 --- a/data/interface/wselect_disk.ui +++ b/data/interface/wselect_disk.ui @@ -4,6 +4,7 @@ False + Devede NG False True center @@ -311,6 +312,33 @@ Creates H.264 files in a MKV container 6 + + + True + False + vertical + start + + + Programs needed by Devede NG + True + True + True + + + + False + True + 0 + + + + + False + True + 7 + + diff --git a/data/interface/wsettings.ui b/data/interface/wsettings.ui index 4ddd608..c4fb115 100644 --- a/data/interface/wsettings.ui +++ b/data/interface/wsettings.ui @@ -359,7 +359,7 @@ 0 - 4 + 5 1 1 @@ -376,6 +376,32 @@ + + 1 + 5 + 1 + 1 + + + + + True + False + 4 + Disc types supported: + + + 0 + 4 + 1 + 1 + + + + + True + False + 1 4 diff --git a/src/devede/choose_disc_type.py b/src/devede/choose_disc_type.py index ad426f2..4fcfb2f 100644 --- a/src/devede/choose_disc_type.py +++ b/src/devede/choose_disc_type.py @@ -17,11 +17,12 @@ from gi.repository import Gtk,GObject import os +import subprocess import devede.configuration_data class choose_disc_type(GObject.GObject): - + def __init__(self): self.config = devede.configuration_data.configuration.get_config() @@ -32,8 +33,72 @@ class choose_disc_type(GObject.GObject): builder.add_from_file(os.path.join(self.config.glade,"wselect_disk.ui")) builder.connect_signals(self) self.wask_window = builder.get_object("wselect_disk") + + self.cv = devede.converter.converter.get_converter() + dvd = True + vcd = True + cvd = True + svcd = True + divx = True + mkv = True + analizers, players, converters, menuers, burners = self.cv.get_needed_programs() + + if (analizers != None) or (converters != None): + dvd = False + vcd = False + cvd = False + svcd = False + divx = False + mkv = False + + if menuers != None: + dvd = False + + if self.check_program(["dvdauthor","--help"]) == False: + dvd = False + if self.check_program(["mkisofs","--help"]) == False: + dvd = False + if self.check_program(["vcdimager","--help"]) == False: + vcd = False + svcd = False + cvd = False + if self.check_program(["spumux" , "--help"]) == False: + dvd = False + vcd = False + svcd = False + cvd = False + + if self.cv.discs.count("dvd") == 0: + dvd = False + if self.cv.discs.count("vcd") == 0: + vcd = False + if self.cv.discs.count("svcd") == 0: + svcd = False + if self.cv.discs.count("cvd") == 0: + cvd = False + if self.cv.discs.count("divx") == 0: + divx = False + if self.cv.discs.count("mkv") == 0: + mkv = False + + builder.get_object("button_dvd").set_sensitive(dvd) + builder.get_object("button_vcd").set_sensitive(vcd) + builder.get_object("button_svcd").set_sensitive(svcd) + builder.get_object("button_cvd").set_sensitive(cvd) + builder.get_object("button_divx").set_sensitive(divx) + builder.get_object("button_mkv").set_sensitive(mkv) + self.wask_window.show_all() + def check_program(self,command_line): + try: + handle = subprocess.Popen(command_line, stdout = subprocess.PIPE, stderr = subprocess.PIPE) + (stdout, stderr) = handle.communicate() + retval = handle.wait() + return True + except: + return False + def set_type(self,disc_type): self.config.set_disc_type(disc_type) @@ -64,3 +129,78 @@ class choose_disc_type(GObject.GObject): def on_button_mkv_clicked(self,b): self.set_type("mkv") + + def on_programs_needed_clicked(self,b): + + builder = Gtk.Builder() + builder.set_translation_domain(self.config.gettext_domain) + builder.add_from_file(os.path.join(self.config.glade,"wneeded.ui")) + window = builder.get_object("needed") + textbuf = builder.get_object("textbuffer") + + window.show_all() + + analizers, players, menuers, converters, burners = self.cv.get_supported_programs() + analizers_i, players_i, menuers_i, converters_i, burners_i = self.cv.get_available_programs() + + text = "" + for e in analizers: + if analizers_i.count(e.display_name) == 0: + text += _("\t%(program_name)s (not installed)\n") % {"program_name": e.display_name} + else: + text += _("\t%(program_name)s (installed)\n") % {"program_name": e.display_name} + text1 = _("Movie identifiers (install at least one of these):\n\n%(program_list)s\n") % {"program_list" : text} + + text = "" + for e in players: + if players_i.count(e.display_name) == 0: + text += _("\t%(program_name)s (not installed)\n") % {"program_name": e.display_name} + else: + text += _("\t%(program_name)s (installed)\n") % {"program_name": e.display_name} + text2 = _("Movie players (install at least one of these):\n\n%(program_list)s\n") % {"program_list" : text} + + text = "" + for e in converters: + sup = "" + for s in e.disc_types: + if sup != "": + sup += ", " + sup += s + if converters_i.count(e.display_name) == 0: + text += _("\t%(program_name)s (not installed)\n") % {"program_name": e.display_name + " ("+sup+")"} + else: + text += _("\t%(program_name)s (installed)\n") % {"program_name": e.display_name + " ("+sup+")"} + text3 = _("Movie Converters (install at least one of these):\n\n%(program_list)s\n") % {"program_list" : text} + + text = "" + for e in burners: + if burners_i.count(e.display_name) == 0: + text += _("\t%(program_name)s (not installed)\n") % {"program_name": e.display_name} + else: + text += _("\t%(program_name)s (installed)\n") % {"program_name": e.display_name} + text4 = _("CD/DVD burners (install at least one of these):\n\n%(program_list)s\n") % {"program_list" : text} + + text = "" + if self.check_program(["dvdauthor","--help"]) == False: + text += _("\t%(program_name)s (not installed)\n") % {"program_name": "DVDAUTHOR (dvd)"} + else: + text += _("\t%(program_name)s (installed)\n") % {"program_name": "DVDAUTHOR (dvd)"} + if self.check_program(["mkisofs","--help"]) == False: + text += _("\t%(program_name)s (not installed)\n") % {"program_name": "MKISOFS/GENISOIMAGE (dvd)"} + else: + text += _("\t%(program_name)s (installed)\n") % {"program_name": "MKISOFS/GENISOIMAGE (dvd)"} + if self.check_program(["vcdimager","--help"]) == False: + text += _("\t%(program_name)s (not installed)\n") % {"program_name": "VCDIMAGER (vcd, svcd, cvd)"} + else: + text += _("\t%(program_name)s (installed)\n") % {"program_name": "VCDIMAGER (vcd, svcd, cvd)"} + if self.check_program(["spumux" , "--help"]) == False: + text += _("\t%(program_name)s (not installed)\n") % {"program_name": "SPUMUX (dvd, vcd, svcd, cvd)"} + else: + text += _("\t%(program_name)s (installed)\n") % {"program_name": "SPUMUX (dvd, vcd, svcd, cvd)"} + + text5 = _("Other programs:\n\n%(program_list)s\n") % {"program_list" : text} + + final_text = text1+text2+text3+text4+text5 + textbuf.insert_at_cursor(final_text,len(final_text)) + window.run() + window.destroy() \ No newline at end of file diff --git a/src/devede/converter.py b/src/devede/converter.py index d2214b7..cb174a2 100644 --- a/src/devede/converter.py +++ b/src/devede/converter.py @@ -80,6 +80,28 @@ class converter: if (self.default_burner == None): self.default_burner = element + def get_supported_programs(self): + + analizers = [] + players = [] + converters = [] + menuers = [] + burners = [] + + for element in self.c: + if (element.supports_analize): + analizers.append(element) + if (element.supports_play): + players.append(element) + if (element.supports_convert): + converters.append(element) + if (element.supports_menu): + menuers.append(element) + if (element.supports_burn): + burners.append(element) + + return (analizers, players, menuers, converters, burners) + def get_available_programs(self): players = [] @@ -183,7 +205,11 @@ class converter: if converter.disc_types.count(self.config.disc_type) != 0: return converter return None - + + def get_disc_converter_by_name(self,name): + if name in self.converters: + return self.converters[name] + return None def get_burner(self): """ returns a class for the desired burner, or the most priviledged if the desired is not installed """ diff --git a/src/devede/settings.py b/src/devede/settings.py index 3f42fe2..b2131a2 100644 --- a/src/devede/settings.py +++ b/src/devede/settings.py @@ -72,23 +72,25 @@ class settings_window(devede.interface_manager.interface_manager): self.add_combobox("analizer", analizers,self.config.film_analizer) self.add_combobox("player", players,self.config.film_player) - self.add_combobox("converter", converters,self.config.film_converter) + self.add_combobox("converter", converters,self.config.film_converter,self.set_data_converter) self.add_combobox("menuer", menuers,self.config.menu_converter) self.add_combobox("burner", burners, self.config.burner) - builder = Gtk.Builder() - builder.set_translation_domain(self.config.gettext_domain) - - builder.add_from_file(os.path.join(self.config.glade,"wsettings.ui")) - builder.connect_signals(self) - wsettings_window = builder.get_object("settings") + self.builder = Gtk.Builder() + self.builder.set_translation_domain(self.config.gettext_domain) + self.builder.add_from_file(os.path.join(self.config.glade,"wsettings.ui")) + self.builder.connect_signals(self) + wsettings_window = self.builder.get_object("settings") + self.wconverter = self.builder.get_object("converter") + self.wtypes = self.builder.get_object("disc_types_supported") wsettings_window.show_all() - self.update_ui(builder) + self.update_ui(self.builder) + self.set_data_converter(None) retval = wsettings_window.run() - self.store_ui(builder) + self.store_ui(self.builder) wsettings_window.destroy() if retval == 1: @@ -100,3 +102,18 @@ class settings_window(devede.interface_manager.interface_manager): self.config.menu_converter = self.menuer self.config.burner = self.burner self.config.save_config() + + def set_data_converter(self,b): + + self.store_ui(self.builder) + cv = devede.converter.converter.get_converter() + cv2 = cv.get_disc_converter_by_name(self.converter) + data = "" + for t in cv2.disc_types: + if data != "": + data += ", " + data += t + if data != "": + self.wtypes.set_text(data) + else: + self.wtypes.set_text(_("No discs supported")) \ No newline at end of file diff --git a/src/devede_ng.py b/src/devede_ng.py index 40574b5..b6cc5ff 100755 --- a/src/devede_ng.py +++ b/src/devede_ng.py @@ -47,7 +47,6 @@ Gtk.init(sys.argv) mwindow = devede.project.devede_project() ask_type = devede.choose_disc_type.choose_disc_type() -# this allows to check the availability of all the programs needed for Devede -devede.converter.converter.get_converter() + Gtk.main() config_data.save_config()