mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-09-02 18:51:01 +12:00
MacOS fixes
This commit is contained in:
parent
7f4cd8fabc
commit
2f0d85c255
3 changed files with 29 additions and 19 deletions
|
@ -11,6 +11,7 @@ import io.xpipe.core.process.OsType;
|
||||||
import io.xpipe.core.util.XPipeDaemonMode;
|
import io.xpipe.core.util.XPipeDaemonMode;
|
||||||
import io.xpipe.extension.event.ErrorEvent;
|
import io.xpipe.extension.event.ErrorEvent;
|
||||||
import io.xpipe.extension.event.TrackEvent;
|
import io.xpipe.extension.event.TrackEvent;
|
||||||
|
import io.xpipe.extension.util.ThreadHelper;
|
||||||
import picocli.CommandLine;
|
import picocli.CommandLine;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
@ -75,6 +76,14 @@ public class LauncherCommand implements Callable<Integer> {
|
||||||
con.performSimpleExchange(
|
con.performSimpleExchange(
|
||||||
OpenExchange.Request.builder().arguments(inputs).build());
|
OpenExchange.Request.builder().arguments(inputs).build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (OsType.getLocal().equals(OsType.MAC)) {
|
||||||
|
Desktop.getDesktop().setOpenURIHandler(e -> {
|
||||||
|
con.performSimpleExchange(
|
||||||
|
OpenExchange.Request.builder().arguments(List.of(e.getURI().toString())).build());
|
||||||
|
});
|
||||||
|
ThreadHelper.sleep(1000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
TrackEvent.info("Another instance is already running on this port. Quitting ...");
|
TrackEvent.info("Another instance is already running on this port. Quitting ...");
|
||||||
OperationMode.halt(0);
|
OperationMode.halt(0);
|
||||||
|
|
|
@ -5,6 +5,7 @@ import io.xpipe.app.core.mode.OperationMode;
|
||||||
import io.xpipe.core.impl.FileStore;
|
import io.xpipe.core.impl.FileStore;
|
||||||
import io.xpipe.extension.DataSourceProvider;
|
import io.xpipe.extension.DataSourceProvider;
|
||||||
import io.xpipe.extension.event.ErrorEvent;
|
import io.xpipe.extension.event.ErrorEvent;
|
||||||
|
import io.xpipe.extension.event.TrackEvent;
|
||||||
import io.xpipe.extension.util.ActionProvider;
|
import io.xpipe.extension.util.ActionProvider;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Value;
|
import lombok.Value;
|
||||||
|
@ -20,6 +21,8 @@ import java.util.List;
|
||||||
public abstract class LauncherInput {
|
public abstract class LauncherInput {
|
||||||
|
|
||||||
public static void handle(List<String> arguments) {
|
public static void handle(List<String> arguments) {
|
||||||
|
TrackEvent.withDebug("launcher", "Handling arguments").elements(arguments).handle();
|
||||||
|
|
||||||
var all = new ArrayList<ActionProvider.Action>();
|
var all = new ArrayList<ActionProvider.Action>();
|
||||||
arguments.forEach(s -> {
|
arguments.forEach(s -> {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -45,39 +45,37 @@ public class DesktopShortcuts {
|
||||||
|
|
||||||
private static void createMacOSShortcut(String target, String name) throws Exception {
|
private static void createMacOSShortcut(String target, String name) throws Exception {
|
||||||
var icon = XPipeInstallation.getLocalDefaultInstallationIcon();
|
var icon = XPipeInstallation.getLocalDefaultInstallationIcon();
|
||||||
|
var base = System.getProperty("user.home") + "/Desktop/" + name + ".app";
|
||||||
var content = String.format(
|
var content = String.format(
|
||||||
"""
|
"""
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
open %s
|
open %s
|
||||||
""",
|
""",
|
||||||
target);
|
target);
|
||||||
var file = Path.of(System.getProperty("user.home") + "/Desktop/" + name + ".command").toRealPath();
|
|
||||||
Files.writeString(file, content);
|
|
||||||
file.toFile().setExecutable(true);
|
|
||||||
|
|
||||||
var iconScriptContent = String.format(
|
var iconScriptContent = String.format(
|
||||||
"""
|
"""
|
||||||
iconSource="%s"
|
iconSource="%s"
|
||||||
iconDestination="%s"
|
iconDestination="%s"
|
||||||
icon=/tmp/`basename $iconSource`
|
icon=/tmp/`basename $iconSource`
|
||||||
rsrc=/tmp/icon.rsrc
|
rsrc=/tmp/icon.rsrc
|
||||||
cp $iconSource $icon
|
cp "$iconSource" "$icon"
|
||||||
sips -i $icon
|
sips -i "$icon"
|
||||||
DeRez -only icns $icon > $rsrc
|
DeRez -only icns "$icon" > "$rsrc"
|
||||||
SetFile -a C $iconDestination
|
SetFile -a C "$iconDestination"
|
||||||
Rez -append $rsrc -o $iconDestination
|
touch $iconDestination/$'Icon\\r'
|
||||||
""",
|
Rez -append $rsrc -o $iconDestination/Icon?
|
||||||
icon, target);
|
SetFile -a V $iconDestination/Icon?
|
||||||
|
""",
|
||||||
|
icon, base);
|
||||||
|
|
||||||
try (var pc = ShellStore.local().create().start()) {
|
try (var pc = ShellStore.local().create().start()) {
|
||||||
var base = System.getProperty("user.home") + "/Desktop/" + name;
|
|
||||||
pc.executeSimpleCommand(pc.getShellType().flatten(pc.getShellType().getMkdirsCommand(base + "/Contents/MacOS")));
|
pc.executeSimpleCommand(pc.getShellType().flatten(pc.getShellType().getMkdirsCommand(base + "/Contents/MacOS")));
|
||||||
|
|
||||||
var executable = base + "/Contents/MacOS/" + name + ".sh";
|
var executable = base + "/Contents/MacOS/" + name;
|
||||||
pc.executeSimpleCommand(pc.getShellType().getTextFileWriteCommand(content, executable));
|
pc.executeSimpleCommand(pc.getShellType().getTextFileWriteCommand(content, executable));
|
||||||
pc.executeSimpleCommand(pc.getShellType().getMakeExecutableCommand(executable));
|
pc.executeSimpleCommand("chmod ugo+x \"" + executable + "\"");
|
||||||
|
|
||||||
pc.executeSimpleCommand(pc.getShellType().getTextFileWriteCommand("APPL??", base + "/PkgInfo"));
|
pc.executeSimpleCommand(pc.getShellType().getTextFileWriteCommand("APPL????", base + "/PkgInfo"));
|
||||||
pc.executeSimpleCommand(iconScriptContent);
|
pc.executeSimpleCommand(iconScriptContent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue