diff --git a/app/src/main/java/io/xpipe/app/beacon/impl/FsScriptExchangeImpl.java b/app/src/main/java/io/xpipe/app/beacon/impl/FsScriptExchangeImpl.java index 5f2d826b1..64ed19d58 100644 --- a/app/src/main/java/io/xpipe/app/beacon/impl/FsScriptExchangeImpl.java +++ b/app/src/main/java/io/xpipe/app/beacon/impl/FsScriptExchangeImpl.java @@ -22,6 +22,7 @@ public class FsScriptExchangeImpl extends FsScriptExchange { } var file = ScriptHelper.getExecScriptFile(shell.getControl()); shell.getControl().view().writeScriptFile(file, data); + file = ScriptHelper.fixScriptPermissions(shell.getControl(), file); return Response.builder().path(file).build(); } } diff --git a/app/src/main/java/io/xpipe/app/update/GitHubUpdater.java b/app/src/main/java/io/xpipe/app/update/GitHubUpdater.java index 3f1558fa9..9a20aeab2 100644 --- a/app/src/main/java/io/xpipe/app/update/GitHubUpdater.java +++ b/app/src/main/java/io/xpipe/app/update/GitHubUpdater.java @@ -1,15 +1,19 @@ package io.xpipe.app.update; +import io.xpipe.app.comp.base.ModalButton; import io.xpipe.app.core.AppCache; import io.xpipe.app.core.AppProperties; import io.xpipe.app.issue.ErrorEvent; +import io.xpipe.app.util.Hyperlinks; import javafx.scene.layout.Region; import org.kohsuke.github.GHRelease; import java.nio.file.Files; import java.time.Instant; +import java.util.ArrayList; +import java.util.List; public class GitHubUpdater extends UpdateHandler { @@ -18,8 +22,24 @@ public class GitHubUpdater extends UpdateHandler { } @Override - public Region createInterface() { - return null; + public List createActions() { + var list = new ArrayList(); + list.add(new ModalButton("ignore", null, true, false)); + list.add(new ModalButton( + "checkOutUpdate", + () -> { + Hyperlinks.open(getPreparedUpdate().getValue().getReleaseUrl()); + }, + false, + false)); + list.add(new ModalButton( + "install", + () -> { + executeUpdateAndClose(); + }, + false, + true)); + return list; } public void prepareUpdateImpl() { diff --git a/app/src/main/java/io/xpipe/app/update/PortableUpdater.java b/app/src/main/java/io/xpipe/app/update/PortableUpdater.java index 5837004d2..b77f875ed 100644 --- a/app/src/main/java/io/xpipe/app/update/PortableUpdater.java +++ b/app/src/main/java/io/xpipe/app/update/PortableUpdater.java @@ -1,6 +1,7 @@ package io.xpipe.app.update; import io.xpipe.app.comp.base.ButtonComp; +import io.xpipe.app.comp.base.ModalButton; import io.xpipe.app.core.AppI18n; import io.xpipe.app.core.AppProperties; import io.xpipe.app.util.Hyperlinks; @@ -10,6 +11,8 @@ import javafx.scene.layout.Region; import org.kohsuke.github.GHRelease; import java.time.Instant; +import java.util.ArrayList; +import java.util.List; public class PortableUpdater extends UpdateHandler { @@ -18,15 +21,17 @@ public class PortableUpdater extends UpdateHandler { } @Override - public Region createInterface() { - return new ButtonComp(AppI18n.observable("checkOutUpdate"), () -> { - Hyperlinks.open(XPipeDistributionType.get() - .getUpdateHandler() - .getPreparedUpdate() - .getValue() - .getReleaseUrl()); - }) - .createRegion(); + public List createActions() { + var list = new ArrayList(); + list.add(new ModalButton("ignore", null, true, false)); + list.add(new ModalButton( + "checkOutUpdate", + () -> { + Hyperlinks.open(getPreparedUpdate().getValue().getReleaseUrl()); + }, + false, + true)); + return list; } public synchronized AvailableRelease refreshUpdateCheckImpl(boolean first, boolean securityOnly) throws Exception { diff --git a/app/src/main/java/io/xpipe/app/update/UpdateAvailableDialog.java b/app/src/main/java/io/xpipe/app/update/UpdateAvailableDialog.java index 64ed1fbed..e66e2860a 100644 --- a/app/src/main/java/io/xpipe/app/update/UpdateAvailableDialog.java +++ b/app/src/main/java/io/xpipe/app/update/UpdateAvailableDialog.java @@ -34,37 +34,12 @@ public class UpdateAvailableDialog { var comp = Comp.of(() -> { var markdown = new MarkdownComp(u.getBody() != null ? u.getBody() : "", s -> s, false).createRegion(); - var updaterContent = uh.createInterface(); - - Region region; - if (updaterContent != null) { - var stack = new StackPane(updaterContent); - var box = new VBox(markdown, stack); - box.setFillWidth(true); - box.setPadding(Insets.EMPTY); - region = box; - } else { - region = markdown; - } - - return region; + return markdown; }); var modal = ModalOverlay.of("updateReadyAlertTitle", comp.prefWidth(600), null); - modal.addButton(new ModalButton("ignore", null, true, false)); - modal.addButton(new ModalButton( - "checkOutUpdate", - () -> { - Hyperlinks.open(uh.getPreparedUpdate().getValue().getReleaseUrl()); - }, - false, - false)); - modal.addButton(new ModalButton( - "install", - () -> { - uh.executeUpdateAndClose(); - }, - false, - true)); + for (var action : uh.createActions()) { + modal.addButton(action); + } AppDialog.show(modal); } } diff --git a/app/src/main/java/io/xpipe/app/update/UpdateHandler.java b/app/src/main/java/io/xpipe/app/update/UpdateHandler.java index ae6a86b64..e0bac24c3 100644 --- a/app/src/main/java/io/xpipe/app/update/UpdateHandler.java +++ b/app/src/main/java/io/xpipe/app/update/UpdateHandler.java @@ -1,5 +1,6 @@ package io.xpipe.app.update; +import io.xpipe.app.comp.base.ModalButton; import io.xpipe.app.core.AppCache; import io.xpipe.app.core.AppProperties; import io.xpipe.app.issue.ErrorEvent; @@ -24,6 +25,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.time.Duration; import java.time.Instant; +import java.util.List; @SuppressWarnings("InfiniteLoopStatement") @Getter @@ -182,7 +184,7 @@ public abstract class UpdateHandler { } } - public abstract Region createInterface(); + public abstract List createActions(); public void prepareUpdateImpl() { var changelogString = diff --git a/app/src/main/java/io/xpipe/app/util/ScriptHelper.java b/app/src/main/java/io/xpipe/app/util/ScriptHelper.java index 2c4fe89d1..789e66b65 100644 --- a/app/src/main/java/io/xpipe/app/util/ScriptHelper.java +++ b/app/src/main/java/io/xpipe/app/util/ScriptHelper.java @@ -113,17 +113,21 @@ public class ScriptHelper { .handle(); processControl.view().writeScriptFile(file, content); + file = fixScriptPermissions(processControl, file); + return file; + } + public static FilePath fixScriptPermissions(ShellControl processControl, FilePath file) throws Exception { // Check if file system has disabled execution in temp // This might happen in limited containers if (processControl.getOsType() == OsType.LINUX && processControl.getShellDialect() == ShellDialects.SH && !processControl.command(CommandBuilder.of().add("test", "-x").addFile(file)).executeAndCheck()) { var homeFile = processControl.view().userHome().join(file.getFileName()); processControl.getShellDialect().getFileMoveCommand(processControl,file.toString(),homeFile.toString()).execute(); - file = homeFile; + return homeFile; + } else { + return file; } - - return file; } public static FilePath createRemoteAskpassScript(ShellControl parent, UUID requestId, String prefix) diff --git a/dist/changelogs/14.0.md b/dist/changelogs/14.0.md index 4eb7bbe07..6ea709181 100644 --- a/dist/changelogs/14.0.md +++ b/dist/changelogs/14.0.md @@ -1,4 +1,4 @@ -XPipe 14 has been the biggest rework so far and provides an improved user experience, better team features, performance and memory improvements, and fixes to many existing bugs and limitations. It will take some days until the initial rough edges are ironed out, but it will get there eventually. So please make sure to report any issues you find. +XPipe 14 has been the biggest rework so far and provides an improved user experience, better team features, performance and memory improvements, and fixes to many existing bugs and limitations. It will take some days until the initial rough edges are ironed out, but it will get there eventually. So please make sure to report any issues you find, even the small ones. ## Team vaults + Reusable identities @@ -38,12 +38,10 @@ If you have previously used a custom vault passphrase to lock your vault, this w - Improve RAM usage - Implement performance improvements for local shells -- The Windows Terminal integration will now create and use its own profile +- The Windows Terminal integration will now create and use its own profile to prevent certain settings from breaking the terminal integration - Future updates on Windows will be faster - There is now the option to censor all displayed contents, allowing for a more simple screensharing workflow for XPipe - Implement startup speed improvements -- Improve error message for libvirt when user was missing group permissions -- The Yubikey PIV and PKCS#11 SSH auth option have been made more resilient for any PATH issues - The file browser selected file arguments for scripts are now passed in order of selection time, allowing for more advanced scripting - Improve error messages when VMs could not be reached due to a custom firewall setup - The XPipe [Python API](https://github.com/xpipe-io/xpipe-python-api) is now featured more prominently @@ -51,24 +49,26 @@ If you have previously used a custom vault passphrase to lock your vault, this w - Add support for Ghostty on Linux - The webtop docker image is now also available for arm64 platforms - The webtop is now also available for Kasm Workspaces at https://github.com/xpipe-io/kasm-registry +- The Yubikey PIV and PKCS#11 SSH auth option have been made more resilient for any PATH issues - Add translations for Swedish, Polish, Indonesian - Add more docs to the password manager settings +- Improve error message for libvirt when user was missing group permissions ## Fixes -- Fix Yubikey PIV and other PKCS#11 SSH libraries not asking for pin on macOS - Fix password manager requests not being cached and requiring an unlock every time - Fix connection icon being removed when the connection is edited -- Fix Windows updates breaking pinned shortcuts and some registry keys (This will only work in new updates from now on) +- Fix Windows updates breaking pinned shortcuts and some registry keys (This will only work in future updates from now on) +- Fix Yubikey PIV and other PKCS#11 SSH libraries not asking for pin on macOS - Fix launched terminal not getting focus again after a password prompt -- Fix titlebar on Windows 11 being overlapped in fullscreen mode -- Fix built-in services like the Proxmox dashboard also counting for the service license limit -- Fix some files names that required escapes not being displayed in file browser -- Fix special Windows files like OneDrive links not being shown in file browser - Fix some container shells not working do to some issues with /tmp -- Fix API not respecting category field when adding connections - Fix fish shells launching as sh in the file browser terminal - Fix zsh terminal not launching in the current working directory in file browser - Fix unrecognized \r showing up in various error messages - Fix sudo elevation not working properly in VMs - Fix permission denied errors for script files in some containers +- Fix API not respecting category field when adding connections +- Fix some files names that required escapes not being displayed in file browser +- Fix special Windows files like OneDrive links not being shown in file browser +- Fix built-in services like the Proxmox dashboard also counting for the service license limit +- Fix titlebar on Windows 11 being overlapped in fullscreen mode diff --git a/version b/version index 6f4428dcb..05b7228b4 100644 --- a/version +++ b/version @@ -1 +1 @@ -14.0-67 +14.0-68