Adds a nautilus-python extension to share files
Reviewed by Aleix Pol
This commit is contained in:
parent
b009c5fd0b
commit
2008490ad9
4 changed files with 126 additions and 0 deletions
|
@ -58,6 +58,7 @@ add_subdirectory(cli)
|
||||||
add_subdirectory(indicator)
|
add_subdirectory(indicator)
|
||||||
add_subdirectory(fileitemactionplugin)
|
add_subdirectory(fileitemactionplugin)
|
||||||
add_subdirectory(urlhandler)
|
add_subdirectory(urlhandler)
|
||||||
|
add_subdirectory(nautilus-extension)
|
||||||
if(KF5DocTools_FOUND)
|
if(KF5DocTools_FOUND)
|
||||||
add_subdirectory(doc)
|
add_subdirectory(doc)
|
||||||
endif()
|
endif()
|
||||||
|
|
4
nautilus-extension/CMakeLists.txt
Normal file
4
nautilus-extension/CMakeLists.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
set(NAUTILUS_PYTHON_EXTENSIONS_INSTALL_DIR "share/nautilus-python/extensions" CACHE PATH "Path for python-nautilus extensions")
|
||||||
|
|
||||||
|
install(FILES kdeconnect-share.py DESTINATION ${NAUTILUS_PYTHON_EXTENSIONS_INSTALL_DIR})
|
3
nautilus-extension/Messages.sh
Normal file
3
nautilus-extension/Messages.sh
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
$XGETTEXT `find . -name '*.py'` -o $podir/kdeconnect-nautilus-extension.pot
|
118
nautilus-extension/kdeconnect-share.py
Normal file
118
nautilus-extension/kdeconnect-share.py
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
# -*- coding: UTF-8 -*-
|
||||||
|
|
||||||
|
"""
|
||||||
|
* Copyright 2018 Albert Vaca Cintora <albertvaka@gmail.com>
|
||||||
|
* Copyright 2018 Andy Holmes <andrew.g.r.holmes@gmail.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of
|
||||||
|
* the License or (at your option) version 3 or any later version
|
||||||
|
* accepted by the membership of KDE e.V. (or its successor approved
|
||||||
|
* by the membership of KDE e.V.), which shall act as a proxy
|
||||||
|
* defined in Section 14 of version 3 of the license.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
"""
|
||||||
|
|
||||||
|
__author__ = "Albert Vaca Cintora <albertvaka@gmail.com>"
|
||||||
|
__version__ = "1.0"
|
||||||
|
__appname__ = "kdeconnect-share"
|
||||||
|
__app_disp_name__ = "Share files to your phone via KDE Connect"
|
||||||
|
__website__ = "https://community.kde.org/KDEConnect"
|
||||||
|
|
||||||
|
import gettext
|
||||||
|
import locale
|
||||||
|
|
||||||
|
from gi.repository import Nautilus, Gio, GLib, GObject
|
||||||
|
|
||||||
|
_ = gettext.gettext
|
||||||
|
|
||||||
|
class KdeConnectShareExtension(GObject.GObject, Nautilus.MenuProvider):
|
||||||
|
"""A context menu for sending files via KDE Connect."""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
GObject.GObject.__init__(self)
|
||||||
|
|
||||||
|
try:
|
||||||
|
locale.setlocale(locale.LC_ALL, '')
|
||||||
|
gettext.bindtextdomain('kdeconnect-nautilus-extension')
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
pass
|
||||||
|
|
||||||
|
self.dbus = Gio.DBusProxy.new_for_bus_sync(
|
||||||
|
Gio.BusType.SESSION,
|
||||||
|
Gio.DBusProxyFlags.NONE,
|
||||||
|
None,
|
||||||
|
'org.kde.kdeconnect',
|
||||||
|
'/modules/kdeconnect',
|
||||||
|
'org.kde.kdeconnect.daemon',
|
||||||
|
None)
|
||||||
|
|
||||||
|
def send_files(self, menu, files, deviceId):
|
||||||
|
device_proxy = Gio.DBusProxy.new_for_bus_sync(
|
||||||
|
Gio.BusType.SESSION,
|
||||||
|
Gio.DBusProxyFlags.NONE,
|
||||||
|
None,
|
||||||
|
'org.kde.kdeconnect',
|
||||||
|
'/modules/kdeconnect/devices/'+deviceId+'/share',
|
||||||
|
'org.kde.kdeconnect.device.share',
|
||||||
|
None)
|
||||||
|
|
||||||
|
for file in files:
|
||||||
|
variant = GLib.Variant('(s)', (file.get_uri(),))
|
||||||
|
device_proxy.call_sync('shareUrl', variant, 0, -1, None)
|
||||||
|
|
||||||
|
def get_file_items(self, window, files):
|
||||||
|
|
||||||
|
#We can only send regular files
|
||||||
|
for uri in files:
|
||||||
|
if uri.get_uri_scheme() != 'file' or uri.is_directory():
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
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:
|
||||||
|
return
|
||||||
|
|
||||||
|
if len(devices) == 1:
|
||||||
|
deviceId, deviceName = devices.items()[0]
|
||||||
|
item = Nautilus.MenuItem(
|
||||||
|
name='KdeConnectShareExtension::Devices::' + deviceId,
|
||||||
|
label=_("Send to %s via KDE Connect") % deviceName,
|
||||||
|
)
|
||||||
|
item.connect('activate', self.send_files, files, deviceId)
|
||||||
|
return item,
|
||||||
|
else:
|
||||||
|
menu = Nautilus.MenuItem(
|
||||||
|
name='KdeConnectShareExtension::Devices',
|
||||||
|
label=_('Send via KDE Connect'),
|
||||||
|
)
|
||||||
|
submenu = Nautilus.Menu()
|
||||||
|
menu.set_submenu(submenu)
|
||||||
|
|
||||||
|
for deviceId, deviceName in devices.items():
|
||||||
|
item = Nautilus.MenuItem(
|
||||||
|
name='KdeConnectShareExtension::Devices::' + deviceId,
|
||||||
|
label=deviceName,
|
||||||
|
)
|
||||||
|
item.connect('activate', self.send_files, files, deviceId)
|
||||||
|
submenu.append_item(item)
|
||||||
|
|
||||||
|
return menu,
|
||||||
|
|
Loading…
Reference in a new issue