From e92ded1c716c46136fd0044f085ff70d7e3ef057 Mon Sep 17 00:00:00 2001 From: crschnick Date: Sun, 4 Jun 2023 15:04:14 +0000 Subject: [PATCH] Various small improvements --- README.md | 3 ++- .../app/browser/BrowserBookmarkList.java | 27 ++++++++++++------- .../comp/source/store/GuiDsStoreCreator.java | 4 +-- .../comp/storage/store/StoreEntryComp.java | 15 +++-------- .../comp/storage/store/StoreEntryWrapper.java | 18 +++++++++++++ .../io/xpipe/app/ext/DataStoreProvider.java | 5 ---- .../resources/lang/dscreation_en.properties | 2 +- 7 files changed, 44 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 0478616ae..a531f3a85 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ bash <(curl -sL https://raw.githubusercontent.com/xpipe-io/xpipe/master/get-xpip ## Features -### Flexible remote file browser +### Powerful remote file browser - Interact with the file system of any remote system using a workflow optimized for professionals - Quickly open a terminal into any directory @@ -68,6 +68,7 @@ bash <(curl -sL https://raw.githubusercontent.com/xpipe-io/xpipe/master/get-xpip - Securely stores all information exclusively on your computer and encrypts all secret information. See the [security page](/SECURITY.md) for more information - Create custom desktop shortcuts to automatically open specific remote connections in your terminal +- Don't worry about encoding issues on Windows systems, all shells are launched in UTF8 mode by default ![Connection manager](https://user-images.githubusercontent.com/72509152/230098966-000596ca-8167-4cb8-8ada-f6b3a7d482e2.png) diff --git a/app/src/main/java/io/xpipe/app/browser/BrowserBookmarkList.java b/app/src/main/java/io/xpipe/app/browser/BrowserBookmarkList.java index da3e58716..212150706 100644 --- a/app/src/main/java/io/xpipe/app/browser/BrowserBookmarkList.java +++ b/app/src/main/java/io/xpipe/app/browser/BrowserBookmarkList.java @@ -7,6 +7,8 @@ import io.xpipe.app.fxcomps.SimpleComp; import io.xpipe.app.fxcomps.impl.IconButtonComp; import io.xpipe.app.fxcomps.impl.PrettyImageComp; import io.xpipe.app.fxcomps.util.PlatformThread; +import io.xpipe.app.util.BusyProperty; +import io.xpipe.app.util.ThreadHelper; import io.xpipe.core.store.DataStore; import io.xpipe.core.store.ShellStore; import javafx.application.Platform; @@ -112,12 +114,20 @@ final class BrowserBookmarkList extends SimpleComp { mouseEvent.consume(); }); addEventHandler(MouseEvent.MOUSE_CLICKED, event -> { - if (getItem() == null || event.getButton() != MouseButton.PRIMARY || (!getItem().getState().getValue().isUsable()) || !(getItem().getEntry() - .getStore() instanceof ShellStore fileSystem)) { + if (getItem() == null + || event.getButton() != MouseButton.PRIMARY + || (!getItem().getState().getValue().isUsable())) { return; } - model.openFileSystemAsync(null, fileSystem, null, busy); + ThreadHelper.runFailableAsync(() -> { + BusyProperty.execute(busy, () -> { + getItem().refreshIfNeeded(); + }); + if (getItem().getEntry().getStore() instanceof ShellStore fileSystem) { + model.openFileSystemAsync(null, fileSystem, null, busy); + } + }); event.consume(); }); var icon = new SimpleObjectProperty("mdal-keyboard_arrow_right"); @@ -128,15 +138,13 @@ final class BrowserBookmarkList extends SimpleComp { icon.set("mdal-keyboard_arrow_right"); } }); - var button = new IconButtonComp(icon, - () -> { - getTreeItem().setExpanded(!getTreeItem().isExpanded()); - }) + var button = new IconButtonComp(icon, () -> { + getTreeItem().setExpanded(!getTreeItem().isExpanded()); + }) .apply(struc -> struc.get().setPrefWidth(25)) .grow(false, true) .styleClass("expand-button") .apply(struc -> struc.get().setFocusTraversable(false)); - setDisclosureNode(button.createRegion()); } @@ -158,7 +166,8 @@ final class BrowserBookmarkList extends SimpleComp { .getDisplayIconFileName(item.getEntry().getStore())); setGraphic(imageView); setFocusTraversable(true); - setAccessibleText(item.getName() + " " + item.getEntry().getProvider().getDisplayName()); + setAccessibleText( + item.getName() + " " + item.getEntry().getProvider().getDisplayName()); } } } diff --git a/app/src/main/java/io/xpipe/app/comp/source/store/GuiDsStoreCreator.java b/app/src/main/java/io/xpipe/app/comp/source/store/GuiDsStoreCreator.java index bce8bbda0..7aa302ef1 100644 --- a/app/src/main/java/io/xpipe/app/comp/source/store/GuiDsStoreCreator.java +++ b/app/src/main/java/io/xpipe/app/comp/source/store/GuiDsStoreCreator.java @@ -80,8 +80,8 @@ public class GuiDsStoreCreator extends MultiStepComp.Step> { }); this.apply(r -> { - r.get().setPrefWidth(AppFont.em(36)); - r.get().setPrefHeight(AppFont.em(42)); + r.get().setPrefWidth(AppFont.em(40)); + r.get().setPrefHeight(AppFont.em(45)); }); this.validator.addListener((observable, oldValue, newValue) -> { diff --git a/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntryComp.java b/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntryComp.java index 221f4c213..8a8708bb7 100644 --- a/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntryComp.java +++ b/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntryComp.java @@ -8,14 +8,13 @@ import io.xpipe.app.ext.ActionProvider; import io.xpipe.app.fxcomps.Comp; import io.xpipe.app.fxcomps.SimpleComp; import io.xpipe.app.fxcomps.SimpleCompStructure; -import io.xpipe.app.fxcomps.augment.GrowAugment; import io.xpipe.app.fxcomps.augment.ContextMenuAugment; +import io.xpipe.app.fxcomps.augment.GrowAugment; import io.xpipe.app.fxcomps.impl.*; import io.xpipe.app.fxcomps.util.PlatformThread; import io.xpipe.app.fxcomps.util.SimpleChangeListener; import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.storage.DataStorage; -import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.util.DesktopHelper; import io.xpipe.app.util.ThreadHelper; import javafx.beans.binding.Bindings; @@ -156,16 +155,8 @@ public class StoreEntryComp extends SimpleComp { button.setOnAction(event -> { event.consume(); ThreadHelper.runFailableAsync(() -> { - var found = entry.getDefaultActionProvider().getValue(); - if (entry.getState().getValue().equals(DataStoreEntry.State.COMPLETE_BUT_INVALID) || found == null) { - entry.getEntry().refresh(true); - entry.getExpanded().set(true); - } - - if (found != null) { - entry.getEntry().updateLastUsed(); - found.createAction(entry.getEntry().getStore().asNeeded()).execute(); - } + entry.refreshIfNeeded(); + entry.executeDefaultAction(); }); }); diff --git a/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntryWrapper.java b/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntryWrapper.java index 6232e24cc..b238f9656 100644 --- a/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntryWrapper.java +++ b/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntryWrapper.java @@ -163,6 +163,24 @@ public class StoreEntryWrapper implements StorageFilter.Filterable { }); } + public void refreshIfNeeded() throws Exception { + var found = getDefaultActionProvider().getValue(); + if (entry.getState().equals(DataStoreEntry.State.COMPLETE_BUT_INVALID) || found == null) { + getEntry().refresh(true); + PlatformThread.runLaterIfNeeded(() -> { + expanded.set(true); + }); + } + } + + public void executeDefaultAction() throws Exception { + var found = getDefaultActionProvider().getValue(); + if (found != null) { + entry.updateLastUsed(); + found.createAction(entry.getStore().asNeeded()).execute(); + } + } + public void toggleExpanded() { this.expanded.set(!expanded.getValue()); } diff --git a/app/src/main/java/io/xpipe/app/ext/DataStoreProvider.java b/app/src/main/java/io/xpipe/app/ext/DataStoreProvider.java index b9a272559..a9de53b34 100644 --- a/app/src/main/java/io/xpipe/app/ext/DataStoreProvider.java +++ b/app/src/main/java/io/xpipe/app/ext/DataStoreProvider.java @@ -2,7 +2,6 @@ package io.xpipe.app.ext; import io.xpipe.app.core.AppI18n; import io.xpipe.core.dialog.Dialog; -import io.xpipe.core.source.CollectionDataSource; import io.xpipe.core.store.DataStore; import io.xpipe.core.store.FileSystem; import io.xpipe.core.store.ShellStore; @@ -14,10 +13,6 @@ import java.util.List; public interface DataStoreProvider { - default CollectionDataSource createAssociatedContainer(DataStore store) { - return null; - } - default ModuleInstall getRequiredAdditionalInstallation() { return null; } diff --git a/app/src/main/resources/io/xpipe/app/resources/lang/dscreation_en.properties b/app/src/main/resources/io/xpipe/app/resources/lang/dscreation_en.properties index 984be3ba6..806ec3844 100644 --- a/app/src/main/resources/io/xpipe/app/resources/lang/dscreation_en.properties +++ b/app/src/main/resources/io/xpipe/app/resources/lang/dscreation_en.properties @@ -36,7 +36,7 @@ clean=Clean refresh=Refresh addDatabase=Add Database ... addHost=Add Host ... -addShell=Add Shell ... +addShell=Add Environment ... addCommand=Add Command ... addOther=Add Other ... addStreamTitle=Add Stream Store