diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/BrowseInNativeManagerActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/BrowseInNativeManagerActionProvider.java index c6c09fb69..59b685db9 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/BrowseInNativeManagerActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/BrowseInNativeManagerActionProvider.java @@ -43,10 +43,7 @@ public class BrowseInNativeManagerActionProvider implements BrowserActionProvide for (BrowserEntry entry : getEntries()) { var e = entry.getRawFileEntry().getPath(); var localFile = sc.getLocalSystemAccess().translateToLocalSystemPath(e); - try (var local = LocalShell.getShell().start()) { - DesktopHelper.browsePathRemote( - local, localFile, entry.getRawFileEntry().getKind()); - } + DesktopHelper.browseFileInDirectory(localFile.asLocalPath()); } } } diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileNativeManagerActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileNativeManagerActionProvider.java new file mode 100644 index 000000000..b59cdb2b0 --- /dev/null +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileNativeManagerActionProvider.java @@ -0,0 +1,49 @@ +package io.xpipe.app.browser.action.impl; + +import io.xpipe.app.browser.action.BrowserAction; +import io.xpipe.app.browser.action.BrowserActionProvider; +import io.xpipe.app.browser.file.BrowserEntry; +import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.ext.FileKind; +import io.xpipe.app.process.CommandBuilder; +import io.xpipe.app.process.LocalShell; +import io.xpipe.app.process.ShellControl; +import io.xpipe.app.util.DesktopHelper; +import io.xpipe.core.OsType; +import lombok.experimental.SuperBuilder; +import lombok.extern.jackson.Jacksonized; + +import java.util.List; + +public class OpenFileNativeManagerActionProvider implements BrowserActionProvider { + + @Override + public String getId() { + return "openFileNativeManager"; + } + + @Override + public boolean isApplicable(BrowserFileSystemTabModel model, List entries) { + if (model.getFileSystem().getShell().isEmpty()) { + return false; + } + + var sc = model.getFileSystem().getShell().orElseThrow(); + return sc.getLocalSystemAccess().supportsFileSystemAccess(); + } + + @Jacksonized + @SuperBuilder + public static class Action extends BrowserAction { + + @Override + public void executeImpl() throws Exception { + ShellControl sc = model.getFileSystem().getShell().get(); + for (BrowserEntry entry : getEntries()) { + var e = entry.getRawFileEntry().getPath(); + var localFile = sc.getLocalSystemAccess().translateToLocalSystemPath(e); + DesktopHelper.browseFileInDirectory(localFile.asLocalPath()); + } + } + } +} diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/BrowseInNativeManagerMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/BrowseInNativeManagerMenuProvider.java index f3eb53811..9921cc458 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/BrowseInNativeManagerMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/BrowseInNativeManagerMenuProvider.java @@ -7,6 +7,7 @@ import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.browser.menu.BrowserMenuCategory; import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; +import io.xpipe.app.platform.LabelGraphic; import io.xpipe.core.OsType; import javafx.beans.value.ObservableValue; @@ -38,4 +39,9 @@ public class BrowseInNativeManagerMenuProvider implements BrowserMenuLeafProvide public boolean acceptsEmptySelection() { return true; } + + @Override + public LabelGraphic getIcon() { + return new LabelGraphic.IconGraphic("mdi2f-folder-eye-outline"); + } } diff --git a/app/src/main/java/io/xpipe/app/util/DesktopHelper.java b/app/src/main/java/io/xpipe/app/util/DesktopHelper.java index b8eac9d63..cc7c209c9 100644 --- a/app/src/main/java/io/xpipe/app/util/DesktopHelper.java +++ b/app/src/main/java/io/xpipe/app/util/DesktopHelper.java @@ -90,7 +90,7 @@ public class DesktopHelper { : "org.freedesktop.FileManager1.ShowItems"; var args = List.of( "dbus-send", "--session", "--print-reply", "--dest=org.freedesktop.FileManager1", "--type=method_call", - "/org/freedesktop/FileManager1", action, "array:string:\"file://" + file + "\"", "string:\"\"" + "/org/freedesktop/FileManager1", action, "array:string:file://" + file, "string:" ); try { var success = LocalExec.readStdoutIfPossible(args.toArray(String[]::new)).isPresent(); diff --git a/app/src/main/java/module-info.java b/app/src/main/java/module-info.java index b16b93159..a795ea60f 100644 --- a/app/src/main/java/module-info.java +++ b/app/src/main/java/module-info.java @@ -153,6 +153,7 @@ open module io.xpipe.app { ToggleActionProvider, OpenTerminalInDirectoryMenuProvider, OpenNativeFileDetailsMenuProvider, + BrowseInNativeManagerMenuProvider, BrowseInNativeManagerActionProvider, ApplyFileEditActionProvider, TransferFilesActionProvider, diff --git a/version b/version index c51c851f6..2f787b27e 100644 --- a/version +++ b/version @@ -1 +1 @@ -19.0-10 +19.0-11