Mercurial > pyarq-presupuestos
view Generic/openwith.py @ 22:7bd4ca56607d
bug fix: Mutable default arguments
author | Miguel Ángel Bárcena Rodríguez <miguelangel@obraencurso.es> |
---|---|
date | Tue, 30 Sep 2014 17:16:50 +0200 |
parents | a7b9f7e7dfa4 |
children | 65e7ae0d0e63 |
line wrap: on
line source
#!/usr/bin/python # -*- coding: utf-8 -*- ## File openwith.py ## This file is part of pyArq-Presupuestos. ## ## Copyright (C) 2010-2013 Miguel Ángel Bárcena Rodríguez ## <miguelangel@obraencurso.es> ## ## This file is based in gtkgui_helpers.py and common/helpers.py from gajim ## ## Copyright (C) 2003-2008 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com> ## Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006 Alex Mauer <hawke AT hawkesnest.net> ## Copyright (C) 2006-2007 Travis Shirk <travis AT pobox.com> ## Copyright (C) 2006-2008 Jean-Marie Traissard <jim AT lapin.org> ## Copyright (C) 2007 Lukas Petrovicky <lukas AT petrovicky.net> ## James Newton <redshodan AT gmail.com> ## Julien Pivotto <roidelapluie AT gmail.com> ## Copyright (C) 2007-2008 Stephan Erb <steve-e AT h3c.de> ## Copyright (C) 2008 Brendan Taylor <whateley AT gmail.com> ## Jonathan Schleifer <js-gajim AT webkeks.org> ## This program 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; version 3 only. ## ## This program 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 Gajim. If not, see <http://www.gnu.org/licenses/>. ## # Modules import subprocess import os # pyArq-Presupuestos modules import globalVars # from gtkgui_helpers.py def autodetect_desktop(): # recognize the environment and sets it in globalVars if os.name == 'nt': globalVars.desktop["desktop"] = "windows" else: _processes = get_running_processes() if 'gnome-session' in _processes: globalVars.desktop["desktop"] = "gnome" elif 'startkde' in _processes: globalVars.desktop["desktop"] = "kde" elif 'startxfce4' in _processes or 'xfce4-session' in _processes: globalVars.desktop["desktop"] = "xfce" elif 'startlxde' in _processes or 'lxsession' in _processes: globalVars.desktop["desktop"] = "lxde" elif 'awesome' in _processes: globalVars.desktop["desktop"] = "awesome" elif 'dwm' in _processes: globalVars.desktop["desktop"] = "dwm" elif 'startfluxbox' in _processes: globalVars.desktop["desktop"] = "fluxbox" elif 'fvwm2' in _processes: globalVars.desktop["desktop"] = "fvwm" else: globalVars.desktop["desktop"] = "" def get_running_processes(): '''returns running processes or None (if not /proc exists)''' if os.path.isdir('/proc'): # under Linux: checking if 'gnome-session' or # 'startkde' programs were run before gajim, by # checking /proc (if it exists) # # if something is unclear, read `man proc`; # if /proc exists, directories that have only numbers # in their names contain data about processes. # /proc/[xxx]/exe is a symlink to executable started # as process number [xxx]. # filter out everything that we are not interested in: files = os.listdir('/proc') # files that doesn't have only digits in names... files = filter(str.isdigit, files) # files that aren't directories... files = [f for f in files if os.path.isdir('/proc/' + f)] # processes owned by somebody not running gajim... # (we check if we have access to that file) files = [f for f in files if os.access('/proc/' + f +'/exe', os.F_OK)] # be sure that /proc/[number]/exe is really a symlink # to avoid TBs in incorrectly configured systems files = [f for f in files if os.path.islink('/proc/' + f + '/exe')] # list of processes processes = [os.path.basename(os.readlink('/proc/' + f +'/exe')) for f in files] return processes return [] # from common/helpers.py def exec_command(command): subprocess.Popen('%s &' % command, shell=True).wait() def build_command(executable, parameter): # we add to the parameter (can hold path with spaces) # "" so we have good parsing from shell parameter = parameter.replace('"', '\\"') # but first escape " command = '%s "%s"' % (executable, parameter) return command def launch_file(kind, uri): # kind = "url" ,"mail", "image", "dxf" _desktop = globalVars.desktop["desktop"] if _desktop == "windows": try: os.startfile(uri) # if pywin32 is installed we open except Exception: pass else: if kind == 'mail' and not uri.startswith('mailto:'): uri = 'mailto:' + uri if _desktop == "gnome": command = 'gnome-open' elif _desktop == "kde": command = 'kfmclient exec' elif _desktop == "xfce": command = 'exo-open' else: if kind == 'url': command = globalVars.desktop["browser"] elif kind == 'mail': command = globalVars.desktop["mailapp"] elif kind == 'image': command = globalVars.desktop["imageapp"] elif kind == 'dxf': command = globalVars.desktop["cadapp"] else: # if no app is configured return command = build_command(command, uri) try: exec_command(command) except Exception: pass