mirror of
https://github.com/arthur-pbty/arthur-os.git
synced 2026-08-01 20:28:16 +02:00
Add LocalSend send action in Nautilus (#4946)
* Add LocalSend send action in Nautilus * Reuse Nautilus install script in migration * Detect LocalSend via PATH * Verify Flatpak LocalSend is installed * Check Flatpak LocalSend with flatpak info
This commit is contained in:
@@ -0,0 +1,84 @@
|
|||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
from gi import require_version
|
||||||
|
|
||||||
|
require_version("Nautilus", "4.1")
|
||||||
|
|
||||||
|
from gi.repository import GObject, Gio, Nautilus
|
||||||
|
|
||||||
|
|
||||||
|
class SendViaLocalSendAction(GObject.GObject, Nautilus.MenuProvider):
|
||||||
|
def _launch_localsend(self, paths):
|
||||||
|
command = self._resolve_command()
|
||||||
|
if not command:
|
||||||
|
return
|
||||||
|
|
||||||
|
if command[-1] == "@@":
|
||||||
|
command = command + paths + ["@@"]
|
||||||
|
else:
|
||||||
|
command = command + paths
|
||||||
|
|
||||||
|
Gio.Subprocess.new(command, Gio.SubprocessFlags.NONE)
|
||||||
|
|
||||||
|
def _resolve_command(self):
|
||||||
|
localsend = shutil.which("localsend")
|
||||||
|
if localsend:
|
||||||
|
return [localsend, "--headless", "send"]
|
||||||
|
|
||||||
|
flatpak = shutil.which("flatpak")
|
||||||
|
if flatpak and self._has_flatpak_app(flatpak, "org.localsend.localsend_app"):
|
||||||
|
return [
|
||||||
|
flatpak,
|
||||||
|
"run",
|
||||||
|
"--file-forwarding",
|
||||||
|
"org.localsend.localsend_app",
|
||||||
|
"@@",
|
||||||
|
]
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _has_flatpak_app(self, flatpak, app_id):
|
||||||
|
process = Gio.Subprocess.new(
|
||||||
|
[flatpak, "info", app_id],
|
||||||
|
Gio.SubprocessFlags.STDOUT_SILENCE | Gio.SubprocessFlags.STDERR_SILENCE,
|
||||||
|
)
|
||||||
|
return process.wait_check()
|
||||||
|
|
||||||
|
def _selected_paths(self, files):
|
||||||
|
paths = []
|
||||||
|
|
||||||
|
for file in files:
|
||||||
|
location = file.get_location()
|
||||||
|
if not location:
|
||||||
|
continue
|
||||||
|
|
||||||
|
path = location.get_path()
|
||||||
|
if path and path not in paths:
|
||||||
|
paths.append(path)
|
||||||
|
|
||||||
|
return paths
|
||||||
|
|
||||||
|
def _make_item(self, paths):
|
||||||
|
label = (
|
||||||
|
"Send via LocalSend" if len(paths) == 1 else "Send selected via LocalSend"
|
||||||
|
)
|
||||||
|
item = Nautilus.MenuItem(
|
||||||
|
name="LocalSendNautilus::send_via_localsend",
|
||||||
|
label=label,
|
||||||
|
icon="localsend",
|
||||||
|
)
|
||||||
|
item.connect("activate", self._on_activate, paths)
|
||||||
|
return item
|
||||||
|
|
||||||
|
def _on_activate(self, _menu, paths):
|
||||||
|
self._launch_localsend(paths)
|
||||||
|
|
||||||
|
def get_file_items(self, *args):
|
||||||
|
files = args[0] if len(args) == 1 else args[1]
|
||||||
|
paths = self._selected_paths(files)
|
||||||
|
|
||||||
|
if not paths or not self._resolve_command():
|
||||||
|
return []
|
||||||
|
|
||||||
|
return [self._make_item(paths)]
|
||||||
@@ -14,6 +14,7 @@ run_logged $OMARCHY_INSTALL/config/mise-work.sh
|
|||||||
run_logged $OMARCHY_INSTALL/config/fix-powerprofilesctl-shebang.sh
|
run_logged $OMARCHY_INSTALL/config/fix-powerprofilesctl-shebang.sh
|
||||||
run_logged $OMARCHY_INSTALL/config/docker.sh
|
run_logged $OMARCHY_INSTALL/config/docker.sh
|
||||||
run_logged $OMARCHY_INSTALL/config/mimetypes.sh
|
run_logged $OMARCHY_INSTALL/config/mimetypes.sh
|
||||||
|
run_logged $OMARCHY_INSTALL/config/nautilus-python.sh
|
||||||
run_logged $OMARCHY_INSTALL/config/remove-fcitx5-autostart.sh
|
run_logged $OMARCHY_INSTALL/config/remove-fcitx5-autostart.sh
|
||||||
run_logged $OMARCHY_INSTALL/config/localdb.sh
|
run_logged $OMARCHY_INSTALL/config/localdb.sh
|
||||||
run_logged $OMARCHY_INSTALL/config/walker-elephant.sh
|
run_logged $OMARCHY_INSTALL/config/walker-elephant.sh
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
EXTENSIONS_DIR="$HOME/.local/share/nautilus-python/extensions"
|
||||||
|
|
||||||
|
mkdir -p "$EXTENSIONS_DIR"
|
||||||
|
cp "$OMARCHY_PATH/default/nautilus-python/extensions/localsend.py" "$EXTENSIONS_DIR/"
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
echo "Add LocalSend entry to Nautilus context menu"
|
||||||
|
|
||||||
|
source $OMARCHY_PATH/install/config/nautilus-python.sh
|
||||||
Reference in New Issue
Block a user