Commit 235f2a80 authored by Philipp Hörist's avatar Philipp Hörist

Refactor opening files

- Rename method
- Catch and log all exceptions
parent 6c0c4b22
Pipeline #4494 passed with stages
in 2 minutes and 29 seconds
......@@ -47,6 +47,7 @@ from gajim.common.helpers import AdditionalDataDict
from gajim.common.helpers import open_uri
from gajim.common.helpers import geo_provider_from_location
from gajim.common.helpers import event_filter
from gajim.common.helpers import open_file
from gajim.common.contacts import GC_Contact
from gajim.common.const import AvatarSize
from gajim.common.const import KindConstant
......@@ -1449,7 +1450,7 @@ class ChatControl(ChatControlBase):
def _on_open_ft_folder(self, widget, file_props):
path = os.path.split(file_props.file_name)[0]
if os.path.exists(path) and os.path.isdir(path):
helpers.launch_file_manager(path)
open_file(path)
ev = self._get_file_props_event(file_props, 'file-completed')
if ev:
app.events.remove_events(self.account, self.contact.jid, event=ev)
......
......@@ -619,17 +619,6 @@ def get_contact_dict_for_account(account):
contacts_dict[name] = contact
return contacts_dict
def launch_file_manager(path_to_open):
if os.name == 'nt':
try:
os.startfile(path_to_open) # if pywin32 is installed we open
except Exception:
pass
else:
if not path_to_open.startswith('file://'):
path_to_open = 'file://' + path_to_open
Gio.AppInfo.launch_default_for_uri(path_to_open)
def play_sound(event):
if not app.config.get('sounds_on'):
return
......@@ -1475,6 +1464,18 @@ def event_filter(filter_):
return event_filter_decorator
def catch_execptions(func):
@wraps(func)
def func_wrapper(self, *args, **kwargs):
try:
result = func(self, *args, **kwargs)
except Exception as error:
log.exception(error)
return None
return result
return func_wrapper
def parse_uri_actions(uri):
uri = uri[5:]
if '?' not in uri:
......@@ -1531,12 +1532,13 @@ def parse_uri(uri):
return URI(type=URIType.WEB, data=uri)
@catch_execptions
def open_uri(uri, account=None):
if not isinstance(uri, URI):
uri = parse_uri(uri)
if uri.type == URIType.FILE:
launch_file_manager(uri.data)
open_file(uri.data)
elif uri.type == URIType.MAIL:
uri = 'mailto:%s' % uri.data
......@@ -1573,6 +1575,16 @@ def open_uri(uri, account=None):
log.warning('Cant open URI: %s', uri)
@catch_execptions
def open_file(path):
if os.name == 'nt':
os.startfile(path)
else:
if not path.startswith('file://'):
path = 'file://' + path
Gio.AppInfo.launch_default_for_uri(path)
def geo_provider_from_location(lat, lon):
return ('https://www.openstreetmap.org/?'
'mlat=%s&mlon=%s&zoom=16') % (lat, lon)
......
......@@ -36,6 +36,7 @@ from gajim.common import app
from gajim.common import helpers
from gajim.common.i18n import _
from gajim.common.file_props import FilesProp
from gajim.common.helpers import open_file
from gajim.common.modules.bytestream import (is_transfer_active,
is_transfer_paused,
is_transfer_stopped)
......@@ -216,7 +217,7 @@ class FileTransfersWindow:
return
path = os.path.split(file_props.file_name)[0]
if os.path.exists(path) and os.path.isdir(path):
helpers.launch_file_manager(path)
open_file(path)
self._ui.transfers_list.get_selection().unselect_all()
if file_props.type_ == 'r':
......@@ -1004,7 +1005,7 @@ class FileTransfersWindow:
return
path = os.path.split(file_props.file_name)[0]
if os.path.exists(path) and os.path.isdir(path):
helpers.launch_file_manager(path)
open_file(path)
def _on_cancel_menuitem_activate(self, widget):
self._on_cancel_button_clicked(widget)
......
......@@ -26,6 +26,7 @@ from gajim.common import idle
from gajim.common.nec import NetworkEvent
from gajim.common.i18n import _
from gajim.common.i18n import ngettext
from gajim.common.helpers import open_file
from gajim import message_control
......@@ -1081,8 +1082,7 @@ class Preferences(Gtk.ApplicationWindow):
app.set_debug_mode(widget.get_active())
def _on_debug_folder_clicked(self, _widget):
debug_folder = configpaths.get('DEBUG')
helpers.launch_file_manager(debug_folder)
open_file(configpaths.get('DEBUG'))
# Advanced Config Editor (ACE)
def on_open_advanced_editor_button_clicked(self, _widget):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment