Do not do a dbus call every time get_file_items is called
This commit is contained in:
parent
bf879a8579
commit
18e799612d
1 changed files with 31 additions and 9 deletions
|
@ -30,6 +30,7 @@ __website__ = "https://community.kde.org/KDEConnect"
|
||||||
|
|
||||||
import gettext
|
import gettext
|
||||||
import locale
|
import locale
|
||||||
|
from functools import partial
|
||||||
|
|
||||||
from gi.repository import Nautilus, Gio, GLib, GObject
|
from gi.repository import Nautilus, Gio, GLib, GObject
|
||||||
|
|
||||||
|
@ -38,9 +39,22 @@ _ = gettext.gettext
|
||||||
class KdeConnectShareExtension(GObject.GObject, Nautilus.MenuProvider):
|
class KdeConnectShareExtension(GObject.GObject, Nautilus.MenuProvider):
|
||||||
"""A context menu for sending files via KDE Connect."""
|
"""A context menu for sending files via KDE Connect."""
|
||||||
|
|
||||||
|
def refresh_devices_list(self, *args, **kwargs):
|
||||||
|
try:
|
||||||
|
onlyReachable = True
|
||||||
|
onlyPaired = True
|
||||||
|
variant = GLib.Variant('(bb)', (onlyReachable, onlyPaired))
|
||||||
|
devices = self.dbus.call_sync('deviceNames', variant, 0, -1, None)
|
||||||
|
self.devices = devices.unpack()[0]
|
||||||
|
except Exception as e:
|
||||||
|
raise Exception('Error while getting reachable devices')
|
||||||
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
GObject.GObject.__init__(self)
|
GObject.GObject.__init__(self)
|
||||||
|
|
||||||
|
self.devices = {}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
locale.setlocale(locale.LC_ALL, '')
|
locale.setlocale(locale.LC_ALL, '')
|
||||||
gettext.bindtextdomain('kdeconnect-nautilus-extension')
|
gettext.bindtextdomain('kdeconnect-nautilus-extension')
|
||||||
|
@ -57,6 +71,21 @@ class KdeConnectShareExtension(GObject.GObject, Nautilus.MenuProvider):
|
||||||
'org.kde.kdeconnect.daemon',
|
'org.kde.kdeconnect.daemon',
|
||||||
None)
|
None)
|
||||||
|
|
||||||
|
connection = Gio.bus_get_sync(
|
||||||
|
Gio.BusType.SESSION,
|
||||||
|
None)
|
||||||
|
connection.signal_subscribe(
|
||||||
|
None,
|
||||||
|
'org.kde.kdeconnect.daemon',
|
||||||
|
'deviceListChanged',
|
||||||
|
"/modules/kdeconnect",
|
||||||
|
None,
|
||||||
|
Gio.DBusSignalFlags.NONE,
|
||||||
|
partial(self.refresh_devices_list, self),
|
||||||
|
)
|
||||||
|
|
||||||
|
self.refresh_devices_list()
|
||||||
|
|
||||||
def send_files(self, menu, files, deviceId):
|
def send_files(self, menu, files, deviceId):
|
||||||
device_proxy = Gio.DBusProxy.new_for_bus_sync(
|
device_proxy = Gio.DBusProxy.new_for_bus_sync(
|
||||||
Gio.BusType.SESSION,
|
Gio.BusType.SESSION,
|
||||||
|
@ -78,20 +107,13 @@ class KdeConnectShareExtension(GObject.GObject, Nautilus.MenuProvider):
|
||||||
if uri.get_uri_scheme() != 'file' or uri.is_directory():
|
if uri.get_uri_scheme() != 'file' or uri.is_directory():
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
devices = self.devices
|
||||||
onlyReachable = True
|
|
||||||
onlyPaired = True
|
|
||||||
variant = GLib.Variant('(bb)', (onlyReachable, onlyPaired))
|
|
||||||
devices = self.dbus.call_sync('deviceNames', variant, 0, -1, None)
|
|
||||||
devices = devices.unpack()[0]
|
|
||||||
except Exception as e:
|
|
||||||
raise Exception('Error while getting reachable devices')
|
|
||||||
|
|
||||||
if len(devices) == 0:
|
if len(devices) == 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
if len(devices) == 1:
|
if len(devices) == 1:
|
||||||
deviceId, deviceName = devices.items()[0]
|
deviceId, deviceName = devices[0], devices[0]
|
||||||
item = Nautilus.MenuItem(
|
item = Nautilus.MenuItem(
|
||||||
name='KdeConnectShareExtension::Devices::' + deviceId,
|
name='KdeConnectShareExtension::Devices::' + deviceId,
|
||||||
label=_("Send to %s via KDE Connect") % deviceName,
|
label=_("Send to %s via KDE Connect") % deviceName,
|
||||||
|
|
Loading…
Reference in a new issue