Supports to use MKISOFS or GENISOIMAGE separately

This commit is contained in:
Sergio Costas 2014-08-06 20:41:41 +02:00
parent ec4829812a
commit 57a6e764a4
13 changed files with 216 additions and 21 deletions

View file

@ -30,6 +30,7 @@ class avconv_converter(devede.executor.executor):
supports_play = False
supports_convert = True
supports_menu = True
supports_mkiso = False
supports_burn = False
display_name = "AVCONV"
disc_types = []

View file

@ -25,6 +25,7 @@ class brasero(devede.executor.executor):
supports_play = False
supports_convert = False
supports_menu = False
supports_mkiso = False
supports_burn = True
display_name = "BRASERO"

View file

@ -41,7 +41,7 @@ class choose_disc_type(GObject.GObject):
svcd = True
divx = True
mkv = True
analizers, players, converters, menuers, burners = self.cv.get_needed_programs()
analizers, players, converters, menuers, burners, mkiso = self.cv.get_needed_programs()
if (analizers != None) or (converters != None):
dvd = False
@ -54,9 +54,10 @@ class choose_disc_type(GObject.GObject):
if menuers != None:
dvd = False
if self.check_program(["dvdauthor","--help"]) == False:
if mkiso != None:
dvd = False
if self.check_program(["mkisofs","--help"]) == False:
if self.check_program(["dvdauthor","--help"]) == False:
dvd = False
if self.check_program(["vcdimager","--help"]) == False:
vcd = False
@ -140,8 +141,8 @@ class choose_disc_type(GObject.GObject):
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()
analizers, players, menuers, converters, burners, mkiso = self.cv.get_supported_programs()
analizers_i, players_i, menuers_i, converters_i, burners_i, mkiso_i = self.cv.get_available_programs()
text = ""
for e in analizers:
@ -180,15 +181,19 @@ class choose_disc_type(GObject.GObject):
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 = ""
for e in mkiso:
if mkiso_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}
text5 = _("ISO creators (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:
@ -198,9 +203,9 @@ class choose_disc_type(GObject.GObject):
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}
text6 = _("Other programs:\n\n%(program_list)s\n") % {"program_list" : text}
final_text = text1+text2+text3+text4+text5
final_text = text1+text2+text3+text4+text5+text6
textbuf.insert_at_cursor(final_text,len(final_text))
window.run()
window.destroy()

View file

@ -97,6 +97,7 @@ class configuration(GObject.GObject):
self.sub_language = None
self.sub_codepage = None
self.burner = None
self.mkiso = None
config_path = os.path.join(os.environ.get("HOME"),".devede")
try:
@ -144,6 +145,8 @@ class configuration(GObject.GObject):
self.subtitles_font_size = int(linea[19:].strip())
if linea[:7]=="burner:":
self.burner = int(linea[7:].strip())
if linea[:6]=="mkiso:":
self.mkiso = int(linea[6:].strip())
config_data.close()
except:
pass
@ -182,6 +185,10 @@ class configuration(GObject.GObject):
config_data.write("film_converter:"+str(self.film_converter)+"\n")
if (self.menu_converter != None):
config_data.write("menu_converter:"+str(self.menu_converter)+"\n")
if self.burner != None:
config_data.write("burner:"+str(self.burner)+"\n")
if self.mkiso != None:
config_data.write("mkiso:"+str(self.mkiso)+"\n")
if (self.sub_codepage != None):
config_data.write("sub_codepage:"+str(self.sub_codepage)+"\n")
if (self.sub_language != None):

View file

