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

95
data/interface/wneeded.ui Normal file
View file

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.16.1 -->
<interface>
<requires lib="gtk+" version="3.10"/>
<object class="GtkTextBuffer" id="textbuffer"/>
<object class="GtkDialog" id="needed">
<property name="width_request">640</property>
<property name="height_request">350</property>
<property name="can_focus">False</property>
<property name="type_hint">dialog</property>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child internal-child="action_area">
<object class="GtkButtonBox" id="dialog-action_area1">
<property name="can_focus">False</property>
<property name="layout_style">center</property>
<child>
<object class="GtkButton" id="button1">
<property name="label">gtk-ok</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_top">4</property>
<property name="margin_bottom">4</property>
<property name="label" translatable="yes">Programs needed for Devede NG</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTextView" id="textview1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">False</property>
<property name="cursor_visible">False</property>
<property name="buffer">textbuffer</property>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<action-widgets>
<action-widget response="0">button1</action-widget>
</action-widgets>
</object>
</interface>

View file

@ -4,6 +4,7 @@
<requires lib="gtk+" version="3.10"/> <requires lib="gtk+" version="3.10"/>
<object class="GtkWindow" id="wselect_disk"> <object class="GtkWindow" id="wselect_disk">
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="title" translatable="yes">Devede NG</property>
<property name="resizable">False</property> <property name="resizable">False</property>
<property name="modal">True</property> <property name="modal">True</property>
<property name="window_position">center</property> <property name="window_position">center</property>
@ -311,6 +312,33 @@ Creates H.264 files in a MKV container</property>
<property name="position">6</property> <property name="position">6</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkButtonBox" id="buttonbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="layout_style">start</property>
<child>
<object class="GtkButton" id="programs_needed">
<property name="label" translatable="yes">Programs needed by Devede NG</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="on_programs_needed_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">7</property>
</packing>
</child>
</object> </object>
</child> </child>
</object> </object>

View file

@ -359,7 +359,7 @@
</object> </object>
<packing> <packing>
<property name="left_attach">0</property> <property name="left_attach">0</property>
<property name="top_attach">4</property> <property name="top_attach">5</property>
<property name="width">1</property> <property name="width">1</property>
<property name="height">1</property> <property name="height">1</property>
</packing> </packing>
@ -376,6 +376,32 @@
</attributes> </attributes>
</child> </child>
</object> </object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">5</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label10">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_right">4</property>
<property name="label" translatable="yes">Disc types supported:</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">4</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="disc_types_supported">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="top_attach">4</property> <property name="top_attach">4</property>

View file

@ -17,11 +17,12 @@
from gi.repository import Gtk,GObject from gi.repository import Gtk,GObject
import os import os
import subprocess
import devede.configuration_data import devede.configuration_data
class choose_disc_type(GObject.GObject): class choose_disc_type(GObject.GObject):
def __init__(self): def __init__(self):
self.config = devede.configuration_data.configuration.get_config() 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.add_from_file(os.path.join(self.config.glade,"wselect_disk.ui"))
builder.connect_signals(self) builder.connect_signals(self)
self.wask_window = builder.get_object("wselect_disk") 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() 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): def set_type(self,disc_type):
self.config.set_disc_type(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): def on_button_mkv_clicked(self,b):
self.set_type("mkv") 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): if (self.default_burner == None):
self.default_burner = element 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): def get_available_programs(self):
players = [] players = []
@ -183,7 +205,11 @@ class converter:
if converter.disc_types.count(self.config.disc_type) != 0: if converter.disc_types.count(self.config.disc_type) != 0:
return converter return converter
return None 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): def get_burner(self):
""" returns a class for the desired burner, or the most priviledged if the desired is not installed """ """ 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("analizer", analizers,self.config.film_analizer)
self.add_combobox("player", players,self.config.film_player) 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("menuer", menuers,self.config.menu_converter)
self.add_combobox("burner", burners, self.config.burner) self.add_combobox("burner", burners, self.config.burner)
builder = Gtk.Builder() self.builder = Gtk.Builder()
builder.set_translation_domain(self.config.gettext_domain) self.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.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() wsettings_window.show_all()
self.update_ui(builder) self.update_ui(self.builder)
self.set_data_converter(None)
retval = wsettings_window.run() retval = wsettings_window.run()
self.store_ui(builder) self.store_ui(self.builder)
wsettings_window.destroy() wsettings_window.destroy()
if retval == 1: if retval == 1:
@ -100,3 +102,18 @@ class settings_window(devede.interface_manager.interface_manager):
self.config.menu_converter = self.menuer self.config.menu_converter = self.menuer
self.config.burner = self.burner self.config.burner = self.burner
self.config.save_config() 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() mwindow = devede.project.devede_project()
ask_type = devede.choose_disc_type.choose_disc_type() 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() Gtk.main()
config_data.save_config() config_data.save_config()