Mercurial > pyarq-presupuestos
diff Generic/openwith.py @ 1:2ac1551ad2ab version 0.0.0
add code
author | Miguel Ángel Bárcena Rodríguez <miguelangel@obraencurso.es> |
---|---|
date | Sun, 31 Oct 2010 20:07:33 +0100 |
parents | |
children | 2fc6b47dbe70 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Generic/openwith.py Sun Oct 31 20:07:33 2010 +0100 @@ -0,0 +1,137 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +## File openwith.py +## This file is part of pyArq-Presupuestos. +## +## Copyright (C) 2010 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 globals + +# from gtkgui_helpers.py +def autodetect_desktop(): + # recognize the environment and sets it in globals + if os.name == 'nt': + globals.desktop["desktop"] = "windows" + else: + _processes = get_running_processes() + if 'gnome-session' in _processes: + globals.desktop["desktop"] = "gnome" + elif 'startkde' in _processes: + globals.desktop["desktop"] = "kde" + elif 'startxfce4' in _processes or 'xfce4-session' in _processes: + globals.desktop["desktop"] = "xfce" + else: + globals.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 = globals.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 = globals.desktop["browser"] + elif kind == 'mail': + command = globals.desktop["mailapp"] + elif kind == 'image': + command = globals.desktop["imageapp"] + elif kind == 'dxf': + command = globals.desktop["cadapp"] + else: # if no app is configured + return + command = build_command(command, uri) + try: + exec_command(command) + except Exception: + pass