@ -22,6 +22,8 @@ import devede.ffmpeg_converter
import devede.vlc
import devede.brasero
import devede.k3b
import devede.mkisofs
import devede.genisoimage
class converter:
@ -39,7 +41,7 @@ class converter:
self.config = devede.configuration_data.configuration.get_config()
# List of classes with conversion capabilities, in order of preference
self.c = [devede.vlc.vlc_player, devede.mplayer_detector.mplayer_detector, devede.ffmpeg_converter.ffmpeg_converter, devede.avconv_converter.avconv_converter,
devede.brasero.brasero, devede.k3b.k3b]
devede.brasero.brasero, devede.k3b.k3b, devede.mkisofs.mkisofs, devede.genisoimage.genisoimage]
self.analizers = {}
self.default_analizer = None
@ -49,6 +51,8 @@ class converter:
self.default_converter = None
self.menuers = {}
self.default_menuer = None
self.mkiso = {}
self.default_mkiso = None
self.burners = {}
self.default_burner = None
self.discs = []
@ -76,17 +80,23 @@ class converter:
self.menuers[name] = element
if (self.default_menuer == None):
self.default_menuer = element
if (element.supports_mkiso):
self.mkiso[name] = element
if (self.default_mkiso == None):
self.default_mkiso = element
if (element.supports_burn):
self.burners[name] = element
if (self.default_burner == None):
self.default_burner = element
def get_supported_programs(self):
analizers = []
players = []
converters = []
menuers = []
mkiso = []
burners = []
for element in self.c:
@ -98,10 +108,13 @@ class converter:
converters.append(element)
if (element.supports_menu):
menuers.append(element)
if (element.supports_mkiso):
mkiso.append(element)
if (element.supports_burn):
burners.append(element)
return (analizers, players, menuers, converters, burners)
return (analizers, players, menuers, converters, burners, mkiso)
def get_available_programs(self):
@ -110,6 +123,7 @@ class converter:
converters = []
analizers = []
burners = []
mkiso = []
for e in self.analizers:
analizers.append(e)
@ -121,14 +135,17 @@ class converter:
converters.append(e)
for e in self.burners:
burners.append(e)
for e in self.mkiso:
mkiso.append(e)
return (analizers, players, menuers, converters, burners, mkiso)
return (analizers, players, menuers, converters, burners)
def get_needed_programs(self):
""" returns a tupla with four lists. When a list is NONE, there are installed in the system
""" returns a tupla with six lists. When a list is NONE, there are installed in the system
programs that covers the needs for that group; when not, it contains the programs valid
to cover the needs for that group.
The groups are, in this order: ANALIZERS, PLAYERS, CONVERTERS, MENUERS, BURNERS
The groups are, in this order: ANALIZERS, PLAYERS, CONVERTERS, MENUERS, BURNERS, MKISO
(menuers are the programs that creates the mpeg files for menus) """
if (self.default_analizer != None):
@ -151,6 +168,10 @@ class converter:
burners = None
else:
burners = []
if (self.default_mkiso != None):
mkiso = None
else:
mkiso = []
for element in self.c:
e = element()
@ -165,8 +186,10 @@ class converter:
menuers.append(name)
if (e.supports_burn) and (burners != None):
burners.append(name)
if (e.supports_mkiso) and (mkiso != None):
mkiso.append(name)
return ( analizers, players, converters, menuers, burners )
return ( analizers, players, converters, menuers, burners, mkiso )
def get_film_player(self):
""" returns a class for the desired film player, or the most priviledged if the desired is not installed """
@ -218,4 +241,12 @@ class converter:
if (self.config.burner == None) or (self.config.burner not in self.burners):
return self.default_burner
else:
return self.burners[self.config.burner]
return self.burners[self.config.burner]
def get_mkiso(self):
""" returns a class for the desired mkiso, or the most priviledged if the desired is not installed """
if (self.config.mkiso == None) or (self.config.mkiso not in self.mkiso):
return self.default_mkiso
else:
return self.mkiso[self.config.mkiso]

View file

@ -30,6 +30,7 @@ class ffmpeg_converter(devede.executor.executor):
supports_play = False
supports_convert = True
supports_menu = True
supports_mkiso = False
supports_burn = False
display_name = "FFMPEG"
disc_types = []

83
src/devede/genisoimage.py Normal file
View file

@ -0,0 +1,83 @@
#!/usr/bin/env python3
# Copyright 2014 (C) Raster Software Vigo (Sergio Costas)
#
# This file is part of DeVeDe-NG
#
# DeVeDe-NG is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# DeVeDe-NG is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>
import os
import devede.configuration_data
import subprocess
import devede.executor
class genisoimage(devede.executor.executor):
supports_analize = False
supports_play = False
supports_convert = False
supports_menu = False
supports_mkiso = True
supports_burn = False
display_name = "GENISOIMAGE"
@staticmethod
def check_is_installed():
try:
handle = subprocess.Popen(["genisoimage","--help"], stdout = subprocess.PIPE, stderr = subprocess.PIPE)
(stdout, stderr) = handle.communicate()
if 0==handle.wait():
return True
else:
return False
except:
return False
def __init__(self):
devede.executor.executor.__init__(self)
self.config = devede.configuration_data.configuration.get_config()
def create_iso (self, path, name):
filesystem_path = os.path.join(path,name)
final_path = os.path.join(path,name+".iso")
self.command_var=[]
self.command_var.append("genisoimage")
self.command_var.append("-dvd-video")
self.command_var.append("-V")
self.command_var.append("DVDVIDEO")
self.command_var.append("-v")
self.command_var.append("-udf")
self.command_var.append("-o")
self.command_var.append(final_path)
self.command_var.append(filesystem_path)
self.text = _("Creating ISO image")
def process_stdout(self,data):
return
def process_stderr(self,data):
if (data[0].find("% done") == -1):
return
l = data[0].split("%")
p = float(l[0])
self.progress_bar[1].set_fraction(p/100.0)
self.progress_bar[1].set_text("%.1f%%" % (p))
return

View file

@ -25,6 +25,7 @@ class k3b(devede.executor.executor):
supports_play = False
supports_convert = False
supports_menu = False
supports_mkiso = False
supports_burn = True
display_name = "K3B"

View file

@ -19,10 +19,31 @@
import os
import devede.configuration_data
import subprocess
import devede.executor
class mkisofs(devede.executor.executor):
supports_analize = False
supports_play = False
supports_convert = False
supports_menu = False
supports_mkiso = True
supports_burn = False
display_name = "MKISOFS"
@staticmethod
def check_is_installed():
try:
handle = subprocess.Popen(["mkisofs","--help"], stdout = subprocess.PIPE, stderr = subprocess.PIPE)
(stdout, stderr) = handle.communicate()
if 0==handle.wait():
return True
else:
return False
except:
return False
def __init__(self):
devede.executor.executor.__init__(self)

View file

@ -28,6 +28,7 @@ class mplayer_detector(devede.executor.executor):
supports_play = True
supports_convert = False
supports_menu = False
supports_mkiso = False
supports_burn = False
display_name = "MPLAYER"

View file

@ -68,12 +68,13 @@ class settings_window(devede.interface_manager.interface_manager):
self.add_filebutton("tempo_path", self.config.tmp_folder)
c = devede.converter.converter.get_converter()
(analizers, players, menuers, converters, burners) = c.get_available_programs()
(analizers, players, menuers, converters, burners, mkiso) = c.get_available_programs()
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.set_data_converter)
self.add_combobox("menuer", menuers,self.config.menu_converter)
self.add_combobox("mkiso", mkiso, self.config.mkiso)
self.add_combobox("burner", burners, self.config.burner)
self.builder = Gtk.Builder()
@ -101,6 +102,7 @@ class settings_window(devede.interface_manager.interface_manager):
self.config.film_converter = self.converter
self.config.menu_converter = self.menuer
self.config.burner = self.burner
self.config.mkiso = self.mkiso
self.config.save_config()
def set_data_converter(self,b):

View file

@ -25,6 +25,7 @@ class vlc_player(devede.executor.executor):
supports_play = True
supports_convert = False
supports_menu = False
supports_mkiso = False
supports_burn = False
display_name = "VLC"