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 @@
+
+
+
+
+
+
+
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()