mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-11-22 07:30:24 +00:00
MacOS fixes
This commit is contained in:
parent
45b4b84bf3
commit
137c6ff9f8
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.extension.event.ErrorEvent;
|
||||
import io.xpipe.extension.event.TrackEvent;
|
||||
import io.xpipe.extension.util.ThreadHelper;
|
||||
import picocli.CommandLine;
|
||||
|
||||
import java.awt.*;
|
||||
|
@ -75,6 +76,14 @@ public class LauncherCommand implements Callable<Integer> {
|
|||
con.performSimpleExchange(
|
||||
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 ...");
|
||||
OperationMode.halt(0);
|
||||
|
|
|
@ -5,6 +5,7 @@ import io.xpipe.app.core.mode.OperationMode;
|
|||
import io.xpipe.core.impl.FileStore;
|
||||
import io.xpipe.extension.DataSourceProvider;
|
||||
import io.xpipe.extension.event.ErrorEvent;
|
||||
import io.xpipe.extension.event.TrackEvent;
|
||||
import io.xpipe.extension.util.ActionProvider;
|
||||
import lombok.Getter;
|
||||
import lombok.Value;
|
||||
|
@ -20,6 +21,8 @@ import java.util.List;
|
|||
public abstract class LauncherInput {
|
||||
|
||||
public static void handle(List<String> arguments) {
|
||||
TrackEvent.withDebug("launcher", "Handling arguments").elements(arguments).handle();
|
||||
|
||||
var all = new ArrayList<ActionProvider.Action>();
|
||||
arguments.forEach(s -> {
|
||||
try {
|
||||
|
|
|
@ -45,39 +45,37 @@ public class DesktopShortcuts {
|
|||
|
||||
private static void createMacOSShortcut(String target, String name) throws Exception {
|
||||
var icon = XPipeInstallation.getLocalDefaultInstallationIcon();
|
||||
var base = System.getProperty("user.home") + "/Desktop/" + name + ".app";
|
||||
var content = String.format(
|
||||
"""
|
||||
#!/bin/bash
|
||||
open %s
|
||||
""",
|
||||
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(
|
||||
"""
|
||||
iconSource="%s"
|
||||
iconDestination="%s"
|
||||
icon=/tmp/`basename $iconSource`
|
||||
rsrc=/tmp/icon.rsrc
|
||||
cp $iconSource $icon
|
||||
sips -i $icon
|
||||
DeRez -only icns $icon > $rsrc
|
||||
SetFile -a C $iconDestination
|
||||
Rez -append $rsrc -o $iconDestination
|
||||
""",
|
||||
icon, target);
|
||||
iconSource="%s"
|
||||
iconDestination="%s"
|
||||
icon=/tmp/`basename $iconSource`
|
||||
rsrc=/tmp/icon.rsrc
|
||||
cp "$iconSource" "$icon"
|
||||
sips -i "$icon"
|
||||
DeRez -only icns "$icon" > "$rsrc"
|
||||
SetFile -a C "$iconDestination"
|
||||
touch $iconDestination/$'Icon\\r'
|
||||
Rez -append $rsrc -o $iconDestination/Icon?
|
||||
SetFile -a V $iconDestination/Icon?
|
||||
""",
|
||||
icon, base);
|
||||
|
||||
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")));
|
||||
|
||||
var executable = base + "/Contents/MacOS/" + name + ".sh";
|
||||
var executable = base + "/Contents/MacOS/" + name;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue