mirror of
https://github.com/xpipe-io/xpipe.git
synced 2026-04-28 18:40:50 -04:00
Fixes
This commit is contained in:
@@ -7,6 +7,7 @@ import io.xpipe.app.comp.base.ButtonComp;
|
||||
import io.xpipe.app.comp.base.InputGroupComp;
|
||||
import io.xpipe.app.comp.base.TextFieldComp;
|
||||
import io.xpipe.app.core.AppI18n;
|
||||
import io.xpipe.app.update.AppDistributionType;
|
||||
import io.xpipe.app.util.*;
|
||||
|
||||
import javafx.beans.binding.Bindings;
|
||||
@@ -32,7 +33,9 @@ public class ActionShortcutComp extends SimpleComp {
|
||||
protected Region createSimple() {
|
||||
var options = new OptionsBuilder();
|
||||
options.nameAndDescription("actionDesktopShortcut").addComp(createDesktopComp());
|
||||
options.nameAndDescription("actionUrlShortcut").addComp(createUrlComp());
|
||||
options.nameAndDescription(AppDistributionType.get().isSupportsUrls() ? "actionUrlShortcut" : "actionUrlShortcutDisabled")
|
||||
.addComp(createUrlComp())
|
||||
.disable(!AppDistributionType.get().isSupportsUrls());
|
||||
options.nameAndDescription("actionApiCall").addComp(createApiComp());
|
||||
// options.nameAndDescription("actionMacro")
|
||||
// .addComp(createMacroComp());
|
||||
|
||||
@@ -421,6 +421,10 @@ public class StoreEntryWrapper {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (getEntry().getUuid().toString().equalsIgnoreCase(filter)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (entry.getValidity().isUsable()
|
||||
&& entry.getProvider().getSearchableTerms(entry.getStore()).stream()
|
||||
.anyMatch(s -> s.toLowerCase().contains(filter.toLowerCase()))) {
|
||||
|
||||
@@ -106,6 +106,7 @@ public class StandardStorage extends DataStorage {
|
||||
}
|
||||
}
|
||||
|
||||
var laterAddedEntries = new HashSet<DataStoreEntry>();
|
||||
try {
|
||||
var exception = new AtomicReference<Exception>();
|
||||
try (var cats = Files.list(categoriesDir)) {
|
||||
@@ -185,7 +186,8 @@ public class StandardStorage extends DataStorage {
|
||||
return;
|
||||
}
|
||||
|
||||
addStoreEntryIfNotPresent(entry.get());
|
||||
laterAddedEntries.add(entry.get());
|
||||
storeEntries.put(entry.get(), entry.get());
|
||||
} catch (IOException ex) {
|
||||
// IO exceptions are not expected
|
||||
exception.set(new IOException("Unable to load data from " + path + ". Is it corrupted?", ex));
|
||||
@@ -260,7 +262,7 @@ public class StandardStorage extends DataStorage {
|
||||
}
|
||||
|
||||
// Remove per user entries early if possible. Doesn't cover all, so do it later again
|
||||
filterPerUserEntries();
|
||||
filterPerUserEntries(storeEntries.keySet());
|
||||
// Reload stores, this time with all entry refs present
|
||||
// These do however not have a completed validity yet
|
||||
refreshEntries();
|
||||
@@ -281,7 +283,13 @@ public class StandardStorage extends DataStorage {
|
||||
// Update validities from synthetic parent changes
|
||||
refreshEntries();
|
||||
// Remove user inaccessible entries only when everything is valid, so we can check the parent hierarchies
|
||||
filterPerUserEntries();
|
||||
filterPerUserEntries(storeEntries.keySet());
|
||||
|
||||
// Only add new stores if really necessary
|
||||
laterAddedEntries.stream().filter(dataStoreEntry -> storeEntries.containsKey(dataStoreEntry)).forEach(e -> {
|
||||
storeEntries.remove(e);
|
||||
addStoreEntryIfNotPresent(e);
|
||||
});
|
||||
|
||||
deleteLeftovers();
|
||||
|
||||
@@ -290,14 +298,14 @@ public class StandardStorage extends DataStorage {
|
||||
busyIo.unlock();
|
||||
}
|
||||
|
||||
private void filterPerUserEntries() {
|
||||
private void filterPerUserEntries(Collection<DataStoreEntry> entries) {
|
||||
var toRemove = getStoreEntries().stream()
|
||||
.filter(dataStoreEntry -> shouldRemoveOtherUserEntry(dataStoreEntry))
|
||||
.toList();
|
||||
directoriesToKeep.addAll(toRemove.stream()
|
||||
.map(dataStoreEntry -> dataStoreEntry.getDirectory())
|
||||
.toList());
|
||||
toRemove.forEach(this::deleteStoreEntry);
|
||||
toRemove.forEach(entries::remove);
|
||||
}
|
||||
|
||||
private boolean shouldRemoveOtherUserEntry(DataStoreEntry entry) {
|
||||
|
||||
33
dist/changelogs/17.0.md
vendored
33
dist/changelogs/17.0.md
vendored
@@ -14,6 +14,10 @@ There is now proper support for jump servers. While gateways worked similar to j
|
||||
|
||||
Furthermore, the SSH implementation for devices that don't provide a full shell, e.g. embedded devices and other limited systems, has been completely reworked. This fixes many issues where connections to such systems were not possible or failed. You can now designate an SSH connection as a limited system in its advanced settings, even without the homelab plan. This will then allow you to directly launch the connection, without any issues.
|
||||
|
||||
- The option to open a connection in VSCode remote has been expanded to also support Cursor and Windsurf
|
||||
- Fix SSH agent variables being wrong on macOS when using homebrew ssh
|
||||
- Active tunnels are now periodically refreshed to check if the underlying tunnel was closed
|
||||
|
||||
## VNC
|
||||
|
||||
Up until now, the internal VNC implementation of XPipe did a somewhat acceptable job for most connections. However, it is not able to match dedicated VNC clients when it comes to more advanced features and authentication methods. There's simply not the development capacity to maintain all of these additional VNC features. For this reason, there is now support to also use an external VNC client with XPipe, just as with any other tool integrations.
|
||||
@@ -42,8 +46,8 @@ Note that you will have to uninstall any old x64 XPipe installation for the upgr
|
||||
|
||||
## File browser
|
||||
|
||||
- Actions which modify a single file, e.g. a file edit, will now automatically refresh the file list to show updated changes
|
||||
- There is now a new file browser action to compute directory sizes
|
||||
- Operations which modify a single file, e.g. a file edit, will now automatically refresh the file list to show updated changes
|
||||
- Add new file browser action to compute directory sizes
|
||||
- The transfer speed in the file browser on Windows for multiple files has been improved
|
||||
- Renaming a file now moves the caret to the end of the base file name
|
||||
- The file browser now works much better in small windows sizes
|
||||
@@ -67,24 +71,29 @@ Furthermore, there are also more improvements in the connection hub:
|
||||
|
||||
The HTTP API has been improved in various areas. The action system is integrated in it, meaning that you can call any action from the API. Furthermore, there are now more API endpoints for categories so that you have proper control over them as well. There is also now a way to encrypt and decrypt secrets via the API, allowing you to create connections with integrated secrets with it as well.
|
||||
|
||||
## Git vault
|
||||
|
||||
The git vault can now automatically resolve merge conflicts without restarts when multiple systems share the git repository. Any externally pushed commits are integrated into the connection hub instantly.
|
||||
|
||||
- You can now specify a git username and password in the settings menu if your local system does not have a git client with configured credentials
|
||||
- Fix git vault not restoring external unstaged changes
|
||||
|
||||
## Other
|
||||
|
||||
- Add note on how to fix potential blurriness on Gnome Wayland systems with high display scaling
|
||||
- Various performance improvements
|
||||
- Password managers now support retrieving both username and password of an entry. For that, you can now create password manager identities that automatically provide the username and password
|
||||
- Terminal connections now enable truecolor mode if possible
|
||||
- The option to open a connection in VSCode remote has been expanded to also support Cursor and Windsurf
|
||||
- Implement various performance improvements
|
||||
- You can now specify an alternative user for shell environments to switch to via sudo
|
||||
- You can now specify a git username and password in the settings menu if your local system does not have a git client with configured credentials
|
||||
- You can now disable icon sources without having to remove them
|
||||
- Active tunnels are now periodically refreshed to check if the underlying tunnel was closed
|
||||
- Add note on how to fix potential blurriness on Gnome Wayland systems with high display scaling
|
||||
- Add notification when a password is copied to the clipboard
|
||||
- Add a new loading icon
|
||||
- Add support for nushell
|
||||
|
||||
## Fixes
|
||||
|
||||
- Fix clipboard data of other formats, e.g. files, being cleared after expiration of a copied password
|
||||
- Fix pwsh connections on Linux/macOS freezing on sudo elevation
|
||||
- Fix sudo elevation not working on WSL if WSLInterop for executables was disabled
|
||||
- There is now a notification when a password is copied to the clipboard
|
||||
- There is now a new loading icon
|
||||
- Fix text color on hover having low contrast in some themes
|
||||
- There is now support for nushell
|
||||
- Fix SSH agent variables being wrong on macOS when using homebrew ssh
|
||||
- Fix connection search freezing on Ubuntu systems with LXD snap stub installed
|
||||
|
||||
|
||||
2
lang/strings/translations_en.properties
generated
2
lang/strings/translations_en.properties
generated
@@ -1511,6 +1511,8 @@ actionDesktopShortcut=Desktop shortcut
|
||||
actionDesktopShortcutDescription=Create a shortcut for this action on your desktop
|
||||
actionUrlShortcut=URL shortcut
|
||||
actionUrlShortcutDescription=Copy a URL that can trigger this actions when opened
|
||||
actionUrlShortcutDisabled=URL shortcut (Unavailable)
|
||||
actionUrlShortcutDisabledDescription=The $TYPE$ installation type does not support opening URLs
|
||||
actionApiCall=API request
|
||||
actionApiCallDescription=Call this action from the HTTP API
|
||||
actionMacro=Action macro
|
||||
|
||||
Reference in New Issue
Block a user