diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileNativeDetailsActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileNativeDetailsActionProvider.java index 72cdace83..602ddee07 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileNativeDetailsActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileNativeDetailsActionProvider.java @@ -69,10 +69,12 @@ public class OpenFileNativeDetailsActionProvider implements BrowserActionProvide shell.get().command(content).notComplex().executeAndCheck(); } case OsType.Linux ignored -> { - var s = "dbus-send --session --print-reply --dest=org.freedesktop.FileManager1" + - " --type=method_call /org/freedesktop/FileManager1" + - " org.freedesktop.FileManager1.ShowItemProperties array:string:\"%s\" string:\""; - var success = sc.command(s.formatted(localFile.asLocalPath().toUri().toString())).executeAndCheck(); + var fileUri = localFile.asLocalPath().toUri().toString(); + var args = CommandBuilder.of().add("dbus-send", "--session", "--print-reply", "--dest=org.freedesktop.FileManager1", + "--type=method_call", "/org/freedesktop/FileManager1", "org.freedesktop.FileManager1.ShowItemProperties") + .addLiteralKeyValue("array:string", ":", fileUri) + .addQuotedKeyValue("string", ":", ""); + var success = sc.command(args).executeAndCheck(); if (success) { return; } diff --git a/app/src/main/java/io/xpipe/app/process/CommandBuilder.java b/app/src/main/java/io/xpipe/app/process/CommandBuilder.java index 78655c7e5..47a8cb406 100644 --- a/app/src/main/java/io/xpipe/app/process/CommandBuilder.java +++ b/app/src/main/java/io/xpipe/app/process/CommandBuilder.java @@ -111,12 +111,26 @@ public class CommandBuilder { } public CommandBuilder addQuotedKeyValue(String key, String value) { + return addQuotedKeyValue(key, "=", value); + } + + public CommandBuilder addQuotedKeyValue(String key, String delimiter, String value) { return add(sc -> { var v = sc.getShellDialect().quoteArgument(value); - return key + "=" + v; + return key + delimiter + v; }); } + public CommandBuilder addLiteralKeyValue(String key, String value) { + return addLiteralKeyValue(key, "=", value); + } + + public CommandBuilder addLiteralKeyValue(String key, String delimiter, String value) { + return add(sc -> { + var v = sc.getShellDialect().literalArgument(value); + return key + delimiter + v; + }); + } public CommandBuilder add(int index, String... s) { for (String s1 : s) { elements.add(index++, new Fixed(s1));