From 62033939608366d06dc16ff0f8e265bb4b2f13d8 Mon Sep 17 00:00:00 2001 From: John Ralls Date: Tue, 3 Sep 2013 22:43:33 +0000 Subject: [PATCH] Simplify display_url to just use htmlview or webbrowser svn: r23015 --- gramps/gui/display.py | 44 +++---------------------------------------- gramps/gui/utils.py | 37 +++++++++++------------------------- 2 files changed, 14 insertions(+), 67 deletions(-) diff --git a/gramps/gui/display.py b/gramps/gui/display.py index 9e25d7f71..1856294a3 100644 --- a/gramps/gui/display.py +++ b/gramps/gui/display.py @@ -26,7 +26,7 @@ from gramps.gen.config import config from gramps.gen.const import GRAMPS_LOCALE as glocale from gramps.gui.utils import open_file_with_default_application as run_file import os -import subprocess +import webbrowser #list of manuals on wiki, map locale code to wiki extension, add language codes #completely, or first part, so pt_BR if Brazilian portugeze wiki manual, and @@ -62,51 +62,13 @@ def display_help(webpage='', section=''): def display_url(link, uistate=None): """ - Open the specified URL in a browser. + Open the specified URL in a browser. """ - from .utils import open_file_with_default_application if uistate and config.get('htmlview.url-handler'): cat_num = uistate.viewmanager.get_category('Web') if cat_num is not None: page = uistate.viewmanager.goto_page(cat_num, None) page.open(link) return - if not open_file_with_default_application(link, display_error=False): - run_browser(link) - -def run_browser(url): - """ - Attempt of find a browswer, and launch with the browser with the - specified URL - Use run_file first! - """ - try: - import webbrowser - webbrowser.open_new_tab(url) - except ImportError: - for browser in ['firefox', 'konqueror', 'epiphany', - 'galeon', 'mozilla']: - prog = find_binary(browser) - if prog: - os.spawnvpe(os.P_NOWAIT, prog, [prog, url], os.environ) - return - - # If we did not find a browser in the path, try this - try: - os.startfile(url) - except: - pass - -def find_binary(file): - """ - Find the binary (executable) of a filename in the PATH, and return full - path if found, else return None. - """ - import os - search = os.environ['PATH'].split(':') - for path in search: - prog = os.path.join(path, file) - if os.path.isfile(prog): - return prog - return None + webbrowser.open_new_tab(link) diff --git a/gramps/gui/utils.py b/gramps/gui/utils.py index 0f90ad7dc..3a8ee470d 100644 --- a/gramps/gui/utils.py +++ b/gramps/gui/utils.py @@ -363,7 +363,7 @@ def display_error_dialog (index, errorstrings): """ Display a message box for errors resulting from xdg-open/open """ - from QuestionDialog import ErrorDialog + from .dialog import ErrorDialog error = _("The external program failed to launch or experienced an error") if errorstrings: if isinstance(errorstrings, dict): @@ -395,7 +395,7 @@ def poll_external ((proc, errorstrings)): display_error_dialog(resp, errorstrings) return False -def open_file_with_default_application(uri): +def open_file_with_default_application(path): """ Launch a program to open an arbitrary file. The file will be opened using whatever program is configured on the host as the default program for that @@ -407,26 +407,20 @@ def open_file_with_default_application(uri): @return: nothing """ - from urlparse import urlparse - from time import sleep errstrings = None - urlcomp = urlparse(uri) - if (not urlcomp.scheme or urlcomp.scheme == 'file'): - norm_path = os.path.normpath(urlcomp.path) - if not os.path.exists(norm_path): - display_error_dialog(0, _("File does not exist")) - return False - else: - norm_path = uri + norm_path = os.path.normpath(path) + if not os.path.exists(norm_path): + display_error_dialog(0, _("File does not exist")) + return if win(): try: os.startfile(norm_path) except WindowsError, msg: display_error_dialog(0, str(msg)) - return False - return True + + return if mac(): utility = '/usr/bin/open' @@ -439,18 +433,9 @@ def open_file_with_default_application(uri): proc = subprocess.Popen([utility, norm_path], stderr=subprocess.STDOUT) - sleep(.1) - resp = proc.poll() - if resp is None: - from gi.repository import GLib - GLib.timeout_add_seconds(1, poll_external, (proc, errstrings)) - return True - if resp == 0: - return True - - if display_error: - display_error_dialog(resp, errstrings) - return False + from gi.repository import GLib + GLib.timeout_add_seconds(1, poll_external, (proc, errstrings)) + return def process_pending_events(max_count=10): """