From 57a6e764a4a2235316c7f62234035b994ad903fb Mon Sep 17 00:00:00 2001 From: Sergio Costas Date: Wed, 6 Aug 2014 20:41:41 +0200 Subject: [PATCH] Supports to use MKISOFS or GENISOIMAGE separately --- data/interface/wsettings.ui | 44 ++++++++++++++++- src/devede/avconv_converter.py | 1 + src/devede/brasero.py | 1 + src/devede/choose_disc_type.py | 27 ++++++----- src/devede/configuration_data.py | 7 +++ src/devede/converter.py | 45 ++++++++++++++--- src/devede/ffmpeg_converter.py | 1 + src/devede/genisoimage.py | 83 ++++++++++++++++++++++++++++++++ src/devede/k3b.py | 1 + src/devede/mkisofs.py | 21 ++++++++ src/devede/mplayer_detector.py | 1 + src/devede/settings.py | 4 +- src/devede/vlc.py | 1 + 13 files changed, 216 insertions(+), 21 deletions(-) create mode 100644 src/devede/genisoimage.py diff --git a/data/interface/wsettings.ui b/data/interface/wsettings.ui index c4fb115..e131252 100644 --- a/data/interface/wsettings.ui +++ b/data/interface/wsettings.ui @@ -26,6 +26,12 @@ + + + + + + @@ -359,7 +365,7 @@ 0 - 5 + 6 1 1 @@ -378,7 +384,7 @@ 1 - 5 + 6 1 1 @@ -409,6 +415,40 @@ 1 + + + True + False + 4 + 1 + Create ISOs: + + + 0 + 5 + 1 + 1 + + + + + True + False + mkiso_store + + + + 0 + + + + + 1 + 5 + 1 + 1 + + diff --git a/src/devede/avconv_converter.py b/src/devede/avconv_converter.py index dd8e8b4..e878f0a 100644 --- a/src/devede/avconv_converter.py +++ b/src/devede/avconv_converter.py @@ -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 = [] diff --git a/src/devede/brasero.py b/src/devede/brasero.py index 9cacf09..c8835df 100644 --- a/src/devede/brasero.py +++ b/src/devede/brasero.py @@ -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" diff --git a/src/devede/choose_disc_type.py b/src/devede/choose_disc_type.py index edafce4..7ccfd13 100644 --- a/src/devede/choose_disc_type.py +++ b/src/devede/choose_disc_type.py @@ -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() diff --git a/src/devede/configuration_data.py b/src/devede/configuration_data.py index 3d2b83c..9aca8a0 100644 --- a/src/devede/configuration_data.py +++ b/src/devede/configuration_data.py @@ -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): diff --git a/src/devede/converter.py b/src/devede/converter.py index 3b686f9..fa86de4 100644 --- a/src/devede/converter.py +++ b/src/devede/converter.py @@ -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] \ No newline at end of file + 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] \ No newline at end of file diff --git a/src/devede/ffmpeg_converter.py b/src/devede/ffmpeg_converter.py index 5513256..87be1e5 100644 --- a/src/devede/ffmpeg_converter.py +++ b/src/devede/ffmpeg_converter.py @@ -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 = [] diff --git a/src/devede/genisoimage.py b/src/devede/genisoimage.py new file mode 100644 index 0000000..8ac5fbf --- /dev/null +++ b/src/devede/genisoimage.py @@ -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 + +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 diff --git a/src/devede/k3b.py b/src/devede/k3b.py index cf78474..a171fb6 100644 --- a/src/devede/k3b.py +++ b/src/devede/k3b.py @@ -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" diff --git a/src/devede/mkisofs.py b/src/devede/mkisofs.py index e143b46..976b6a1 100644 --- a/src/devede/mkisofs.py +++ b/src/devede/mkisofs.py @@ -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) diff --git a/src/devede/mplayer_detector.py b/src/devede/mplayer_detector.py index 5ba43fb..d7dc12a 100644 --- a/src/devede/mplayer_detector.py +++ b/src/devede/mplayer_detector.py @@ -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" diff --git a/src/devede/settings.py b/src/devede/settings.py index b2131a2..c2290fd 100644 --- a/src/devede/settings.py +++ b/src/devede/settings.py @@ -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): diff --git a/src/devede/vlc.py b/src/devede/vlc.py index b95cf3e..56a94f2 100644 --- a/src/devede/vlc.py +++ b/src/devede/vlc.py @@ -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"