From a54d9701d8f561c884f6ca742d8a290ac6e6a12a Mon Sep 17 00:00:00 2001 From: Kristian Rumberg Date: Sun, 17 Aug 2008 19:10:11 +0200 Subject: [PATCH] Now only displays commands if the backends (ffmpeg/ffmpeg2thera etc.) are found. Refuces to start if no backend is found at all --- commands.py | 20 +++++++++++++++++++- gui.py | 9 +++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/commands.py b/commands.py index fb475b5..d4ab643 100644 --- a/commands.py +++ b/commands.py @@ -133,6 +133,19 @@ class CommandList: else: raise Error("Error: No config found") + def _cmd_program_found_in_path(self, programstr): + if not os.environ.has_key('PATH') or os.environ['PATH']=='': + p = os.defpath + else: + p = os.environ['PATH'] + + pathlist = p.split (os.pathsep) + for path in pathlist: + f = os.path.join(path, programstr) + if os.access(f, os.X_OK): + return True + return False + def _read_config(self): doc = libxml2.parseFile(self._get_config_path()) cmd_xmllist = doc.xpathEval( '//command') @@ -161,7 +174,9 @@ class CommandList: raise Error("Error parsing XML: only variable and optionalsetting elements allowed in command") props = self._read_properties(cmdnode.properties, ["name", "call", "ext"]) - self.cmdcall_dict[props["name"]] = Command(props["name"], props["call"], props["ext"], var_list, optset_list) + + if self._cmd_program_found_in_path( props["call"].split()[0] ): + self.cmdcall_dict[props["name"]] = Command(props["name"], props["call"], props["ext"], var_list, optset_list) else: raise Error("Error parsing XML: only command elements are supported") @@ -169,5 +184,8 @@ class CommandList: def __iter__(self): return self.cmdcall_dict.values().__iter__() + def __len__(self): + return len(self.cmdcall_dict) + def __getitem__(self, name): return self.cmdcall_dict[name] diff --git a/gui.py b/gui.py index 1c51117..3d248b7 100644 --- a/gui.py +++ b/gui.py @@ -13,6 +13,7 @@ # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +import sys import os import gtk import gobject @@ -126,6 +127,14 @@ class MyGui: CommandExecuter(GtkCommandExecuterView(), command, self.file_list, outdir) def __init__(self, commands): + + if 0 == len(commands): + dialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,gtk.MESSAGE_ERROR, gtk.BUTTONS_OK) + dialog.set_markup("None of the programs needed for the conversions specified in commands.xml were found. Cannot continue") + dialog.run() + dialog.destroy() + sys.exit(-1) + self.file_list = [] self.commands = commands -- 2.11.4.GIT