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:
parent
40fd34b14a
commit
34098c19fc
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue