Open error dialog if user tries to use not-installed program

Currently trying to use default player (xdg-)open when it's not installed
will only cause messages on the console, which might not be visible to
the user. This PR creates an alert box in this case.

Fixes #1003.
This commit is contained in:
Benedikt Wildenhain 2022-01-07 18:47:18 +01:00
parent 40fd34b14a
commit 34098c19fc
No known key found for this signature in database
GPG Key ID: 78C1F1FE48CA7604
2 changed files with 21 additions and 4 deletions

View File

@ -2187,7 +2187,7 @@ class gPodder(BuilderWidget, dbus.service.Object):
if 'default' in groups:
for filename in groups['default']:
logger.debug('Opening with system default: %s', filename)
util.gui_open(filename)
util.gui_open(filename, gui=self)
del groups['default']
# For each type now, go and create play commands

View File

@ -1470,7 +1470,7 @@ def http_request(url, method='HEAD'):
return conn.getresponse()
def gui_open(filename):
def gui_open(filename, gui=None):
"""
Open a file or folder with the default application set
by the Desktop environment. This uses "xdg-open" on all
@ -1481,13 +1481,30 @@ def gui_open(filename):
try:
if gpodder.ui.win32:
os.startfile(filename)
opener = None
elif gpodder.ui.osx:
Popen(['open', filename], close_fds=True)
opener = 'open'
else:
Popen(['xdg-open', filename], close_fds=True)
opener = 'xdg-open'
if opener:
opener_fullpath = shutil.which(opener)
if opener_fullpath is None:
raise Exception((_("System default program '%(opener)s' not found"))
% {'opener': opener}
)
Popen([opener_fullpath, filename], close_fds=True)
return True
except:
logger.error('Cannot open file/folder: "%s"', filename, exc_info=True)
if gui is not None:
if opener is None:
message = _("Cannot open file/folder '%(filename)s' using default program") % {'filename': filename}
else:
message = _("Cannot open '%(filename)s' using '%(opener)s'") \
% {'filename': filename, 'opener': opener}
gui.show_message_details(_('Cannot open file/folder'),
str(sys.exc_info()[1]), message)
return False