mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-11-21 23:20:23 +00:00
Various fixes
This commit is contained in:
parent
54f47a5a1f
commit
38f18df272
8 changed files with 59 additions and 41 deletions
|
@ -197,7 +197,7 @@ public final class BrowserFileListComp extends SimpleComp {
|
||||||
unix.getUid() != null ? unix.getUid() : m.getCache().getUidForUser(user));
|
unix.getUid() != null ? unix.getUid() : m.getCache().getUidForUser(user));
|
||||||
var gid = String.valueOf(
|
var gid = String.valueOf(
|
||||||
unix.getGid() != null ? unix.getGid() : m.getCache().getGidForGroup(group));
|
unix.getGid() != null ? unix.getGid() : m.getCache().getGidForGroup(group));
|
||||||
if (uid.equals(gid)) {
|
if (uid.equals(gid) && user.equals(group)) {
|
||||||
return user + " [" + uid + "]";
|
return user + " [" + uid + "]";
|
||||||
}
|
}
|
||||||
return user + " [" + uid + "] / " + group + " [" + gid + "]";
|
return user + " [" + uid + "] / " + group + " [" + gid + "]";
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
package io.xpipe.app.core.check;
|
||||||
|
|
||||||
|
import io.xpipe.app.prefs.AppPrefs;
|
||||||
|
import io.xpipe.core.process.OsType;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
public class AppBundledToolsCheck {
|
||||||
|
|
||||||
|
private static boolean getResult() {
|
||||||
|
var fc = new ProcessBuilder("where", "ssh").redirectErrorStream(true).redirectOutput(ProcessBuilder.Redirect.DISCARD);
|
||||||
|
try {
|
||||||
|
var proc = fc.start();
|
||||||
|
proc.waitFor(2, TimeUnit.SECONDS);
|
||||||
|
return proc.exitValue() == 0;
|
||||||
|
} catch (Exception e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void check() {
|
||||||
|
if (AppPrefs.get().useBundledTools().get()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!OsType.getLocal().equals(OsType.WINDOWS)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!getResult()) {
|
||||||
|
AppPrefs.get().useBundledTools.set(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,10 +5,7 @@ import io.xpipe.app.beacon.BlobManager;
|
||||||
import io.xpipe.app.browser.session.BrowserSessionModel;
|
import io.xpipe.app.browser.session.BrowserSessionModel;
|
||||||
import io.xpipe.app.comp.store.StoreViewState;
|
import io.xpipe.app.comp.store.StoreViewState;
|
||||||
import io.xpipe.app.core.*;
|
import io.xpipe.app.core.*;
|
||||||
import io.xpipe.app.core.check.AppAvCheck;
|
import io.xpipe.app.core.check.*;
|
||||||
import io.xpipe.app.core.check.AppCertutilCheck;
|
|
||||||
import io.xpipe.app.core.check.AppRosettaCheck;
|
|
||||||
import io.xpipe.app.core.check.AppShellCheck;
|
|
||||||
import io.xpipe.app.ext.ActionProvider;
|
import io.xpipe.app.ext.ActionProvider;
|
||||||
import io.xpipe.app.ext.DataStoreProviders;
|
import io.xpipe.app.ext.DataStoreProviders;
|
||||||
import io.xpipe.app.issue.TrackEvent;
|
import io.xpipe.app.issue.TrackEvent;
|
||||||
|
@ -45,6 +42,7 @@ public class BaseMode extends OperationMode {
|
||||||
AppI18n.init();
|
AppI18n.init();
|
||||||
LicenseProvider.get().init();
|
LicenseProvider.get().init();
|
||||||
AppCertutilCheck.check();
|
AppCertutilCheck.check();
|
||||||
|
AppBundledToolsCheck.check();
|
||||||
AppAvCheck.check();
|
AppAvCheck.check();
|
||||||
AppSid.init();
|
AppSid.init();
|
||||||
LocalShell.init();
|
LocalShell.init();
|
||||||
|
|
|
@ -81,7 +81,7 @@ public class LauncherCommand implements Callable<Integer> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkStart() {
|
private void checkStart(int attemptCounter) {
|
||||||
var port = AppBeaconServer.get().getPort();
|
var port = AppBeaconServer.get().getPort();
|
||||||
var reachable = BeaconServer.isReachable(port);
|
var reachable = BeaconServer.isReachable(port);
|
||||||
if (!reachable) {
|
if (!reachable) {
|
||||||
|
@ -112,17 +112,22 @@ public class LauncherCommand implements Callable<Integer> {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
client.get()
|
client.get().performRequest(DaemonFocusExchange.Request.builder()
|
||||||
.performRequest(DaemonFocusExchange.Request.builder()
|
|
||||||
.mode(getEffectiveMode())
|
.mode(getEffectiveMode())
|
||||||
.build());
|
.build());
|
||||||
if (!inputs.isEmpty()) {
|
if (!inputs.isEmpty()) {
|
||||||
client.get()
|
client.get().performRequest(DaemonOpenExchange.Request.builder()
|
||||||
.performRequest(DaemonOpenExchange.Request.builder()
|
|
||||||
.arguments(inputs)
|
.arguments(inputs)
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
|
// Wait until shutdown has completed
|
||||||
|
if (ex.getMessage() != null && ex.getMessage().contains("Daemon is currently in shutdown") && attemptCounter < 10) {
|
||||||
|
ThreadHelper.sleep(1000);
|
||||||
|
checkStart(++attemptCounter);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var cli = XPipeInstallation.getLocalDefaultCliExecutable();
|
var cli = XPipeInstallation.getLocalDefaultCliExecutable();
|
||||||
ErrorEvent.fromThrowable(
|
ErrorEvent.fromThrowable(
|
||||||
"Unable to connect to existing running daemon instance as it did not respond."
|
"Unable to connect to existing running daemon instance as it did not respond."
|
||||||
|
@ -172,7 +177,7 @@ public class LauncherCommand implements Callable<Integer> {
|
||||||
@Override
|
@Override
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public Integer call() {
|
public Integer call() {
|
||||||
checkStart();
|
checkStart(0);
|
||||||
|
|
||||||
// Initialize base mode first to have access to the preferences to determine effective mode
|
// Initialize base mode first to have access to the preferences to determine effective mode
|
||||||
OperationMode.switchToSyncOrThrow(OperationMode.BACKGROUND);
|
OperationMode.switchToSyncOrThrow(OperationMode.BACKGROUND);
|
||||||
|
|
|
@ -43,7 +43,7 @@ public class AppPrefs {
|
||||||
final BooleanProperty dontAcceptNewHostKeys =
|
final BooleanProperty dontAcceptNewHostKeys =
|
||||||
mapVaultSpecific(new SimpleBooleanProperty(false), "dontAcceptNewHostKeys", Boolean.class);
|
mapVaultSpecific(new SimpleBooleanProperty(false), "dontAcceptNewHostKeys", Boolean.class);
|
||||||
final BooleanProperty performanceMode = map(new SimpleBooleanProperty(false), "performanceMode", Boolean.class);
|
final BooleanProperty performanceMode = map(new SimpleBooleanProperty(false), "performanceMode", Boolean.class);
|
||||||
final BooleanProperty useBundledTools = map(new SimpleBooleanProperty(false), "useBundledTools", Boolean.class);
|
public final BooleanProperty useBundledTools = map(new SimpleBooleanProperty(false), "useBundledTools", Boolean.class);
|
||||||
public final ObjectProperty<AppTheme.Theme> theme =
|
public final ObjectProperty<AppTheme.Theme> theme =
|
||||||
map(new SimpleObjectProperty<>(), "theme", AppTheme.Theme.class);
|
map(new SimpleObjectProperty<>(), "theme", AppTheme.Theme.class);
|
||||||
final BooleanProperty useSystemFont = map(new SimpleBooleanProperty(true), "useSystemFont", Boolean.class);
|
final BooleanProperty useSystemFont = map(new SimpleBooleanProperty(true), "useSystemFont", Boolean.class);
|
||||||
|
|
|
@ -155,12 +155,14 @@ public interface KittyTerminalType extends ExternalTerminalType {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void launch(LaunchConfiguration configuration) throws Exception {
|
public void launch(LaunchConfiguration configuration) throws Exception {
|
||||||
|
// We use the absolute path to force the usage of macOS netcat
|
||||||
|
// Homebrew versions have different option formats
|
||||||
try (var sc = LocalShell.getShell().start()) {
|
try (var sc = LocalShell.getShell().start()) {
|
||||||
CommandSupport.isInPathOrThrow(sc, "nc", "Netcat", null);
|
CommandSupport.isInPathOrThrow(sc, "/usr/bin/nc", "Netcat", null);
|
||||||
}
|
}
|
||||||
|
|
||||||
var toClose = prepare();
|
var toClose = prepare();
|
||||||
var socketWrite = CommandBuilder.of().add("nc", "-U");
|
var socketWrite = CommandBuilder.of().add("/usr/bin/nc", "-U");
|
||||||
open(configuration, socketWrite);
|
open(configuration, socketWrite);
|
||||||
if (toClose) {
|
if (toClose) {
|
||||||
closeInitial(socketWrite);
|
closeInitial(socketWrite);
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
package io.xpipe.core.store;
|
|
||||||
|
|
||||||
import java.util.OptionalInt;
|
|
||||||
|
|
||||||
public interface ServiceStore extends SingletonSessionStore<SessionChain> {
|
|
||||||
|
|
||||||
NetworkTunnelStore getParent();
|
|
||||||
|
|
||||||
int getPort();
|
|
||||||
|
|
||||||
OptionalInt getTargetPort();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
default SessionChain newSession() {
|
|
||||||
var s = getParent().tunnelSession();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
default Class<?> getSessionClass() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
2
dist/changelogs/11.0.md
vendored
2
dist/changelogs/11.0.md
vendored
|
@ -55,6 +55,7 @@ I received plenty of user feedback and had time to observe the inner workings of
|
||||||
- Fix file browser list jumping around on first show
|
- Fix file browser list jumping around on first show
|
||||||
- Fix missing libxtst6 dependency on some debian-based systems
|
- Fix missing libxtst6 dependency on some debian-based systems
|
||||||
- Fix file browser root session not applying same color of original connection
|
- Fix file browser root session not applying same color of original connection
|
||||||
|
- Fix macOS kitty terminal netcat incompatibility with homebrew versions
|
||||||
|
|
||||||
## Other
|
## Other
|
||||||
|
|
||||||
|
@ -67,3 +68,4 @@ I received plenty of user feedback and had time to observe the inner workings of
|
||||||
- Don't show git vault compatibility warnings on minor version updates
|
- Don't show git vault compatibility warnings on minor version updates
|
||||||
- Enable ZGC on Linux and macOS
|
- Enable ZGC on Linux and macOS
|
||||||
- Some small appearance improvements
|
- Some small appearance improvements
|
||||||
|
- Many other miscellaneous fixes all over the place
|
||||||
|
|
Loading…
Reference in a new issue