Added checking capabilities for the needed programs

This commit is contained in:
Sergio Costas 2014-08-05 01:13:52 +02:00
parent cb2de7db44
commit f405ae4ddf
7 changed files with 345 additions and 14 deletions

View file

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

View file

@ -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 """

View file

@ -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"))

View file

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