Added checking capabilities for the needed programs
This commit is contained in:
parent
cb2de7db44
commit
f405ae4ddf
7 changed files with 345 additions and 14 deletions
95
data/interface/wneeded.ui
Normal file
95
data/interface/wneeded.ui
Normal 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>
|
||||
|
|
@ -4,6 +4,7 @@
|
|||
<requires lib="gtk+" version="3.10"/>
|
||||
<object class="GtkWindow" id="wselect_disk">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="title" translatable="yes">Devede NG</property>
|
||||
<property name="resizable">False</property>
|
||||
<property name="modal">True</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>
|
||||
</packing>
|
||||
</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>
|
||||
</child>
|
||||
</object>
|
||||
|
|
|
|||
|
|
@ -359,7 +359,7 @@
|
|||
</object>
|
||||
<packing>
|
||||
<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="height">1</property>
|
||||
</packing>
|
||||
|
|
@ -376,6 +376,32 @@
|
|||
</attributes>
|
||||
</child>
|
||||
</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>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">4</property>
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
@ -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 """
|
||||
|
|
|
|||
|
|
@ -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"))
|
||||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue