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 @@
+
0
- 5
+ 6
1
1
@@ -378,7 +384,7 @@
1
- 5
+ 6
1
1
@@ -409,6 +415,40 @@
1
+
+
+
+ 0
+ 5
+ 1
+ 1
+
+
+
+
+
+ 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"