From 9f45186103144fc5dadb8077d80efc767c2a8193 Mon Sep 17 00:00:00 2001 From: crschnick Date: Mon, 9 Jun 2025 02:33:13 +0000 Subject: [PATCH] Reformat --- .../io/xpipe/app/action/AbstractAction.java | 91 ++- .../io/xpipe/app/action/ActionConfigComp.java | 18 +- .../xpipe/app/action/ActionConfirmComp.java | 19 +- .../xpipe/app/action/ActionConfirmation.java | 2 +- .../xpipe/app/action/ActionJacksonMapper.java | 26 +- .../io/xpipe/app/action/ActionPickComp.java | 10 +- .../io/xpipe/app/action/ActionProvider.java | 4 +- .../xpipe/app/action/ActionShortcutComp.java | 38 +- .../java/io/xpipe/app/action/ActionUrls.java | 52 +- .../xpipe/app/action/SerializableAction.java | 10 +- .../xpipe/app/action/StoreContextAction.java | 1 - .../app/beacon/impl/AskpassExchangeImpl.java | 22 +- .../impl/ConnectionToggleExchangeImpl.java | 2 +- .../beacon/impl/TerminalWaitExchangeImpl.java | 1 - .../BrowserFileChooserSessionComp.java | 9 +- .../app/browser/BrowserFullSessionComp.java | 6 +- .../app/browser/BrowserSessionTabsComp.java | 24 +- .../app/browser/action/BrowserAction.java | 61 +- .../action/BrowserActionProviders.java | 13 +- .../impl/ApplyFileEditActionProvider.java | 3 + .../action/impl/ChgrpActionProvider.java | 2 + .../action/impl/ChmodActionProvider.java | 2 + .../action/impl/ChownActionProvider.java | 2 + .../action/impl/DeleteActionProvider.java | 3 +- .../impl/NewDirectoryActionProvider.java | 1 + .../action/impl/NewFileActionProvider.java | 1 + .../action/impl/NewLinkActionProvider.java | 1 + .../impl/OpenDirectoryActionProvider.java | 1 + .../impl/OpenFileDefaultActionProvider.java | 1 + .../OpenFileNativeDetailsActionProvider.java | 12 +- .../impl/OpenFileWithActionProvider.java | 1 + .../impl/OpenTerminalActionProvider.java | 12 +- .../RunCommandInBackgroundActionProvider.java | 12 +- .../RunCommandInBrowserActionProvider.java | 1 + .../RunCommandInTerminalActionProvider.java | 7 +- .../impl/TransferFilesActionProvider.java | 7 +- .../xpipe/app/browser/file/BrowserAlerts.java | 11 +- .../browser/file/BrowserBreadcrumbBar.java | 3 +- .../app/browser/file/BrowserClipboard.java | 10 +- .../file/BrowserConnectionListFilterComp.java | 2 +- .../app/browser/file/BrowserFileListComp.java | 4 +- .../file/BrowserFileListFilterComp.java | 3 +- .../app/browser/file/BrowserFileOpener.java | 3 +- .../file/BrowserFileSystemTabComp.java | 4 +- .../file/BrowserFileSystemTabModel.java | 32 +- .../file/BrowserFileTransferOperation.java | 48 +- .../file/BrowserHistorySavedStateImpl.java | 4 +- .../browser/file/BrowserTransferModel.java | 7 +- .../app/browser/icon/BrowserIconFileType.java | 3 +- .../menu/BrowserMenuBranchProvider.java | 3 +- .../browser/menu/BrowserMenuItemProvider.java | 7 +- .../browser/menu/BrowserMenuLeafProvider.java | 12 +- .../browser/menu/BrowserMenuProviders.java | 17 +- .../menu/MultiExecuteMenuProvider.java | 3 +- .../MultiExecuteSelectionMenuProvider.java | 3 +- .../browser/menu/impl/BackMenuProvider.java | 2 +- .../BrowseInNativeManagerMenuProvider.java | 3 +- .../browser/menu/impl/ChgrpMenuProvider.java | 37 +- .../browser/menu/impl/ChmodMenuProvider.java | 35 +- .../browser/menu/impl/ChownMenuProvider.java | 35 +- .../impl/ComputeDirectorySizesAction.java | 8 +- .../browser/menu/impl/CopyMenuProvider.java | 2 +- .../menu/impl/CopyPathMenuProvider.java | 9 +- .../browser/menu/impl/DeleteMenuProvider.java | 14 +- .../menu/impl/DownloadMenuProvider.java | 2 +- .../menu/impl/EditFileMenuProvider.java | 2 +- .../menu/impl/FollowLinkMenuProvider.java | 2 +- .../menu/impl/ForwardMenuProvider.java | 2 +- .../browser/menu/impl/JarMenuProvider.java | 11 +- .../browser/menu/impl/JavapMenuProvider.java | 11 +- .../menu/impl/NewItemMenuProvider.java | 12 +- .../OpenDirectoryInNewTabMenuProvider.java | 2 +- .../menu/impl/OpenDirectoryMenuProvider.java | 1 - .../impl/OpenFileDefaultMenuProvider.java | 5 +- .../menu/impl/OpenFileWithMenuProvider.java | 4 +- .../OpenNativeFileDetailsMenuProvider.java | 3 +- .../menu/impl/OpenTerminalMenuProvider.java | 2 +- .../browser/menu/impl/PasteMenuProvider.java | 2 +- .../impl/RefreshDirectoryMenuProvider.java | 2 +- .../browser/menu/impl/RenameMenuProvider.java | 2 +- .../menu/impl/RunFileMenuProvider.java | 2 +- .../impl/compress/BaseUntarMenuProvider.java | 4 +- .../compress/BaseUnzipUnixMenuProvider.java | 12 +- .../BaseUnzipWindowsActionProvider.java | 2 +- .../impl/compress/CompressMenuProvider.java | 7 +- .../io/xpipe/app/comp/base/AppLayoutComp.java | 2 +- .../comp/base/AppMainWindowContentComp.java | 11 +- .../xpipe/app/comp/base/ChoicePaneComp.java | 1 - .../ContextualFileReferenceChoiceComp.java | 18 +- .../xpipe/app/comp/base/ListBoxViewComp.java | 2 +- .../xpipe/app/comp/base/LoadingIconComp.java | 17 +- .../app/comp/base/LoadingOverlayComp.java | 1 - .../io/xpipe/app/comp/base/MarkdownComp.java | 7 +- .../io/xpipe/app/comp/base/OptionsComp.java | 5 +- .../xpipe/app/comp/base/PrettyImageComp.java | 2 +- .../app/comp/base/PrettyImageHelper.java | 2 +- .../xpipe/app/comp/base/SideMenuBarComp.java | 4 +- .../xpipe/app/core/AppExtensionManager.java | 7 +- .../io/xpipe/app/core/AppLayoutModel.java | 8 +- .../io/xpipe/app/core/AppOpenArguments.java | 8 +- .../io/xpipe/app/core/AppWindowsShutdown.java | 3 +- .../xpipe/app/core/check/AppShellCheck.java | 127 ++-- .../java/io/xpipe/app/core/mode/BaseMode.java | 6 +- .../java/io/xpipe/app/core/mode/GuiMode.java | 2 +- .../xpipe/app/core/window/AppMainWindow.java | 5 +- .../app/core/window/AppWindowHelper.java | 2 +- .../xpipe/app/ext/ConnectionFileSystem.java | 21 +- .../io/xpipe/app/ext/DataStoreProvider.java | 6 +- .../java/io/xpipe/app/ext/PrefsHandler.java | 3 +- .../java/io/xpipe/app/ext/PrefsValue.java | 8 - .../xpipe/app/ext/ProcessControlProvider.java | 5 +- .../java/io/xpipe/app/ext/ShellSession.java | 5 +- .../io/xpipe/app/ext/WrapperFileSystem.java | 7 +- .../app/hub/action/BatchStoreAction.java | 3 +- .../hub/action/BatchStoreActionProvider.java | 10 +- .../app/hub/action/MultiStoreAction.java | 3 +- .../io/xpipe/app/hub/action/StoreAction.java | 3 +- .../app/hub/action/StoreActionProvider.java | 1 + .../action/impl/AddStoreActionProvider.java | 1 + .../impl/BrowseStoreActionProvider.java | 52 +- .../impl/CategoryConfigActionProvider.java | 11 +- .../impl/CategorySelectActionProvider.java | 8 +- .../impl/ChangeStoreIconActionProvider.java | 13 +- .../action/impl/CloneStoreActionProvider.java | 16 +- .../action/impl/EditStoreActionProvider.java | 59 +- .../impl/LaunchStoreActionProvider.java | 43 +- .../RefreshChildrenStoreActionProvider.java | 74 ++- .../impl/RefreshStoreActionProvider.java | 11 +- .../impl/SampleStoreActionProvider.java | 58 +- .../impl/ScanBatchStoreActionProvider.java | 70 +-- .../action/impl/ScanStoreActionProvider.java | 78 ++- .../xpipe/app/hub/comp/StoreCategoryComp.java | 3 +- .../app/hub/comp/StoreCategoryConfigComp.java | 6 +- .../xpipe/app/hub/comp/StoreCreationComp.java | 5 +- .../app/hub/comp/StoreCreationDialog.java | 3 +- .../xpipe/app/hub/comp/StoreCreationMenu.java | 14 +- .../app/hub/comp/StoreCreationModel.java | 14 +- .../io/xpipe/app/hub/comp/StoreEntryComp.java | 62 +- .../hub/comp/StoreEntryListStatusBarComp.java | 7 +- .../xpipe/app/hub/comp/StoreEntryWrapper.java | 22 +- .../app/hub/comp/StoreIconChoiceComp.java | 5 +- .../app/hub/comp/StoreListChoiceComp.java | 8 +- .../io/xpipe/app/hub/comp/StoreSection.java | 3 +- .../io/xpipe/app/icon/SystemIconCache.java | 25 +- .../io/xpipe/app/icon/SystemIconManager.java | 7 +- .../xpipe/app/icon/SystemIconSourceData.java | 3 +- .../xpipe/app/issue/ErrorHandlerDialog.java | 3 - .../io/xpipe/app/issue/GuiErrorHandler.java | 17 +- .../xpipe/app/issue/SentryErrorHandler.java | 8 +- .../io/xpipe/app/prefs/AboutCategory.java | 2 +- .../java/io/xpipe/app/prefs/AppPrefs.java | 8 +- .../xpipe/app/prefs/AppearanceCategory.java | 3 +- .../app/prefs/ExternalApplicationType.java | 15 +- .../xpipe/app/prefs/ExternalEditorType.java | 57 +- .../io/xpipe/app/prefs/IconsCategory.java | 9 +- .../app/prefs/PasswordManagerCategory.java | 13 - .../app/prefs/PasswordManagerTestComp.java | 23 +- .../java/io/xpipe/app/prefs/SshCategory.java | 3 +- .../java/io/xpipe/app/prefs/SyncCategory.java | 9 +- .../io/xpipe/app/prefs/SystemCategory.java | 1 - .../io/xpipe/app/prefs/TerminalCategory.java | 10 +- .../io/xpipe/app/prefs/UpdateCheckComp.java | 2 +- .../app/pwman/BitwardenPasswordManager.java | 13 +- .../app/pwman/DashlanePasswordManager.java | 8 +- .../app/pwman/EnpassPasswordManager.java | 38 +- .../xpipe/app/pwman/KeePassXcProxyClient.java | 4 +- .../app/pwman/KeeperPasswordManager.java | 6 +- .../app/pwman/LastpassPasswordManager.java | 15 +- .../xpipe/app/pwman/OnePasswordManager.java | 8 +- .../xpipe/app/pwman/PsonoPasswordManager.java | 28 +- .../app/pwman/WindowsCredentialManager.java | 4 +- .../io/xpipe/app/rdp/CustomRdpClient.java | 10 +- .../xpipe/app/rdp/DevolutionsRdpClient.java | 5 +- .../io/xpipe/app/rdp/ExternalRdpClient.java | 1 - .../java/io/xpipe/app/rdp/MstscRdpClient.java | 18 +- .../io/xpipe/app/rdp/RdpLaunchConfig.java | 1 + .../io/xpipe/app/rdp/RemminaRdpClient.java | 9 +- .../app/rdp/RemoteDesktopAppRdpClient.java | 9 +- .../io/xpipe/app/rdp/WindowsAppRdpClient.java | 8 +- .../io/xpipe/app/storage/DataStorage.java | 2 +- .../app/storage/DataStoreCategoryConfig.java | 3 +- .../app/storage/ImpersistentStorage.java | 2 +- .../io/xpipe/app/storage/StandardStorage.java | 4 +- .../app/terminal/AlacrittyTerminalType.java | 12 +- .../xpipe/app/terminal/CmdTerminalType.java | 6 +- .../app/terminal/ExternalTerminalType.java | 5 +- .../xpipe/app/terminal/GnomeTerminalType.java | 3 +- .../app/terminal/ITerm2TerminalType.java | 9 +- .../app/terminal/KonsoleTerminalType.java | 15 +- .../xpipe/app/terminal/MacOsTerminalType.java | 9 +- .../app/terminal/MobaXTermTerminalType.java | 4 +- .../app/terminal/PtyxisTerminalType.java | 1 + .../xpipe/app/terminal/TabbyTerminalType.java | 16 +- .../xpipe/app/terminal/TerminalDockComp.java | 1 - .../terminal/TerminalLaunchConfiguration.java | 10 +- .../xpipe/app/terminal/WezTerminalType.java | 6 +- .../xpipe/app/update/AppDistributionType.java | 17 +- .../io/xpipe/app/update/AppDownloads.java | 9 +- .../java/io/xpipe/app/update/AppRelease.java | 19 +- .../io/xpipe/app/update/ChocoUpdater.java | 36 +- .../io/xpipe/app/update/UpdateHandler.java | 9 +- .../io/xpipe/app/update/WingetUpdater.java | 33 +- .../io/xpipe/app/util/AppJacksonModule.java | 10 - .../io/xpipe/app/util/ChainedValidator.java | 1 - .../main/java/io/xpipe/app/util/Check.java | 22 +- .../io/xpipe/app/util/ClipboardHelper.java | 3 +- .../java/io/xpipe/app/util/DesktopHelper.java | 2 +- .../io/xpipe/app/util/DocumentationLink.java | 3 +- .../io/xpipe/app/util/ExclusiveValidator.java | 1 - .../java/io/xpipe/app/util/FileBridge.java | 6 +- .../java/io/xpipe/app/util/FileOpener.java | 19 +- .../io/xpipe/app/util/GlobalClipboard.java | 46 +- .../java/io/xpipe/app/util/LocalShell.java | 3 +- .../io/xpipe/app/util/LocalShellCache.java | 4 +- .../java/io/xpipe/app/util/ModuleAccess.java | 5 +- .../io/xpipe/app/util/OptionsBuilder.java | 2 +- .../java/io/xpipe/app/util/RemminaHelper.java | 39 +- .../xpipe/app/util/ScanSingleDialogComp.java | 2 +- .../java/io/xpipe/app/util/ScriptHelper.java | 1 - .../app/util/SecretRetrievalStrategy.java | 3 - .../util/SecretRetrievalStrategyHelper.java | 4 +- .../io/xpipe/app/util/StoreStateFormat.java | 2 +- .../java/io/xpipe/app/util/Validator.java | 1 - .../io/xpipe/app/vnc/CustomVncClient.java | 12 +- .../io/xpipe/app/vnc/ExternalVncClient.java | 4 +- .../io/xpipe/app/vnc/InternalVncClient.java | 9 +- .../java/io/xpipe/app/vnc/RealVncClient.java | 4 +- .../io/xpipe/app/vnc/RemminaVncClient.java | 7 +- .../xpipe/app/vnc/ScreenSharingVncClient.java | 12 +- .../java/io/xpipe/app/vnc/TigerVncClient.java | 14 +- .../java/io/xpipe/app/vnc/TightVncClient.java | 6 +- .../java/io/xpipe/app/vnc/VncBaseStore.java | 3 - .../java/io/xpipe/app/vnc/VncCategory.java | 8 +- .../io/xpipe/app/vnc/VncLaunchConfig.java | 9 +- app/src/main/java/module-info.java | 70 ++- .../io/xpipe/core/process/CommandBuilder.java | 4 +- .../java/io/xpipe/core/process/OsType.java | 4 +- .../core/process/ProcessOutputException.java | 10 +- .../core/process/ShellDialectAskpass.java | 8 +- .../io/xpipe/core/process/ShellDumbMode.java | 1 - .../java/io/xpipe/core/store/FileEntry.java | 1 - .../java/io/xpipe/core/store/FilePath.java | 3 +- .../DesktopApplicationStoreProvider.java | 4 +- .../ext/base/identity/IdentityChoice.java | 9 +- .../ext/base/identity/IdentitySelectComp.java | 6 +- .../base/identity/IdentityStoreProvider.java | 1 - .../ext/base/identity/IdentityValue.java | 8 +- .../LocalIdentityConvertActionProvider.java | 61 +- .../identity/LocalIdentityStoreProvider.java | 2 +- .../PasswordManagerIdentityStore.java | 4 +- .../PasswordManagerIdentityStoreProvider.java | 7 +- .../identity/SshIdentityStateManager.java | 8 +- .../base/identity/SshIdentityStrategy.java | 80 ++- .../identity/SyncedIdentityStoreProvider.java | 2 +- .../ext/base/identity/UsernameStrategy.java | 8 +- .../RunBackgroundScriptActionProvider.java | 11 +- .../script/RunFileScriptMenuProvider.java | 12 +- .../RunHubBatchScriptActionProvider.java | 10 +- .../script/RunHubScriptActionProvider.java | 10 +- .../script/RunScriptActionProviderMenu.java | 595 +++++++++--------- .../RunTerminalScriptActionProvider.java | 14 +- .../SimpleScriptQuickEditActionProvider.java | 25 +- .../script/SimpleScriptStoreProvider.java | 4 +- .../base/service/AbstractServiceStore.java | 6 +- .../service/AbstractServiceStoreProvider.java | 5 +- .../ext/base/service/CustomServiceStore.java | 2 +- .../service/CustomServiceStoreProvider.java | 6 +- .../ext/base/service/FixedServiceStore.java | 2 +- .../service/FixedServiceStoreProvider.java | 4 +- .../service/MappedServiceStoreProvider.java | 4 +- .../base/service/ServiceControlSession.java | 3 +- .../ext/base/service/ServiceControlStore.java | 2 +- .../ServiceCopyAddressActionProvider.java | 53 +- .../service/ServiceRefreshActionProvider.java | 79 +-- .../ext/base/store/ShellStoreProvider.java | 5 +- .../base/store/StorePauseActionProvider.java | 68 +- .../store/StoreRestartActionProvider.java | 78 +-- .../base/store/StoreStartActionProvider.java | 68 +- .../base/store/StoreStopActionProvider.java | 78 +-- ext/base/src/main/java/module-info.java | 32 +- .../ext/system/incus/IncusCommandView.java | 5 +- .../IncusContainerActionProviderMenu.java | 56 +- .../IncusContainerConsoleActionProvider.java | 53 +- ...ncusContainerEditConfigActionProvider.java | 53 +- ...sContainerEditRunConfigActionProvider.java | 51 +- .../xpipe/ext/system/lxd/LxdCommandView.java | 5 +- .../lxd/LxdContainerActionProviderMenu.java | 56 +- .../LxdContainerConsoleActionProvider.java | 53 +- .../LxdContainerEditConfigActionProvider.java | 53 +- ...dContainerEditRunConfigActionProvider.java | 51 +- .../system/podman/PodmanCmdStoreProvider.java | 4 +- .../PodmanContainerActionProviderMenu.java | 54 +- .../PodmanContainerAttachActionProvider.java | 58 +- .../PodmanContainerInspectActionProvider.java | 46 +- .../PodmanContainerLogsActionProvider.java | 45 +- ext/system/src/main/java/module-info.java | 5 +- 296 files changed, 2634 insertions(+), 2247 deletions(-) diff --git a/app/src/main/java/io/xpipe/app/action/AbstractAction.java b/app/src/main/java/io/xpipe/app/action/AbstractAction.java index c206d064c..bed529cf5 100644 --- a/app/src/main/java/io/xpipe/app/action/AbstractAction.java +++ b/app/src/main/java/io/xpipe/app/action/AbstractAction.java @@ -6,17 +6,15 @@ import io.xpipe.app.core.AppCache; import io.xpipe.app.core.AppI18n; import io.xpipe.app.core.AppLayoutModel; import io.xpipe.app.core.window.AppDialog; -import io.xpipe.app.core.window.AppMainWindow; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.issue.TrackEvent; import io.xpipe.app.util.DataStoreFormatter; import io.xpipe.app.util.LabelGraphic; import io.xpipe.app.util.ThreadHelper; -import lombok.SneakyThrows; + import lombok.experimental.SuperBuilder; import java.util.*; -import java.util.concurrent.CountDownLatch; import java.util.function.Consumer; @SuperBuilder @@ -26,9 +24,10 @@ public abstract class AbstractAction { private static boolean closed; private static Consumer pick; - private static final AppLayoutModel.QueueEntry queueEntry = new AppLayoutModel.QueueEntry(AppI18n.observable("cancelActionPicker"), new LabelGraphic.IconGraphic("mdal-cancel_presentation"), () -> { - cancelPick(); - }); + private static final AppLayoutModel.QueueEntry queueEntry = new AppLayoutModel.QueueEntry( + AppI18n.observable("cancelActionPicker"), new LabelGraphic.IconGraphic("mdal-cancel_presentation"), () -> { + cancelPick(); + }); public static synchronized void expectPick() { if (pick != null) { @@ -77,16 +76,14 @@ public abstract class AbstractAction { } } - public void executeSync() { + public void executeSync() { if (closed) { return; } synchronized (AbstractAction.class) { if (pick != null) { - TrackEvent.withTrace("Picked action") - .tags(toDisplayMap()) - .handle(); + TrackEvent.withTrace("Picked action").tags(toDisplayMap()).handle(); pick.accept(this); pick = null; return; @@ -96,16 +93,14 @@ public abstract class AbstractAction { executeSyncImpl(); } - public void executeAsync() { + public void executeAsync() { if (closed) { return; } synchronized (AbstractAction.class) { if (pick != null) { - TrackEvent.withTrace("Picked action") - .tags(toDisplayMap()) - .handle(); + TrackEvent.withTrace("Picked action").tags(toDisplayMap()).handle(); pick.accept(this); pick = null; return; @@ -117,46 +112,42 @@ public abstract class AbstractAction { }); } - private void executeSyncImpl() { - if (!ActionConfirmation.confirmAction(this)) { - return; - } + private void executeSyncImpl() { + if (!ActionConfirmation.confirmAction(this)) { + return; + } - if (closed) { + if (closed) { + return; + } + + synchronized (active) { + active.add(this); + } + + TrackEvent.withTrace("Starting action execution").tags(toDisplayMap()).handle(); + + try { + if (!beforeExecute()) { return; } + } catch (Throwable t) { + ErrorEvent.fromThrowable(t).handle(); + return; + } + try { + executeImpl(); + } catch (Throwable t) { + ErrorEvent.fromThrowable(t).handle(); + } finally { + afterExecute(); synchronized (active) { - active.add(this); + active.remove(this); } - TrackEvent.withTrace("Starting action execution") - .tags(toDisplayMap()) - .handle(); - - try { - if (!beforeExecute()) { - return; - } - } catch (Throwable t) { - ErrorEvent.fromThrowable(t).handle(); - return; - } - - try { - executeImpl(); - } catch (Throwable t) { - ErrorEvent.fromThrowable(t).handle(); - } finally { - afterExecute(); - synchronized (active) { - active.remove(this); - } - - TrackEvent.withTrace("Finished action execution") - .tag("id", getId()) - .handle(); - } + TrackEvent.withTrace("Finished action execution").tag("id", getId()).handle(); + } } public String getId() { @@ -174,8 +165,10 @@ public abstract class AbstractAction { if (enc == null) { throw new IllegalStateException("No enclosing instance of " + clazz); } - return ActionProvider.ALL.stream().filter(actionProvider -> actionProvider.getClass().equals(enc)) - .findFirst().orElseThrow(IllegalStateException::new); + return ActionProvider.ALL.stream() + .filter(actionProvider -> actionProvider.getClass().equals(enc)) + .findFirst() + .orElseThrow(IllegalStateException::new); } public String getShortcutName() { diff --git a/app/src/main/java/io/xpipe/app/action/ActionConfigComp.java b/app/src/main/java/io/xpipe/app/action/ActionConfigComp.java index f5ff79664..cd026ffe4 100644 --- a/app/src/main/java/io/xpipe/app/action/ActionConfigComp.java +++ b/app/src/main/java/io/xpipe/app/action/ActionConfigComp.java @@ -12,6 +12,7 @@ import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.*; import io.xpipe.core.store.DataStore; + import javafx.beans.property.*; import javafx.collections.FXCollections; import javafx.scene.layout.Region; @@ -20,7 +21,9 @@ public class ActionConfigComp extends SimpleComp { private final Property action; - public ActionConfigComp(Property action) {this.action = action;} + public ActionConfigComp(Property action) { + this.action = action; + } @Override protected Region createSimple() { @@ -29,8 +32,7 @@ public class ActionConfigComp extends SimpleComp { .addComp(createChooser()) .nameAndDescription("actionStores") .addComp(createMultiChooser()); - options.nameAndDescription("actionConfiguration") - .addComp(createTextArea()); + options.nameAndDescription("actionConfiguration").addComp(createTextArea()); return options.build(); } @@ -53,7 +55,8 @@ public class ActionConfigComp extends SimpleComp { } }); - var choice = new StoreListChoiceComp<>(listProp, DataStore.class, null, StoreViewState.get().getAllConnectionsCategory()); + var choice = new StoreListChoiceComp<>( + listProp, DataStore.class, null, StoreViewState.get().getAllConnectionsCategory()); choice.hide(listProp.emptyProperty()); return choice; } @@ -70,7 +73,12 @@ public class ActionConfigComp extends SimpleComp { } }); - var choice = new StoreChoiceComp<>(StoreChoiceComp.Mode.OTHER, null, singleProp, DataStore.class, ref -> true, + var choice = new StoreChoiceComp<>( + StoreChoiceComp.Mode.OTHER, + null, + singleProp, + DataStore.class, + ref -> true, StoreViewState.get().getAllConnectionsCategory()); choice.hide(singleProp.isNull()); return choice; diff --git a/app/src/main/java/io/xpipe/app/action/ActionConfirmComp.java b/app/src/main/java/io/xpipe/app/action/ActionConfirmComp.java index c9e4730ea..6660ef62f 100644 --- a/app/src/main/java/io/xpipe/app/action/ActionConfirmComp.java +++ b/app/src/main/java/io/xpipe/app/action/ActionConfirmComp.java @@ -1,6 +1,5 @@ package io.xpipe.app.action; -import atlantafx.base.theme.Styles; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.SimpleComp; import io.xpipe.app.hub.action.BatchStoreAction; @@ -11,12 +10,15 @@ import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.OptionsBuilder; import io.xpipe.core.store.DataStore; + import javafx.beans.property.SimpleListProperty; import javafx.collections.FXCollections; import javafx.scene.control.Label; import javafx.scene.layout.GridPane; import javafx.scene.layout.Region; +import atlantafx.base.theme.Styles; + import java.util.List; import java.util.Map; @@ -24,15 +26,15 @@ public class ActionConfirmComp extends SimpleComp { private final AbstractAction action; - public ActionConfirmComp(AbstractAction action) {this.action = action;} + public ActionConfirmComp(AbstractAction action) { + this.action = action; + } @Override protected Region createSimple() { var options = new OptionsBuilder(); - options.nameAndDescription("actionConnections") - .addComp(createList()); - options.nameAndDescription("actionConfiguration") - .addComp(createTable()); + options.nameAndDescription("actionConnections").addComp(createList()); + options.nameAndDescription("actionConfiguration").addComp(createTable()); return options.build(); } @@ -43,11 +45,12 @@ public class ActionConfirmComp extends SimpleComp { listProp.setAll(((BatchStoreAction) ba).getRefs()); } else if (action instanceof MultiStoreAction ma) { listProp.setAll(((MultiStoreAction) ma).getRefs()); - } else if (action instanceof StoreAction sa){ + } else if (action instanceof StoreAction sa) { listProp.setAll(List.of(sa.getRef().asNeeded())); } - var choice = new StoreListChoiceComp<>(listProp, DataStore.class, null, StoreViewState.get().getAllConnectionsCategory()); + var choice = new StoreListChoiceComp<>( + listProp, DataStore.class, null, StoreViewState.get().getAllConnectionsCategory()); choice.setEditable(false); choice.hide(listProp.emptyProperty()); return choice; diff --git a/app/src/main/java/io/xpipe/app/action/ActionConfirmation.java b/app/src/main/java/io/xpipe/app/action/ActionConfirmation.java index 02acf769c..9d0b66a43 100644 --- a/app/src/main/java/io/xpipe/app/action/ActionConfirmation.java +++ b/app/src/main/java/io/xpipe/app/action/ActionConfirmation.java @@ -4,7 +4,7 @@ import io.xpipe.app.comp.base.ModalButton; import io.xpipe.app.comp.base.ModalOverlay; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStoreEntry; -import io.xpipe.app.storage.DataStoreEntryRef; + import javafx.beans.property.SimpleBooleanProperty; import java.util.List; diff --git a/app/src/main/java/io/xpipe/app/action/ActionJacksonMapper.java b/app/src/main/java/io/xpipe/app/action/ActionJacksonMapper.java index 8445a0525..ce9c4da68 100644 --- a/app/src/main/java/io/xpipe/app/action/ActionJacksonMapper.java +++ b/app/src/main/java/io/xpipe/app/action/ActionJacksonMapper.java @@ -1,15 +1,16 @@ package io.xpipe.app.action; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.JsonNodeFactory; -import com.fasterxml.jackson.databind.node.ObjectNode; import io.xpipe.app.hub.action.BatchStoreAction; import io.xpipe.app.hub.action.MultiStoreAction; import io.xpipe.app.hub.action.StoreAction; import io.xpipe.core.store.DataStore; import io.xpipe.core.util.JacksonMapper; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.fasterxml.jackson.databind.node.ObjectNode; + import java.util.ArrayList; public class ActionJacksonMapper { @@ -25,7 +26,9 @@ public class ActionJacksonMapper { return null; } - var provider = ActionProvider.ALL.stream().filter(actionProvider -> id.textValue().equals(actionProvider.getId())).findFirst(); + var provider = ActionProvider.ALL.stream() + .filter(actionProvider -> id.textValue().equals(actionProvider.getId())) + .findFirst(); if (provider.isEmpty()) { return null; } @@ -73,11 +76,14 @@ public class ActionJacksonMapper { public static ObjectNode write(AbstractAction value) { if (value instanceof BatchStoreAction b) { var arrayNode = JsonNodeFactory.instance.arrayNode(); - b.getActions().stream().map(a -> { - var tree = (ObjectNode) JacksonMapper.getDefault().valueToTree(a); - return tree.get("ref"); - }).forEach(n -> arrayNode.add(n)); - var tree = (ObjectNode) JacksonMapper.getDefault().valueToTree(b.getActions().getFirst()); + b.getActions().stream() + .map(a -> { + var tree = (ObjectNode) JacksonMapper.getDefault().valueToTree(a); + return tree.get("ref"); + }) + .forEach(n -> arrayNode.add(n)); + var tree = (ObjectNode) + JacksonMapper.getDefault().valueToTree(b.getActions().getFirst()); tree.set("ref", arrayNode); tree.put("id", b.getActions().getFirst().getId()); return tree; diff --git a/app/src/main/java/io/xpipe/app/action/ActionPickComp.java b/app/src/main/java/io/xpipe/app/action/ActionPickComp.java index 2eb552069..405cb8ad8 100644 --- a/app/src/main/java/io/xpipe/app/action/ActionPickComp.java +++ b/app/src/main/java/io/xpipe/app/action/ActionPickComp.java @@ -1,9 +1,8 @@ package io.xpipe.app.action; -import io.xpipe.app.comp.SimpleComp; import io.xpipe.app.comp.base.ModalOverlayContentComp; -import io.xpipe.app.core.window.AppMainWindow; import io.xpipe.app.util.OptionsBuilder; + import javafx.beans.property.SimpleObjectProperty; import javafx.scene.layout.Region; @@ -11,7 +10,8 @@ public class ActionPickComp extends ModalOverlayContentComp { private final AbstractAction action; - public ActionPickComp(AbstractAction action) {this.action = action; + public ActionPickComp(AbstractAction action) { + this.action = action; } @Override @@ -21,9 +21,7 @@ public class ActionPickComp extends ModalOverlayContentComp { var bottom = new ActionShortcutComp(prop, () -> { getModalOverlay().close(); }); - var options = new OptionsBuilder() - .addComp(top) - .addComp(bottom); + var options = new OptionsBuilder().addComp(top).addComp(bottom); return options.build(); } } diff --git a/app/src/main/java/io/xpipe/app/action/ActionProvider.java b/app/src/main/java/io/xpipe/app/action/ActionProvider.java index f0ed89eb0..101532ed2 100644 --- a/app/src/main/java/io/xpipe/app/action/ActionProvider.java +++ b/app/src/main/java/io/xpipe/app/action/ActionProvider.java @@ -39,7 +39,9 @@ public interface ActionProvider { @SuppressWarnings("unchecked") default Optional> getActionClass() { - var child = Arrays.stream(getClass().getDeclaredClasses()).filter(aClass -> aClass.getSimpleName().equals("Action")).findFirst() + var child = Arrays.stream(getClass().getDeclaredClasses()) + .filter(aClass -> aClass.getSimpleName().equals("Action")) + .findFirst() .map(aClass -> (Class) aClass); return Optional.of(child.get()); } diff --git a/app/src/main/java/io/xpipe/app/action/ActionShortcutComp.java b/app/src/main/java/io/xpipe/app/action/ActionShortcutComp.java index e7dc03888..f19d4a8f1 100644 --- a/app/src/main/java/io/xpipe/app/action/ActionShortcutComp.java +++ b/app/src/main/java/io/xpipe/app/action/ActionShortcutComp.java @@ -7,9 +7,11 @@ import io.xpipe.app.comp.base.InputGroupComp; import io.xpipe.app.comp.base.TextFieldComp; import io.xpipe.app.core.AppI18n; import io.xpipe.app.util.*; + import javafx.beans.property.Property; import javafx.beans.property.SimpleStringProperty; import javafx.scene.layout.Region; + import org.kordamp.ikonli.javafx.FontIcon; import java.util.List; @@ -19,19 +21,18 @@ public class ActionShortcutComp extends SimpleComp { private final Property action; private final Runnable onCreateMacro; - public ActionShortcutComp(Property action, Runnable onCreateMacro) {this.action = action; + public ActionShortcutComp(Property action, Runnable onCreateMacro) { + this.action = action; this.onCreateMacro = onCreateMacro; } @Override protected Region createSimple() { var options = new OptionsBuilder(); - options.nameAndDescription("actionDesktopShortcut") - .addComp(createDesktopComp()); - options.nameAndDescription("actionUrlShortcut") - .addComp(createUrlComp()); -// options.nameAndDescription("actionMacro") -// .addComp(createMacroComp()); + options.nameAndDescription("actionDesktopShortcut").addComp(createDesktopComp()); + options.nameAndDescription("actionUrlShortcut").addComp(createUrlComp()); + // options.nameAndDescription("actionMacro") + // .addComp(createMacroComp()); return options.build(); } @@ -45,8 +46,8 @@ public class ActionShortcutComp extends SimpleComp { }); var copyButton = new ButtonComp(null, new FontIcon("mdi2c-clipboard-multiple-outline"), () -> { - ClipboardHelper.copyUrl(url.getValue()); - }) + ClipboardHelper.copyUrl(url.getValue()); + }) .grow(false, true) .tooltipKey("createShortcut"); var field = new TextFieldComp(url); @@ -66,13 +67,11 @@ public class ActionShortcutComp extends SimpleComp { }); }); var copyButton = new ButtonComp(null, new FontIcon("mdi2f-file-move-outline"), () -> { - ThreadHelper.runFailableAsync(() -> { - var file = DesktopShortcuts.createCliOpen( - url.getValue(), - name.getValue()); - DesktopHelper.browseFileInDirectory(file); - }); - }) + ThreadHelper.runFailableAsync(() -> { + var file = DesktopShortcuts.createCliOpen(url.getValue(), name.getValue()); + DesktopHelper.browseFileInDirectory(file); + }); + }) .grow(false, true) .tooltipKey("createShortcut"); var field = new TextFieldComp(name); @@ -82,9 +81,10 @@ public class ActionShortcutComp extends SimpleComp { } private Comp createMacroComp() { - var button = new ButtonComp(AppI18n.observable("createMacro"), new FontIcon("mdi2c-clipboard-multiple-outline"), () -> { - onCreateMacro.run(); - }); + var button = new ButtonComp( + AppI18n.observable("createMacro"), new FontIcon("mdi2c-clipboard-multiple-outline"), () -> { + onCreateMacro.run(); + }); return button; } } diff --git a/app/src/main/java/io/xpipe/app/action/ActionUrls.java b/app/src/main/java/io/xpipe/app/action/ActionUrls.java index 7ec917ad8..578546885 100644 --- a/app/src/main/java/io/xpipe/app/action/ActionUrls.java +++ b/app/src/main/java/io/xpipe/app/action/ActionUrls.java @@ -1,18 +1,15 @@ package io.xpipe.app.action; +import io.xpipe.app.storage.DataStorage; +import io.xpipe.core.util.InPlaceSecretValue; +import io.xpipe.core.util.JacksonMapper; +import io.xpipe.core.util.UuidHelper; + import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.vladsch.flexmark.ast.Link; -import io.xpipe.app.issue.TrackEvent; -import io.xpipe.app.storage.DataStorage; -import io.xpipe.app.storage.DataStoreEntry; -import io.xpipe.core.util.InPlaceSecretValue; -import io.xpipe.core.util.JacksonMapper; -import io.xpipe.core.util.UuidHelper; import lombok.SneakyThrows; -import java.net.URI; import java.net.URLDecoder; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; @@ -52,7 +49,8 @@ public class ActionUrls { } var json = sa.toNode(); - var parsed = JacksonMapper.getDefault().treeToValue(json, new TypeReference>() {}); + var parsed = + JacksonMapper.getDefault().treeToValue(json, new TypeReference>() {}); Map> requestParams = new LinkedHashMap<>(); for (Map.Entry e : parsed.entrySet()) { @@ -60,11 +58,12 @@ public class ActionUrls { requestParams.put(e.getKey(), value); } - String encodedURL = requestParams.keySet().stream().map(key -> { - var vals = requestParams.get(key); - return vals.stream().map(s -> key + "=" + s).collect(Collectors.joining("&")); - }).collect( - Collectors.joining("&", "xpipe://action?", "")); + String encodedURL = requestParams.keySet().stream() + .map(key -> { + var vals = requestParams.get(key); + return vals.stream().map(s -> key + "=" + s).collect(Collectors.joining("&")); + }) + .collect(Collectors.joining("&", "xpipe://action?", "")); return encodedURL; } @@ -76,7 +75,9 @@ public class ActionUrls { return Optional.empty(); } - var provider = ActionProvider.ALL.stream().filter(actionProvider -> id.getFirst().equals(actionProvider.getId())).findFirst(); + var provider = ActionProvider.ALL.stream() + .filter(actionProvider -> id.getFirst().equals(actionProvider.getId())) + .findFirst(); if (provider.isEmpty()) { return Optional.empty(); } @@ -101,20 +102,21 @@ public class ActionUrls { throw new IllegalArgumentException("Invalid store id: " + store); } - var entry = DataStorage.get() - .getStoreEntryIfPresent(uuid.get()); + var entry = DataStorage.get().getStoreEntryIfPresent(uuid.get()); if (entry.isEmpty()) { throw new IllegalArgumentException("Store not found for id: " + store); } if (!entry.get().getValidity().isUsable()) { - throw new IllegalArgumentException("Store " + DataStorage.get().getStorePath(entry.get()) + " is incomplete"); + throw new IllegalArgumentException( + "Store " + DataStorage.get().getStorePath(entry.get()) + " is incomplete"); } } - var fixedMap = query.entrySet().stream().collect(Collectors.toMap( - entry -> entry.getKey(), - entry -> entry.getValue().size() == 1 ? entry.getValue().getFirst() : entry.getValue())); + var fixedMap = query.entrySet().stream() + .collect(Collectors.toMap( + entry -> entry.getKey(), + entry -> entry.getValue().size() == 1 ? entry.getValue().getFirst() : entry.getValue())); var json = (ObjectNode) JacksonMapper.getDefault().valueToTree(fixedMap); var instance = ActionJacksonMapper.parse(json); return Optional.ofNullable(instance); @@ -127,7 +129,10 @@ public class ActionUrls { return Arrays.stream(query.split("&")) .map(ActionUrls::splitQueryParameter) - .collect(Collectors.groupingBy(AbstractMap.SimpleImmutableEntry::getKey, LinkedHashMap::new, Collectors.mapping(Map.Entry::getValue, Collectors.toList()))); + .collect(Collectors.groupingBy( + AbstractMap.SimpleImmutableEntry::getKey, + LinkedHashMap::new, + Collectors.mapping(Map.Entry::getValue, Collectors.toList()))); } private static AbstractMap.SimpleImmutableEntry splitQueryParameter(String it) { @@ -136,7 +141,6 @@ public class ActionUrls { final String value = idx > 0 && it.length() > idx + 1 ? it.substring(idx + 1) : null; return new AbstractMap.SimpleImmutableEntry<>( URLDecoder.decode(key, StandardCharsets.UTF_8), - value != null ? URLDecoder.decode(value, StandardCharsets.UTF_8) : null - ); + value != null ? URLDecoder.decode(value, StandardCharsets.UTF_8) : null); } } diff --git a/app/src/main/java/io/xpipe/app/action/SerializableAction.java b/app/src/main/java/io/xpipe/app/action/SerializableAction.java index 975e59d8c..33a3166cd 100644 --- a/app/src/main/java/io/xpipe/app/action/SerializableAction.java +++ b/app/src/main/java/io/xpipe/app/action/SerializableAction.java @@ -1,17 +1,13 @@ package io.xpipe.app.action; +import io.xpipe.app.util.DataStoreFormatter; +import io.xpipe.core.util.JacksonMapper; + import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; -import io.xpipe.app.issue.ErrorEvent; -import io.xpipe.app.issue.TrackEvent; -import io.xpipe.app.util.DataStoreFormatter; -import io.xpipe.app.util.ThreadHelper; -import io.xpipe.core.util.JacksonMapper; -import lombok.SneakyThrows; import lombok.experimental.SuperBuilder; import java.util.*; -import java.util.function.Consumer; @SuperBuilder public abstract class SerializableAction extends AbstractAction { diff --git a/app/src/main/java/io/xpipe/app/action/StoreContextAction.java b/app/src/main/java/io/xpipe/app/action/StoreContextAction.java index 3ef15a484..d0c1750b2 100644 --- a/app/src/main/java/io/xpipe/app/action/StoreContextAction.java +++ b/app/src/main/java/io/xpipe/app/action/StoreContextAction.java @@ -1,7 +1,6 @@ package io.xpipe.app.action; import io.xpipe.app.storage.DataStoreEntry; -import io.xpipe.app.storage.DataStoreEntryRef; import java.util.List; diff --git a/app/src/main/java/io/xpipe/app/beacon/impl/AskpassExchangeImpl.java b/app/src/main/java/io/xpipe/app/beacon/impl/AskpassExchangeImpl.java index a99719526..4c35b398a 100644 --- a/app/src/main/java/io/xpipe/app/beacon/impl/AskpassExchangeImpl.java +++ b/app/src/main/java/io/xpipe/app/beacon/impl/AskpassExchangeImpl.java @@ -1,15 +1,15 @@ package io.xpipe.app.beacon.impl; -import io.xpipe.app.core.AppI18n; import io.xpipe.app.core.AppLayoutModel; import io.xpipe.app.terminal.TerminalView; import io.xpipe.app.util.*; import io.xpipe.beacon.BeaconClientException; import io.xpipe.beacon.api.AskpassExchange; +import io.xpipe.core.util.InPlaceSecretValue; + +import javafx.beans.property.SimpleStringProperty; import com.sun.net.httpserver.HttpExchange; -import io.xpipe.core.util.InPlaceSecretValue; -import javafx.beans.property.SimpleStringProperty; import java.time.Duration; @@ -25,15 +25,19 @@ public class AskpassExchangeImpl extends AskpassExchange { // SSH auth with a smartcard will prompt to confirm user presence // Maybe we can show some dialog for this in the future if (msg.getPrompt() != null && msg.getPrompt().toLowerCase().contains("confirm user presence")) { - var shown = AppLayoutModel.get().getQueueEntries().stream().anyMatch(queueEntry -> - msg.getPrompt().equals(queueEntry.getName().getValue())); + var shown = AppLayoutModel.get().getQueueEntries().stream().anyMatch(queueEntry -> msg.getPrompt() + .equals(queueEntry.getName().getValue())); if (!shown) { - var qe = new AppLayoutModel.QueueEntry(new SimpleStringProperty(msg.getPrompt()), new LabelGraphic.IconGraphic("mdi2f-fingerprint"), + var qe = new AppLayoutModel.QueueEntry( + new SimpleStringProperty(msg.getPrompt()), + new LabelGraphic.IconGraphic("mdi2f-fingerprint"), () -> {}); AppLayoutModel.get().getQueueEntries().add(qe); - GlobalTimer.delay(() -> { - AppLayoutModel.get().getQueueEntries().remove(qe); - }, Duration.ofSeconds(10)); + GlobalTimer.delay( + () -> { + AppLayoutModel.get().getQueueEntries().remove(qe); + }, + Duration.ofSeconds(10)); } return Response.builder().value(InPlaceSecretValue.of("")).build(); } diff --git a/app/src/main/java/io/xpipe/app/beacon/impl/ConnectionToggleExchangeImpl.java b/app/src/main/java/io/xpipe/app/beacon/impl/ConnectionToggleExchangeImpl.java index 9377ec9db..f71ef2e57 100644 --- a/app/src/main/java/io/xpipe/app/beacon/impl/ConnectionToggleExchangeImpl.java +++ b/app/src/main/java/io/xpipe/app/beacon/impl/ConnectionToggleExchangeImpl.java @@ -1,9 +1,9 @@ package io.xpipe.app.beacon.impl; +import io.xpipe.app.ext.SingletonSessionStore; import io.xpipe.app.storage.DataStorage; import io.xpipe.beacon.BeaconClientException; import io.xpipe.beacon.api.ConnectionToggleExchange; -import io.xpipe.app.ext.SingletonSessionStore; import com.sun.net.httpserver.HttpExchange; diff --git a/app/src/main/java/io/xpipe/app/beacon/impl/TerminalWaitExchangeImpl.java b/app/src/main/java/io/xpipe/app/beacon/impl/TerminalWaitExchangeImpl.java index 19c3e9af6..0c9f44734 100644 --- a/app/src/main/java/io/xpipe/app/beacon/impl/TerminalWaitExchangeImpl.java +++ b/app/src/main/java/io/xpipe/app/beacon/impl/TerminalWaitExchangeImpl.java @@ -1,7 +1,6 @@ package io.xpipe.app.beacon.impl; import io.xpipe.app.terminal.TerminalLauncherManager; -import io.xpipe.beacon.BeaconClientException; import io.xpipe.beacon.BeaconServerException; import io.xpipe.beacon.api.TerminalWaitExchange; diff --git a/app/src/main/java/io/xpipe/app/browser/BrowserFileChooserSessionComp.java b/app/src/main/java/io/xpipe/app/browser/BrowserFileChooserSessionComp.java index be45c803c..3ca5f8596 100644 --- a/app/src/main/java/io/xpipe/app/browser/BrowserFileChooserSessionComp.java +++ b/app/src/main/java/io/xpipe/app/browser/BrowserFileChooserSessionComp.java @@ -7,11 +7,11 @@ import io.xpipe.app.browser.file.BrowserFileSystemTabComp; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.base.*; -import io.xpipe.app.hub.comp.StoreEntryWrapper; -import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.core.AppFontSizes; import io.xpipe.app.core.AppLayoutModel; import io.xpipe.app.ext.ShellStore; +import io.xpipe.app.hub.comp.StoreEntryWrapper; +import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.BindingsHelper; import io.xpipe.app.util.FileReference; @@ -43,7 +43,10 @@ public class BrowserFileChooserSessionComp extends ModalOverlayContentComp { } public static void openSingleFile( - Supplier> store, Supplier initialPath, Consumer file, boolean save) { + Supplier> store, + Supplier initialPath, + Consumer file, + boolean save) { var model = new BrowserFileChooserSessionModel(BrowserFileSystemTabModel.SelectionMode.SINGLE_FILE); model.setOnFinish(fileStores -> { file.accept(fileStores.size() > 0 ? fileStores.getFirst() : null); diff --git a/app/src/main/java/io/xpipe/app/browser/BrowserFullSessionComp.java b/app/src/main/java/io/xpipe/app/browser/BrowserFullSessionComp.java index bfa3c5f20..6f650f469 100644 --- a/app/src/main/java/io/xpipe/app/browser/BrowserFullSessionComp.java +++ b/app/src/main/java/io/xpipe/app/browser/BrowserFullSessionComp.java @@ -6,16 +6,16 @@ import io.xpipe.app.browser.file.BrowserTransferComp; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.SimpleComp; import io.xpipe.app.comp.base.*; -import io.xpipe.app.hub.comp.StoreEntryWrapper; -import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.core.AppFontSizes; import io.xpipe.app.core.AppLayoutModel; import io.xpipe.app.core.window.AppMainWindow; import io.xpipe.app.ext.ShellStore; +import io.xpipe.app.hub.comp.StoreEntryWrapper; +import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.util.BindingsHelper; import io.xpipe.app.util.PlatformThread; - import io.xpipe.app.util.ThreadHelper; + import javafx.application.Platform; import javafx.beans.binding.Bindings; import javafx.beans.property.BooleanProperty; diff --git a/app/src/main/java/io/xpipe/app/browser/BrowserSessionTabsComp.java b/app/src/main/java/io/xpipe/app/browser/BrowserSessionTabsComp.java index ed2e788dc..bc93f1057 100644 --- a/app/src/main/java/io/xpipe/app/browser/BrowserSessionTabsComp.java +++ b/app/src/main/java/io/xpipe/app/browser/BrowserSessionTabsComp.java @@ -30,7 +30,6 @@ import javafx.scene.input.*; import javafx.scene.layout.Region; import javafx.scene.layout.StackPane; -import atlantafx.base.controls.RingProgressIndicator; import atlantafx.base.theme.Styles; import lombok.Getter; @@ -426,9 +425,13 @@ public class BrowserSessionTabsComp extends SimpleComp { var image = tabModel.getIcon(); var logo = PrettyImageHelper.ofFixedSizeSquare(image, 16); logo.apply(struc -> { - struc.get().opacityProperty().bind(PlatformThread.sync(Bindings.createDoubleBinding(() -> { - return !tabModel.getBusy().get() ? 1.0 : 0.15; - }, tabModel.getBusy()))); + struc.get() + .opacityProperty() + .bind(PlatformThread.sync(Bindings.createDoubleBinding( + () -> { + return !tabModel.getBusy().get() ? 1.0 : 0.15; + }, + tabModel.getBusy()))); }); var stack = new StackComp(List.of(logo, loading)); @@ -507,14 +510,11 @@ public class BrowserSessionTabsComp extends SimpleComp { if (color != null) { c.getStyleClass().add(color.getId()); } - c.addEventHandler( - DragEvent.DRAG_ENTERED, - mouseEvent -> { - if (tabModel.isCloseable()) { - Platform.runLater( - () -> tabs.getSelectionModel().select(tab)); - } - }); + c.addEventHandler(DragEvent.DRAG_ENTERED, mouseEvent -> { + if (tabModel.isCloseable()) { + Platform.runLater(() -> tabs.getSelectionModel().select(tab)); + } + }); }); } }); diff --git a/app/src/main/java/io/xpipe/app/browser/action/BrowserAction.java b/app/src/main/java/io/xpipe/app/browser/action/BrowserAction.java index ac423448d..9c8e7473e 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/BrowserAction.java +++ b/app/src/main/java/io/xpipe/app/browser/action/BrowserAction.java @@ -1,6 +1,5 @@ package io.xpipe.app.browser.action; -import com.fasterxml.jackson.annotation.JsonIgnore; import io.xpipe.app.browser.BrowserFullSessionModel; import io.xpipe.app.browser.BrowserStoreSessionTab; import io.xpipe.app.browser.file.BrowserEntry; @@ -9,6 +8,8 @@ import io.xpipe.app.core.AppLayoutModel; import io.xpipe.app.hub.action.StoreAction; import io.xpipe.core.store.FilePath; import io.xpipe.core.store.FileSystemStore; + +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.experimental.SuperBuilder; import java.util.List; @@ -27,23 +28,28 @@ public abstract class BrowserAction extends StoreAction { if (model == null) { var found = BrowserFullSessionModel.DEFAULT.getAllTabs().stream() - .filter(t -> t instanceof BrowserStoreSessionTab bs && bs.getEntry().equals(ref)) + .filter(t -> t instanceof BrowserStoreSessionTab bs + && bs.getEntry().equals(ref)) .findFirst(); if (found.isPresent()) { model = (BrowserFileSystemTabModel) found.get(); } else { - model = BrowserFullSessionModel.DEFAULT.openFileSystemSync(ref.asNeeded(), model -> { - var isFile = model.getFileSystem().fileExists(files.getFirst()); - if (isFile) { - return files.getFirst().getParent(); - } else { - var dir = files.getFirst().getParent(); - if (!model.getFileSystem().directoryExists(dir)) { - throw new IllegalArgumentException("Directory does not exist: " + dir); - } - return dir; - } - }, null, true); + model = BrowserFullSessionModel.DEFAULT.openFileSystemSync( + ref.asNeeded(), + model -> { + var isFile = model.getFileSystem().fileExists(files.getFirst()); + if (isFile) { + return files.getFirst().getParent(); + } else { + var dir = files.getFirst().getParent(); + if (!model.getFileSystem().directoryExists(dir)) { + throw new IllegalArgumentException("Directory does not exist: " + dir); + } + return dir; + } + }, + null, + true); } } @@ -65,24 +71,31 @@ public abstract class BrowserAction extends StoreAction { } protected List getEntries() { - return files.stream().map(filePath -> { - var be = model.getFileList().getAll().getValue().stream().filter(browserEntry -> browserEntry.getRawFileEntry().getPath().equals(filePath)).findFirst(); - if (be.isPresent()) { - return be.get(); - } + return files.stream() + .map(filePath -> { + var be = model.getFileList().getAll().getValue().stream() + .filter(browserEntry -> + browserEntry.getRawFileEntry().getPath().equals(filePath)) + .findFirst(); + if (be.isPresent()) { + return be.get(); + } - return null; - }).filter(browserEntry -> browserEntry != null).toList(); + return null; + }) + .filter(browserEntry -> browserEntry != null) + .toList(); } - - public static abstract class BrowserActionBuilder> + public abstract static class BrowserActionBuilder> extends StoreActionBuilder { public void initEntries(BrowserFileSystemTabModel model, List entries) { ref(model.getEntry().asNeeded()); model(model); - files(entries.stream().map(browserEntry -> browserEntry.getRawFileEntry().getPath()).toList()); + files(entries.stream() + .map(browserEntry -> browserEntry.getRawFileEntry().getPath()) + .toList()); } public void initFiles(BrowserFileSystemTabModel model, List entries) { diff --git a/app/src/main/java/io/xpipe/app/browser/action/BrowserActionProviders.java b/app/src/main/java/io/xpipe/app/browser/action/BrowserActionProviders.java index 960de9b25..ab055ec22 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/BrowserActionProviders.java +++ b/app/src/main/java/io/xpipe/app/browser/action/BrowserActionProviders.java @@ -1,18 +1,13 @@ package io.xpipe.app.browser.action; import io.xpipe.app.action.ActionProvider; -import io.xpipe.app.browser.file.BrowserEntry; -import io.xpipe.app.browser.file.BrowserFileSystemTabModel; -import io.xpipe.app.browser.menu.BrowserMenuBranchProvider; -import io.xpipe.app.browser.menu.BrowserMenuItemProvider; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; - -import java.util.List; public class BrowserActionProviders { - public static BrowserActionProvider forClass(Class clazz) { - return (BrowserActionProvider) ActionProvider.ALL.stream().filter(actionProvider -> actionProvider.getClass().equals(clazz)).findFirst().orElseThrow(); + return (BrowserActionProvider) ActionProvider.ALL.stream() + .filter(actionProvider -> actionProvider.getClass().equals(clazz)) + .findFirst() + .orElseThrow(); } } diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/ApplyFileEditActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/ApplyFileEditActionProvider.java index 6e15bb0c4..48b05c26b 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/ApplyFileEditActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/ApplyFileEditActionProvider.java @@ -3,6 +3,7 @@ package io.xpipe.app.browser.action.impl; import io.xpipe.app.action.AbstractAction; import io.xpipe.app.action.ActionProvider; import io.xpipe.app.browser.file.BrowserFileOutput; + import lombok.NonNull; import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; @@ -29,8 +30,10 @@ public class ApplyFileEditActionProvider implements ActionProvider { @NonNull String target; + @NonNull InputStream input; + @NonNull BrowserFileOutput output; diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/ChgrpActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/ChgrpActionProvider.java index ff738543c..4b39263c2 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/ChgrpActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/ChgrpActionProvider.java @@ -6,6 +6,7 @@ import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.OsType; + import lombok.NonNull; import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; @@ -36,6 +37,7 @@ public class ChgrpActionProvider implements BrowserActionProvider { @NonNull private final String group; + private final boolean recursive; @Override diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/ChmodActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/ChmodActionProvider.java index 1bf712f33..21b8ef39a 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/ChmodActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/ChmodActionProvider.java @@ -6,6 +6,7 @@ import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.OsType; + import lombok.NonNull; import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; @@ -35,6 +36,7 @@ public class ChmodActionProvider implements BrowserActionProvider { @NonNull private final String permissions; + private final boolean recursive; @Override diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/ChownActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/ChownActionProvider.java index 759a3575c..a9ec20306 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/ChownActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/ChownActionProvider.java @@ -6,6 +6,7 @@ import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.OsType; + import lombok.NonNull; import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; @@ -36,6 +37,7 @@ public class ChownActionProvider implements BrowserActionProvider { @NonNull private final String owner; + private final boolean recursive; @Override diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/DeleteActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/DeleteActionProvider.java index b37bfae6c..be916fa22 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/DeleteActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/DeleteActionProvider.java @@ -15,7 +15,8 @@ public class DeleteActionProvider implements BrowserActionProvider { @Override public void executeImpl() throws Exception { - var toDelete = getEntries().stream().map(entry -> entry.getRawFileEntry()).toList(); + var toDelete = + getEntries().stream().map(entry -> entry.getRawFileEntry()).toList(); BrowserFileSystemHelper.delete(toDelete); model.refreshSync(); } diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/NewDirectoryActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/NewDirectoryActionProvider.java index 3ac9ece2c..e7d6ac02e 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/NewDirectoryActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/NewDirectoryActionProvider.java @@ -4,6 +4,7 @@ import io.xpipe.app.browser.action.BrowserAction; import io.xpipe.app.browser.action.BrowserActionProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.core.store.FileKind; + import lombok.NonNull; import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/NewFileActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/NewFileActionProvider.java index d3cfc18ea..e0df7db5b 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/NewFileActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/NewFileActionProvider.java @@ -4,6 +4,7 @@ import io.xpipe.app.browser.action.BrowserAction; import io.xpipe.app.browser.action.BrowserActionProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.core.store.FileKind; + import lombok.NonNull; import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/NewLinkActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/NewLinkActionProvider.java index b06b70653..10b8db6c4 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/NewLinkActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/NewLinkActionProvider.java @@ -5,6 +5,7 @@ import io.xpipe.app.browser.action.BrowserActionProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.core.store.FileKind; import io.xpipe.core.store.FilePath; + import lombok.NonNull; import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/OpenDirectoryActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/OpenDirectoryActionProvider.java index 1e58bb10b..61548b8ac 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/OpenDirectoryActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/OpenDirectoryActionProvider.java @@ -5,6 +5,7 @@ import io.xpipe.app.browser.action.BrowserActionProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.core.store.FileKind; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileDefaultActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileDefaultActionProvider.java index da5960b84..943dd957d 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileDefaultActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileDefaultActionProvider.java @@ -6,6 +6,7 @@ import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileOpener; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.core.store.FileKind; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileNativeDetailsActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileNativeDetailsActionProvider.java index f698cb965..8836f301f 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileNativeDetailsActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileNativeDetailsActionProvider.java @@ -9,6 +9,7 @@ import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.OsType; import io.xpipe.core.process.ShellControl; import io.xpipe.core.store.FileKind; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; @@ -32,13 +33,14 @@ public class OpenFileNativeDetailsActionProvider implements BrowserActionProvide // If we execute this on a drive root there will be no parent, so we have to check for that! var content = parent != null ? String.format( - "$shell = New-Object -ComObject Shell.Application; $shell.NameSpace('%s').ParseName('%s').InvokeVerb('Properties')", - parent, localFile.getFileName()) + "$shell = New-Object -ComObject Shell.Application; $shell.NameSpace('%s').ParseName('%s').InvokeVerb('Properties')", + parent, localFile.getFileName()) : String.format( - "$shell = New-Object -ComObject Shell.Application; $shell.NameSpace('%s').Self.InvokeVerb('Properties')", - localFile); + "$shell = New-Object -ComObject Shell.Application; $shell.NameSpace('%s').Self.InvokeVerb('Properties')", + localFile); - // The Windows shell invoke verb functionality behaves kinda weirdly and only shows the window as + // The Windows shell invoke verb functionality behaves kinda weirdly and only shows the window + // as // long as the parent process is running. // So let's keep one process running LocalShell.getLocalPowershell() diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileWithActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileWithActionProvider.java index a536d0ac5..40f6910cf 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileWithActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/OpenFileWithActionProvider.java @@ -7,6 +7,7 @@ import io.xpipe.app.browser.file.BrowserFileOpener; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.core.process.OsType; import io.xpipe.core.store.FileKind; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/OpenTerminalActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/OpenTerminalActionProvider.java index b590525a9..918785722 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/OpenTerminalActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/OpenTerminalActionProvider.java @@ -7,6 +7,7 @@ import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.prefs.AppPrefs; import io.xpipe.core.store.FileKind; import io.xpipe.core.store.FilePath; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; @@ -24,14 +25,15 @@ public class OpenTerminalActionProvider implements BrowserActionProvider { var entries = getEntries(); var dirs = entries.size() > 0 ? entries.stream() - .map(browserEntry -> browserEntry.getRawFileEntry().getPath()) - .toList() + .map(browserEntry -> browserEntry.getRawFileEntry().getPath()) + .toList() : model.getCurrentDirectory() != null - ? List.of(model.getCurrentDirectory().getPath()) - : Collections.singletonList((FilePath) null); + ? List.of(model.getCurrentDirectory().getPath()) + : Collections.singletonList((FilePath) null); for (var dir : dirs) { var name = (dir != null ? dir + " - " : "") + model.getName().getValue(); - model.openTerminalSync(name, dir, model.getFileSystem().getShell().orElseThrow(), dirs.size() == 1); + model.openTerminalSync( + name, dir, model.getFileSystem().getShell().orElseThrow(), dirs.size() == 1); } } } diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/RunCommandInBackgroundActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/RunCommandInBackgroundActionProvider.java index d06678858..0e63c9b5b 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/RunCommandInBackgroundActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/RunCommandInBackgroundActionProvider.java @@ -6,6 +6,7 @@ import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.ProcessOutputException; + import lombok.NonNull; import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; @@ -41,9 +42,11 @@ public class RunCommandInBackgroundActionProvider implements BrowserActionProvid AtomicReference out = new AtomicReference<>(); AtomicReference err = new AtomicReference<>(); long exitCode; - try (var command = model.getFileSystem().getShell().orElseThrow().command(cmd) - .withWorkingDirectory( - model.getCurrentDirectory().getPath()) + try (var command = model.getFileSystem() + .getShell() + .orElseThrow() + .command(cmd) + .withWorkingDirectory(model.getCurrentDirectory().getPath()) .start()) { var r = command.readStdoutAndStderr(); out.set(r[0]); @@ -53,8 +56,7 @@ public class RunCommandInBackgroundActionProvider implements BrowserActionProvid // Only throw actual error output if (exitCode != 0) { - throw ErrorEvent.expected( - ProcessOutputException.of(exitCode, out.get(), err.get())); + throw ErrorEvent.expected(ProcessOutputException.of(exitCode, out.get(), err.get())); } } } diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/RunCommandInBrowserActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/RunCommandInBrowserActionProvider.java index 7744853a5..dd54d5646 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/RunCommandInBrowserActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/RunCommandInBrowserActionProvider.java @@ -5,6 +5,7 @@ import io.xpipe.app.browser.action.BrowserActionProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.util.CommandDialog; import io.xpipe.core.process.CommandBuilder; + import lombok.NonNull; import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/RunCommandInTerminalActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/RunCommandInTerminalActionProvider.java index cbfa5aa97..40a253c33 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/RunCommandInTerminalActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/RunCommandInTerminalActionProvider.java @@ -4,6 +4,7 @@ import io.xpipe.app.browser.action.BrowserAction; import io.xpipe.app.browser.action.BrowserActionProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.core.process.CommandBuilder; + import lombok.NonNull; import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; @@ -37,10 +38,10 @@ public class RunCommandInTerminalActionProvider implements BrowserActionProvider cmd.addFile(entry.getRawFileEntry().getPath()); } - model.openTerminalSync(title, + model.openTerminalSync( + title, model.getCurrentDirectory() != null - ? model.getCurrentDirectory() - .getPath() + ? model.getCurrentDirectory().getPath() : null, model.getFileSystem().getShell().orElseThrow().command(cmd), true); diff --git a/app/src/main/java/io/xpipe/app/browser/action/impl/TransferFilesActionProvider.java b/app/src/main/java/io/xpipe/app/browser/action/impl/TransferFilesActionProvider.java index 426f6f18b..84b809f14 100644 --- a/app/src/main/java/io/xpipe/app/browser/action/impl/TransferFilesActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/action/impl/TransferFilesActionProvider.java @@ -8,6 +8,7 @@ import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.core.store.FileSystemStore; + import lombok.NonNull; import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; @@ -48,7 +49,11 @@ public class TransferFilesActionProvider implements ActionProvider { public Map toDisplayMap() { var map = new LinkedHashMap(); map.put("action", getDisplayName()); - map.put("sources", operation.getFiles().stream().map(fileEntry -> fileEntry.getName()).collect(Collectors.joining("\n"))); + map.put( + "sources", + operation.getFiles().stream() + .map(fileEntry -> fileEntry.getName()) + .collect(Collectors.joining("\n"))); map.put("target", DataStorage.get().getStoreEntryDisplayName(target.get())); map.put("targetDirectory", operation.getTarget().getPath().toString()); return map; diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserAlerts.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserAlerts.java index ad8c78684..e7846f735 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserAlerts.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserAlerts.java @@ -5,17 +5,13 @@ import io.xpipe.app.comp.base.ModalOverlay; import io.xpipe.app.core.AppI18n; import io.xpipe.app.core.window.AppDialog; import io.xpipe.app.core.window.AppWindowHelper; -import io.xpipe.app.storage.DataStorage; import io.xpipe.core.store.FileEntry; import io.xpipe.core.store.FileKind; import io.xpipe.core.store.FilePath; import javafx.beans.property.SimpleObjectProperty; import javafx.scene.control.Alert; -import javafx.scene.control.ButtonBar; -import javafx.scene.control.ButtonType; -import java.util.LinkedHashMap; import java.util.List; import java.util.stream.Collectors; @@ -25,7 +21,9 @@ public class BrowserAlerts { var choice = new SimpleObjectProperty(); var key = multiple ? "fileConflictAlertContentMultiple" : "fileConflictAlertContent"; var w = multiple ? 700 : 400; - var modal = ModalOverlay.of("fileConflictAlertTitle", AppDialog.dialogText(AppI18n.observable(key, file)).prefWidth(w)); + var modal = ModalOverlay.of( + "fileConflictAlertTitle", + AppDialog.dialogText(AppI18n.observable(key, file)).prefWidth(w)); modal.addButton(new ModalButton("cancel", () -> choice.set(FileConflictChoice.CANCEL), true, false)); if (multiple) { modal.addButton(new ModalButton("skip", () -> choice.set(FileConflictChoice.SKIP), true, false)); @@ -33,7 +31,8 @@ public class BrowserAlerts { } modal.addButton(new ModalButton("replace", () -> choice.set(FileConflictChoice.REPLACE), true, false)); if (multiple) { - modal.addButton(new ModalButton("replaceAll", () -> choice.set(FileConflictChoice.REPLACE_ALL), true, false)); + modal.addButton( + new ModalButton("replaceAll", () -> choice.set(FileConflictChoice.REPLACE_ALL), true, false)); } modal.addButton(new ModalButton("rename", () -> choice.set(FileConflictChoice.RENAME), true, false)); if (multiple) { diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserBreadcrumbBar.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserBreadcrumbBar.java index d9f6078a4..2edc2b3d8 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserBreadcrumbBar.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserBreadcrumbBar.java @@ -3,8 +3,8 @@ package io.xpipe.app.browser.file; import io.xpipe.app.comp.SimpleComp; import io.xpipe.app.util.PlatformThread; import io.xpipe.core.store.FileNames; - import io.xpipe.core.store.FilePath; + import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.control.ButtonBase; @@ -90,7 +90,6 @@ public class BrowserBreadcrumbBar extends SimpleComp { return breadcrumbs; } - private List createBreadcumbHierarchy(FilePath filePath) { var f = filePath.toString() + "/"; var list = new ArrayList(); diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserClipboard.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserClipboard.java index 8fb5b2f8b..e63f82ca4 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserClipboard.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserClipboard.java @@ -3,9 +3,7 @@ package io.xpipe.app.browser.file; import io.xpipe.app.ext.ProcessControlProvider; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.util.GlobalClipboard; -import io.xpipe.app.util.ThreadHelper; import io.xpipe.core.store.FileEntry; -import io.xpipe.core.util.FailableRunnable; import javafx.beans.property.Property; import javafx.beans.property.SimpleObjectProperty; @@ -45,7 +43,10 @@ public class BrowserClipboard { List data = (List) clipboard.getData(DataFlavor.javaFileListFlavor); // Sometimes file data can contain invalid chars. Why? - var files = data.stream().filter(file -> file.toString().chars().noneMatch(value -> Character.isISOControl(value))).map(f -> f.toPath()).toList(); + var files = data.stream() + .filter(file -> file.toString().chars().noneMatch(value -> Character.isISOControl(value))) + .map(f -> f.toPath()) + .toList(); if (files.size() == 0) { return; } @@ -55,7 +56,8 @@ public class BrowserClipboard { entries.add(BrowserLocalFileSystem.getLocalBrowserEntry(file)); } - currentCopyClipboard.setValue(new Instance(UUID.randomUUID(), null, entries, BrowserFileTransferMode.COPY)); + currentCopyClipboard.setValue( + new Instance(UUID.randomUUID(), null, entries, BrowserFileTransferMode.COPY)); } catch (Exception e) { ErrorEvent.fromThrowable(e).expected().omit().handle(); } diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserConnectionListFilterComp.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserConnectionListFilterComp.java index 0cdbbe311..f5b65673d 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserConnectionListFilterComp.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserConnectionListFilterComp.java @@ -3,9 +3,9 @@ package io.xpipe.app.browser.file; import io.xpipe.app.comp.SimpleComp; import io.xpipe.app.comp.base.FilterComp; import io.xpipe.app.comp.base.HorizontalComp; +import io.xpipe.app.core.AppFontSizes; import io.xpipe.app.hub.comp.StoreCategoryWrapper; import io.xpipe.app.hub.comp.StoreViewState; -import io.xpipe.app.core.AppFontSizes; import io.xpipe.app.util.DataStoreCategoryChoiceComp; import javafx.beans.property.Property; diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileListComp.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileListComp.java index d01ec7cf7..c28f773c6 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileListComp.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileListComp.java @@ -1,6 +1,5 @@ package io.xpipe.app.browser.file; -import io.xpipe.app.browser.action.BrowserActionProviders; import io.xpipe.app.browser.menu.BrowserMenuProviders; import io.xpipe.app.comp.SimpleComp; import io.xpipe.app.core.AppI18n; @@ -509,7 +508,8 @@ public final class BrowserFileListComp extends SimpleComp { ownerCol.setPrefWidth(0); } - var shell = fileList.getFileSystemModel().getFileSystem().getShell().orElseThrow(); + var shell = + fileList.getFileSystemModel().getFileSystem().getShell().orElseThrow(); if (OsType.WINDOWS.equals(shell.getOsType()) || OsType.MACOS.equals(shell.getOsType())) { modeCol.setVisible(false); ownerCol.setVisible(false); diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileListFilterComp.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileListFilterComp.java index cab84e76f..f888ffbc1 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileListFilterComp.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileListFilterComp.java @@ -6,9 +6,8 @@ import io.xpipe.app.comp.base.TextFieldComp; import io.xpipe.app.comp.base.TooltipHelper; import io.xpipe.app.core.AppI18n; import io.xpipe.app.util.InputHelper; - import io.xpipe.app.util.PlatformThread; -import javafx.application.Platform; + import javafx.beans.property.Property; import javafx.beans.property.SimpleBooleanProperty; import javafx.geometry.Pos; diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileOpener.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileOpener.java index fb6ea8efc..f901da974 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileOpener.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileOpener.java @@ -35,7 +35,8 @@ public class BrowserFileOpener { if (totalBytes == 0) { var existingSize = model.getFileSystem().getFileSize(file.getPath()); if (existingSize != 0) { - var blank = AppDialog.confirm("fileWriteBlankTitle", AppI18n.observable("fileWriteBlankContent", file.getPath())); + var blank = AppDialog.confirm( + "fileWriteBlankTitle", AppI18n.observable("fileWriteBlankContent", file.getPath())); if (!blank) { return BrowserFileOutput.none(); } diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabComp.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabComp.java index cc7c7e43d..8f553e6ec 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabComp.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabComp.java @@ -1,7 +1,6 @@ package io.xpipe.app.browser.file; import io.xpipe.app.browser.BrowserFullSessionModel; -import io.xpipe.app.browser.action.BrowserActionProviders; import io.xpipe.app.browser.menu.BrowserMenuProviders; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.SimpleComp; @@ -70,7 +69,8 @@ public class BrowserFileSystemTabComp extends SimpleComp { var forthBtn = BrowserMenuProviders.byId("forward", model, List.of()).toButton(root, model, List.of()); var refreshBtn = BrowserMenuProviders.byId("refresh", model, List.of()).toButton(root, model, List.of()); // Don't handle key events for this button, we also have that available as a menu item - var terminalBtn = BrowserMenuProviders.byId("openTerminal", model, List.of()).toButton(new Region(), model, List.of()); + var terminalBtn = + BrowserMenuProviders.byId("openTerminal", model, List.of()).toButton(new Region(), model, List.of()); var menuButton = new MenuButton(null, new FontIcon("mdral-folder_open")); new ContextMenuAugment<>( diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabModel.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabModel.java index 72b2affb9..667dddd84 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabModel.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabModel.java @@ -50,8 +50,10 @@ public final class BrowserFileSystemTabModel extends BrowserStoreSessionTab progress = new SimpleObjectProperty<>(); private final ObservableList terminalRequests = FXCollections.observableArrayList(); private final BooleanProperty transferCancelled = new SimpleBooleanProperty(); + @NonNull private FileSystem fileSystem; + private BrowserFileSystemSavedState savedState; private BrowserFileSystemCache cache; @@ -83,7 +85,8 @@ public final class BrowserFileSystemTabModel extends BrowserStoreSessionTab originalFs.getShell().get().isRunning(true)); + fs = new WrapperFileSystem( + originalFs, () -> originalFs.getShell().get().isRunning(true)); } fs.open(); // Listen to kill after init as the shell might get killed during init for certain reasons @@ -121,7 +125,6 @@ public final class BrowserFileSystemTabModel extends BrowserStoreSessionTab { - var current = getCurrentDirectory(); // We might close this after storage shutdown // If this entry does not exist, it's not that bad if we save it anyway @@ -157,7 +160,6 @@ public final class BrowserFileSystemTabModel extends BrowserStoreSessionTab c, boolean refresh) { ThreadHelper.runFailableAsync(() -> { - BooleanScope.executeExclusive(busy, () -> { if (entry.getStore() instanceof ShellStore s) { c.accept(fileSystem.getShell().orElseThrow()); @@ -415,11 +417,13 @@ public final class BrowserFileSystemTabModel extends BrowserStoreSessionTab files) { ThreadHelper.runFailableAsync(() -> { BooleanScope.executeExclusive(busy, () -> { - startIfNeeded(); var op = BrowserFileTransferOperation.ofLocal( entry, files, BrowserFileTransferMode.COPY, true, progress::setValue, transferCancelled); - var action = TransferFilesActionProvider.Action.builder().operation(op).target(this.entry.asNeeded()).build(); + var action = TransferFilesActionProvider.Action.builder() + .operation(op) + .target(this.entry.asNeeded()) + .build(); action.executeSync(); refreshSync(); }); @@ -434,11 +438,13 @@ public final class BrowserFileSystemTabModel extends BrowserStoreSessionTab { BooleanScope.executeExclusive(busy, () -> { - startIfNeeded(); var op = new BrowserFileTransferOperation( target, files, mode, true, progress::setValue, transferCancelled); - var action = TransferFilesActionProvider.Action.builder().operation(op).target(entry.asNeeded()).build(); + var action = TransferFilesActionProvider.Action.builder() + .operation(op) + .target(entry.asNeeded()) + .build(); action.executeSync(); refreshSync(); }); @@ -448,7 +454,6 @@ public final class BrowserFileSystemTabModel extends BrowserStoreSessionTab { BooleanScope.executeExclusive(busy, () -> { - if (getCurrentDirectory() == null) { return; } @@ -469,7 +474,6 @@ public final class BrowserFileSystemTabModel extends BrowserStoreSessionTab r, boolean refresh) { ThreadHelper.runFailableAsync(() -> { BooleanScope.executeExclusive(busy, () -> { - if (getCurrentDirectory() == null) { return; } @@ -498,23 +502,21 @@ public final class BrowserFileSystemTabModel extends BrowserStoreSessionTab { - BooleanScope.executeExclusive(busy, () -> { openTerminalSync(name, directory, processControl, dockIfPossible); }); }); } - public void openTerminalSync( - String name, FilePath directory, ProcessControl processControl, boolean dockIfPossible) throws Exception { + public void openTerminalSync(String name, FilePath directory, ProcessControl processControl, boolean dockIfPossible) + throws Exception { var dock = shouldLaunchSplitTerminal() && dockIfPossible; var uuid = UUID.randomUUID(); terminalRequests.add(uuid); if (dock && browserModel instanceof BrowserFullSessionModel fullSessionModel && !(fullSessionModel.getSplits().get(this) instanceof BrowserTerminalDockTabModel)) { - fullSessionModel.splitTab( - this, new BrowserTerminalDockTabModel(browserModel, this, terminalRequests)); + fullSessionModel.splitTab(this, new BrowserTerminalDockTabModel(browserModel, this, terminalRequests)); } TerminalLauncher.open(entry.get(), name, directory, processControl, uuid, !dock); diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileTransferOperation.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileTransferOperation.java index 8f5770923..e0e7a141d 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileTransferOperation.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileTransferOperation.java @@ -6,6 +6,7 @@ import io.xpipe.core.store.*; import javafx.beans.property.BooleanProperty; import javafx.beans.value.ChangeListener; + import lombok.Getter; import java.io.*; @@ -15,7 +16,6 @@ import java.time.Duration; import java.time.Instant; import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; @@ -26,8 +26,10 @@ public class BrowserFileTransferOperation { @Getter private final FileEntry target; + @Getter private final List files; + private final BrowserFileTransferMode transferMode; private final boolean checkConflicts; private final Consumer progress; @@ -293,9 +295,9 @@ public class BrowserFileTransferOperation { totalSize.addAndGet(source.getFileSizeLong().orElse(0)); } - var originalSourceFs = flatFiles.keySet().iterator().next().getFileSystem(); - if (!flatFiles.keySet().stream().allMatch(fileEntry -> fileEntry.getFileSystem().equals(originalSourceFs))) { + if (!flatFiles.keySet().stream() + .allMatch(fileEntry -> fileEntry.getFileSystem().equals(originalSourceFs))) { throw new IllegalArgumentException("Mixed source file systems"); } @@ -311,7 +313,8 @@ public class BrowserFileTransferOperation { } var sourceFile = e.getKey(); - var fixedRelPath = FilePath.of(e.getValue()).fileSystemCompatible(targetFs.getShell().orElseThrow().getOsType()); + var fixedRelPath = FilePath.of(e.getValue()) + .fileSystemCompatible(targetFs.getShell().orElseThrow().getOsType()); var targetFile = target.getPath().join(fixedRelPath.toString()); if (sourceFile.getFileSystem().equals(targetFs)) { throw new IllegalStateException(); @@ -321,9 +324,10 @@ public class BrowserFileTransferOperation { targetFs.mkdirs(targetFile); } else if (sourceFile.getKind() == FileKind.FILE) { if (checkConflicts) { - var fileConflictChoice = handleChoice(targetFs, targetFile, files.size() > 1 || flatFiles.size() > 1); - if (fileConflictChoice == BrowserAlerts.FileConflictChoice.SKIP || - fileConflictChoice == BrowserAlerts.FileConflictChoice.CANCEL) { + var fileConflictChoice = + handleChoice(targetFs, targetFile, files.size() > 1 || flatFiles.size() > 1); + if (fileConflictChoice == BrowserAlerts.FileConflictChoice.SKIP + || fileConflictChoice == BrowserAlerts.FileConflictChoice.CANCEL) { continue; } @@ -332,7 +336,14 @@ public class BrowserFileTransferOperation { } } - transfer(sourceFile.getPath(), optimizedSourceFs, targetFile, targetFs, transferred, totalSize, start); + transfer( + sourceFile.getPath(), + optimizedSourceFs, + targetFile, + targetFs, + transferred, + totalSize, + start); } } updateProgress(BrowserTransferProgress.finished(source.getName(), totalSize.get())); @@ -347,7 +358,13 @@ public class BrowserFileTransferOperation { } private void transfer( - FilePath sourceFile, FileSystem sourceFs, FilePath targetFile, FileSystem targetFs, AtomicLong transferred, AtomicLong totalSize, Instant start) + FilePath sourceFile, + FileSystem sourceFs, + FilePath targetFile, + FileSystem targetFs, + AtomicLong transferred, + AtomicLong totalSize, + Instant start) throws Exception { if (cancelled()) { return; @@ -430,7 +447,8 @@ public class BrowserFileTransferOperation { cancelled.removeListener(closeCancelListener); if (exception != null) { - ErrorEvent.preconfigure(ErrorEvent.fromThrowable(exception).reportable(!cancelled()).omitted(cancelled())); + ErrorEvent.preconfigure( + ErrorEvent.fromThrowable(exception).reportable(!cancelled()).omitted(cancelled())); throw exception; } } @@ -475,8 +493,8 @@ public class BrowserFileTransferOperation { outputStream.write(buffer, 0, read); transferred.addAndGet(read); readCount.addAndGet(read); - updateProgress( - new BrowserTransferProgress(sourceFile.getFileName(), transferred.get(), total.get(), start)); + updateProgress(new BrowserTransferProgress( + sourceFile.getFileName(), transferred.get(), total.get(), start)); } outputStream.flush(); @@ -528,8 +546,10 @@ public class BrowserFileTransferOperation { var sourceShell = sourceFs.getShell().orElseThrow(); var targetShell = targetFs.getShell().orElseThrow(); // Check for null on shell reset - return sourceShell.getStdout() != null && !sourceShell.getStdout().isClosed() - && targetShell.getStdin() != null && !targetShell.getStdin().isClosed(); + return sourceShell.getStdout() != null + && !sourceShell.getStdout().isClosed() + && targetShell.getStdin() != null + && !targetShell.getStdin().isClosed(); } else { return true; } diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserHistorySavedStateImpl.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserHistorySavedStateImpl.java index f21f54578..84a92ebba 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserHistorySavedStateImpl.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserHistorySavedStateImpl.java @@ -82,7 +82,9 @@ public class BrowserHistorySavedStateImpl implements BrowserHistorySavedState { if (ls == null) { ls = List.of(); } - var valid = ls.stream().filter(entry -> entry.getUuid() != null && entry.getPath() != null).toList(); + var valid = ls.stream() + .filter(entry -> entry.getUuid() != null && entry.getPath() != null) + .toList(); return new BrowserHistorySavedStateImpl(valid); } } diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserTransferModel.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserTransferModel.java index c85da6cbd..f194e3598 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserTransferModel.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserTransferModel.java @@ -8,8 +8,8 @@ import io.xpipe.app.storage.DataStorage; import io.xpipe.app.util.DesktopHelper; import io.xpipe.app.util.ShellTemp; import io.xpipe.app.util.ThreadHelper; - import io.xpipe.core.process.OsType; + import javafx.beans.binding.Bindings; import javafx.beans.property.BooleanProperty; import javafx.beans.property.Property; @@ -153,7 +153,10 @@ public class BrowserTransferModel { itemModel.getProgress().setValue(progress); }, itemModel.getTransferCancelled()); - var action = TransferFilesActionProvider.Action.builder().operation(op).target(DataStorage.get().local().ref()).build(); + var action = TransferFilesActionProvider.Action.builder() + .operation(op) + .target(DataStorage.get().local().ref()) + .build(); action.executeSync(); } catch (Throwable t) { ErrorEvent.fromThrowable(t).handle(); diff --git a/app/src/main/java/io/xpipe/app/browser/icon/BrowserIconFileType.java b/app/src/main/java/io/xpipe/app/browser/icon/BrowserIconFileType.java index 77eebdc20..83b6cf778 100644 --- a/app/src/main/java/io/xpipe/app/browser/icon/BrowserIconFileType.java +++ b/app/src/main/java/io/xpipe/app/browser/icon/BrowserIconFileType.java @@ -85,7 +85,8 @@ public abstract class BrowserIconFileType { var name = entry.getPath().getFileName(); var ext = entry.getPath().getExtension(); - return (ext.isPresent() && endings.contains("." + ext.get().toLowerCase(Locale.ROOT))) || endings.contains(name); + return (ext.isPresent() && endings.contains("." + ext.get().toLowerCase(Locale.ROOT))) + || endings.contains(name); } @Override diff --git a/app/src/main/java/io/xpipe/app/browser/menu/BrowserMenuBranchProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/BrowserMenuBranchProvider.java index de2fc5170..b98dbace8 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/BrowserMenuBranchProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/BrowserMenuBranchProvider.java @@ -37,5 +37,6 @@ public interface BrowserMenuBranchProvider extends BrowserMenuItemProvider { return m; } - List getBranchingActions(BrowserFileSystemTabModel model, List entries); + List getBranchingActions( + BrowserFileSystemTabModel model, List entries); } diff --git a/app/src/main/java/io/xpipe/app/browser/menu/BrowserMenuItemProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/BrowserMenuItemProvider.java index e86ccecc4..47aee91f7 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/BrowserMenuItemProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/BrowserMenuItemProvider.java @@ -3,6 +3,7 @@ package io.xpipe.app.browser.menu; import io.xpipe.app.action.ActionProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; + import javafx.beans.value.ObservableValue; import javafx.scene.Node; import javafx.scene.control.MenuItem; @@ -23,9 +24,9 @@ public interface BrowserMenuItemProvider extends ActionProvider { default List resolveFilesIfNeeded(List selected) { return automaticallyResolveLinks() ? selected.stream() - .map(browserEntry -> - new BrowserEntry(browserEntry.getRawFileEntry().resolved(), browserEntry.getModel())) - .toList() + .map(browserEntry -> + new BrowserEntry(browserEntry.getRawFileEntry().resolved(), browserEntry.getModel())) + .toList() : selected; } diff --git a/app/src/main/java/io/xpipe/app/browser/menu/BrowserMenuLeafProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/BrowserMenuLeafProvider.java index 9d85a7a02..8059561fb 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/BrowserMenuLeafProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/BrowserMenuLeafProvider.java @@ -2,12 +2,12 @@ package io.xpipe.app.browser.menu; import io.xpipe.app.action.AbstractAction; import io.xpipe.app.browser.action.BrowserAction; -import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.browser.action.BrowserActionProvider; import io.xpipe.app.browser.action.BrowserActionProviders; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.comp.base.TooltipHelper; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.BindingsHelper; import io.xpipe.app.util.LicenseProvider; @@ -45,7 +45,9 @@ public interface BrowserMenuLeafProvider extends BrowserMenuItemProvider { @SneakyThrows default AbstractAction createAction(BrowserFileSystemTabModel model, List entries) { - var c = getDelegateActionClass() != null ? getDelegateActionClass() : getActionClass().orElseThrow(); + var c = getDelegateActionClass() != null + ? getDelegateActionClass() + : getActionClass().orElseThrow(); var bm = c.getDeclaredMethod("builder"); bm.setAccessible(true); var b = bm.invoke(null); @@ -63,7 +65,11 @@ public interface BrowserMenuLeafProvider extends BrowserMenuItemProvider { var entriesMethod = b.getClass().getMethod("files", List.class); entriesMethod.setAccessible(true); - entriesMethod.invoke(b, entries.stream().map(browserEntry -> browserEntry.getRawFileEntry().getPath()).toList()); + entriesMethod.invoke( + b, + entries.stream() + .map(browserEntry -> browserEntry.getRawFileEntry().getPath()) + .toList()); } var m = b.getClass().getDeclaredMethod("build"); diff --git a/app/src/main/java/io/xpipe/app/browser/menu/BrowserMenuProviders.java b/app/src/main/java/io/xpipe/app/browser/menu/BrowserMenuProviders.java index 3d01f2b63..c97fa544c 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/BrowserMenuProviders.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/BrowserMenuProviders.java @@ -1,7 +1,6 @@ package io.xpipe.app.browser.menu; import io.xpipe.app.action.ActionProvider; -import io.xpipe.app.browser.action.BrowserActionProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; @@ -9,10 +8,12 @@ import java.util.List; public class BrowserMenuProviders { - public static List getFlattened(BrowserFileSystemTabModel model, List entries) { + public static List getFlattened( + BrowserFileSystemTabModel model, List entries) { return ActionProvider.ALL.stream() - .map(browserAction -> browserAction instanceof BrowserMenuItemProvider ba ? getFlattened(ba, model, entries) : - List.of()) + .map(browserAction -> browserAction instanceof BrowserMenuItemProvider ba + ? getFlattened(ba, model, entries) + : List.of()) .flatMap(List::stream) .toList(); } @@ -22,10 +23,10 @@ public class BrowserMenuProviders { return browserAction instanceof BrowserMenuLeafProvider ? List.of((BrowserMenuLeafProvider) browserAction) : ((BrowserMenuBranchProvider) browserAction) - .getBranchingActions(model, entries).stream() - .map(action -> getFlattened(action, model, entries)) - .flatMap(List::stream) - .toList(); + .getBranchingActions(model, entries).stream() + .map(action -> getFlattened(action, model, entries)) + .flatMap(List::stream) + .toList(); } public static BrowserMenuLeafProvider byId(String id, BrowserFileSystemTabModel model, List entries) { diff --git a/app/src/main/java/io/xpipe/app/browser/menu/MultiExecuteMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/MultiExecuteMenuProvider.java index 7da85580f..557164b44 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/MultiExecuteMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/MultiExecuteMenuProvider.java @@ -18,7 +18,8 @@ public abstract class MultiExecuteMenuProvider implements BrowserMenuBranchProvi ShellControl sc, BrowserFileSystemTabModel model, BrowserEntry entry); @Override - public List getBranchingActions(BrowserFileSystemTabModel model, List entries) { + public List getBranchingActions( + BrowserFileSystemTabModel model, List entries) { return List.of( new BrowserMenuLeafProvider() { diff --git a/app/src/main/java/io/xpipe/app/browser/menu/MultiExecuteSelectionMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/MultiExecuteSelectionMenuProvider.java index 0aabbfa27..021e11e42 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/MultiExecuteSelectionMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/MultiExecuteSelectionMenuProvider.java @@ -24,7 +24,8 @@ public abstract class MultiExecuteSelectionMenuProvider implements BrowserMenuBr protected abstract String getTerminalTitle(); @Override - public List getBranchingActions(BrowserFileSystemTabModel model, List entries) { + public List getBranchingActions( + BrowserFileSystemTabModel model, List entries) { return List.of( new BrowserMenuLeafProvider() { diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/BackMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/BackMenuProvider.java index 49a06243f..d82fbf289 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/BackMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/BackMenuProvider.java @@ -1,8 +1,8 @@ package io.xpipe.app.browser.menu.impl; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import javafx.beans.value.ObservableValue; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/BrowseInNativeManagerMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/BrowseInNativeManagerMenuProvider.java index dbd1b46d3..477e1bd43 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/BrowseInNativeManagerMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/BrowseInNativeManagerMenuProvider.java @@ -2,11 +2,12 @@ package io.xpipe.app.browser.menu.impl; import io.xpipe.app.browser.action.BrowserActionProvider; import io.xpipe.app.browser.action.impl.BrowseInNativeManagerActionProvider; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import io.xpipe.core.process.OsType; + import javafx.beans.value.ObservableValue; import java.util.List; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/ChgrpMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/ChgrpMenuProvider.java index 0f1855547..902e78f1d 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/ChgrpMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/ChgrpMenuProvider.java @@ -1,17 +1,17 @@ package io.xpipe.app.browser.menu.impl; import io.xpipe.app.browser.action.impl.ChgrpActionProvider; -import io.xpipe.app.browser.menu.BrowserMenuItemProvider; -import io.xpipe.app.browser.menu.BrowserMenuBranchProvider; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuBranchProvider; +import io.xpipe.app.browser.menu.BrowserMenuItemProvider; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.base.ModalOverlay; import io.xpipe.app.core.AppI18n; import io.xpipe.core.process.OsType; - import io.xpipe.core.store.FileKind; + import javafx.beans.property.SimpleStringProperty; import javafx.beans.value.ObservableValue; import javafx.scene.Node; @@ -46,8 +46,10 @@ public class ChgrpMenuProvider implements BrowserMenuBranchProvider { } @Override - public List getBranchingActions(BrowserFileSystemTabModel model, List entries) { - if (entries.stream().anyMatch(browserEntry -> browserEntry.getRawFileEntry().getKind() == FileKind.DIRECTORY)) { + public List getBranchingActions( + BrowserFileSystemTabModel model, List entries) { + if (entries.stream() + .anyMatch(browserEntry -> browserEntry.getRawFileEntry().getKind() == FileKind.DIRECTORY)) { return List.of(new FlatProvider(), new RecursiveProvider()); } else { return getLeafActions(model, false); @@ -67,7 +69,8 @@ public class ChgrpMenuProvider implements BrowserMenuBranchProvider { } @Override - public List getBranchingActions(BrowserFileSystemTabModel model, List entries) { + public List getBranchingActions( + BrowserFileSystemTabModel model, List entries) { return getLeafActions(model, false); } } @@ -85,7 +88,8 @@ public class ChgrpMenuProvider implements BrowserMenuBranchProvider { } @Override - public List getBranchingActions(BrowserFileSystemTabModel model, List entries) { + public List getBranchingActions( + BrowserFileSystemTabModel model, List entries) { return getLeafActions(model, true); } } @@ -134,7 +138,9 @@ public class ChgrpMenuProvider implements BrowserMenuBranchProvider { private final boolean recursive; - private CustomProvider(boolean recursive) {this.recursive = recursive;} + private CustomProvider(boolean recursive) { + this.recursive = recursive; + } @Override public ObservableValue getName(BrowserFileSystemTabModel model, List entries) { @@ -144,11 +150,14 @@ public class ChgrpMenuProvider implements BrowserMenuBranchProvider { @Override public void execute(BrowserFileSystemTabModel model, List entries) throws Exception { var group = new SimpleStringProperty(); - var modal = ModalOverlay.of("groupName", Comp.of(() -> { - var creationName = new TextField(); - creationName.textProperty().bindBidirectional(group); - return creationName; - }).prefWidth(350)); + var modal = ModalOverlay.of( + "groupName", + Comp.of(() -> { + var creationName = new TextField(); + creationName.textProperty().bindBidirectional(group); + return creationName; + }) + .prefWidth(350)); modal.withDefaultButtons(() -> { if (group.getValue() == null) { return; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/ChmodMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/ChmodMenuProvider.java index 3a038e950..3425c444f 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/ChmodMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/ChmodMenuProvider.java @@ -1,17 +1,17 @@ package io.xpipe.app.browser.menu.impl; import io.xpipe.app.browser.action.impl.ChgrpActionProvider; +import io.xpipe.app.browser.file.BrowserEntry; +import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.browser.menu.BrowserMenuBranchProvider; import io.xpipe.app.browser.menu.BrowserMenuItemProvider; import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; -import io.xpipe.app.browser.file.BrowserEntry; -import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.base.ModalOverlay; import io.xpipe.app.core.AppI18n; import io.xpipe.core.process.OsType; - import io.xpipe.core.store.FileKind; + import javafx.beans.property.SimpleStringProperty; import javafx.beans.value.ObservableValue; import javafx.scene.Node; @@ -44,8 +44,10 @@ public class ChmodMenuProvider implements BrowserMenuBranchProvider { } @Override - public List getBranchingActions(BrowserFileSystemTabModel model, List entries) { - if (entries.stream().anyMatch(browserEntry -> browserEntry.getRawFileEntry().getKind() == FileKind.DIRECTORY)) { + public List getBranchingActions( + BrowserFileSystemTabModel model, List entries) { + if (entries.stream() + .anyMatch(browserEntry -> browserEntry.getRawFileEntry().getKind() == FileKind.DIRECTORY)) { return List.of(new FlatProvider(), new RecursiveProvider()); } else { return getLeafActions(model, false); @@ -65,7 +67,8 @@ public class ChmodMenuProvider implements BrowserMenuBranchProvider { } @Override - public List getBranchingActions(BrowserFileSystemTabModel model, List entries) { + public List getBranchingActions( + BrowserFileSystemTabModel model, List entries) { return getLeafActions(model, false); } } @@ -83,7 +86,8 @@ public class ChmodMenuProvider implements BrowserMenuBranchProvider { } @Override - public List getBranchingActions(BrowserFileSystemTabModel model, List entries) { + public List getBranchingActions( + BrowserFileSystemTabModel model, List entries) { return getLeafActions(model, true); } } @@ -132,7 +136,9 @@ public class ChmodMenuProvider implements BrowserMenuBranchProvider { private final boolean recursive; - private CustomProvider(boolean recursive) {this.recursive = recursive;} + private CustomProvider(boolean recursive) { + this.recursive = recursive; + } @Override public ObservableValue getName(BrowserFileSystemTabModel model, List entries) { @@ -142,11 +148,14 @@ public class ChmodMenuProvider implements BrowserMenuBranchProvider { @Override public void execute(BrowserFileSystemTabModel model, List entries) throws Exception { var permissions = new SimpleStringProperty(); - var modal = ModalOverlay.of("chmodPermissions", Comp.of(() -> { - var creationName = new TextField(); - creationName.textProperty().bindBidirectional(permissions); - return creationName; - }).prefWidth(350)); + var modal = ModalOverlay.of( + "chmodPermissions", + Comp.of(() -> { + var creationName = new TextField(); + creationName.textProperty().bindBidirectional(permissions); + return creationName; + }) + .prefWidth(350)); modal.withDefaultButtons(() -> { if (permissions.getValue() == null) { return; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/ChownMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/ChownMenuProvider.java index faf70171b..d26d0c2f0 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/ChownMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/ChownMenuProvider.java @@ -1,17 +1,17 @@ package io.xpipe.app.browser.menu.impl; import io.xpipe.app.browser.action.impl.ChgrpActionProvider; +import io.xpipe.app.browser.file.BrowserEntry; +import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.browser.menu.BrowserMenuBranchProvider; import io.xpipe.app.browser.menu.BrowserMenuItemProvider; import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; -import io.xpipe.app.browser.file.BrowserEntry; -import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.base.ModalOverlay; import io.xpipe.app.core.AppI18n; import io.xpipe.core.process.OsType; - import io.xpipe.core.store.FileKind; + import javafx.beans.property.SimpleStringProperty; import javafx.beans.value.ObservableValue; import javafx.scene.Node; @@ -46,8 +46,10 @@ public class ChownMenuProvider implements BrowserMenuBranchProvider { } @Override - public List getBranchingActions(BrowserFileSystemTabModel model, List entries) { - if (entries.stream().anyMatch(browserEntry -> browserEntry.getRawFileEntry().getKind() == FileKind.DIRECTORY)) { + public List getBranchingActions( + BrowserFileSystemTabModel model, List entries) { + if (entries.stream() + .anyMatch(browserEntry -> browserEntry.getRawFileEntry().getKind() == FileKind.DIRECTORY)) { return List.of(new FlatProvider(), new RecursiveProvider()); } else { return getLeafActions(model, false); @@ -67,7 +69,8 @@ public class ChownMenuProvider implements BrowserMenuBranchProvider { } @Override - public List getBranchingActions(BrowserFileSystemTabModel model, List entries) { + public List getBranchingActions( + BrowserFileSystemTabModel model, List entries) { return getLeafActions(model, false); } } @@ -85,7 +88,8 @@ public class ChownMenuProvider implements BrowserMenuBranchProvider { } @Override - public List getBranchingActions(BrowserFileSystemTabModel model, List entries) { + public List getBranchingActions( + BrowserFileSystemTabModel model, List entries) { return getLeafActions(model, true); } } @@ -133,7 +137,9 @@ public class ChownMenuProvider implements BrowserMenuBranchProvider { private final boolean recursive; - private CustomProvider(boolean recursive) {this.recursive = recursive;} + private CustomProvider(boolean recursive) { + this.recursive = recursive; + } @Override public ObservableValue getName(BrowserFileSystemTabModel model, List entries) { @@ -143,11 +149,14 @@ public class ChownMenuProvider implements BrowserMenuBranchProvider { @Override public void execute(BrowserFileSystemTabModel model, List entries) throws Exception { var user = new SimpleStringProperty(); - var modal = ModalOverlay.of("userName", Comp.of(() -> { - var creationName = new TextField(); - creationName.textProperty().bindBidirectional(user); - return creationName; - }).prefWidth(350)); + var modal = ModalOverlay.of( + "userName", + Comp.of(() -> { + var creationName = new TextField(); + creationName.textProperty().bindBidirectional(user); + return creationName; + }) + .prefWidth(350)); modal.withDefaultButtons(() -> { if (user.getValue() == null) { return; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/ComputeDirectorySizesAction.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/ComputeDirectorySizesAction.java index 6b27d941e..23eeea34b 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/ComputeDirectorySizesAction.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/ComputeDirectorySizesAction.java @@ -5,11 +5,10 @@ import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import io.xpipe.core.store.FileKind; + import javafx.beans.value.ObservableValue; import javafx.scene.Node; -import javafx.scene.input.KeyCode; -import javafx.scene.input.KeyCodeCombination; -import javafx.scene.input.KeyCombination; + import org.kordamp.ikonli.javafx.FontIcon; import java.util.List; @@ -23,7 +22,8 @@ public class ComputeDirectorySizesAction implements BrowserMenuLeafProvider { continue; } - var size = model.getFileSystem().getDirectorySize(be.getRawFileEntry().getPath()); + var size = + model.getFileSystem().getDirectorySize(be.getRawFileEntry().getPath()); var fileEntry = be.getRawFileEntry(); fileEntry.setSize("" + size); model.getFileList().updateEntry(be, fileEntry); diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/CopyMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/CopyMenuProvider.java index 41d1c22d7..d8c66855b 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/CopyMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/CopyMenuProvider.java @@ -1,9 +1,9 @@ package io.xpipe.app.browser.menu.impl; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserClipboard; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import javafx.beans.value.ObservableValue; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/CopyPathMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/CopyPathMenuProvider.java index 0403e09c0..a1bf83503 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/CopyPathMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/CopyPathMenuProvider.java @@ -1,9 +1,9 @@ package io.xpipe.app.browser.menu.impl; -import io.xpipe.app.browser.menu.BrowserMenuBranchProvider; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuBranchProvider; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import io.xpipe.app.util.ClipboardHelper; import io.xpipe.core.store.FileKind; @@ -35,7 +35,8 @@ public class CopyPathMenuProvider implements BrowserMenuBranchProvider { } @Override - public List getBranchingActions(BrowserFileSystemTabModel model, List entries) { + public List getBranchingActions( + BrowserFileSystemTabModel model, List entries) { return List.of( new BrowserMenuLeafProvider() { @Override @@ -245,7 +246,7 @@ public class CopyPathMenuProvider implements BrowserMenuBranchProvider { } }); } - + private static String centerEllipsis(String input, int length) { if (input == null) { return ""; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/DeleteMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/DeleteMenuProvider.java index ec8d34445..2d3d6c994 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/DeleteMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/DeleteMenuProvider.java @@ -2,16 +2,18 @@ package io.xpipe.app.browser.menu.impl; import io.xpipe.app.action.AbstractAction; import io.xpipe.app.browser.action.impl.DeleteActionProvider; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import io.xpipe.core.store.FileKind; + import javafx.beans.value.ObservableValue; import javafx.scene.Node; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCodeCombination; import javafx.scene.input.KeyCombination; + import org.kordamp.ikonli.javafx.FontIcon; import java.util.List; @@ -21,10 +23,12 @@ public class DeleteMenuProvider implements BrowserMenuLeafProvider { @Override public AbstractAction createAction(BrowserFileSystemTabModel model, List entries) { var link = entries.stream() - .anyMatch(browserEntry -> - browserEntry.getRawFileEntry().getKind() == FileKind.LINK); - var files = entries.stream().map(browserEntry -> !link ? - browserEntry.getRawFileEntry().resolved().getPath() : browserEntry.getRawFileEntry().getPath()).toList(); + .anyMatch(browserEntry -> browserEntry.getRawFileEntry().getKind() == FileKind.LINK); + var files = entries.stream() + .map(browserEntry -> !link + ? browserEntry.getRawFileEntry().resolved().getPath() + : browserEntry.getRawFileEntry().getPath()) + .toList(); var builder = DeleteActionProvider.Action.builder(); builder.initFiles(model, files); return builder.build(); diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/DownloadMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/DownloadMenuProvider.java index ee1d0c463..f9af6d109 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/DownloadMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/DownloadMenuProvider.java @@ -1,9 +1,9 @@ package io.xpipe.app.browser.menu.impl; import io.xpipe.app.browser.BrowserFullSessionModel; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import javafx.beans.value.ObservableValue; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/EditFileMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/EditFileMenuProvider.java index 445fe0000..7d2cd8905 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/EditFileMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/EditFileMenuProvider.java @@ -1,9 +1,9 @@ package io.xpipe.app.browser.menu.impl; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileOpener; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import io.xpipe.app.prefs.AppPrefs; import io.xpipe.core.store.FileKind; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/FollowLinkMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/FollowLinkMenuProvider.java index 14d111a0e..0165d238f 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/FollowLinkMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/FollowLinkMenuProvider.java @@ -1,8 +1,8 @@ package io.xpipe.app.browser.menu.impl; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import io.xpipe.core.store.FileKind; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/ForwardMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/ForwardMenuProvider.java index 3d7b2ecf5..9daee133d 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/ForwardMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/ForwardMenuProvider.java @@ -1,8 +1,8 @@ package io.xpipe.app.browser.menu.impl; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import javafx.beans.value.ObservableValue; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/JarMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/JarMenuProvider.java index b51e4687b..d37bd4c40 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/JarMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/JarMenuProvider.java @@ -1,11 +1,11 @@ package io.xpipe.app.browser.menu.impl; -import io.xpipe.app.browser.menu.BrowserApplicationPathMenuProvider; -import io.xpipe.app.browser.menu.FileTypeMenuProvider; -import io.xpipe.app.browser.menu.MultiExecuteMenuProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.browser.icon.BrowserIconFileType; +import io.xpipe.app.browser.menu.BrowserApplicationPathMenuProvider; +import io.xpipe.app.browser.menu.FileTypeMenuProvider; +import io.xpipe.app.browser.menu.MultiExecuteMenuProvider; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.ShellControl; @@ -14,9 +14,8 @@ import javafx.beans.value.ObservableValue; import java.util.List; -public class JarMenuProvider extends MultiExecuteMenuProvider implements BrowserApplicationPathMenuProvider, FileTypeMenuProvider { - - +public class JarMenuProvider extends MultiExecuteMenuProvider + implements BrowserApplicationPathMenuProvider, FileTypeMenuProvider { @Override public boolean isMutation() { diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/JavapMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/JavapMenuProvider.java index ad2443b40..f0e281723 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/JavapMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/JavapMenuProvider.java @@ -1,21 +1,22 @@ package io.xpipe.app.browser.menu.impl; -import io.xpipe.app.browser.menu.BrowserApplicationPathMenuProvider; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; -import io.xpipe.app.browser.menu.FileTypeMenuProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.browser.icon.BrowserIconFileType; +import io.xpipe.app.browser.menu.BrowserApplicationPathMenuProvider; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; +import io.xpipe.app.browser.menu.FileTypeMenuProvider; import io.xpipe.app.util.FileOpener; import io.xpipe.core.process.CommandBuilder; - import io.xpipe.core.process.ShellControl; + import javafx.beans.property.SimpleStringProperty; import javafx.beans.value.ObservableValue; import java.util.List; -public class JavapMenuProvider implements FileTypeMenuProvider, BrowserApplicationPathMenuProvider, BrowserMenuLeafProvider { +public class JavapMenuProvider + implements FileTypeMenuProvider, BrowserApplicationPathMenuProvider, BrowserMenuLeafProvider { @Override public boolean isMutation() { diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/NewItemMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/NewItemMenuProvider.java index de2955146..cd746efd5 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/NewItemMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/NewItemMenuProvider.java @@ -3,11 +3,11 @@ package io.xpipe.app.browser.menu.impl; import io.xpipe.app.browser.action.impl.NewDirectoryActionProvider; import io.xpipe.app.browser.action.impl.NewFileActionProvider; import io.xpipe.app.browser.action.impl.NewLinkActionProvider; -import io.xpipe.app.browser.menu.BrowserMenuBranchProvider; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.browser.icon.BrowserIcons; +import io.xpipe.app.browser.menu.BrowserMenuBranchProvider; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.base.ModalOverlay; import io.xpipe.app.core.AppI18n; @@ -52,7 +52,8 @@ public class NewItemMenuProvider implements BrowserMenuBranchProvider { } @Override - public List getBranchingActions(BrowserFileSystemTabModel model, List entries) { + public List getBranchingActions( + BrowserFileSystemTabModel model, List entries) { return List.of( new BrowserMenuLeafProvider() { @Override @@ -141,7 +142,10 @@ public class NewItemMenuProvider implements BrowserMenuBranchProvider { .buildComp() .prefWidth(350)); modal.withDefaultButtons(() -> { - if (linkName.getValue() == null || linkName.getValue().isEmpty() || target.getValue() == null || target.getValue().isEmpty()) { + if (linkName.getValue() == null + || linkName.getValue().isEmpty() + || target.getValue() == null + || target.getValue().isEmpty()) { return; } diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenDirectoryInNewTabMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenDirectoryInNewTabMenuProvider.java index 2a5254d73..9295b65e2 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenDirectoryInNewTabMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenDirectoryInNewTabMenuProvider.java @@ -1,9 +1,9 @@ package io.xpipe.app.browser.menu.impl; import io.xpipe.app.browser.BrowserFullSessionModel; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import io.xpipe.core.store.FileKind; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenDirectoryMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenDirectoryMenuProvider.java index 8049e78fb..31c45f990 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenDirectoryMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenDirectoryMenuProvider.java @@ -6,7 +6,6 @@ import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; -import io.xpipe.core.store.FileKind; import javafx.beans.value.ObservableValue; import javafx.scene.Node; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenFileDefaultMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenFileDefaultMenuProvider.java index 48beef888..38031d0be 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenFileDefaultMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenFileDefaultMenuProvider.java @@ -1,14 +1,11 @@ package io.xpipe.app.browser.menu.impl; import io.xpipe.app.browser.action.BrowserActionProvider; -import io.xpipe.app.browser.action.impl.OpenDirectoryActionProvider; import io.xpipe.app.browser.action.impl.OpenFileDefaultActionProvider; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; -import io.xpipe.app.browser.file.BrowserFileOpener; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; -import io.xpipe.core.store.FileKind; import javafx.beans.value.ObservableValue; import javafx.scene.Node; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenFileWithMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenFileWithMenuProvider.java index 06cf3d091..3f0c72f6c 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenFileWithMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenFileWithMenuProvider.java @@ -1,12 +1,10 @@ package io.xpipe.app.browser.menu.impl; import io.xpipe.app.browser.action.BrowserActionProvider; -import io.xpipe.app.browser.action.impl.OpenDirectoryActionProvider; import io.xpipe.app.browser.action.impl.OpenFileWithActionProvider; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; -import io.xpipe.app.browser.file.BrowserFileOpener; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import io.xpipe.core.process.OsType; import io.xpipe.core.store.FileKind; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenNativeFileDetailsMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenNativeFileDetailsMenuProvider.java index fa1362887..4e2b3887a 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenNativeFileDetailsMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenNativeFileDetailsMenuProvider.java @@ -1,11 +1,10 @@ package io.xpipe.app.browser.menu.impl; import io.xpipe.app.browser.action.BrowserActionProvider; -import io.xpipe.app.browser.action.impl.OpenFileDefaultActionProvider; import io.xpipe.app.browser.action.impl.OpenFileNativeDetailsActionProvider; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import javafx.beans.value.ObservableValue; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenTerminalMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenTerminalMenuProvider.java index 66d67230c..81f3fd097 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenTerminalMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenTerminalMenuProvider.java @@ -2,9 +2,9 @@ package io.xpipe.app.browser.menu.impl; import io.xpipe.app.browser.action.BrowserActionProvider; import io.xpipe.app.browser.action.impl.OpenTerminalActionProvider; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import io.xpipe.app.prefs.AppPrefs; import io.xpipe.core.store.FileKind; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/PasteMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/PasteMenuProvider.java index 0a670ce94..678d478f2 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/PasteMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/PasteMenuProvider.java @@ -1,10 +1,10 @@ package io.xpipe.app.browser.menu.impl; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserClipboard; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.browser.file.BrowserFileTransferMode; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import io.xpipe.core.store.FileKind; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/RefreshDirectoryMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/RefreshDirectoryMenuProvider.java index faf875e3a..7a00a8033 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/RefreshDirectoryMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/RefreshDirectoryMenuProvider.java @@ -1,8 +1,8 @@ package io.xpipe.app.browser.menu.impl; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import javafx.beans.value.ObservableValue; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/RenameMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/RenameMenuProvider.java index 853e19f17..a84c1e3b0 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/RenameMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/RenameMenuProvider.java @@ -1,8 +1,8 @@ package io.xpipe.app.browser.menu.impl; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import io.xpipe.core.store.FileKind; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/RunFileMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/RunFileMenuProvider.java index 587623b70..467bbc356 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/RunFileMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/RunFileMenuProvider.java @@ -1,8 +1,8 @@ package io.xpipe.app.browser.menu.impl; -import io.xpipe.app.browser.menu.MultiExecuteMenuProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.MultiExecuteMenuProvider; import io.xpipe.app.core.AppI18n; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.OsType; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/BaseUntarMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/BaseUntarMenuProvider.java index 8d408e5ac..3c2093853 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/BaseUntarMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/BaseUntarMenuProvider.java @@ -1,11 +1,11 @@ package io.xpipe.app.browser.menu.impl.compress; -import io.xpipe.app.browser.menu.BrowserApplicationPathMenuProvider; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.browser.icon.BrowserIconFileType; import io.xpipe.app.browser.icon.BrowserIcons; +import io.xpipe.app.browser.menu.BrowserApplicationPathMenuProvider; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.ShellControl; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/BaseUnzipUnixMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/BaseUnzipUnixMenuProvider.java index 172c580be..d07c66b93 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/BaseUnzipUnixMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/BaseUnzipUnixMenuProvider.java @@ -1,11 +1,11 @@ package io.xpipe.app.browser.menu.impl.compress; -import io.xpipe.app.browser.menu.BrowserApplicationPathMenuProvider; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.browser.icon.BrowserIconFileType; import io.xpipe.app.browser.icon.BrowserIcons; +import io.xpipe.app.browser.menu.BrowserApplicationPathMenuProvider; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.OsType; @@ -43,11 +43,15 @@ public abstract class BaseUnzipUnixMenuProvider implements BrowserMenuLeafProvid public void execute(BrowserFileSystemTabModel model, List entries) throws Exception { ShellControl sc = model.getFileSystem().getShell().orElseThrow(); for (BrowserEntry entry : entries) { - var command = CommandBuilder.of().add("unzip", "-o").addFile(entry.getRawFileEntry().getPath()); + var command = CommandBuilder.of() + .add("unzip", "-o") + .addFile(entry.getRawFileEntry().getPath()); if (toDirectory) { command.add("-d").addFile(getTarget(entry.getRawFileEntry().getPath())); } - try (var cc = sc.command(command).withWorkingDirectory(model.getCurrentDirectory().getPath()).start()) { + try (var cc = sc.command(command) + .withWorkingDirectory(model.getCurrentDirectory().getPath()) + .start()) { cc.discardOrThrow(); } } diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/BaseUnzipWindowsActionProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/BaseUnzipWindowsActionProvider.java index edb822f5e..bcefc26f9 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/BaseUnzipWindowsActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/BaseUnzipWindowsActionProvider.java @@ -1,10 +1,10 @@ package io.xpipe.app.browser.menu.impl.compress; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.browser.icon.BrowserIconFileType; import io.xpipe.app.browser.icon.BrowserIcons; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.OsType; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/CompressMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/CompressMenuProvider.java index 6e73a19bd..01e22b5f4 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/CompressMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/CompressMenuProvider.java @@ -1,9 +1,9 @@ package io.xpipe.app.browser.menu.impl.compress; -import io.xpipe.app.browser.menu.BrowserMenuBranchProvider; -import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.browser.file.BrowserFileSystemTabModel; +import io.xpipe.app.browser.menu.BrowserMenuBranchProvider; +import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.base.ModalOverlay; import io.xpipe.app.core.AppI18n; @@ -95,7 +95,8 @@ public abstract class CompressMenuProvider implements BrowserMenuBranchProvider } @Override - public List getBranchingActions(BrowserFileSystemTabModel model, List entries) { + public List getBranchingActions( + BrowserFileSystemTabModel model, List entries) { return List.of( new Windows7ZActionProvider(), new WindowsZipActionProvider(), diff --git a/app/src/main/java/io/xpipe/app/comp/base/AppLayoutComp.java b/app/src/main/java/io/xpipe/app/comp/base/AppLayoutComp.java index 0e09da9aa..e4340270d 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/AppLayoutComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/AppLayoutComp.java @@ -2,8 +2,8 @@ package io.xpipe.app.comp.base; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.CompStructure; -import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.core.AppLayoutModel; +import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.util.PlatformThread; diff --git a/app/src/main/java/io/xpipe/app/comp/base/AppMainWindowContentComp.java b/app/src/main/java/io/xpipe/app/comp/base/AppMainWindowContentComp.java index 25aea5050..a8c4b0c56 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/AppMainWindowContentComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/AppMainWindowContentComp.java @@ -1,15 +1,13 @@ package io.xpipe.app.comp.base; -import io.xpipe.app.action.AbstractAction; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.SimpleComp; import io.xpipe.app.core.*; +import io.xpipe.app.core.AppImages; +import io.xpipe.app.core.AppResources; import io.xpipe.app.core.window.AppDialog; import io.xpipe.app.core.window.AppMainWindow; import io.xpipe.app.issue.TrackEvent; -import io.xpipe.app.core.AppImages; -import io.xpipe.app.core.AppResources; -import io.xpipe.app.util.LabelGraphic; import io.xpipe.app.util.PlatformThread; import io.xpipe.core.process.OsType; @@ -24,9 +22,6 @@ import javafx.stage.Stage; import javafx.stage.Window; import atlantafx.base.util.Animations; -import javafx.util.Duration; - -import java.util.List; public class AppMainWindowContentComp extends SimpleComp { @@ -116,8 +111,6 @@ public class AppMainWindowContentComp extends SimpleComp { return pane; }); - - var modal = new ModalOverlayStackComp(bg, overlay); return modal.createRegion(); } diff --git a/app/src/main/java/io/xpipe/app/comp/base/ChoicePaneComp.java b/app/src/main/java/io/xpipe/app/comp/base/ChoicePaneComp.java index 70a89e865..1b191945e 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/ChoicePaneComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/ChoicePaneComp.java @@ -3,7 +3,6 @@ package io.xpipe.app.comp.base; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.CompStructure; import io.xpipe.app.comp.SimpleCompStructure; -import io.xpipe.app.core.AppI18n; import io.xpipe.app.util.PlatformThread; import javafx.beans.property.Property; diff --git a/app/src/main/java/io/xpipe/app/comp/base/ContextualFileReferenceChoiceComp.java b/app/src/main/java/io/xpipe/app/comp/base/ContextualFileReferenceChoiceComp.java index 695868353..470eeb08e 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/ContextualFileReferenceChoiceComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/ContextualFileReferenceChoiceComp.java @@ -6,9 +6,7 @@ import io.xpipe.app.comp.CompStructure; import io.xpipe.app.comp.SimpleCompStructure; import io.xpipe.app.core.AppLayoutModel; import io.xpipe.app.core.window.AppDialog; -import io.xpipe.app.core.window.AppWindowHelper; import io.xpipe.app.ext.ProcessControlProvider; -import io.xpipe.app.ext.ShellStore; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.storage.ContextualFileReference; @@ -74,7 +72,9 @@ public class ContextualFileReferenceChoiceComp extends Comp> var replacement = ProcessControlProvider.get().replace(fileSystem.getValue()); BrowserFileChooserSessionComp.openSingleFile( () -> replacement, - () -> filePath.getValue() != null ? filePath.getValue().getParent() : null, + () -> filePath.getValue() != null + ? filePath.getValue().getParent() + : null, fileStore -> { if (fileStore != null) { filePath.setValue(fileStore.getPath()); @@ -105,7 +105,9 @@ public class ContextualFileReferenceChoiceComp extends Comp> try { var source = currentPath.asLocalPath(); if (!Files.exists(source)) { - ErrorEvent.fromMessage("Unable to resolve local file path " + source).expected().handle(); + ErrorEvent.fromMessage("Unable to resolve local file path " + source) + .expected() + .handle(); return; } @@ -116,15 +118,13 @@ public class ContextualFileReferenceChoiceComp extends Comp> } var handler = DataStorageSyncHandler.getInstance(); - var syncedTarget = handler.addDataFile( - source, target, sync.getPerUser().test(source)); + var syncedTarget = + handler.addDataFile(source, target, sync.getPerUser().test(source)); var pubSource = Path.of(source + ".pub"); if (Files.exists(pubSource)) { var pubTarget = sync.getTargetLocation().apply(pubSource); - handler - .addDataFile( - pubSource, pubTarget, sync.getPerUser().test(pubSource)); + handler.addDataFile(pubSource, pubTarget, sync.getPerUser().test(pubSource)); } Platform.runLater(() -> { diff --git a/app/src/main/java/io/xpipe/app/comp/base/ListBoxViewComp.java b/app/src/main/java/io/xpipe/app/comp/base/ListBoxViewComp.java index 3ad879204..8fd5a89fc 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/ListBoxViewComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/ListBoxViewComp.java @@ -4,8 +4,8 @@ import io.xpipe.app.browser.BrowserFullSessionModel; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.CompStructure; import io.xpipe.app.comp.SimpleCompStructure; -import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.core.AppLayoutModel; +import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.util.DerivedObservableList; import javafx.animation.AnimationTimer; diff --git a/app/src/main/java/io/xpipe/app/comp/base/LoadingIconComp.java b/app/src/main/java/io/xpipe/app/comp/base/LoadingIconComp.java index d287fe56d..d8704f6b3 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/LoadingIconComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/LoadingIconComp.java @@ -1,28 +1,16 @@ package io.xpipe.app.comp.base; -import atlantafx.base.controls.RingProgressIndicator; -import io.xpipe.app.comp.Comp; -import io.xpipe.app.comp.CompStructure; import io.xpipe.app.comp.SimpleComp; -import io.xpipe.app.comp.SimpleCompStructure; -import io.xpipe.app.core.AppFontSizes; -import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.util.PlatformThread; -import io.xpipe.app.util.ThreadHelper; + import javafx.animation.AnimationTimer; -import javafx.application.Platform; -import javafx.beans.binding.Bindings; -import javafx.beans.property.SimpleDoubleProperty; -import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.geometry.Pos; import javafx.scene.Node; import javafx.scene.control.Label; import javafx.scene.layout.Region; -import javafx.scene.layout.StackPane; import java.util.function.Consumer; -import java.util.function.Function; public class LoadingIconComp extends SimpleComp { @@ -31,7 +19,8 @@ public class LoadingIconComp extends SimpleComp { private final ObservableValue show; private final Consumer fontSize; - public LoadingIconComp(ObservableValue show, Consumer fontSize) {this.show = show; + public LoadingIconComp(ObservableValue show, Consumer fontSize) { + this.show = show; this.fontSize = fontSize; } diff --git a/app/src/main/java/io/xpipe/app/comp/base/LoadingOverlayComp.java b/app/src/main/java/io/xpipe/app/comp/base/LoadingOverlayComp.java index 0b07adb4e..6f50ad95d 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/LoadingOverlayComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/LoadingOverlayComp.java @@ -8,7 +8,6 @@ import io.xpipe.app.util.ThreadHelper; import javafx.application.Platform; import javafx.beans.binding.Bindings; -import javafx.beans.property.SimpleDoubleProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.layout.StackPane; diff --git a/app/src/main/java/io/xpipe/app/comp/base/MarkdownComp.java b/app/src/main/java/io/xpipe/app/comp/base/MarkdownComp.java index 3ea92664b..93975d13b 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/MarkdownComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/MarkdownComp.java @@ -4,15 +4,15 @@ import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.CompStructure; import io.xpipe.app.comp.SimpleCompStructure; import io.xpipe.app.core.AppProperties; +import io.xpipe.app.core.AppResources; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.prefs.AppPrefs; -import io.xpipe.app.core.AppResources; import io.xpipe.app.util.Hyperlinks; import io.xpipe.app.util.MarkdownHelper; import io.xpipe.app.util.PlatformThread; import io.xpipe.app.util.ShellTemp; - import io.xpipe.core.process.OsType; + import javafx.application.Platform; import javafx.beans.property.SimpleStringProperty; import javafx.beans.value.ObservableValue; @@ -130,7 +130,8 @@ public class MarkdownComp extends Comp> { engine.getLoadWorker() .stateProperty() .addListener((observable, oldValue, newValue) -> Platform.runLater(() -> { - String toBeopen = engine.getLoadWorker().getMessage().strip().replace("Loading ", ""); + String toBeopen = + engine.getLoadWorker().getMessage().strip().replace("Loading ", ""); if (toBeopen.contains("http://") || toBeopen.contains("https://") || toBeopen.contains("mailto:")) { engine.getLoadWorker().cancel(); Hyperlinks.open(toBeopen); diff --git a/app/src/main/java/io/xpipe/app/comp/base/OptionsComp.java b/app/src/main/java/io/xpipe/app/comp/base/OptionsComp.java index 4a580c941..6ed00bfee 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/OptionsComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/OptionsComp.java @@ -8,7 +8,6 @@ import io.xpipe.app.util.Check; import io.xpipe.app.util.Hyperlinks; import io.xpipe.app.util.PlatformThread; -import io.xpipe.app.util.Validator; import javafx.beans.Observable; import javafx.beans.binding.Bindings; import javafx.beans.property.SimpleStringProperty; @@ -224,7 +223,9 @@ public class OptionsComp extends Comp> { return; } - var failed = checks.stream().filter(check -> check.getValidationResult().getMessages().size() > 0).findFirst(); + var failed = checks.stream() + .filter(check -> check.getValidationResult().getMessages().size() > 0) + .findFirst(); if (failed.isPresent()) { var targets = failed.get().getTargets(); if (targets.size() > 0) { diff --git a/app/src/main/java/io/xpipe/app/comp/base/PrettyImageComp.java b/app/src/main/java/io/xpipe/app/comp/base/PrettyImageComp.java index 82e827187..92ff338af 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/PrettyImageComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/PrettyImageComp.java @@ -1,9 +1,9 @@ package io.xpipe.app.comp.base; import io.xpipe.app.comp.SimpleComp; +import io.xpipe.app.core.AppImages; import io.xpipe.app.issue.TrackEvent; import io.xpipe.app.prefs.AppPrefs; -import io.xpipe.app.core.AppImages; import io.xpipe.app.util.PlatformThread; import io.xpipe.core.store.FileNames; diff --git a/app/src/main/java/io/xpipe/app/comp/base/PrettyImageHelper.java b/app/src/main/java/io/xpipe/app/comp/base/PrettyImageHelper.java index a1cd5ada3..30c1b1631 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/PrettyImageHelper.java +++ b/app/src/main/java/io/xpipe/app/comp/base/PrettyImageHelper.java @@ -1,8 +1,8 @@ package io.xpipe.app.comp.base; import io.xpipe.app.comp.Comp; -import io.xpipe.app.core.window.AppMainWindow; import io.xpipe.app.core.AppImages; +import io.xpipe.app.core.window.AppMainWindow; import io.xpipe.app.util.BindingsHelper; import io.xpipe.core.store.FileNames; diff --git a/app/src/main/java/io/xpipe/app/comp/base/SideMenuBarComp.java b/app/src/main/java/io/xpipe/app/comp/base/SideMenuBarComp.java index 121743d5b..2e0ec81bd 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/SideMenuBarComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/SideMenuBarComp.java @@ -3,10 +3,10 @@ package io.xpipe.app.comp.base; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.CompStructure; import io.xpipe.app.comp.SimpleCompStructure; -import io.xpipe.app.update.AppDistributionType; import io.xpipe.app.core.AppFontSizes; import io.xpipe.app.core.AppLayoutModel; import io.xpipe.app.core.AppProperties; +import io.xpipe.app.update.AppDistributionType; import io.xpipe.app.update.UpdateAvailableDialog; import io.xpipe.app.util.Hyperlinks; import io.xpipe.app.util.PlatformThread; @@ -23,8 +23,8 @@ import javafx.scene.control.Button; import javafx.scene.control.Tooltip; import javafx.scene.layout.*; import javafx.scene.paint.Color; - import javafx.util.Duration; + import lombok.AllArgsConstructor; import java.util.List; diff --git a/app/src/main/java/io/xpipe/app/core/AppExtensionManager.java b/app/src/main/java/io/xpipe/app/core/AppExtensionManager.java index df5040c0a..e2591cfae 100644 --- a/app/src/main/java/io/xpipe/app/core/AppExtensionManager.java +++ b/app/src/main/java/io/xpipe/app/core/AppExtensionManager.java @@ -109,8 +109,7 @@ public class AppExtensionManager { public Set getContentModules() { return Stream.concat( - Stream.of(ModuleLayer.boot().findModule("io.xpipe.app").orElseThrow()), - loadedModules.stream()) + Stream.of(ModuleLayer.boot().findModule("io.xpipe.app").orElseThrow()), loadedModules.stream()) .collect(Collectors.toSet()); } @@ -134,11 +133,11 @@ public class AppExtensionManager { ModuleLayer.boot().findModule("java.base").orElseThrow(), "java.io", extendedLayer.findModule("io.xpipe.ext.proc").orElseThrow()); - ModuleAccess.exportAndOpen(ModuleLayer.boot().findModule("org.apache.commons.io").orElseThrow(), + ModuleAccess.exportAndOpen( + ModuleLayer.boot().findModule("org.apache.commons.io").orElseThrow(), "org.apache.commons.io.input", extendedLayer.findModule("io.xpipe.ext.proc").orElseThrow()); } - } private Optional findAndParseExtension(String name, ModuleLayer parent) { diff --git a/app/src/main/java/io/xpipe/app/core/AppLayoutModel.java b/app/src/main/java/io/xpipe/app/core/AppLayoutModel.java index 9e011928d..925e4aaf5 100644 --- a/app/src/main/java/io/xpipe/app/core/AppLayoutModel.java +++ b/app/src/main/java/io/xpipe/app/core/AppLayoutModel.java @@ -58,9 +58,11 @@ public class AppLayoutModel { queueEntries.add(entry); if (duration != null) { - GlobalTimer.delay(() -> { - queueEntries.remove(entry); - }, duration); + GlobalTimer.delay( + () -> { + queueEntries.remove(entry); + }, + duration); } } diff --git a/app/src/main/java/io/xpipe/app/core/AppOpenArguments.java b/app/src/main/java/io/xpipe/app/core/AppOpenArguments.java index 6457b6192..7260132d8 100644 --- a/app/src/main/java/io/xpipe/app/core/AppOpenArguments.java +++ b/app/src/main/java/io/xpipe/app/core/AppOpenArguments.java @@ -1,10 +1,10 @@ package io.xpipe.app.core; import io.xpipe.app.action.AbstractAction; +import io.xpipe.app.action.ActionProvider; import io.xpipe.app.action.LauncherActionProvider; import io.xpipe.app.browser.action.impl.OpenDirectoryActionProvider; import io.xpipe.app.core.mode.OperationMode; -import io.xpipe.app.action.ActionProvider; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.issue.TrackEvent; import io.xpipe.app.storage.DataStorage; @@ -103,12 +103,14 @@ public class AppOpenArguments { } if (Files.exists(path)) { - return List.of(OpenDirectoryActionProvider.Action.builder().ref(DataStorage.get().local().ref()).files(List.of(FilePath.of(path))).build()); + return List.of(OpenDirectoryActionProvider.Action.builder() + .ref(DataStorage.get().local().ref()) + .files(List.of(FilePath.of(path))) + .build()); } } catch (InvalidPathException ignored) { } return List.of(); } - } diff --git a/app/src/main/java/io/xpipe/app/core/AppWindowsShutdown.java b/app/src/main/java/io/xpipe/app/core/AppWindowsShutdown.java index 0ca226a82..97acc9ea0 100644 --- a/app/src/main/java/io/xpipe/app/core/AppWindowsShutdown.java +++ b/app/src/main/java/io/xpipe/app/core/AppWindowsShutdown.java @@ -68,7 +68,8 @@ public class AppWindowsShutdown { if (hookProcStruct.message.longValue() == WM_QUERYENDSESSION) { TrackEvent.info("Received window shutdown callback WM_QUERYENDSESSION"); - // We don't always receive an exit signal with a queryendsession, e.g. in case an .msi wants to shut it down + // We don't always receive an exit signal with a queryendsession, e.g. in case an .msi wants to shut + // it down // Guarantee that the shutdown is run regardless ThreadHelper.runAsync(() -> { OperationMode.externalShutdown(); diff --git a/app/src/main/java/io/xpipe/app/core/check/AppShellCheck.java b/app/src/main/java/io/xpipe/app/core/check/AppShellCheck.java index fca34fd68..c90f6bbd9 100644 --- a/app/src/main/java/io/xpipe/app/core/check/AppShellCheck.java +++ b/app/src/main/java/io/xpipe/app/core/check/AppShellCheck.java @@ -1,90 +1,93 @@ package io.xpipe.app.core.check; import io.xpipe.core.process.OsType; -import io.xpipe.core.process.ShellDialect; -import io.xpipe.core.process.ShellDialects; -import org.apache.commons.io.FileUtils; public class AppShellCheck { public static void check() throws Exception { var checker = switch (OsType.getLocal()) { - case OsType.Linux linux -> new AppShellChecker() { + case OsType.Linux linux -> + new AppShellChecker() { - @Override - protected String listReasons() { - return """ + @Override + protected String listReasons() { + return """ - There is a permissions issue - The system shell is restricted or blocked - Your PATH environment variable is corrupt / incomplete. You can check this by manually trying to run some commands in a terminal - Some elementary command-line tools are not available or not working correctly """; - } - - @Override - protected boolean fallBackInstantly() { - return false; - } - }; - case OsType.MacOs macOs -> new AppShellChecker() { - - @Override - protected boolean shouldAttemptFallbackForProcessStartFail() { - // We don't want to fall back on macOS as occasional zsh spawn issues would cause many users - // to use sh - return false; - } - - @Override - protected String listReasons() { - return """ - - There is a permissions issue - - The system shell is restricted or blocked - - Your PATH environment variable is corrupt / incomplete. You can check this by manually trying to run some commands in a terminal - - Some elementary command-line tools are not available or not working correctly - """; - } - - @Override - protected boolean fallBackInstantly() { - return false; - } - }; - case OsType.Windows windows -> new AppShellChecker() { - - @Override - protected String modifyOutput(String output) { - if (output.contains("is not recognized as an internal or external command") - && output.contains("exec-")) { - return "Unable to create temporary script files. XPipe needs to be able to create shell script files that can be launched by a terminal emulator to make terminal launches work."; } - return super.modifyOutput(output); - } + @Override + protected boolean fallBackInstantly() { + return false; + } + }; + case OsType.MacOs macOs -> + new AppShellChecker() { - @Override - protected String listReasons() { - return """ + @Override + protected boolean shouldAttemptFallbackForProcessStartFail() { + // We don't want to fall back on macOS as occasional zsh spawn issues would cause many + // users + // to use sh + return false; + } + + @Override + protected String listReasons() { + return """ + - There is a permissions issue + - The system shell is restricted or blocked + - Your PATH environment variable is corrupt / incomplete. You can check this by manually trying to run some commands in a terminal + - Some elementary command-line tools are not available or not working correctly + """; + } + + @Override + protected boolean fallBackInstantly() { + return false; + } + }; + case OsType.Windows windows -> + new AppShellChecker() { + + @Override + protected String modifyOutput(String output) { + if (output.contains("is not recognized as an internal or external command") + && output.contains("exec-")) { + return "Unable to create temporary script files. XPipe needs to be able to create shell script files that can be launched by a terminal emulator to make terminal launches work."; + } + + return super.modifyOutput(output); + } + + @Override + protected String listReasons() { + return """ - An AntiVirus program might block required programs and commands - The system shell is restricted or blocked - Your PATH environment variable is corrupt / incomplete. You can check this by manually trying to run some commands in a terminal - Some elementary command-line tools are not available or not working correctly - Applocker might block script execution """; - } + } - @Override - protected boolean fallBackInstantly() { - // In theory, this prevents cmd issues with unsupported characters - // However, due to workarounds, this should still work - // Falling back to powershell would make it slower and introduce other potential issues -// var complex = ShellDialects.CMD.requiresScript(System.getenv("USERPROFILE")) || -// ShellDialects.CMD.requiresScript(System.getenv("TEMP")); -// return complex; - return false; - } - }; + @Override + protected boolean fallBackInstantly() { + // In theory, this prevents cmd issues with unsupported characters + // However, due to workarounds, this should still work + // Falling back to powershell would make it slower and introduce other potential issues + // var complex = + // ShellDialects.CMD.requiresScript(System.getenv("USERPROFILE")) || + // + // ShellDialects.CMD.requiresScript(System.getenv("TEMP")); + // return complex; + return false; + } + }; }; checker.check(); } diff --git a/app/src/main/java/io/xpipe/app/core/mode/BaseMode.java b/app/src/main/java/io/xpipe/app/core/mode/BaseMode.java index a6609599b..0a2bdc776 100644 --- a/app/src/main/java/io/xpipe/app/core/mode/BaseMode.java +++ b/app/src/main/java/io/xpipe/app/core/mode/BaseMode.java @@ -1,23 +1,23 @@ package io.xpipe.app.core.mode; import io.xpipe.app.action.AbstractAction; +import io.xpipe.app.action.ActionProvider; import io.xpipe.app.beacon.AppBeaconServer; import io.xpipe.app.beacon.BlobManager; import io.xpipe.app.browser.BrowserFullSessionModel; import io.xpipe.app.browser.file.BrowserLocalFileSystem; import io.xpipe.app.browser.icon.BrowserIconManager; -import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.core.*; import io.xpipe.app.core.check.*; import io.xpipe.app.core.window.AppDialog; import io.xpipe.app.core.window.AppMainWindow; -import io.xpipe.app.action.ActionProvider; import io.xpipe.app.ext.DataStoreProviders; import io.xpipe.app.ext.ProcessControlProvider; +import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.icon.SystemIconManager; import io.xpipe.app.issue.TrackEvent; -import io.xpipe.app.pwman.KeePassXcPasswordManager; import io.xpipe.app.prefs.AppPrefs; +import io.xpipe.app.pwman.KeePassXcPasswordManager; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStorageSyncHandler; import io.xpipe.app.terminal.TerminalLauncherManager; diff --git a/app/src/main/java/io/xpipe/app/core/mode/GuiMode.java b/app/src/main/java/io/xpipe/app/core/mode/GuiMode.java index 90fd8db47..1a68567bd 100644 --- a/app/src/main/java/io/xpipe/app/core/mode/GuiMode.java +++ b/app/src/main/java/io/xpipe/app/core/mode/GuiMode.java @@ -3,8 +3,8 @@ package io.xpipe.app.core.mode; import io.xpipe.app.core.window.AppMainWindow; import io.xpipe.app.issue.TrackEvent; import io.xpipe.app.util.PlatformThread; - import io.xpipe.core.process.OsType; + import javafx.application.Platform; import javafx.stage.Stage; diff --git a/app/src/main/java/io/xpipe/app/core/window/AppMainWindow.java b/app/src/main/java/io/xpipe/app/core/window/AppMainWindow.java index 9e87174e1..18c24149b 100644 --- a/app/src/main/java/io/xpipe/app/core/window/AppMainWindow.java +++ b/app/src/main/java/io/xpipe/app/core/window/AppMainWindow.java @@ -3,12 +3,12 @@ package io.xpipe.app.core.window; import io.xpipe.app.comp.base.AppLayoutComp; import io.xpipe.app.comp.base.AppMainWindowContentComp; import io.xpipe.app.core.*; +import io.xpipe.app.core.AppImages; import io.xpipe.app.core.mode.OperationMode; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.issue.TrackEvent; import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.prefs.CloseBehaviourDialog; -import io.xpipe.app.core.AppImages; import io.xpipe.app.update.AppDistributionType; import io.xpipe.app.util.LicenseProvider; import io.xpipe.app.util.PlatformThread; @@ -168,7 +168,8 @@ public class AppMainWindow { } public void focus() { - if (AppPrefs.get() != null && !AppPrefs.get().focusWindowOnNotifications().get()) { + if (AppPrefs.get() != null + && !AppPrefs.get().focusWindowOnNotifications().get()) { return; } diff --git a/app/src/main/java/io/xpipe/app/core/window/AppWindowHelper.java b/app/src/main/java/io/xpipe/app/core/window/AppWindowHelper.java index 54fc493ed..ea854de45 100644 --- a/app/src/main/java/io/xpipe/app/core/window/AppWindowHelper.java +++ b/app/src/main/java/io/xpipe/app/core/window/AppWindowHelper.java @@ -1,9 +1,9 @@ package io.xpipe.app.core.window; import io.xpipe.app.core.*; -import io.xpipe.app.issue.TrackEvent; import io.xpipe.app.core.AppImages; import io.xpipe.app.core.AppResources; +import io.xpipe.app.issue.TrackEvent; import io.xpipe.app.util.InputHelper; import io.xpipe.app.util.PlatformInit; import io.xpipe.core.process.OsType; diff --git a/app/src/main/java/io/xpipe/app/ext/ConnectionFileSystem.java b/app/src/main/java/io/xpipe/app/ext/ConnectionFileSystem.java index 5dfca0ffe..007e45d93 100644 --- a/app/src/main/java/io/xpipe/app/ext/ConnectionFileSystem.java +++ b/app/src/main/java/io/xpipe/app/ext/ConnectionFileSystem.java @@ -4,7 +4,6 @@ import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.util.DocumentationLink; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.ShellControl; -import io.xpipe.core.process.ShellDialect; import io.xpipe.core.process.ShellDialects; import io.xpipe.core.store.FileEntry; import io.xpipe.core.store.FilePath; @@ -33,14 +32,22 @@ public class ConnectionFileSystem implements FileSystem { @Override public FileSystem createTransferOptimizedFileSystem() throws Exception { if (shellControl.getShellDialect() == ShellDialects.CMD) { - var pwsh = shellControl.view().findProgram(ShellDialects.POWERSHELL_CORE.getExecutableName()).isPresent(); + var pwsh = shellControl + .view() + .findProgram(ShellDialects.POWERSHELL_CORE.getExecutableName()) + .isPresent(); if (pwsh) { - return new ConnectionFileSystem(shellControl.subShell(ShellDialects.POWERSHELL_CORE).start()); + return new ConnectionFileSystem( + shellControl.subShell(ShellDialects.POWERSHELL_CORE).start()); } - var powershell = shellControl.view().findProgram(ShellDialects.POWERSHELL.getExecutableName()).isPresent(); + var powershell = shellControl + .view() + .findProgram(ShellDialects.POWERSHELL.getExecutableName()) + .isPresent(); if (powershell) { - return new ConnectionFileSystem(shellControl.subShell(ShellDialects.POWERSHELL).start()); + return new ConnectionFileSystem( + shellControl.subShell(ShellDialects.POWERSHELL).start()); } } @@ -57,9 +64,7 @@ public class ConnectionFileSystem implements FileSystem { @Override public long getDirectorySize(FilePath file) throws Exception { - return shellControl - .getShellDialect() - .queryDirectorySize(shellControl, file.toString()); + return shellControl.getShellDialect().queryDirectorySize(shellControl, file.toString()); } @Override 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 b4beff14d..21e0c07f0 100644 --- a/app/src/main/java/io/xpipe/app/ext/DataStoreProvider.java +++ b/app/src/main/java/io/xpipe/app/ext/DataStoreProvider.java @@ -3,17 +3,17 @@ package io.xpipe.app.ext; import io.xpipe.app.action.ActionProvider; import io.xpipe.app.browser.BrowserFullSessionModel; import io.xpipe.app.comp.Comp; +import io.xpipe.app.core.AppI18n; +import io.xpipe.app.core.AppImages; import io.xpipe.app.hub.comp.StoreEntryComp; import io.xpipe.app.hub.comp.StoreEntryWrapper; import io.xpipe.app.hub.comp.StoreSection; -import io.xpipe.app.core.AppI18n; -import io.xpipe.app.core.AppImages; import io.xpipe.app.storage.DataStoreCategory; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.util.DocumentationLink; import io.xpipe.core.store.DataStore; - import io.xpipe.core.util.FailableRunnable; + import javafx.beans.property.BooleanProperty; import javafx.beans.property.Property; import javafx.beans.property.SimpleBooleanProperty; diff --git a/app/src/main/java/io/xpipe/app/ext/PrefsHandler.java b/app/src/main/java/io/xpipe/app/ext/PrefsHandler.java index 7b53a63d9..272103e26 100644 --- a/app/src/main/java/io/xpipe/app/ext/PrefsHandler.java +++ b/app/src/main/java/io/xpipe/app/ext/PrefsHandler.java @@ -1,8 +1,7 @@ package io.xpipe.app.ext; -import io.xpipe.app.comp.Comp; - import io.xpipe.app.util.OptionsBuilder; + import javafx.beans.property.Property; import com.fasterxml.jackson.databind.JavaType; diff --git a/app/src/main/java/io/xpipe/app/ext/PrefsValue.java b/app/src/main/java/io/xpipe/app/ext/PrefsValue.java index 3c3cb0e28..4fa55c340 100644 --- a/app/src/main/java/io/xpipe/app/ext/PrefsValue.java +++ b/app/src/main/java/io/xpipe/app/ext/PrefsValue.java @@ -1,13 +1,5 @@ package io.xpipe.app.ext; -import io.xpipe.app.core.AppI18n; -import io.xpipe.app.util.Translatable; -import javafx.beans.value.ObservableValue; -import lombok.SneakyThrows; - -import java.util.Arrays; -import java.util.List; - public interface PrefsValue { default boolean isAvailable() { diff --git a/app/src/main/java/io/xpipe/app/ext/ProcessControlProvider.java b/app/src/main/java/io/xpipe/app/ext/ProcessControlProvider.java index 0f72b951c..d3b455568 100644 --- a/app/src/main/java/io/xpipe/app/ext/ProcessControlProvider.java +++ b/app/src/main/java/io/xpipe/app/ext/ProcessControlProvider.java @@ -1,6 +1,5 @@ package io.xpipe.app.ext; -import io.xpipe.app.browser.BrowserAbstractSessionModel; import io.xpipe.app.browser.BrowserFullSessionModel; import io.xpipe.app.browser.BrowserStoreSessionTab; import io.xpipe.app.storage.DataStoreEntryRef; @@ -20,7 +19,9 @@ public abstract class ProcessControlProvider { .findFirst() .orElseThrow(); } - public abstract BrowserStoreSessionTab createVncSession(BrowserFullSessionModel model, DataStoreEntryRef ref); + + public abstract BrowserStoreSessionTab createVncSession( + BrowserFullSessionModel model, DataStoreEntryRef ref); public static ProcessControlProvider get() { return INSTANCE; diff --git a/app/src/main/java/io/xpipe/app/ext/ShellSession.java b/app/src/main/java/io/xpipe/app/ext/ShellSession.java index 986be47ab..d7663a720 100644 --- a/app/src/main/java/io/xpipe/app/ext/ShellSession.java +++ b/app/src/main/java/io/xpipe/app/ext/ShellSession.java @@ -72,6 +72,9 @@ public class ShellSession extends Session { @Override public boolean checkAlive() throws Exception { // Don't print it constantly - return shellControl.command(CommandBuilder.of().add("echo", "xpipetest")).sensitive().executeAndCheck(); + return shellControl + .command(CommandBuilder.of().add("echo", "xpipetest")) + .sensitive() + .executeAndCheck(); } } diff --git a/app/src/main/java/io/xpipe/app/ext/WrapperFileSystem.java b/app/src/main/java/io/xpipe/app/ext/WrapperFileSystem.java index 2d447801c..42ccf194b 100644 --- a/app/src/main/java/io/xpipe/app/ext/WrapperFileSystem.java +++ b/app/src/main/java/io/xpipe/app/ext/WrapperFileSystem.java @@ -1,20 +1,15 @@ package io.xpipe.app.ext; -import com.fasterxml.jackson.annotation.JsonIgnore; -import io.xpipe.app.issue.ErrorEvent; -import io.xpipe.app.util.DocumentationLink; -import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.ShellControl; -import io.xpipe.core.process.ShellDialects; import io.xpipe.core.store.FileEntry; import io.xpipe.core.store.FilePath; import io.xpipe.core.store.FileSystem; + import lombok.Getter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.time.Duration; import java.util.List; import java.util.Optional; import java.util.function.Supplier; diff --git a/app/src/main/java/io/xpipe/app/hub/action/BatchStoreAction.java b/app/src/main/java/io/xpipe/app/hub/action/BatchStoreAction.java index c225fc82d..9dd065cea 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/BatchStoreAction.java +++ b/app/src/main/java/io/xpipe/app/hub/action/BatchStoreAction.java @@ -1,11 +1,12 @@ package io.xpipe.app.hub.action; -import com.fasterxml.jackson.databind.node.ObjectNode; import io.xpipe.app.action.*; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.core.store.DataStore; import io.xpipe.core.util.JacksonMapper; + +import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.Getter; import lombok.SneakyThrows; import lombok.experimental.SuperBuilder; diff --git a/app/src/main/java/io/xpipe/app/hub/action/BatchStoreActionProvider.java b/app/src/main/java/io/xpipe/app/hub/action/BatchStoreActionProvider.java index 0013058bc..5c4d0ca88 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/BatchStoreActionProvider.java +++ b/app/src/main/java/io/xpipe/app/hub/action/BatchStoreActionProvider.java @@ -5,6 +5,7 @@ import io.xpipe.app.action.ActionProvider; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; import io.xpipe.core.store.DataStore; + import javafx.beans.value.ObservableValue; import java.util.List; @@ -22,9 +23,12 @@ public interface BatchStoreActionProvider extends ActionPro } default AbstractAction createBatchAction(List> stores) { - var individual = stores.stream().map(ref -> { - return createAction(ref); - }).filter(action -> action != null).toList(); + var individual = stores.stream() + .map(ref -> { + return createAction(ref); + }) + .filter(action -> action != null) + .toList(); return BatchStoreAction.builder().actions(individual).build(); } diff --git a/app/src/main/java/io/xpipe/app/hub/action/MultiStoreAction.java b/app/src/main/java/io/xpipe/app/hub/action/MultiStoreAction.java index 967dbf6f4..e0a42348e 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/MultiStoreAction.java +++ b/app/src/main/java/io/xpipe/app/hub/action/MultiStoreAction.java @@ -1,6 +1,5 @@ package io.xpipe.app.hub.action; -import com.fasterxml.jackson.databind.node.ObjectNode; import io.xpipe.app.action.ActionJacksonMapper; import io.xpipe.app.action.SerializableAction; import io.xpipe.app.action.StoreContextAction; @@ -8,6 +7,8 @@ import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.core.store.DataStore; import io.xpipe.core.util.JacksonMapper; + +import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.Getter; import lombok.SneakyThrows; import lombok.experimental.SuperBuilder; diff --git a/app/src/main/java/io/xpipe/app/hub/action/StoreAction.java b/app/src/main/java/io/xpipe/app/hub/action/StoreAction.java index 17440e250..b41aebca4 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/StoreAction.java +++ b/app/src/main/java/io/xpipe/app/hub/action/StoreAction.java @@ -1,6 +1,5 @@ package io.xpipe.app.hub.action; -import com.fasterxml.jackson.databind.node.ObjectNode; import io.xpipe.app.action.ActionJacksonMapper; import io.xpipe.app.action.SerializableAction; import io.xpipe.app.action.StoreContextAction; @@ -9,6 +8,8 @@ import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.core.store.DataStore; import io.xpipe.core.util.JacksonMapper; + +import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.Getter; import lombok.SneakyThrows; import lombok.experimental.SuperBuilder; diff --git a/app/src/main/java/io/xpipe/app/hub/action/StoreActionProvider.java b/app/src/main/java/io/xpipe/app/hub/action/StoreActionProvider.java index 829cc5e14..8d1fcd241 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/StoreActionProvider.java +++ b/app/src/main/java/io/xpipe/app/hub/action/StoreActionProvider.java @@ -4,6 +4,7 @@ import io.xpipe.app.action.ActionProvider; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; import io.xpipe.core.store.DataStore; + import javafx.beans.value.ObservableValue; public interface StoreActionProvider extends ActionProvider { diff --git a/app/src/main/java/io/xpipe/app/hub/action/impl/AddStoreActionProvider.java b/app/src/main/java/io/xpipe/app/hub/action/impl/AddStoreActionProvider.java index 7522c2d30..3b6a6bfbf 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/impl/AddStoreActionProvider.java +++ b/app/src/main/java/io/xpipe/app/hub/action/impl/AddStoreActionProvider.java @@ -6,6 +6,7 @@ import io.xpipe.app.hub.comp.StoreCreationDialog; import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.core.store.DataStore; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; diff --git a/app/src/main/java/io/xpipe/app/hub/action/impl/BrowseStoreActionProvider.java b/app/src/main/java/io/xpipe/app/hub/action/impl/BrowseStoreActionProvider.java index aa5bb045a..f4c550b72 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/impl/BrowseStoreActionProvider.java +++ b/app/src/main/java/io/xpipe/app/hub/action/impl/BrowseStoreActionProvider.java @@ -1,11 +1,11 @@ package io.xpipe.app.hub.action.impl; import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.browser.BrowserFullSessionModel; import io.xpipe.app.core.AppI18n; import io.xpipe.app.core.AppLayoutModel; import io.xpipe.app.ext.ProcessControlProvider; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; import io.xpipe.core.store.FilePath; @@ -19,37 +19,38 @@ import lombok.extern.jackson.Jacksonized; public class BrowseStoreActionProvider implements LeafStoreActionProvider { - @Override - public Action createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public Action createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public Class getApplicableClass() { - return FileSystemStore.class; - } + @Override + public Class getApplicableClass() { + return FileSystemStore.class; + } - @Override - public boolean isMajor(DataStoreEntryRef o) { - return true; - } + @Override + public boolean isMajor(DataStoreEntryRef o) { + return true; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("browseFiles"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("browseFiles"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2f-folder-open-outline"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2f-folder-open-outline"); + } - @Override + @Override public String getId() { return "browseStore"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder public static class Action extends StoreAction { FilePath path; @@ -58,7 +59,8 @@ public class BrowseStoreActionProvider implements LeafStoreActionProvider replacement = ProcessControlProvider.get().replace(ref); - BrowserFullSessionModel.DEFAULT.openFileSystemSync(replacement, (m) -> path, new SimpleBooleanProperty(), true); + BrowserFullSessionModel.DEFAULT.openFileSystemSync( + replacement, (m) -> path, new SimpleBooleanProperty(), true); AppLayoutModel.get().selectBrowser(); } } diff --git a/app/src/main/java/io/xpipe/app/hub/action/impl/CategoryConfigActionProvider.java b/app/src/main/java/io/xpipe/app/hub/action/impl/CategoryConfigActionProvider.java index ea56f9014..8ce3727c4 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/impl/CategoryConfigActionProvider.java +++ b/app/src/main/java/io/xpipe/app/hub/action/impl/CategoryConfigActionProvider.java @@ -6,24 +6,25 @@ import io.xpipe.app.hub.comp.StoreCategoryConfigComp; import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.storage.DataStorage; import io.xpipe.core.store.DataStore; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; public class CategoryConfigActionProvider implements ActionProvider { - @Override + @Override public String getId() { return "categoryConfig"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder public static class Action extends StoreAction { @Override public void executeImpl() throws Exception { var category = DataStorage.get().getStoreCategory(ref.get()); - var wrapper = StoreViewState.get() - .getCategoryWrapper(category); + var wrapper = StoreViewState.get().getCategoryWrapper(category); StoreCategoryConfigComp.show(wrapper); } } diff --git a/app/src/main/java/io/xpipe/app/hub/action/impl/CategorySelectActionProvider.java b/app/src/main/java/io/xpipe/app/hub/action/impl/CategorySelectActionProvider.java index db49901cb..e7852001a 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/impl/CategorySelectActionProvider.java +++ b/app/src/main/java/io/xpipe/app/hub/action/impl/CategorySelectActionProvider.java @@ -5,17 +5,19 @@ import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.storage.DataStorage; import io.xpipe.core.store.DataStore; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; public class CategorySelectActionProvider implements ActionProvider { - @Override + @Override public String getId() { return "selectCategory"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder public static class Action extends StoreAction { @Override diff --git a/app/src/main/java/io/xpipe/app/hub/action/impl/ChangeStoreIconActionProvider.java b/app/src/main/java/io/xpipe/app/hub/action/impl/ChangeStoreIconActionProvider.java index 13de34d09..e1dfd13f3 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/impl/ChangeStoreIconActionProvider.java +++ b/app/src/main/java/io/xpipe/app/hub/action/impl/ChangeStoreIconActionProvider.java @@ -2,9 +2,9 @@ package io.xpipe.app.hub.action.impl; import io.xpipe.app.action.AbstractAction; import io.xpipe.app.action.LeafStoreActionProvider; +import io.xpipe.app.core.AppI18n; import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.hub.comp.StoreIconChoiceDialog; -import io.xpipe.app.core.AppI18n; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; import io.xpipe.core.store.DataStore; @@ -34,15 +34,16 @@ public class ChangeStoreIconActionProvider implements LeafStoreActionProvider store) { - return new LabelGraphic.IconGraphic("mdi2t-tooltip-image-outline"); - } + return new LabelGraphic.IconGraphic("mdi2t-tooltip-image-outline"); + } - @Override + @Override public String getId() { return "changeStoreIcon"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/app/src/main/java/io/xpipe/app/hub/action/impl/CloneStoreActionProvider.java b/app/src/main/java/io/xpipe/app/hub/action/impl/CloneStoreActionProvider.java index 39e648e57..f5f466fed 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/impl/CloneStoreActionProvider.java +++ b/app/src/main/java/io/xpipe/app/hub/action/impl/CloneStoreActionProvider.java @@ -2,8 +2,8 @@ package io.xpipe.app.hub.action.impl; import io.xpipe.app.action.AbstractAction; import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.core.AppI18n; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.storage.DataStoreEntryRef; @@ -41,20 +41,22 @@ public class CloneStoreActionProvider implements LeafStoreActionProvider store) { - return new LabelGraphic.IconGraphic("mdi2c-content-copy"); - } + return new LabelGraphic.IconGraphic("mdi2c-content-copy"); + } - @Override + @Override public String getId() { return "cloneStore"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override public void executeImpl() { - var entry = DataStoreEntry.createNew(ref.get().getName() + " (" + AppI18n.get("connectionCopy") + ")", ref.getStore()); + var entry = DataStoreEntry.createNew( + ref.get().getName() + " (" + AppI18n.get("connectionCopy") + ")", ref.getStore()); var instant = ref.get().getLastAccess().plus(Duration.ofSeconds(1)); entry.setLastModified(instant); entry.setLastUsed(instant); diff --git a/app/src/main/java/io/xpipe/app/hub/action/impl/EditStoreActionProvider.java b/app/src/main/java/io/xpipe/app/hub/action/impl/EditStoreActionProvider.java index 711d73e2e..7123908f3 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/impl/EditStoreActionProvider.java +++ b/app/src/main/java/io/xpipe/app/hub/action/impl/EditStoreActionProvider.java @@ -2,9 +2,9 @@ package io.xpipe.app.hub.action.impl; import io.xpipe.app.action.AbstractAction; import io.xpipe.app.action.LeafStoreActionProvider; +import io.xpipe.app.core.AppI18n; import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.hub.comp.StoreCreationDialog; -import io.xpipe.app.core.AppI18n; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; import io.xpipe.core.store.DataStore; @@ -16,44 +16,43 @@ import lombok.extern.jackson.Jacksonized; public class EditStoreActionProvider implements LeafStoreActionProvider { - @Override - public AbstractAction createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public AbstractAction createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public Class getApplicableClass() { - return DataStore.class; - } + @Override + public Class getApplicableClass() { + return DataStore.class; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("base.edit"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("base.edit"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdal-edit"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdal-edit"); + } - @Override - public boolean requiresValidStore() { - return false; - } + @Override + public boolean requiresValidStore() { + return false; + } - @Override - public boolean isApplicable(DataStoreEntryRef o) { - return true; - } + @Override + public boolean isApplicable(DataStoreEntryRef o) { + return true; + } - - - @Override + @Override public String getId() { return "editStore"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/app/src/main/java/io/xpipe/app/hub/action/impl/LaunchStoreActionProvider.java b/app/src/main/java/io/xpipe/app/hub/action/impl/LaunchStoreActionProvider.java index 8f8698353..417289d9d 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/impl/LaunchStoreActionProvider.java +++ b/app/src/main/java/io/xpipe/app/hub/action/impl/LaunchStoreActionProvider.java @@ -9,17 +9,20 @@ import io.xpipe.app.util.LabelGraphic; import io.xpipe.core.store.DataStore; import javafx.beans.value.ObservableValue; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -public class LaunchStoreActionProvider implements LeafStoreActionProvider, BatchStoreActionProvider { +public class LaunchStoreActionProvider + implements LeafStoreActionProvider, BatchStoreActionProvider { - @Override + @Override public String getId() { return "launch"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder public static class Action extends StoreAction { @Override @@ -50,24 +53,22 @@ public class LaunchStoreActionProvider implements LeafStoreActionProvider getApplicableClass() { - return DataStore.class; - } + public Class getApplicableClass() { + return DataStore.class; + } - @Override - public boolean isApplicable(DataStoreEntryRef o) { - return o.get().getValidity().isUsable() - && (o.get().getProvider().launch(o.get()) != null); - } + @Override + public boolean isApplicable(DataStoreEntryRef o) { + return o.get().getValidity().isUsable() && (o.get().getProvider().launch(o.get()) != null); + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("launch"); - } - - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2p-play"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("launch"); + } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2p-play"); + } } diff --git a/app/src/main/java/io/xpipe/app/hub/action/impl/RefreshChildrenStoreActionProvider.java b/app/src/main/java/io/xpipe/app/hub/action/impl/RefreshChildrenStoreActionProvider.java index df3e67ad5..543fd500e 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/impl/RefreshChildrenStoreActionProvider.java +++ b/app/src/main/java/io/xpipe/app/hub/action/impl/RefreshChildrenStoreActionProvider.java @@ -1,9 +1,9 @@ package io.xpipe.app.hub.action.impl; -import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; -import io.xpipe.app.core.AppI18n; import io.xpipe.app.action.AbstractAction; +import io.xpipe.app.action.LeafStoreActionProvider; +import io.xpipe.app.core.AppI18n; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.FixedHierarchyStore; @@ -14,52 +14,50 @@ import javafx.beans.value.ObservableValue; import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -public class RefreshChildrenStoreActionProvider - implements LeafStoreActionProvider { +public class RefreshChildrenStoreActionProvider implements LeafStoreActionProvider { - @Override - public boolean isDefault(DataStoreEntryRef o) { - return true; - } + @Override + public boolean isDefault(DataStoreEntryRef o) { + return true; + } - @Override - public boolean isMajor(DataStoreEntryRef o) { - return true; - } + @Override + public boolean isMajor(DataStoreEntryRef o) { + return true; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("base.refresh"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("base.refresh"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2r-refresh"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2r-refresh"); + } - @Override - public boolean isApplicable(DataStoreEntryRef o) { - return o.getStore().canManuallyRefresh(); - } + @Override + public boolean isApplicable(DataStoreEntryRef o) { + return o.getStore().canManuallyRefresh(); + } - @Override - public AbstractAction createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public AbstractAction createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public Class getApplicableClass() { - return FixedHierarchyStore.class; - } + @Override + public Class getApplicableClass() { + return FixedHierarchyStore.class; + } - - - @Override + @Override public String getId() { return "refreshStoreChildren"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/app/src/main/java/io/xpipe/app/hub/action/impl/RefreshStoreActionProvider.java b/app/src/main/java/io/xpipe/app/hub/action/impl/RefreshStoreActionProvider.java index fed5b6fca..a35328a0f 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/impl/RefreshStoreActionProvider.java +++ b/app/src/main/java/io/xpipe/app/hub/action/impl/RefreshStoreActionProvider.java @@ -3,19 +3,20 @@ package io.xpipe.app.hub.action.impl; import io.xpipe.app.action.*; import io.xpipe.app.hub.action.StoreAction; import io.xpipe.core.store.DataStore; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; public class RefreshStoreActionProvider implements ActionProvider { - - @Override + @Override public String getId() { return "refreshStore"; } -@Jacksonized -@SuperBuilder -public static class Action extends StoreAction { + + @Jacksonized + @SuperBuilder + public static class Action extends StoreAction { @Override public void executeImpl() { diff --git a/app/src/main/java/io/xpipe/app/hub/action/impl/SampleStoreActionProvider.java b/app/src/main/java/io/xpipe/app/hub/action/impl/SampleStoreActionProvider.java index b1eaed14d..b04f2b5a4 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/impl/SampleStoreActionProvider.java +++ b/app/src/main/java/io/xpipe/app/hub/action/impl/SampleStoreActionProvider.java @@ -1,9 +1,9 @@ package io.xpipe.app.hub.action.impl; import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.core.AppI18n; import io.xpipe.app.ext.ShellStore; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; import io.xpipe.core.process.CommandControl; @@ -22,42 +22,42 @@ import java.io.StringReader; public class SampleStoreActionProvider implements LeafStoreActionProvider { - @Override - public Action createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public Action createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public Class getApplicableClass() { - // For which general type of connection store to make this action available. - return ShellStore.class; - } + @Override + public Class getApplicableClass() { + // For which general type of connection store to make this action available. + return ShellStore.class; + } - @Override - public boolean isApplicable(DataStoreEntryRef o) { - // Allows you to individually check whether this action should be available for the specific store. - return true; - } + @Override + public boolean isApplicable(DataStoreEntryRef o) { + // Allows you to individually check whether this action should be available for the specific store. + return true; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - // The displayed name of the action, allows you to use translation keys. - return AppI18n.observable("installConnector"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + // The displayed name of the action, allows you to use translation keys. + return AppI18n.observable("installConnector"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - // The ikonli icon of the button. - return new LabelGraphic.IconGraphic("mdi2c-code-greater-than"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + // The ikonli icon of the button. + return new LabelGraphic.IconGraphic("mdi2c-code-greater-than"); + } - - @Override + @Override public String getId() { return "sample"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/app/src/main/java/io/xpipe/app/hub/action/impl/ScanBatchStoreActionProvider.java b/app/src/main/java/io/xpipe/app/hub/action/impl/ScanBatchStoreActionProvider.java index 18fecfeeb..4d4d1d048 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/impl/ScanBatchStoreActionProvider.java +++ b/app/src/main/java/io/xpipe/app/hub/action/impl/ScanBatchStoreActionProvider.java @@ -1,17 +1,19 @@ package io.xpipe.app.hub.action.impl; import io.xpipe.app.action.AbstractAction; -import io.xpipe.app.hub.action.BatchStoreActionProvider; -import io.xpipe.app.hub.action.MultiStoreAction; import io.xpipe.app.core.AppI18n; import io.xpipe.app.ext.ShellStore; +import io.xpipe.app.hub.action.BatchStoreActionProvider; +import io.xpipe.app.hub.action.MultiStoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; import io.xpipe.app.util.ScanDialog; import io.xpipe.app.util.ScanDialogAction; import io.xpipe.core.process.ShellTtyState; import io.xpipe.core.process.SystemState; + import javafx.beans.value.ObservableValue; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; @@ -19,47 +21,45 @@ import java.util.List; public class ScanBatchStoreActionProvider implements BatchStoreActionProvider { - @Override - public boolean isApplicable(DataStoreEntryRef o) { - var state = o.get().getStorePersistentState(); - if (state instanceof SystemState systemState) { - return (systemState.getShellDialect() == null - || systemState - .getShellDialect() - .getDumbMode() - .supportsAnyPossibleInteraction()) - && (systemState.getTtyState() == null || systemState.getTtyState() == ShellTtyState.NONE); - } else { - return true; - } - } + @Override + public boolean isApplicable(DataStoreEntryRef o) { + var state = o.get().getStorePersistentState(); + if (state instanceof SystemState systemState) { + return (systemState.getShellDialect() == null + || systemState.getShellDialect().getDumbMode().supportsAnyPossibleInteraction()) + && (systemState.getTtyState() == null || systemState.getTtyState() == ShellTtyState.NONE); + } else { + return true; + } + } - @Override - public ObservableValue getName() { - return AppI18n.observable("addConnections"); - } + @Override + public ObservableValue getName() { + return AppI18n.observable("addConnections"); + } - @Override - public LabelGraphic getIcon() { - return new LabelGraphic.IconGraphic("mdi2l-layers-plus"); - } + @Override + public LabelGraphic getIcon() { + return new LabelGraphic.IconGraphic("mdi2l-layers-plus"); + } - @Override - public Class getApplicableClass() { - return ShellStore.class; - } + @Override + public Class getApplicableClass() { + return ShellStore.class; + } - @Override - public AbstractAction createBatchAction(List> stores) { - return Action.builder().refs(stores).build(); - } + @Override + public AbstractAction createBatchAction(List> stores) { + return Action.builder().refs(stores).build(); + } - @Override + @Override public String getId() { return "scanStoreBatch"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends MultiStoreAction { @Override diff --git a/app/src/main/java/io/xpipe/app/hub/action/impl/ScanStoreActionProvider.java b/app/src/main/java/io/xpipe/app/hub/action/impl/ScanStoreActionProvider.java index 54f2f748b..5590f9d81 100644 --- a/app/src/main/java/io/xpipe/app/hub/action/impl/ScanStoreActionProvider.java +++ b/app/src/main/java/io/xpipe/app/hub/action/impl/ScanStoreActionProvider.java @@ -1,10 +1,10 @@ package io.xpipe.app.hub.action.impl; -import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; -import io.xpipe.app.core.AppI18n; import io.xpipe.app.action.AbstractAction; +import io.xpipe.app.action.LeafStoreActionProvider; +import io.xpipe.app.core.AppI18n; import io.xpipe.app.ext.ShellStore; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; import io.xpipe.app.util.ScanDialog; @@ -18,52 +18,50 @@ import lombok.extern.jackson.Jacksonized; public class ScanStoreActionProvider implements LeafStoreActionProvider { - @Override - public AbstractAction createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public AbstractAction createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public boolean isMajor(DataStoreEntryRef o) { - return true; - } + @Override + public boolean isMajor(DataStoreEntryRef o) { + return true; + } - @Override - public boolean isApplicable(DataStoreEntryRef o) { - var state = o.get().getStorePersistentState(); - if (state instanceof SystemState systemState) { - return (systemState.getShellDialect() == null - || systemState - .getShellDialect() - .getDumbMode() - .supportsAnyPossibleInteraction()) - && (systemState.getTtyState() == null || systemState.getTtyState() == ShellTtyState.NONE); - } else { - return true; - } - } + @Override + public boolean isApplicable(DataStoreEntryRef o) { + var state = o.get().getStorePersistentState(); + if (state instanceof SystemState systemState) { + return (systemState.getShellDialect() == null + || systemState.getShellDialect().getDumbMode().supportsAnyPossibleInteraction()) + && (systemState.getTtyState() == null || systemState.getTtyState() == ShellTtyState.NONE); + } else { + return true; + } + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("scanConnections"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("scanConnections"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2l-layers-plus"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2l-layers-plus"); + } - @Override - public Class getApplicableClass() { - return ShellStore.class; - } + @Override + public Class getApplicableClass() { + return ShellStore.class; + } - @Override + @Override public String getId() { return "scanStore"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreCategoryComp.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreCategoryComp.java index 22ff01d65..8edbed688 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreCategoryComp.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreCategoryComp.java @@ -72,7 +72,8 @@ public class StoreCategoryComp extends SimpleComp { } var exp = category.getExpanded().get(); - return new LabelGraphic.IconGraphic(exp ? "mdal-keyboard_arrow_down" : "mdi2c-chevron-double-right"); + return new LabelGraphic.IconGraphic( + exp ? "mdal-keyboard_arrow_down" : "mdi2c-chevron-double-right"); }, category.getExpanded(), category.getChildren().getList()); diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreCategoryConfigComp.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreCategoryConfigComp.java index f574ff0dd..207b209bc 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreCategoryConfigComp.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreCategoryConfigComp.java @@ -75,9 +75,9 @@ public class StoreCategoryConfigComp extends SimpleComp { .hide(!connectionsCategory) .nameAndDescription("categoryReadOnly") .addYesNoToggle(readOnly) - .nameAndDescription("categoryConfirmAllModifications") - .addYesNoToggle(confirm) - .hide(!connectionsCategory) + .nameAndDescription("categoryConfirmAllModifications") + .addYesNoToggle(confirm) + .hide(!connectionsCategory) .nameAndDescription("categoryDefaultIdentity") .addComp( StoreChoiceComp.other( diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationComp.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationComp.java index b152b6931..d7b0361e6 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationComp.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationComp.java @@ -42,7 +42,10 @@ public class StoreCreationComp extends ModalOverlayContentComp { .addString(model.getName(), false) .nonNull(propVal) .check(val -> Validator.create(val, AppI18n.observable("readOnlyStoreError"), model.getName(), s -> { - var same = s != null && model.getExistingEntry() != null && DataStorage.get().getEffectiveReadOnlyState(model.getExistingEntry()) && s.equals(model.getExistingEntry().getName()); + var same = s != null + && model.getExistingEntry() != null + && DataStorage.get().getEffectiveReadOnlyState(model.getExistingEntry()) + && s.equals(model.getExistingEntry().getName()); return !same; })) .buildComp() diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationDialog.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationDialog.java index 09f809b53..c63815e62 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationDialog.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationDialog.java @@ -33,7 +33,8 @@ public class StoreCreationDialog { public static void showEdit(DataStoreEntry e, Consumer c) { StoreCreationConsumer consumer = (newE, validated) -> { ThreadHelper.runAsync(() -> { - if (!DataStorage.get().getStoreEntries().contains(e) || DataStorage.get().getEffectiveReadOnlyState(e)) { + if (!DataStorage.get().getStoreEntries().contains(e) + || DataStorage.get().getEffectiveReadOnlyState(e)) { DataStorage.get().addStoreEntryIfNotPresent(newE); } else { // We didn't change anything diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationMenu.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationMenu.java index 608a1bf65..381231687 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationMenu.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationMenu.java @@ -1,11 +1,8 @@ package io.xpipe.app.hub.comp; import io.xpipe.app.action.AbstractAction; -import io.xpipe.app.action.ActionPickComp; -import io.xpipe.app.comp.base.ModalOverlay; import io.xpipe.app.comp.base.PrettyImageHelper; import io.xpipe.app.core.AppI18n; -import io.xpipe.app.core.window.AppMainWindow; import io.xpipe.app.ext.DataStoreCreationCategory; import io.xpipe.app.ext.DataStoreProviders; import io.xpipe.app.util.ScanDialog; @@ -44,10 +41,10 @@ public class StoreCreationMenu { .toList(); return 1 == connections.size() && StoreViewState.get() - .getActiveCategory() - .getValue() - .getRoot() - .equals(allCat); + .getActiveCategory() + .getValue() + .getRoot() + .equals(allCat); }, StoreViewState.get().getAllEntries().getList()); automatically.disableProperty().bind(disableSearch); @@ -80,7 +77,8 @@ public class StoreCreationMenu { var actionMenu = categoryMenu("addMacro", "mdmz-miscellaneous_services", DataStoreCreationCategory.MACRO, null); var item = new MenuItem(); - item.setGraphic(PrettyImageHelper.ofFixedSize("app:shortcut/actionShortcut_icon.svg", 16, 16).createRegion()); + item.setGraphic(PrettyImageHelper.ofFixedSize("app:shortcut/actionShortcut_icon.svg", 16, 16) + .createRegion()); item.textProperty().bind(AppI18n.observable("actionShortcut")); item.setOnAction(event -> { Platform.runLater(() -> { diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationModel.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationModel.java index cea12f5b5..392b843ab 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationModel.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationModel.java @@ -1,8 +1,8 @@ package io.xpipe.app.hub.comp; -import io.xpipe.app.hub.action.impl.LaunchStoreActionProvider; import io.xpipe.app.ext.DataStoreProvider; import io.xpipe.app.ext.ShellStore; +import io.xpipe.app.hub.action.impl.LaunchStoreActionProvider; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStoreCategory; @@ -89,7 +89,9 @@ public class StoreCreationModel { }); this.entry = Bindings.createObjectBinding( () -> { - if (name.getValue() == null || store.getValue() == null || name.getValue().isBlank()) { + if (name.getValue() == null + || store.getValue() == null + || name.getValue().isBlank()) { return null; } @@ -108,7 +110,9 @@ public class StoreCreationModel { skippable.bind(Bindings.createBooleanBinding( () -> { - if (entry.getValue() != null && store.get().isComplete() && store.get() instanceof ValidatableStore) { + if (entry.getValue() != null + && store.get().isComplete() + && store.get() instanceof ValidatableStore) { return true; } else { return false; @@ -287,7 +291,9 @@ public class StoreCreationModel { ? "connection" : p.getCreationCategory().getCategory().equals(DataStorage.ALL_SCRIPTS_CATEGORY_UUID) ? (p.getId().equals("scriptGroup") ? "scriptGroup" : "script") - : p.getCreationCategory().getCategory().equals(DataStorage.ALL_IDENTITIES_CATEGORY_UUID) ? "identity" : "macro"; + : p.getCreationCategory().getCategory().equals(DataStorage.ALL_IDENTITIES_CATEGORY_UUID) + ? "identity" + : "macro"; return nameKey; } } diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreEntryComp.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreEntryComp.java index a55d4f3e9..ef49e7ba0 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreEntryComp.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreEntryComp.java @@ -1,8 +1,8 @@ package io.xpipe.app.hub.comp; +import io.xpipe.app.action.ActionProvider; import io.xpipe.app.action.BranchStoreActionProvider; import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreActionProvider; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.SimpleComp; import io.xpipe.app.comp.SimpleCompStructure; @@ -10,9 +10,9 @@ import io.xpipe.app.comp.augment.ContextMenuAugment; import io.xpipe.app.comp.augment.GrowAugment; import io.xpipe.app.comp.base.*; import io.xpipe.app.core.*; -import io.xpipe.app.action.ActionProvider; -import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.core.AppResources; +import io.xpipe.app.hub.action.StoreActionProvider; +import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.storage.DataStoreColor; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.util.*; @@ -155,8 +155,7 @@ public abstract class StoreEntryComp extends SimpleComp { () -> this.createContextMenu()) .augment(button); - var loading = new LoadingOverlayComp( - Comp.of(() -> button), getWrapper().getEffectiveBusy(), false); + var loading = new LoadingOverlayComp(Comp.of(() -> button), getWrapper().getEffectiveBusy(), false); if (OsType.getLocal() == OsType.MACOS) { AppFontSizes.base(button); } else if (OsType.getLocal() == OsType.LINUX) { @@ -216,9 +215,13 @@ public abstract class StoreEntryComp extends SimpleComp { protected Node createIcon(int w, int h, Consumer fontSize) { var icon = new StoreIconComp(getWrapper(), w, h); icon.apply(struc -> { - struc.get().opacityProperty().bind(Bindings.createDoubleBinding(() -> { - return !getWrapper().getEffectiveBusy().get() ? 1.0 : 0.15; - }, getWrapper().getEffectiveBusy())); + struc.get() + .opacityProperty() + .bind(Bindings.createDoubleBinding( + () -> { + return !getWrapper().getEffectiveBusy().get() ? 1.0 : 0.15; + }, + getWrapper().getEffectiveBusy())); }); var loading = new LoadingIconComp(getWrapper().getEffectiveBusy(), fontSize); loading.prefWidth(w); @@ -259,8 +262,7 @@ public abstract class StoreEntryComp extends SimpleComp { p.getIcon(getWrapper().getEntry().ref()), leaf != null ? () -> { - leaf.createAction( - getWrapper().getEntry().ref()).executeAsync(); + leaf.createAction(getWrapper().getEntry().ref()).executeAsync(); } : null); if (branch != null) { @@ -311,9 +313,7 @@ public abstract class StoreEntryComp extends SimpleComp { continue; } - if (p instanceof LeafStoreActionProvider l - && l.isSystemAction() - && !hasSep) { + if (p instanceof LeafStoreActionProvider l && l.isSystemAction() && !hasSep) { if (contextMenu.getItems().size() > 0) { contextMenu.getItems().add(new SeparatorMenuItem()); } @@ -428,15 +428,25 @@ public abstract class StoreEntryComp extends SimpleComp { } var readOnly = new MenuItem(); - readOnly.graphicProperty().bind(Bindings.createObjectBinding(() -> { - var is = getWrapper().getReadOnly().get(); - return is ? new FontIcon("mdi2l-lock-open-variant-outline") : new FontIcon("mdi2l-lock-open-outline"); - }, getWrapper().getReadOnly())); - readOnly.textProperty().bind(Bindings.createStringBinding(() -> { - var is = getWrapper().getReadOnly().get(); - return is ? AppI18n.get("unsetReadOnly") : AppI18n.get("setReadOnly"); - }, AppI18n.activeLanguage(), getWrapper().getReadOnly())); - readOnly.setOnAction(event -> getWrapper().getEntry().setReadOnly(!getWrapper().getReadOnly().get())); + readOnly.graphicProperty() + .bind(Bindings.createObjectBinding( + () -> { + var is = getWrapper().getReadOnly().get(); + return is + ? new FontIcon("mdi2l-lock-open-variant-outline") + : new FontIcon("mdi2l-lock-open-outline"); + }, + getWrapper().getReadOnly())); + readOnly.textProperty() + .bind(Bindings.createStringBinding( + () -> { + var is = getWrapper().getReadOnly().get(); + return is ? AppI18n.get("unsetReadOnly") : AppI18n.get("setReadOnly"); + }, + AppI18n.activeLanguage(), + getWrapper().getReadOnly())); + readOnly.setOnAction(event -> + getWrapper().getEntry().setReadOnly(!getWrapper().getReadOnly().get())); contextMenu.getItems().add(readOnly); contextMenu.getItems().add(new SeparatorMenuItem()); @@ -459,7 +469,9 @@ public abstract class StoreEntryComp extends SimpleComp { var branch = p instanceof BranchStoreActionProvider b ? b : null; var cs = leaf != null ? leaf : branch; - if (cs == null || cs.isMajor(getWrapper().getEntry().ref()) || (leaf != null && leaf.isDefault(getWrapper().getEntry().ref()))) { + if (cs == null + || cs.isMajor(getWrapper().getEntry().ref()) + || (leaf != null && leaf.isDefault(getWrapper().getEntry().ref()))) { return null; } @@ -474,7 +486,9 @@ public abstract class StoreEntryComp extends SimpleComp { if (proRequired) { item.setDisable(true); item.textProperty() - .bind(LicenseProvider.get().getFeature(p.getLicensedFeatureId()).suffixObservable(name.getValue())); + .bind(LicenseProvider.get() + .getFeature(p.getLicensedFeatureId()) + .suffixObservable(name.getValue())); } else { item.textProperty().bind(name); } diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreEntryListStatusBarComp.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreEntryListStatusBarComp.java index c26183e0c..69beabf18 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreEntryListStatusBarComp.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreEntryListStatusBarComp.java @@ -1,12 +1,12 @@ package io.xpipe.app.hub.comp; -import io.xpipe.app.hub.action.BatchStoreActionProvider; +import io.xpipe.app.action.ActionProvider; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.SimpleComp; import io.xpipe.app.comp.augment.ContextMenuAugment; import io.xpipe.app.comp.base.*; import io.xpipe.app.core.AppI18n; -import io.xpipe.app.action.ActionProvider; +import io.xpipe.app.hub.action.BatchStoreActionProvider; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.*; import io.xpipe.core.store.DataStore; @@ -148,8 +148,7 @@ public class StoreEntryListStatusBarComp extends SimpleComp { } @SuppressWarnings("unchecked") - private MenuItem buildMenuItemForAction( - List> batch, ActionProvider a) { + private MenuItem buildMenuItemForAction(List> batch, ActionProvider a) { BatchStoreActionProvider s = (BatchStoreActionProvider) a; var name = s.getName(); var icon = s.getIcon(); diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreEntryWrapper.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreEntryWrapper.java index f03b2ce0b..2e42fefee 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreEntryWrapper.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreEntryWrapper.java @@ -3,8 +3,9 @@ package io.xpipe.app.hub.comp; import io.xpipe.app.action.*; import io.xpipe.app.ext.LocalStore; import io.xpipe.app.ext.ShellStore; -import io.xpipe.app.hub.action.impl.EditStoreActionProvider; +import io.xpipe.app.ext.SingletonSessionStore; import io.xpipe.app.hub.action.StoreActionProvider; +import io.xpipe.app.hub.action.impl.EditStoreActionProvider; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.storage.DataStorage; @@ -14,7 +15,6 @@ import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.util.PlatformThread; import io.xpipe.app.util.ThreadHelper; import io.xpipe.core.store.DataStore; -import io.xpipe.app.ext.SingletonSessionStore; import javafx.beans.binding.Bindings; import javafx.beans.property.*; @@ -179,7 +179,8 @@ public class StoreEntryWrapper { readOnly.setValue(entry.isReadOnly()); iconFile.setValue(entry.getEffectiveIconFile()); busy.setValue(entry.getBusyCounter().get() != 0); - deletable.setValue(!(entry.getStore() instanceof LocalStore) && !DataStorage.get().getEffectiveReadOnlyState(entry)); + deletable.setValue( + !(entry.getStore() instanceof LocalStore) && !DataStorage.get().getEffectiveReadOnlyState(entry)); sessionActive.setValue(entry.getStore() instanceof SingletonSessionStore ss && entry.getStore() instanceof ShellStore && ss.isSessionRunning()); @@ -208,7 +209,12 @@ public class StoreEntryWrapper { shownInformation.bind(Bindings.createStringBinding( () -> { var n = information.getValue(); - return n != null && AppPrefs.get().censorMode().get() ? "*".repeat(n.length()) : n; + return n != null + && AppPrefs.get() + .censorMode() + .get() + ? "*".repeat(n.length()) + : n; }, AppPrefs.get().censorMode(), information)); @@ -240,7 +246,8 @@ public class StoreEntryWrapper { var defaultProvider = ActionProvider.ALL.stream() .filter(e -> entry.getStore() != null && e instanceof LeafStoreActionProvider def - && (entry.getValidity().isUsable() || (!def.requiresValidStore() && entry.getProvider() != null)) + && (entry.getValidity().isUsable() + || (!def.requiresValidStore() && entry.getProvider() != null)) && def.getApplicableClass() .isAssignableFrom(entry.getStore().getClass()) && def.isApplicable(entry.ref()) @@ -269,8 +276,9 @@ public class StoreEntryWrapper { .collect(Collectors.toCollection(ArrayList::new)); newMinorProviders.removeIf(storeActionProvider -> { return newMajorProviders.stream().anyMatch(mj -> { - return mj instanceof BranchStoreActionProvider branch && branch.getChildren(entry.ref()).stream() - .anyMatch(c -> c.getClass().equals(storeActionProvider.getClass())); + return mj instanceof BranchStoreActionProvider branch + && branch.getChildren(entry.ref()).stream() + .anyMatch(c -> c.getClass().equals(storeActionProvider.getClass())); }); }); if (!minorActionProviders.equals(newMinorProviders)) { diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreIconChoiceComp.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreIconChoiceComp.java index 09f26afaa..744bbd0aa 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreIconChoiceComp.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreIconChoiceComp.java @@ -3,10 +3,10 @@ package io.xpipe.app.hub.comp; import io.xpipe.app.comp.SimpleComp; import io.xpipe.app.comp.base.*; import io.xpipe.app.core.AppI18n; +import io.xpipe.app.core.AppImages; import io.xpipe.app.icon.SystemIcon; import io.xpipe.app.icon.SystemIconCache; import io.xpipe.app.icon.SystemIconManager; -import io.xpipe.app.core.AppImages; import io.xpipe.app.util.BooleanScope; import io.xpipe.app.util.LabelGraphic; import io.xpipe.app.util.ThreadHelper; @@ -122,7 +122,8 @@ public class StoreIconChoiceComp extends SimpleComp { var data = partitionList(filtered, columns); table.getItems().setAll(data); - var selectMatch = filtered.size() == 1 || filtered.stream().anyMatch(systemIcon -> systemIcon.getId().equals(filterString)); + var selectMatch = filtered.size() == 1 + || filtered.stream().anyMatch(systemIcon -> systemIcon.getId().equals(filterString)); // Table updates seem to not always be instant, sometimes the column is not there yet if (selectMatch && table.getColumns().size() > 0) { table.getSelectionModel().select(0, table.getColumns().getFirst()); diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreListChoiceComp.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreListChoiceComp.java index 5108bac2b..0705395cb 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreListChoiceComp.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreListChoiceComp.java @@ -74,8 +74,9 @@ public class StoreListChoiceComp extends SimpleComp { var delete = new IconButtonComp("mdal-delete_outline", () -> { selectedList.remove(t); }); - var row = editable ? new HorizontalComp(List.of(label, Comp.hspacer(), up, down, delete)).spacing(5) : - new HorizontalComp(List.of(label, Comp.hspacer())); + var row = editable + ? new HorizontalComp(List.of(label, Comp.hspacer(), up, down, delete)).spacing(5) + : new HorizontalComp(List.of(label, Comp.hspacer())); return row.styleClass("entry"); }, false) @@ -99,8 +100,7 @@ public class StoreListChoiceComp extends SimpleComp { list.add(Comp.vspacer(5).hide(Bindings.isEmpty(selectedList))); list.add(add); } - var vbox = new VerticalComp(list) - .apply(struc -> struc.get().setFillWidth(true)); + var vbox = new VerticalComp(list).apply(struc -> struc.get().setFillWidth(true)); return vbox.styleClass("data-store-list-choice-comp").createRegion(); } } diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreSection.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreSection.java index a93250e27..61ede6f1b 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreSection.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreSection.java @@ -108,8 +108,7 @@ public class StoreSection { ObservableValue category, ObservableIntegerValue visibilityObservable, ObservableIntegerValue updateObservable, - ObservableValue enabled - ) { + ObservableValue enabled) { var topLevel = all.filtered( section -> { if (!enabled.getValue()) { diff --git a/app/src/main/java/io/xpipe/app/icon/SystemIconCache.java b/app/src/main/java/io/xpipe/app/icon/SystemIconCache.java index 7a702b967..d92beb84b 100644 --- a/app/src/main/java/io/xpipe/app/icon/SystemIconCache.java +++ b/app/src/main/java/io/xpipe/app/icon/SystemIconCache.java @@ -18,7 +18,6 @@ import java.net.URL; import java.nio.file.*; import java.security.MessageDigest; import java.util.*; -import java.util.List; import java.util.stream.Collectors; import javax.imageio.ImageIO; @@ -57,7 +56,8 @@ public class SystemIconCache { public static void rebuildCache(Map all) { try { var versionFile = DIRECTORY.resolve("version"); - var version = Files.exists(versionFile) ? Files.readString(versionFile).strip() : null; + var version = + Files.exists(versionFile) ? Files.readString(versionFile).strip() : null; if (!String.valueOf(VERSION).equals(version)) { if (Files.isDirectory(DIRECTORY)) { FileUtils.cleanDirectory(DIRECTORY.toFile()); @@ -73,8 +73,9 @@ public class SystemIconCache { Map colorSchemeMap = new HashMap<>(); - var baseIcons = e.getValue().getIcons().stream().filter( - f -> f.getColorSchemeData() == SystemIconSourceFile.ColorSchemeData.DEFAULT).toList(); + var baseIcons = e.getValue().getIcons().stream() + .filter(f -> f.getColorSchemeData() == SystemIconSourceFile.ColorSchemeData.DEFAULT) + .toList(); for (var icon : baseIcons) { var schemeFile = target.resolve(icon.getName() + ".scheme"); if (refreshChecksum(icon.getFile(), target, icon.getName(), false)) { @@ -98,11 +99,13 @@ public class SystemIconCache { Files.writeString(schemeFile, scheme.name().toLowerCase(Locale.ROOT)); } - var darkIconNames = e.getValue().getIcons().stream().filter( - f -> f.getColorSchemeData() == SystemIconSourceFile.ColorSchemeData.DARK).map(f -> f.getName()) + var darkIconNames = e.getValue().getIcons().stream() + .filter(f -> f.getColorSchemeData() == SystemIconSourceFile.ColorSchemeData.DARK) + .map(f -> f.getName()) .collect(Collectors.toSet()); - var darkAvailableIcons = e.getValue().getIcons().stream().filter( - f -> f.getColorSchemeData() == SystemIconSourceFile.ColorSchemeData.DARK).toList(); + var darkAvailableIcons = e.getValue().getIcons().stream() + .filter(f -> f.getColorSchemeData() == SystemIconSourceFile.ColorSchemeData.DARK) + .toList(); for (var icon : darkAvailableIcons) { var existingBaseScheme = colorSchemeMap.get(icon.getName()); var generateDarkIcon = existingBaseScheme == null || existingBaseScheme == ImageColorScheme.DARK; @@ -124,7 +127,8 @@ public class SystemIconCache { for (var icon : baseIcons) { var existingBaseScheme = colorSchemeMap.get(icon.getName()); - var generateDarkModeInverse = existingBaseScheme == ImageColorScheme.DARK && !darkIconNames.contains(icon.getName()); + var generateDarkModeInverse = + existingBaseScheme == ImageColorScheme.DARK && !darkIconNames.contains(icon.getName()); if (generateDarkModeInverse) { rasterizeSizesInverted(icon.getFile(), target, icon.getName(), true); continue; @@ -176,8 +180,7 @@ public class SystemIconCache { } } - private static void rasterizeSizesInverted(Path path, Path dir, String name, boolean dark) - throws IOException { + private static void rasterizeSizesInverted(Path path, Path dir, String name, boolean dark) throws IOException { try { for (var size : sizes) { var image = rasterize(path, size); diff --git a/app/src/main/java/io/xpipe/app/icon/SystemIconManager.java b/app/src/main/java/io/xpipe/app/icon/SystemIconManager.java index c188ac88a..d472b7705 100644 --- a/app/src/main/java/io/xpipe/app/icon/SystemIconManager.java +++ b/app/src/main/java/io/xpipe/app/icon/SystemIconManager.java @@ -1,11 +1,11 @@ package io.xpipe.app.icon; import io.xpipe.app.core.AppCache; +import io.xpipe.app.core.AppImages; import io.xpipe.app.core.AppProperties; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.prefs.SupportedLocale; -import io.xpipe.app.core.AppImages; import io.xpipe.app.storage.DataStorage; import io.xpipe.core.util.ValidationException; @@ -31,7 +31,10 @@ public class SystemIconManager { // For chinese users, GitHub link might be unreliable // So use an alternative chinese mirror they can use all.add(SystemIconSource.GitRepository.builder() - .remote(AppPrefs.get().language().getValue() == SupportedLocale.CHINESE ? "https://gitcode.com/gh_mirrors/icons13/icons" : "https://github.com/selfhst/icons") + .remote( + AppPrefs.get().language().getValue() == SupportedLocale.CHINESE + ? "https://gitcode.com/gh_mirrors/icons13/icons" + : "https://github.com/selfhst/icons") .id("selfhst") .build()); for (var pref : prefs) { diff --git a/app/src/main/java/io/xpipe/app/icon/SystemIconSourceData.java b/app/src/main/java/io/xpipe/app/icon/SystemIconSourceData.java index e09908755..cb8fa0326 100644 --- a/app/src/main/java/io/xpipe/app/icon/SystemIconSourceData.java +++ b/app/src/main/java/io/xpipe/app/icon/SystemIconSourceData.java @@ -51,7 +51,8 @@ public class SystemIconSourceData { var hasLightModeVariant = Files.exists(lightModeFile); if (hasBaseVariant) { - sourceFiles.add(new SystemIconSourceFile(source, displayName, baseFile, SystemIconSourceFile.ColorSchemeData.DEFAULT)); + sourceFiles.add(new SystemIconSourceFile( + source, displayName, baseFile, SystemIconSourceFile.ColorSchemeData.DEFAULT)); } if (hasLightModeVariant) { sourceFiles.add(new SystemIconSourceFile( diff --git a/app/src/main/java/io/xpipe/app/issue/ErrorHandlerDialog.java b/app/src/main/java/io/xpipe/app/issue/ErrorHandlerDialog.java index 901755856..67b179ec1 100644 --- a/app/src/main/java/io/xpipe/app/issue/ErrorHandlerDialog.java +++ b/app/src/main/java/io/xpipe/app/issue/ErrorHandlerDialog.java @@ -5,10 +5,7 @@ import io.xpipe.app.comp.base.ModalButton; import io.xpipe.app.comp.base.ModalOverlay; import io.xpipe.app.core.mode.OperationMode; import io.xpipe.app.core.window.AppDialog; -import io.xpipe.app.core.window.AppMainWindow; import io.xpipe.app.util.LabelGraphic; -import io.xpipe.app.util.PlatformInit; -import io.xpipe.app.util.PlatformState; import javafx.application.Platform; import javafx.scene.paint.Color; diff --git a/app/src/main/java/io/xpipe/app/issue/GuiErrorHandler.java b/app/src/main/java/io/xpipe/app/issue/GuiErrorHandler.java index ab6be36b6..667488be9 100644 --- a/app/src/main/java/io/xpipe/app/issue/GuiErrorHandler.java +++ b/app/src/main/java/io/xpipe/app/issue/GuiErrorHandler.java @@ -28,11 +28,18 @@ public class GuiErrorHandler extends GuiErrorHandlerBase implements ErrorHandler if (event.isOmitted()) { ErrorAction.ignore().handle(event); - AppLayoutModel.get().showQueueEntry(new AppLayoutModel.QueueEntry(AppI18n.observable("errorOccurred"), new LabelGraphic.IconGraphic("mdoal-error_outline"), () -> { - ThreadHelper.runAsync(() -> { - handleGui(event); - }); - }), Duration.ofSeconds(10), true); + AppLayoutModel.get() + .showQueueEntry( + new AppLayoutModel.QueueEntry( + AppI18n.observable("errorOccurred"), + new LabelGraphic.IconGraphic("mdoal-error_outline"), + () -> { + ThreadHelper.runAsync(() -> { + handleGui(event); + }); + }), + Duration.ofSeconds(10), + true); return; } diff --git a/app/src/main/java/io/xpipe/app/issue/SentryErrorHandler.java b/app/src/main/java/io/xpipe/app/issue/SentryErrorHandler.java index 9e1ae3fa1..136b856b6 100644 --- a/app/src/main/java/io/xpipe/app/issue/SentryErrorHandler.java +++ b/app/src/main/java/io/xpipe/app/issue/SentryErrorHandler.java @@ -1,17 +1,17 @@ package io.xpipe.app.issue; -import io.xpipe.app.update.AppDistributionType; import io.xpipe.app.core.AppLogs; import io.xpipe.app.core.AppProperties; import io.xpipe.app.core.mode.OperationMode; import io.xpipe.app.prefs.AppPrefs; +import io.xpipe.app.update.AppDistributionType; import io.xpipe.app.util.LicenseProvider; +import io.xpipe.app.util.LicenseRequiredException; import io.sentry.*; import io.sentry.protocol.Geo; import io.sentry.protocol.SentryId; import io.sentry.protocol.User; -import io.xpipe.app.util.LicenseRequiredException; import org.apache.commons.io.FileUtils; import java.io.ByteArrayInputStream; @@ -99,7 +99,9 @@ public class SentryErrorHandler implements ErrorHandler { suppressedField.setAccessible(true); var suppressed = throwable.getSuppressed(); if (suppressed.length > 0) { - suppressedField.set(copy, Arrays.stream(suppressed).map(s -> adjustCopy(s, true)).toList()); + suppressedField.set( + copy, + Arrays.stream(suppressed).map(s -> adjustCopy(s, true)).toList()); } return copy; diff --git a/app/src/main/java/io/xpipe/app/prefs/AboutCategory.java b/app/src/main/java/io/xpipe/app/prefs/AboutCategory.java index 3e7fa8b69..12fcf9c8e 100644 --- a/app/src/main/java/io/xpipe/app/prefs/AboutCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/AboutCategory.java @@ -3,9 +3,9 @@ package io.xpipe.app.prefs; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.base.LabelComp; import io.xpipe.app.comp.base.VerticalComp; -import io.xpipe.app.update.AppDistributionType; import io.xpipe.app.core.AppI18n; import io.xpipe.app.core.AppProperties; +import io.xpipe.app.update.AppDistributionType; import io.xpipe.app.util.JfxHelper; import io.xpipe.app.util.OptionsBuilder; import io.xpipe.core.process.OsType; diff --git a/app/src/main/java/io/xpipe/app/prefs/AppPrefs.java b/app/src/main/java/io/xpipe/app/prefs/AppPrefs.java index cc9779e85..5a949987a 100644 --- a/app/src/main/java/io/xpipe/app/prefs/AppPrefs.java +++ b/app/src/main/java/io/xpipe/app/prefs/AppPrefs.java @@ -7,7 +7,6 @@ import io.xpipe.app.ext.PrefsProvider; import io.xpipe.app.icon.SystemIconManager; import io.xpipe.app.icon.SystemIconSource; import io.xpipe.app.pwman.PasswordManager; -import io.xpipe.app.pwman.PasswordManagerCommand; import io.xpipe.app.rdp.ExternalRdpClient; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.terminal.ExternalTerminalType; @@ -723,7 +722,12 @@ public class AppPrefs { @Override public void addSetting( - String id, JavaType t, Property property, OptionsBuilder builder, boolean requiresRestart, boolean log) { + String id, + JavaType t, + Property property, + OptionsBuilder builder, + boolean requiresRestart, + boolean log) { var m = new Mapping(id, property, t, false, requiresRestart, log); customEntries.put(m, builder); mapping.add(m); diff --git a/app/src/main/java/io/xpipe/app/prefs/AppearanceCategory.java b/app/src/main/java/io/xpipe/app/prefs/AppearanceCategory.java index 9411a7612..a690157aa 100644 --- a/app/src/main/java/io/xpipe/app/prefs/AppearanceCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/AppearanceCategory.java @@ -17,11 +17,10 @@ import javafx.scene.control.ListCell; import javafx.scene.control.Slider; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; -import javafx.scene.shape.Circle; +import javafx.scene.shape.Rectangle; import atlantafx.base.controls.ProgressSliderSkin; import atlantafx.base.theme.Styles; -import javafx.scene.shape.Rectangle; import org.kordamp.ikonli.javafx.FontIcon; import java.util.Arrays; diff --git a/app/src/main/java/io/xpipe/app/prefs/ExternalApplicationType.java b/app/src/main/java/io/xpipe/app/prefs/ExternalApplicationType.java index 02f83b5a4..db72b759f 100644 --- a/app/src/main/java/io/xpipe/app/prefs/ExternalApplicationType.java +++ b/app/src/main/java/io/xpipe/app/prefs/ExternalApplicationType.java @@ -2,7 +2,6 @@ package io.xpipe.app.prefs; import io.xpipe.app.ext.PrefsValue; import io.xpipe.app.issue.ErrorEvent; -import io.xpipe.app.terminal.TerminalLaunchConfiguration; import io.xpipe.app.util.CommandSupport; import io.xpipe.app.util.LocalShell; import io.xpipe.app.util.Translatable; @@ -53,7 +52,8 @@ public interface ExternalApplicationType extends PrefsValue { if (Files.exists(systemApplicationsDef)) { return Optional.of(systemApplicationsDef); } - var userApplicationsDef = Path.of(System.getProperty("user.home") + "/Applications/" + getApplicationName() + ".app"); + var userApplicationsDef = + Path.of(System.getProperty("user.home") + "/Applications/" + getApplicationName() + ".app"); if (Files.exists(userApplicationsDef)) { return Optional.of(userApplicationsDef); } @@ -71,7 +71,8 @@ public interface ExternalApplicationType extends PrefsValue { default void focus() { try (ShellControl pc = LocalShell.getShell().start()) { - pc.command(String.format("open -a \"%s.app\"", getApplicationName())).execute(); + pc.command(String.format("open -a \"%s.app\"", getApplicationName())) + .execute(); } catch (Exception e) { ErrorEvent.fromThrowable(e).handle(); } @@ -141,9 +142,11 @@ public interface ExternalApplicationType extends PrefsValue { if (location.isEmpty()) { location = determineInstallation(); if (location.isEmpty()) { - var name = this instanceof Translatable t ? t.toTranslatedString().getValue() : getExecutable(); - throw ErrorEvent.expected(new UnsupportedOperationException("Unable to find installation of " - + name)); + var name = this instanceof Translatable t + ? t.toTranslatedString().getValue() + : getExecutable(); + throw ErrorEvent.expected( + new UnsupportedOperationException("Unable to find installation of " + name)); } } return location.get(); diff --git a/app/src/main/java/io/xpipe/app/prefs/ExternalEditorType.java b/app/src/main/java/io/xpipe/app/prefs/ExternalEditorType.java index 304a784ab..69a3a8819 100644 --- a/app/src/main/java/io/xpipe/app/prefs/ExternalEditorType.java +++ b/app/src/main/java/io/xpipe/app/prefs/ExternalEditorType.java @@ -8,6 +8,7 @@ import io.xpipe.app.util.WindowsRegistry; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.OsType; import io.xpipe.core.process.ShellScript; + import javafx.beans.property.SimpleStringProperty; import javafx.beans.value.ObservableValue; @@ -64,10 +65,10 @@ public interface ExternalEditorType extends PrefsChoiceValue { @Override public Optional determineInstallation() { return Optional.of(Path.of(System.getenv("LOCALAPPDATA")) - .resolve("Programs") - .resolve("VSCodium") - .resolve("bin") - .resolve("codium.cmd")) + .resolve("Programs") + .resolve("VSCodium") + .resolve("bin") + .resolve("codium.cmd")) .filter(path -> Files.exists(path)); } }; @@ -92,9 +93,9 @@ public interface ExternalEditorType extends PrefsChoiceValue { @Override public Optional determineInstallation() { return Optional.of(Path.of(System.getenv("LOCALAPPDATA")) - .resolve("Programs") - .resolve("cursor") - .resolve("Cursor.exe")) + .resolve("Programs") + .resolve("cursor") + .resolve("Cursor.exe")) .filter(path -> Files.exists(path)); } }; @@ -145,10 +146,10 @@ public interface ExternalEditorType extends PrefsChoiceValue { @Override public Optional determineInstallation() { return Optional.of(Path.of(System.getenv("LOCALAPPDATA")) - .resolve("Programs") - .resolve("Windsurf") - .resolve("bin") - .resolve("windsurf.cmd")) + .resolve("Programs") + .resolve("Windsurf") + .resolve("bin") + .resolve("windsurf.cmd")) .filter(path -> Files.exists(path)); } }; @@ -174,9 +175,9 @@ public interface ExternalEditorType extends PrefsChoiceValue { @Override public Optional determineInstallation() { return Optional.of(Path.of(System.getenv("LOCALAPPDATA")) - .resolve("Programs") - .resolve("TheiaIDE") - .resolve("TheiaIDE.exe")) + .resolve("Programs") + .resolve("TheiaIDE") + .resolve("TheiaIDE.exe")) .filter(path -> Files.exists(path)); } }; @@ -201,10 +202,10 @@ public interface ExternalEditorType extends PrefsChoiceValue { @Override public Optional determineInstallation() { return Optional.of(Path.of(System.getenv("LOCALAPPDATA")) - .resolve("Programs") - .resolve("Trae") - .resolve("bin") - .resolve("trae.cmd")) + .resolve("Programs") + .resolve("Trae") + .resolve("bin") + .resolve("trae.cmd")) .filter(path -> Files.exists(path)); } }; @@ -229,10 +230,10 @@ public interface ExternalEditorType extends PrefsChoiceValue { @Override public Optional determineInstallation() { return Optional.of(Path.of(System.getenv("LOCALAPPDATA")) - .resolve("Programs") - .resolve("Microsoft VS Code") - .resolve("bin") - .resolve("code.cmd")) + .resolve("Programs") + .resolve("Microsoft VS Code") + .resolve("bin") + .resolve("code.cmd")) .filter(path -> Files.exists(path)); } }; @@ -257,10 +258,10 @@ public interface ExternalEditorType extends PrefsChoiceValue { @Override public Optional determineInstallation() { return Optional.of(Path.of(System.getenv("LOCALAPPDATA")) - .resolve("Programs") - .resolve("Microsoft VS Code Insiders") - .resolve("bin") - .resolve("code-insiders.cmd")) + .resolve("Programs") + .resolve("Microsoft VS Code Insiders") + .resolve("bin") + .resolve("code-insiders.cmd")) .filter(path -> Files.exists(path)); } }; @@ -341,7 +342,9 @@ public interface ExternalEditorType extends PrefsChoiceValue { @Override public ObservableValue toTranslatedString() { var customCommand = AppPrefs.get().customEditorCommand().getValue(); - if (customCommand == null || customCommand.isBlank() || customCommand.replace("$FILE", "").strip().contains(" ")) { + if (customCommand == null + || customCommand.isBlank() + || customCommand.replace("$FILE", "").strip().contains(" ")) { return ExternalEditorType.super.toTranslatedString(); } diff --git a/app/src/main/java/io/xpipe/app/prefs/IconsCategory.java b/app/src/main/java/io/xpipe/app/prefs/IconsCategory.java index 234e13811..b36fbfd1d 100644 --- a/app/src/main/java/io/xpipe/app/prefs/IconsCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/IconsCategory.java @@ -3,7 +3,6 @@ package io.xpipe.app.prefs; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.base.*; import io.xpipe.app.core.AppCache; -import io.xpipe.app.core.AppFont; import io.xpipe.app.core.AppFontSizes; import io.xpipe.app.core.window.AppDialog; import io.xpipe.app.icon.SystemIconManager; @@ -121,8 +120,9 @@ public class IconsCategory extends AppPrefsCategory { var path = dir.get().asLocalPath(); if (Files.isRegularFile(path)) { - throw ErrorEvent.expected(new IllegalArgumentException( - "A custom icon source must be a directory containing .svg files, not a single file")); + throw ErrorEvent.expected( + new IllegalArgumentException( + "A custom icon source must be a directory containing .svg files, not a single file")); } var source = SystemIconSource.Directory.builder() @@ -174,7 +174,8 @@ public class IconsCategory extends AppPrefsCategory { var cb = new CheckBox(); cb.setSelected(!disabled.contains(source.getId())); cb.selectedProperty().addListener((observable, oldValue, newValue) -> { - var set = new LinkedHashSet<>(AppCache.getNonNull("disabledIconSources", Set.class, () -> Set.of())); + var set = new LinkedHashSet<>( + AppCache.getNonNull("disabledIconSources", Set.class, () -> Set.of())); if (newValue) { set.remove(source.getId()); } else { diff --git a/app/src/main/java/io/xpipe/app/prefs/PasswordManagerCategory.java b/app/src/main/java/io/xpipe/app/prefs/PasswordManagerCategory.java index 415cfd226..90b99c000 100644 --- a/app/src/main/java/io/xpipe/app/prefs/PasswordManagerCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/PasswordManagerCategory.java @@ -2,30 +2,17 @@ package io.xpipe.app.prefs; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.base.ButtonComp; -import io.xpipe.app.comp.base.HorizontalComp; -import io.xpipe.app.comp.base.LabelComp; -import io.xpipe.app.comp.base.TextFieldComp; import io.xpipe.app.core.AppI18n; import io.xpipe.app.pwman.PasswordManager; import io.xpipe.app.util.*; -import javafx.application.Platform; -import javafx.beans.binding.Bindings; import javafx.beans.property.SimpleStringProperty; -import javafx.beans.property.StringProperty; -import javafx.geometry.Insets; -import javafx.geometry.Pos; -import javafx.scene.input.KeyCode; import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; import javafx.scene.layout.Region; -import atlantafx.base.theme.Styles; import org.kordamp.ikonli.javafx.FontIcon; -import java.time.Duration; -import java.util.List; - public class PasswordManagerCategory extends AppPrefsCategory { @Override diff --git a/app/src/main/java/io/xpipe/app/prefs/PasswordManagerTestComp.java b/app/src/main/java/io/xpipe/app/prefs/PasswordManagerTestComp.java index 3080ade08..23883127d 100644 --- a/app/src/main/java/io/xpipe/app/prefs/PasswordManagerTestComp.java +++ b/app/src/main/java/io/xpipe/app/prefs/PasswordManagerTestComp.java @@ -1,6 +1,5 @@ package io.xpipe.app.prefs; -import atlantafx.base.theme.Styles; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.SimpleComp; import io.xpipe.app.comp.base.ButtonComp; @@ -10,14 +9,16 @@ import io.xpipe.app.comp.base.TextFieldComp; import io.xpipe.app.core.AppI18n; import io.xpipe.app.util.GlobalTimer; import io.xpipe.app.util.ThreadHelper; + import javafx.application.Platform; import javafx.beans.binding.Bindings; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; -import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.input.KeyCode; import javafx.scene.layout.Region; + +import atlantafx.base.theme.Styles; import org.kordamp.ikonli.javafx.FontIcon; import java.time.Duration; @@ -27,7 +28,9 @@ public class PasswordManagerTestComp extends SimpleComp { private final StringProperty value; - public PasswordManagerTestComp(StringProperty value) {this.value = value;} + public PasswordManagerTestComp(StringProperty value) { + this.value = value; + } @Override protected Region createSimple() { @@ -42,8 +45,8 @@ public class PasswordManagerTestComp extends SimpleComp { () -> { return prefs.passwordManager.getValue() != null ? prefs.passwordManager - .getValue() - .getKeyPlaceholder() + .getValue() + .getKeyPlaceholder() : "?"; }, prefs.passwordManager))) @@ -56,8 +59,8 @@ public class PasswordManagerTestComp extends SimpleComp { } })), new ButtonComp(null, new FontIcon("mdi2p-play"), () -> { - testPasswordManager(value.get(), testPasswordManagerResult); - }) + testPasswordManager(value.get(), testPasswordManagerResult); + }) .tooltip(AppI18n.observable("test")) .styleClass(Styles.RIGHT_PILL))); testInput.apply(struc -> { @@ -70,9 +73,9 @@ public class PasswordManagerTestComp extends SimpleComp { }); testInput.hgrow(); - var testPasswordManager = new HorizontalComp(List.of( - testInput, new LabelComp(testPasswordManagerResult).apply(struc -> struc.get() - .setOpacity(0.8)))) + var testPasswordManager = new HorizontalComp( + List.of(testInput, new LabelComp(testPasswordManagerResult).apply(struc -> struc.get() + .setOpacity(0.8)))) .apply(struc -> struc.get().setAlignment(Pos.CENTER_LEFT)) .apply(struc -> struc.get().setFillHeight(true)); return testPasswordManager.createRegion(); diff --git a/app/src/main/java/io/xpipe/app/prefs/SshCategory.java b/app/src/main/java/io/xpipe/app/prefs/SshCategory.java index 3abcd4f47..8dd259eea 100644 --- a/app/src/main/java/io/xpipe/app/prefs/SshCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/SshCategory.java @@ -16,8 +16,7 @@ public class SshCategory extends AppPrefsCategory { var prefs = AppPrefs.get(); var options = new OptionsBuilder().addTitle("sshConfiguration"); if (OsType.getLocal() == OsType.WINDOWS) { - options.addComp(prefs.getCustomOptions("x11WslInstance").buildComp() - .maxWidth(600)); + options.addComp(prefs.getCustomOptions("x11WslInstance").buildComp().maxWidth(600)); } return options.buildComp(); } diff --git a/app/src/main/java/io/xpipe/app/prefs/SyncCategory.java b/app/src/main/java/io/xpipe/app/prefs/SyncCategory.java index a2e263b58..8de3d047c 100644 --- a/app/src/main/java/io/xpipe/app/prefs/SyncCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/SyncCategory.java @@ -68,11 +68,14 @@ public class SyncCategory extends AppPrefsCategory { .addComp(remoteRow, prefs.storageGitRemote) .addComp(testRow) .disable(prefs.storageGitRemote.isNull().or(prefs.enableGitStorage.not())) - .addComp(prefs.getCustomOptions("gitUsername").buildComp() + .addComp(prefs.getCustomOptions("gitUsername") + .buildComp() .maxWidth(600)) - .addComp(prefs.getCustomOptions("gitPassword").buildComp() + .addComp(prefs.getCustomOptions("gitPassword") + .buildComp() .maxWidth(600)) - .addComp(prefs.getCustomOptions("gitVaultIdentityStrategy").buildComp() + .addComp(prefs.getCustomOptions("gitVaultIdentityStrategy") + .buildComp() .maxWidth(600)) .nameAndDescription("browseVault") .addComp(new ButtonComp(AppI18n.observable("browseVaultButton"), () -> { diff --git a/app/src/main/java/io/xpipe/app/prefs/SystemCategory.java b/app/src/main/java/io/xpipe/app/prefs/SystemCategory.java index 450d6fa2f..0b248ae93 100644 --- a/app/src/main/java/io/xpipe/app/prefs/SystemCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/SystemCategory.java @@ -4,7 +4,6 @@ import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.base.ChoiceComp; import io.xpipe.app.ext.PrefsChoiceValue; import io.xpipe.app.util.OptionsBuilder; -import io.xpipe.core.process.OsType; public class SystemCategory extends AppPrefsCategory { diff --git a/app/src/main/java/io/xpipe/app/prefs/TerminalCategory.java b/app/src/main/java/io/xpipe/app/prefs/TerminalCategory.java index 34786c732..2081ed7ab 100644 --- a/app/src/main/java/io/xpipe/app/prefs/TerminalCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/TerminalCategory.java @@ -2,12 +2,12 @@ package io.xpipe.app.prefs; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.base.*; -import io.xpipe.app.hub.comp.StoreChoiceComp; -import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.core.AppI18n; import io.xpipe.app.ext.PrefsChoiceValue; import io.xpipe.app.ext.ProcessControlProvider; import io.xpipe.app.ext.ShellStore; +import io.xpipe.app.hub.comp.StoreChoiceComp; +import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStoreEntryRef; @@ -64,8 +64,10 @@ public class TerminalCategory extends AppPrefsCategory { // .sub(terminalInitScript()) .sub( new OptionsBuilder() - .pref(prefs.terminalAlwaysPauseOnExit).addToggle(prefs.terminalAlwaysPauseOnExit) - .pref(prefs.clearTerminalOnInit).addToggle(prefs.clearTerminalOnInit) + .pref(prefs.terminalAlwaysPauseOnExit) + .addToggle(prefs.terminalAlwaysPauseOnExit) + .pref(prefs.clearTerminalOnInit) + .addToggle(prefs.clearTerminalOnInit) // .pref(prefs.terminalPromptForRestart) // .addToggle(prefs.terminalPromptForRestart) ) diff --git a/app/src/main/java/io/xpipe/app/prefs/UpdateCheckComp.java b/app/src/main/java/io/xpipe/app/prefs/UpdateCheckComp.java index ef404307f..6ef72b0db 100644 --- a/app/src/main/java/io/xpipe/app/prefs/UpdateCheckComp.java +++ b/app/src/main/java/io/xpipe/app/prefs/UpdateCheckComp.java @@ -2,8 +2,8 @@ package io.xpipe.app.prefs; import io.xpipe.app.comp.SimpleComp; import io.xpipe.app.comp.base.TileButtonComp; -import io.xpipe.app.update.AppDistributionType; import io.xpipe.app.core.AppI18n; +import io.xpipe.app.update.AppDistributionType; import io.xpipe.app.update.UpdateAvailableDialog; import io.xpipe.app.util.PlatformThread; import io.xpipe.app.util.ThreadHelper; diff --git a/app/src/main/java/io/xpipe/app/pwman/BitwardenPasswordManager.java b/app/src/main/java/io/xpipe/app/pwman/BitwardenPasswordManager.java index bd00a5588..24f98bb89 100644 --- a/app/src/main/java/io/xpipe/app/pwman/BitwardenPasswordManager.java +++ b/app/src/main/java/io/xpipe/app/pwman/BitwardenPasswordManager.java @@ -7,11 +7,11 @@ import io.xpipe.app.util.*; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.ShellControl; import io.xpipe.core.process.ShellScript; - -import com.fasterxml.jackson.annotation.JsonTypeName; import io.xpipe.core.util.InPlaceSecretValue; import io.xpipe.core.util.JacksonMapper; +import com.fasterxml.jackson.annotation.JsonTypeName; + @JsonTypeName("bitwarden") public class BitwardenPasswordManager implements PasswordManager { @@ -61,11 +61,10 @@ public class BitwardenPasswordManager implements PasswordManager { sc.view().setSensitiveEnvironmentVariable("BW_SESSION", out); } - var cmd = CommandBuilder.of() - .add("bw", "get", "item") - .addLiteral(key) - .add("--nointeraction"); - var json = JacksonMapper.getDefault().readTree(sc.command(cmd).sensitive().readStdoutOrThrow()); + var cmd = + CommandBuilder.of().add("bw", "get", "item").addLiteral(key).add("--nointeraction"); + var json = JacksonMapper.getDefault() + .readTree(sc.command(cmd).sensitive().readStdoutOrThrow()); var login = json.required("login"); var user = login.required("username"); var password = login.required("password"); diff --git a/app/src/main/java/io/xpipe/app/pwman/DashlanePasswordManager.java b/app/src/main/java/io/xpipe/app/pwman/DashlanePasswordManager.java index 387fe007e..1aa6fcb2b 100644 --- a/app/src/main/java/io/xpipe/app/pwman/DashlanePasswordManager.java +++ b/app/src/main/java/io/xpipe/app/pwman/DashlanePasswordManager.java @@ -7,11 +7,11 @@ import io.xpipe.app.util.CommandSupport; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.ShellControl; import io.xpipe.core.process.ShellScript; - -import com.fasterxml.jackson.annotation.JsonTypeName; import io.xpipe.core.util.InPlaceSecretValue; import io.xpipe.core.util.JacksonMapper; +import com.fasterxml.jackson.annotation.JsonTypeName; + @JsonTypeName("dashlane") public class DashlanePasswordManager implements PasswordManager { @@ -53,7 +53,9 @@ public class DashlanePasswordManager implements PasswordManager { var tree = JacksonMapper.getDefault().readTree(out); var login = tree.get("login"); var password = tree.get("password"); - return new CredentialResult(login != null ? login.asText() : null, password != null ? InPlaceSecretValue.of(password.asText()) : null); + return new CredentialResult( + login != null ? login.asText() : null, + password != null ? InPlaceSecretValue.of(password.asText()) : null); } catch (Exception ex) { ErrorEvent.fromThrowable(ex).handle(); return null; diff --git a/app/src/main/java/io/xpipe/app/pwman/EnpassPasswordManager.java b/app/src/main/java/io/xpipe/app/pwman/EnpassPasswordManager.java index bc5df4279..6106f5206 100644 --- a/app/src/main/java/io/xpipe/app/pwman/EnpassPasswordManager.java +++ b/app/src/main/java/io/xpipe/app/pwman/EnpassPasswordManager.java @@ -1,6 +1,5 @@ package io.xpipe.app.pwman; -import com.fasterxml.jackson.annotation.JsonTypeName; import io.xpipe.app.comp.base.ContextualFileReferenceChoiceComp; import io.xpipe.app.ext.ProcessControlProvider; import io.xpipe.app.issue.ErrorEvent; @@ -11,10 +10,13 @@ import io.xpipe.core.process.ShellControl; import io.xpipe.core.store.FilePath; import io.xpipe.core.util.InPlaceSecretValue; import io.xpipe.core.util.JacksonMapper; + import javafx.application.Platform; import javafx.beans.property.Property; import javafx.beans.property.SimpleObjectProperty; import javafx.scene.control.TextField; + +import com.fasterxml.jackson.annotation.JsonTypeName; import lombok.Builder; import lombok.Getter; import lombok.ToString; @@ -47,8 +49,7 @@ public class EnpassPasswordManager implements PasswordManager { public static OptionsBuilder createOptions(Property p) { var prop = new SimpleObjectProperty<>(p.getValue().getVaultPath()); var comp = new ContextualFileReferenceChoiceComp( - new SimpleObjectProperty<>(DataStorage.get().local().ref()), - prop,null, List.of()); + new SimpleObjectProperty<>(DataStorage.get().local().ref()), prop, null, List.of()); comp.apply(struc -> { var text = (TextField) struc.get().getChildren().getFirst(); text.requestFocus(); @@ -67,7 +68,9 @@ public class EnpassPasswordManager implements PasswordManager { .addComp(comp, prop) .bind( () -> { - return EnpassPasswordManager.builder().vaultPath(prop.getValue()).build(); + return EnpassPasswordManager.builder() + .vaultPath(prop.getValue()) + .build(); }, p); } @@ -97,14 +100,25 @@ public class EnpassPasswordManager implements PasswordManager { vaultDir = vaultDir.getParent(); } - var pass = SecretManager.retrieve(new SecretRetrievalStrategy.Prompt(), "Enter Enpass vault master password", MASTER_PASSWORD_UUID, 0, true); + var pass = SecretManager.retrieve( + new SecretRetrievalStrategy.Prompt(), + "Enter Enpass vault master password", + MASTER_PASSWORD_UUID, + 0, + true); if (pass == null) { return null; } try { var sc = getOrStartShell(); - try (var command = sc.command(CommandBuilder.of().add("enpass-cli", "-json", "-vault").addFile(vaultDir).add("show").addQuoted(key)).sensitive().start()) { + try (var command = sc.command(CommandBuilder.of() + .add("enpass-cli", "-json", "-vault") + .addFile(vaultDir) + .add("show") + .addQuoted(key)) + .sensitive() + .start()) { ThreadHelper.sleep(50); sc.writeLine(pass.getSecretValue()); var out = command.readStdoutIfPossible(); @@ -112,13 +126,15 @@ public class EnpassPasswordManager implements PasswordManager { return null; } - var json = JacksonMapper.getDefault().readTree(out.get().lines().skip(1).collect(Collectors.joining("\n"))); + var json = JacksonMapper.getDefault() + .readTree(out.get().lines().skip(1).collect(Collectors.joining("\n"))); if (!json.isArray()) { return null; } if (json.size() == 0) { - throw ErrorEvent.expected(new IllegalArgumentException("No items were found matching the title " + key)); + throw ErrorEvent.expected( + new IllegalArgumentException("No items were found matching the title " + key)); } if (json.size() > 1) { @@ -129,12 +145,14 @@ public class EnpassPasswordManager implements PasswordManager { matches.add(title.asText()); } }); - throw ErrorEvent.expected(new IllegalArgumentException("Ambiguous item name, multiple password entries match: " + String.join(", ", matches))); + throw ErrorEvent.expected(new IllegalArgumentException( + "Ambiguous item name, multiple password entries match: " + String.join(", ", matches))); } var login = json.get(0).required("login").asText(); var secret = json.get(0).required("password").asText(); - return new CredentialResult(!login.isEmpty() ? login : null, !secret.isEmpty() ? InPlaceSecretValue.of(secret) : null); + return new CredentialResult( + !login.isEmpty() ? login : null, !secret.isEmpty() ? InPlaceSecretValue.of(secret) : null); } } catch (Exception ex) { ErrorEvent.fromThrowable(ex).handle(); diff --git a/app/src/main/java/io/xpipe/app/pwman/KeePassXcProxyClient.java b/app/src/main/java/io/xpipe/app/pwman/KeePassXcProxyClient.java index af1042bfc..3ae5f424a 100644 --- a/app/src/main/java/io/xpipe/app/pwman/KeePassXcProxyClient.java +++ b/app/src/main/java/io/xpipe/app/pwman/KeePassXcProxyClient.java @@ -287,7 +287,9 @@ public class KeePassXcProxyClient { var object = (ObjectNode) tree.required("entries").get(0); var usernameField = object.required("login").asText(); var passwordField = object.required("password").asText(); - return new PasswordManager.CredentialResult(usernameField.isEmpty() ? null : usernameField, passwordField.isEmpty() ? null : InPlaceSecretValue.of(passwordField)); + return new PasswordManager.CredentialResult( + usernameField.isEmpty() ? null : usernameField, + passwordField.isEmpty() ? null : InPlaceSecretValue.of(passwordField)); } /** diff --git a/app/src/main/java/io/xpipe/app/pwman/KeeperPasswordManager.java b/app/src/main/java/io/xpipe/app/pwman/KeeperPasswordManager.java index fae348b9e..5308f6f2c 100644 --- a/app/src/main/java/io/xpipe/app/pwman/KeeperPasswordManager.java +++ b/app/src/main/java/io/xpipe/app/pwman/KeeperPasswordManager.java @@ -1,6 +1,5 @@ package io.xpipe.app.pwman; -import com.fasterxml.jackson.databind.JsonNode; import io.xpipe.app.ext.ProcessControlProvider; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.terminal.TerminalLauncher; @@ -8,11 +7,12 @@ import io.xpipe.app.util.CommandSupport; import io.xpipe.app.util.SecretManager; import io.xpipe.app.util.SecretRetrievalStrategy; import io.xpipe.core.process.*; - -import com.fasterxml.jackson.annotation.JsonTypeName; import io.xpipe.core.util.InPlaceSecretValue; import io.xpipe.core.util.JacksonMapper; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.databind.JsonNode; + import java.util.UUID; @JsonTypeName("keeper") diff --git a/app/src/main/java/io/xpipe/app/pwman/LastpassPasswordManager.java b/app/src/main/java/io/xpipe/app/pwman/LastpassPasswordManager.java index 55ee593c8..b06434354 100644 --- a/app/src/main/java/io/xpipe/app/pwman/LastpassPasswordManager.java +++ b/app/src/main/java/io/xpipe/app/pwman/LastpassPasswordManager.java @@ -5,11 +5,11 @@ import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.terminal.TerminalLauncher; import io.xpipe.app.util.*; import io.xpipe.core.process.*; - -import com.fasterxml.jackson.annotation.JsonTypeName; import io.xpipe.core.util.InPlaceSecretValue; import io.xpipe.core.util.JacksonMapper; +import com.fasterxml.jackson.annotation.JsonTypeName; + import java.util.ArrayList; @JsonTypeName("lastpass") @@ -43,7 +43,9 @@ public class LastpassPasswordManager implements PasswordManager { if (loggedIn.isEmpty() || loggedIn.get().contains("Logged in as (null)")) { var email = AsktextAlert.query("Enter LastPass account email address to log in"); if (email.isPresent()) { - var script = ShellScript.lines(sc.getShellDialect().getEchoCommand("Log in into your LastPass account from the CLI:", false), + var script = ShellScript.lines( + sc.getShellDialect() + .getEchoCommand("Log in into your LastPass account from the CLI:", false), "lpass login --trust \"" + email.get() + "\""); TerminalLauncher.openDirect("LastPass login", script); } @@ -66,12 +68,15 @@ public class LastpassPasswordManager implements PasswordManager { matches.add(title.asText()); } }); - throw ErrorEvent.expected(new IllegalArgumentException("Ambiguous item name, multiple password entries match: " + String.join(", ", matches))); + throw ErrorEvent.expected(new IllegalArgumentException( + "Ambiguous item name, multiple password entries match: " + String.join(", ", matches))); } var username = tree.get(0).required("username").asText(); var password = tree.get(0).required("password").asText(); - return new CredentialResult(!username.isEmpty() ? username : null, !password.isEmpty() ? InPlaceSecretValue.of(password) : null); + return new CredentialResult( + !username.isEmpty() ? username : null, + !password.isEmpty() ? InPlaceSecretValue.of(password) : null); } catch (Exception ex) { ErrorEvent.fromThrowable(ex).handle(); return null; diff --git a/app/src/main/java/io/xpipe/app/pwman/OnePasswordManager.java b/app/src/main/java/io/xpipe/app/pwman/OnePasswordManager.java index 147656e6b..e58191087 100644 --- a/app/src/main/java/io/xpipe/app/pwman/OnePasswordManager.java +++ b/app/src/main/java/io/xpipe/app/pwman/OnePasswordManager.java @@ -6,11 +6,11 @@ import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.util.CommandSupport; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.ShellControl; - -import com.fasterxml.jackson.annotation.JsonTypeName; import io.xpipe.core.util.InPlaceSecretValue; import io.xpipe.core.util.JacksonMapper; +import com.fasterxml.jackson.annotation.JsonTypeName; + @JsonTypeName("onePassword") public class OnePasswordManager implements PasswordManager { @@ -51,7 +51,9 @@ public class OnePasswordManager implements PasswordManager { var username = tree.get(0).get("value"); var password = tree.get(1).get("value"); - return new CredentialResult(username != null ? username.asText() : null, password != null ? InPlaceSecretValue.of(password.asText()) : null); + return new CredentialResult( + username != null ? username.asText() : null, + password != null ? InPlaceSecretValue.of(password.asText()) : null); } catch (Exception e) { ErrorEvent.fromThrowable(e).handle(); return null; diff --git a/app/src/main/java/io/xpipe/app/pwman/PsonoPasswordManager.java b/app/src/main/java/io/xpipe/app/pwman/PsonoPasswordManager.java index fdd737e5a..bca3a137a 100644 --- a/app/src/main/java/io/xpipe/app/pwman/PsonoPasswordManager.java +++ b/app/src/main/java/io/xpipe/app/pwman/PsonoPasswordManager.java @@ -1,6 +1,5 @@ package io.xpipe.app.pwman; -import com.fasterxml.jackson.annotation.JsonTypeName; import io.xpipe.app.comp.base.SecretFieldComp; import io.xpipe.app.comp.base.TextFieldComp; import io.xpipe.app.core.AppI18n; @@ -11,9 +10,12 @@ import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.ShellControl; import io.xpipe.core.util.InPlaceSecretValue; import io.xpipe.core.util.JacksonMapper; + import javafx.beans.property.Property; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; + +import com.fasterxml.jackson.annotation.JsonTypeName; import lombok.Builder; import lombok.Getter; import lombok.ToString; @@ -36,16 +38,24 @@ public class PsonoPasswordManager implements PasswordManager { var serverUrl = new SimpleStringProperty(p.getValue().getServerUrl()); return new OptionsBuilder() .nameAndDescription("psonoServerUrl") - .addComp(new TextFieldComp(serverUrl).apply(struc -> { - struc.get().setPromptText("https://www.psono.pw/server"); - }).maxWidth(600), serverUrl) + .addComp( + new TextFieldComp(serverUrl) + .apply(struc -> { + struc.get().setPromptText("https://www.psono.pw/server"); + }) + .maxWidth(600), + serverUrl) .nameAndDescription("psonoApiKey") .addComp(new SecretFieldComp(apiKey, false).maxWidth(600), apiKey) .nameAndDescription("psonoApiSecretKey") .addComp(new SecretFieldComp(apiSecretKey, false).maxWidth(600), apiSecretKey) .bind( () -> { - return PsonoPasswordManager.builder().apiKey(apiKey.get()).apiSecretKey(apiSecretKey.get()).serverUrl(serverUrl.get()).build(); + return PsonoPasswordManager.builder() + .apiKey(apiKey.get()) + .apiSecretKey(apiSecretKey.get()) + .serverUrl(serverUrl.get()) + .build(); }, p); } @@ -74,7 +84,9 @@ public class PsonoPasswordManager implements PasswordManager { try { getOrStartShell().view().setSensitiveEnvironmentVariable("PSONO_CI_API_KEY_ID", apiKey.getSecretValue()); - getOrStartShell().view().setSensitiveEnvironmentVariable("PSONO_CI_API_SECRET_KEY_HEX", apiSecretKey.getSecretValue()); + getOrStartShell() + .view() + .setSensitiveEnvironmentVariable("PSONO_CI_API_SECRET_KEY_HEX", apiSecretKey.getSecretValue()); var cmd = getOrStartShell() .command(CommandBuilder.of() .add("psonoci") @@ -87,7 +99,9 @@ public class PsonoPasswordManager implements PasswordManager { var r = JacksonMapper.getDefault().readTree(cmd.readStdoutOrThrow()); var username = r.required("username"); var password = r.required("password"); - return new CredentialResult(username.isNull() ? null : username.asText(), password.isNull() ? null : InPlaceSecretValue.of(password.asText())); + return new CredentialResult( + username.isNull() ? null : username.asText(), + password.isNull() ? null : InPlaceSecretValue.of(password.asText())); } catch (Exception e) { ErrorEvent.fromThrowable(e).handle(); return null; diff --git a/app/src/main/java/io/xpipe/app/pwman/WindowsCredentialManager.java b/app/src/main/java/io/xpipe/app/pwman/WindowsCredentialManager.java index 55b002677..cebe2e3e4 100644 --- a/app/src/main/java/io/xpipe/app/pwman/WindowsCredentialManager.java +++ b/app/src/main/java/io/xpipe/app/pwman/WindowsCredentialManager.java @@ -2,9 +2,9 @@ package io.xpipe.app.pwman; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.util.LocalShell; +import io.xpipe.core.util.InPlaceSecretValue; import com.fasterxml.jackson.annotation.JsonTypeName; -import io.xpipe.core.util.InPlaceSecretValue; import lombok.Value; @JsonTypeName("windowsCredentialManager") @@ -88,7 +88,7 @@ public class WindowsCredentialManager implements PasswordManager { LocalShell.getLocalPowershell().command(cmd).execute(); } - var username =LocalShell.getLocalPowershell() + var username = LocalShell.getLocalPowershell() .command("[CredManager.Credential]::GetUserName(\"" + key.replaceAll("\"", "`\"") + "\")") .sensitive() .readStdoutOrThrow(); diff --git a/app/src/main/java/io/xpipe/app/rdp/CustomRdpClient.java b/app/src/main/java/io/xpipe/app/rdp/CustomRdpClient.java index 9980e2f6e..d1fa871ce 100644 --- a/app/src/main/java/io/xpipe/app/rdp/CustomRdpClient.java +++ b/app/src/main/java/io/xpipe/app/rdp/CustomRdpClient.java @@ -17,10 +17,14 @@ public class CustomRdpClient implements ExternalApplicationType, ExternalRdpClie throw ErrorEvent.expected(new IllegalStateException("No custom RDP command specified")); } - var format = customCommand.toLowerCase(Locale.ROOT).contains("$file") ? customCommand : customCommand + " $FILE"; + var format = + customCommand.toLowerCase(Locale.ROOT).contains("$file") ? customCommand : customCommand + " $FILE"; ExternalApplicationHelper.startAsync(CommandBuilder.of() - .add(ExternalApplicationHelper.replaceVariableArgument(format, "FILE", - writeRdpConfigFile(configuration.getTitle(), configuration.getConfig()).toString()))); + .add(ExternalApplicationHelper.replaceVariableArgument( + format, + "FILE", + writeRdpConfigFile(configuration.getTitle(), configuration.getConfig()) + .toString()))); } @Override diff --git a/app/src/main/java/io/xpipe/app/rdp/DevolutionsRdpClient.java b/app/src/main/java/io/xpipe/app/rdp/DevolutionsRdpClient.java index a41f11c96..2ca3abce6 100644 --- a/app/src/main/java/io/xpipe/app/rdp/DevolutionsRdpClient.java +++ b/app/src/main/java/io/xpipe/app/rdp/DevolutionsRdpClient.java @@ -5,6 +5,7 @@ import io.xpipe.app.prefs.ExternalApplicationType; import io.xpipe.app.util.ThreadHelper; import io.xpipe.app.util.WindowsRegistry; import io.xpipe.core.process.CommandBuilder; + import org.apache.commons.io.FileUtils; import java.nio.file.Path; @@ -25,7 +26,9 @@ public class DevolutionsRdpClient implements ExternalApplicationType.WindowsType @Override public Optional determineInstallation() { try { - var r = WindowsRegistry.local().readStringValueIfPresent(WindowsRegistry.HKEY_LOCAL_MACHINE, "SOFTWARE\\Classes\\rdm\\DefaultIcon"); + var r = WindowsRegistry.local() + .readStringValueIfPresent( + WindowsRegistry.HKEY_LOCAL_MACHINE, "SOFTWARE\\Classes\\rdm\\DefaultIcon"); return r.map(Path::of); } catch (Exception e) { ErrorEvent.fromThrowable(e).omit().handle(); diff --git a/app/src/main/java/io/xpipe/app/rdp/ExternalRdpClient.java b/app/src/main/java/io/xpipe/app/rdp/ExternalRdpClient.java index 17790c0a6..d590b94eb 100644 --- a/app/src/main/java/io/xpipe/app/rdp/ExternalRdpClient.java +++ b/app/src/main/java/io/xpipe/app/rdp/ExternalRdpClient.java @@ -89,5 +89,4 @@ public interface ExternalRdpClient extends PrefsChoiceValue { Files.writeString(file, string); return file; } - } diff --git a/app/src/main/java/io/xpipe/app/rdp/MstscRdpClient.java b/app/src/main/java/io/xpipe/app/rdp/MstscRdpClient.java index 4e03fe8bb..1375ed4b0 100644 --- a/app/src/main/java/io/xpipe/app/rdp/MstscRdpClient.java +++ b/app/src/main/java/io/xpipe/app/rdp/MstscRdpClient.java @@ -6,17 +6,19 @@ import io.xpipe.app.util.RdpConfig; import io.xpipe.app.util.ThreadHelper; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.util.SecretValue; + import org.apache.commons.io.FileUtils; import java.util.Map; -public class MstscRdpClient implements ExternalApplicationType.PathApplication, ExternalRdpClient{ +public class MstscRdpClient implements ExternalApplicationType.PathApplication, ExternalRdpClient { @Override public void launch(RdpLaunchConfig configuration) throws Exception { var adaptedRdpConfig = getAdaptedConfig(configuration); var file = writeRdpConfigFile(configuration.getTitle(), adaptedRdpConfig); - LocalShell.getShell().executeSimpleCommand(CommandBuilder.of().add(getExecutable()).addFile(file.toString())); + LocalShell.getShell() + .executeSimpleCommand(CommandBuilder.of().add(getExecutable()).addFile(file.toString())); ThreadHelper.runFailableAsync(() -> { ThreadHelper.sleep(1000); FileUtils.deleteQuietly(file.toFile()); @@ -43,17 +45,19 @@ public class MstscRdpClient implements ExternalApplicationType.PathApplication, return input; } - var adapted = input.overlay( - Map.of("password 51", new RdpConfig.TypedValue("b", encrypt(pass)), "prompt for credentials", new RdpConfig.TypedValue("i", "0"))); + var adapted = input.overlay(Map.of( + "password 51", + new RdpConfig.TypedValue("b", encrypt(pass)), + "prompt for credentials", + new RdpConfig.TypedValue("i", "0"))); return adapted; } private String encrypt(SecretValue password) throws Exception { var ps = LocalShell.getLocalPowershell(); var cmd = ps.command(CommandBuilder.of() - .add(sc -> "(" + - sc.getShellDialect().literalArgument(password.getSecretValue()) + - " | ConvertTo-SecureString -AsPlainText -Force) | ConvertFrom-SecureString")); + .add(sc -> "(" + sc.getShellDialect().literalArgument(password.getSecretValue()) + + " | ConvertTo-SecureString -AsPlainText -Force) | ConvertFrom-SecureString")); cmd.sensitive(); return cmd.readStdoutOrThrow(); } diff --git a/app/src/main/java/io/xpipe/app/rdp/RdpLaunchConfig.java b/app/src/main/java/io/xpipe/app/rdp/RdpLaunchConfig.java index e71df3ba6..b1376d798 100644 --- a/app/src/main/java/io/xpipe/app/rdp/RdpLaunchConfig.java +++ b/app/src/main/java/io/xpipe/app/rdp/RdpLaunchConfig.java @@ -2,6 +2,7 @@ package io.xpipe.app.rdp; import io.xpipe.app.util.RdpConfig; import io.xpipe.core.util.SecretValue; + import lombok.Value; import java.util.UUID; diff --git a/app/src/main/java/io/xpipe/app/rdp/RemminaRdpClient.java b/app/src/main/java/io/xpipe/app/rdp/RemminaRdpClient.java index 7ecf51e0d..5bf4e8487 100644 --- a/app/src/main/java/io/xpipe/app/rdp/RemminaRdpClient.java +++ b/app/src/main/java/io/xpipe/app/rdp/RemminaRdpClient.java @@ -3,16 +3,9 @@ package io.xpipe.app.rdp; import io.xpipe.app.prefs.ExternalApplicationType; import io.xpipe.app.util.*; import io.xpipe.core.process.CommandBuilder; -import io.xpipe.core.process.OsType; -import io.xpipe.core.util.SecretValue; + import org.apache.commons.io.FileUtils; -import javax.crypto.Cipher; -import javax.crypto.spec.IvParameterSpec; -import javax.crypto.spec.SecretKeySpec; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.*; public class RemminaRdpClient implements ExternalApplicationType.PathApplication, ExternalRdpClient { diff --git a/app/src/main/java/io/xpipe/app/rdp/RemoteDesktopAppRdpClient.java b/app/src/main/java/io/xpipe/app/rdp/RemoteDesktopAppRdpClient.java index 99f34f178..1d99d06ef 100644 --- a/app/src/main/java/io/xpipe/app/rdp/RemoteDesktopAppRdpClient.java +++ b/app/src/main/java/io/xpipe/app/rdp/RemoteDesktopAppRdpClient.java @@ -9,10 +9,11 @@ public class RemoteDesktopAppRdpClient implements ExternalApplicationType.MacApp @Override public void launch(RdpLaunchConfig configuration) throws Exception { var file = writeRdpConfigFile(configuration.getTitle(), configuration.getConfig()); - LocalShell.getShell().executeSimpleCommand(CommandBuilder.of() - .add("open", "-a") - .addQuoted("Microsoft Remote Desktop.app") - .addFile(file.toString())); + LocalShell.getShell() + .executeSimpleCommand(CommandBuilder.of() + .add("open", "-a") + .addQuoted("Microsoft Remote Desktop.app") + .addFile(file.toString())); } @Override diff --git a/app/src/main/java/io/xpipe/app/rdp/WindowsAppRdpClient.java b/app/src/main/java/io/xpipe/app/rdp/WindowsAppRdpClient.java index 1ca4bcb0e..d06d8fe51 100644 --- a/app/src/main/java/io/xpipe/app/rdp/WindowsAppRdpClient.java +++ b/app/src/main/java/io/xpipe/app/rdp/WindowsAppRdpClient.java @@ -4,12 +4,16 @@ import io.xpipe.app.prefs.ExternalApplicationType; import io.xpipe.app.util.LocalShell; import io.xpipe.core.process.CommandBuilder; -public class WindowsAppRdpClient implements ExternalApplicationType.MacApplication, ExternalRdpClient { +public class WindowsAppRdpClient implements ExternalApplicationType.MacApplication, ExternalRdpClient { @Override public void launch(RdpLaunchConfig configuration) throws Exception { var file = writeRdpConfigFile(configuration.getTitle(), configuration.getConfig()); - LocalShell.getShell().executeSimpleCommand(CommandBuilder.of().add("open", "-a").addQuoted("Windows App.app").addFile(file.toString())); + LocalShell.getShell() + .executeSimpleCommand(CommandBuilder.of() + .add("open", "-a") + .addQuoted("Windows App.app") + .addFile(file.toString())); } @Override diff --git a/app/src/main/java/io/xpipe/app/storage/DataStorage.java b/app/src/main/java/io/xpipe/app/storage/DataStorage.java index 2491a6c29..8084c2d89 100644 --- a/app/src/main/java/io/xpipe/app/storage/DataStorage.java +++ b/app/src/main/java/io/xpipe/app/storage/DataStorage.java @@ -1,9 +1,9 @@ package io.xpipe.app.storage; -import io.xpipe.app.hub.comp.StoreSortMode; import io.xpipe.app.core.AppProperties; import io.xpipe.app.ext.LocalStore; import io.xpipe.app.ext.NameableStore; +import io.xpipe.app.hub.comp.StoreSortMode; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.issue.TrackEvent; import io.xpipe.app.util.FixedHierarchyStore; diff --git a/app/src/main/java/io/xpipe/app/storage/DataStoreCategoryConfig.java b/app/src/main/java/io/xpipe/app/storage/DataStoreCategoryConfig.java index 869cad748..8bf80f51b 100644 --- a/app/src/main/java/io/xpipe/app/storage/DataStoreCategoryConfig.java +++ b/app/src/main/java/io/xpipe/app/storage/DataStoreCategoryConfig.java @@ -44,7 +44,8 @@ public class DataStoreCategoryConfig { readOnly = config.readOnly; } } - return new DataStoreCategoryConfig(color, dontAllowScripts, warnOnAllModifications, sync, readOnly, defaultIdentityStore); + return new DataStoreCategoryConfig( + color, dontAllowScripts, warnOnAllModifications, sync, readOnly, defaultIdentityStore); } @With diff --git a/app/src/main/java/io/xpipe/app/storage/ImpersistentStorage.java b/app/src/main/java/io/xpipe/app/storage/ImpersistentStorage.java index c683ed8ed..b30362184 100644 --- a/app/src/main/java/io/xpipe/app/storage/ImpersistentStorage.java +++ b/app/src/main/java/io/xpipe/app/storage/ImpersistentStorage.java @@ -1,7 +1,7 @@ package io.xpipe.app.storage; -import io.xpipe.app.hub.comp.StoreSortMode; import io.xpipe.app.ext.LocalStore; +import io.xpipe.app.hub.comp.StoreSortMode; import io.xpipe.app.util.EncryptionKey; import java.time.Instant; diff --git a/app/src/main/java/io/xpipe/app/storage/StandardStorage.java b/app/src/main/java/io/xpipe/app/storage/StandardStorage.java index d7af0fc05..f6976759c 100644 --- a/app/src/main/java/io/xpipe/app/storage/StandardStorage.java +++ b/app/src/main/java/io/xpipe/app/storage/StandardStorage.java @@ -20,7 +20,6 @@ import java.util.*; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.ReentrantLock; -import java.util.stream.Collectors; import java.util.stream.Stream; import javax.crypto.SecretKey; @@ -503,7 +502,8 @@ public class StandardStorage extends DataStorage { vaultKey = EncryptionKey.getVaultSecretKey(id); } } catch (Exception e) { - ErrorEvent.fromThrowable("Unable to load vault key file " + file + " to decrypt vault contents. Is it corrupted?", e) + ErrorEvent.fromThrowable( + "Unable to load vault key file " + file + " to decrypt vault contents. Is it corrupted?", e) .terminal(true) .build() .handle(); diff --git a/app/src/main/java/io/xpipe/app/terminal/AlacrittyTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/AlacrittyTerminalType.java index 30093a8d0..099ffac97 100644 --- a/app/src/main/java/io/xpipe/app/terminal/AlacrittyTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/AlacrittyTerminalType.java @@ -45,10 +45,7 @@ public interface AlacrittyTerminalType extends ExternalTerminalType, TrackableTe // Alacritty is bugged and will not accept arguments with spaces even if they are correctly passed/escaped // So this will not work when the script file has spaces - b.add("-t") - .addQuoted(configuration.getCleanTitle()) - .add("-e") - .add(configuration.getDialectLaunchCommand()); + b.add("-t").addQuoted(configuration.getCleanTitle()).add("-e").add(configuration.getDialectLaunchCommand()); launch(b); } @@ -68,7 +65,7 @@ public interface AlacrittyTerminalType extends ExternalTerminalType, TrackableTe } } - class Linux implements ExternalApplicationType.PathApplication, AlacrittyTerminalType { + class Linux implements ExternalApplicationType.PathApplication, AlacrittyTerminalType { @Override public String getExecutable() { @@ -91,12 +88,13 @@ public interface AlacrittyTerminalType extends ExternalTerminalType, TrackableTe .add("-t") .addQuoted(configuration.getCleanTitle()) .add("-e") - .addFile(configuration.getScriptFile());; + .addFile(configuration.getScriptFile()); + ; launch(b); } } - class MacOs implements ExternalApplicationType.MacApplication, ExternalTerminalType, TrackableTerminalType { + class MacOs implements ExternalApplicationType.MacApplication, ExternalTerminalType, TrackableTerminalType { @Override public TerminalOpenFormat getOpenFormat() { diff --git a/app/src/main/java/io/xpipe/app/terminal/CmdTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/CmdTerminalType.java index a417eca6e..65d81aae1 100644 --- a/app/src/main/java/io/xpipe/app/terminal/CmdTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/CmdTerminalType.java @@ -2,13 +2,11 @@ package io.xpipe.app.terminal; import io.xpipe.app.ext.ProcessControlProvider; import io.xpipe.app.prefs.ExternalApplicationType; -import io.xpipe.app.prefs.ExternalEditorType; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.ShellDialects; -import java.nio.file.Path; - -public class CmdTerminalType implements ExternalApplicationType.PathApplication, ExternalTerminalType, TrackableTerminalType { +public class CmdTerminalType + implements ExternalApplicationType.PathApplication, ExternalTerminalType, TrackableTerminalType { @Override public boolean supportsEscapes() { diff --git a/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java index 2153f5a0e..eccf4405d 100644 --- a/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java @@ -1,10 +1,10 @@ package io.xpipe.app.terminal; -import io.xpipe.app.update.AppDistributionType; import io.xpipe.app.ext.PrefsChoiceValue; import io.xpipe.app.ext.ProcessControlProvider; import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.prefs.ExternalApplicationType; +import io.xpipe.app.update.AppDistributionType; import io.xpipe.core.process.*; import lombok.Getter; @@ -681,8 +681,10 @@ public interface ExternalTerminalType extends PrefsChoiceValue { @Getter private final String id; + @Getter private final String executable; + private final boolean async; public SimplePathType(String id, String executable, boolean async) { @@ -704,5 +706,4 @@ public interface ExternalTerminalType extends PrefsChoiceValue { protected abstract CommandBuilder toCommand(TerminalLaunchConfiguration configuration); } - } diff --git a/app/src/main/java/io/xpipe/app/terminal/GnomeTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/GnomeTerminalType.java index e11911a6c..e715bb1fd 100644 --- a/app/src/main/java/io/xpipe/app/terminal/GnomeTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/GnomeTerminalType.java @@ -32,7 +32,8 @@ public class GnomeTerminalType implements ExternalApplicationType.PathApplicatio @Override public void launch(TerminalLaunchConfiguration configuration) throws Exception { try (ShellControl pc = LocalShell.getShell()) { - CommandSupport.isInPathOrThrow(pc, getExecutable(), toTranslatedString().getValue(), null); + CommandSupport.isInPathOrThrow( + pc, getExecutable(), toTranslatedString().getValue(), null); var toExecute = CommandBuilder.of() .add(getExecutable(), "-v", "--title") diff --git a/app/src/main/java/io/xpipe/app/terminal/ITerm2TerminalType.java b/app/src/main/java/io/xpipe/app/terminal/ITerm2TerminalType.java index 904e093a8..ecdccd7b6 100644 --- a/app/src/main/java/io/xpipe/app/terminal/ITerm2TerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/ITerm2TerminalType.java @@ -33,10 +33,11 @@ public class ITerm2TerminalType implements ExternalApplicationType.MacApplicatio @Override public void launch(TerminalLaunchConfiguration configuration) throws Exception { - LocalShell.getShell().executeSimpleCommand(CommandBuilder.of() - .add("open", "-a") - .addQuoted("iTerm.app") - .addFile(configuration.getScriptFile())); + LocalShell.getShell() + .executeSimpleCommand(CommandBuilder.of() + .add("open", "-a") + .addQuoted("iTerm.app") + .addFile(configuration.getScriptFile())); } @Override diff --git a/app/src/main/java/io/xpipe/app/terminal/KonsoleTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/KonsoleTerminalType.java index 988d09eff..4e3336ecb 100644 --- a/app/src/main/java/io/xpipe/app/terminal/KonsoleTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/KonsoleTerminalType.java @@ -11,7 +11,9 @@ import java.nio.file.Path; public class KonsoleTerminalType extends ExternalTerminalType.SimplePathType { - public KonsoleTerminalType() {super("app.konsole", "konsole", true);} + public KonsoleTerminalType() { + super("app.konsole", "konsole", true); + } @Override public String getWebsite() { @@ -45,7 +47,10 @@ public class KonsoleTerminalType extends ExternalTerminalType.SimplePathType { // Note for later: When debugging konsole launches, it will always open as a child process of // IntelliJ/XPipe even though we try to detach it. // This is not the case for production where it works as expected - return CommandBuilder.of().addIf(configuration.isPreferTabs(), "--new-tab").add("-e").addFile(configuration.getScriptFile()); + return CommandBuilder.of() + .addIf(configuration.isPreferTabs(), "--new-tab") + .add("-e") + .addFile(configuration.getScriptFile()); } private synchronized void configureSingleInstanceMode() { @@ -64,9 +69,9 @@ public class KonsoleTerminalType extends ExternalTerminalType.SimplePathType { var contains = content.contains("UseSingleInstance=true"); if (!contains) { var index = content.indexOf("[KonsoleWindow]"); - var augmented = index != -1 ? - content.replace("[KonsoleWindow]", "[KonsoleWindow]\nUseSingleInstance=true") : - content + "\n\n[KonsoleWindow]\nUseSingleInstance=true\n"; + var augmented = index != -1 + ? content.replace("[KonsoleWindow]", "[KonsoleWindow]\nUseSingleInstance=true") + : content + "\n\n[KonsoleWindow]\nUseSingleInstance=true\n"; Files.writeString(config, augmented); } diff --git a/app/src/main/java/io/xpipe/app/terminal/MacOsTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/MacOsTerminalType.java index a8ffabe21..a24645f7a 100644 --- a/app/src/main/java/io/xpipe/app/terminal/MacOsTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/MacOsTerminalType.java @@ -28,10 +28,11 @@ public class MacOsTerminalType implements ExternalApplicationType.MacApplication @Override public void launch(TerminalLaunchConfiguration configuration) throws Exception { - LocalShell.getShell().executeSimpleCommand(CommandBuilder.of() - .add("open", "-a") - .addQuoted("Terminal.app") - .addFile(configuration.getScriptFile())); + LocalShell.getShell() + .executeSimpleCommand(CommandBuilder.of() + .add("open", "-a") + .addQuoted("Terminal.app") + .addFile(configuration.getScriptFile())); } @Override diff --git a/app/src/main/java/io/xpipe/app/terminal/MobaXTermTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/MobaXTermTerminalType.java index 8df96d52c..3c1127b0a 100644 --- a/app/src/main/java/io/xpipe/app/terminal/MobaXTermTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/MobaXTermTerminalType.java @@ -71,9 +71,7 @@ public class MobaXTermTerminalType implements ExternalApplicationType.WindowsTyp var script = ShellTemp.getLocalTempDataDirectory("mobaxpipe.sh"); Files.writeString(Path.of(script.toString()), "#!/usr/bin/env bash\n" + rawCommand); var fixedFile = script.toString().replaceAll("\\\\", "/").replaceAll("\\s", "\\$0"); - launch(CommandBuilder.of() - .add("-newtab") - .add(fixedFile)); + launch(CommandBuilder.of().add("-newtab").add(fixedFile)); } } diff --git a/app/src/main/java/io/xpipe/app/terminal/PtyxisTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/PtyxisTerminalType.java index 384a0d4e7..6e4cf85e4 100644 --- a/app/src/main/java/io/xpipe/app/terminal/PtyxisTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/PtyxisTerminalType.java @@ -34,6 +34,7 @@ public class PtyxisTerminalType implements ExternalApplicationType.PathApplicati .add(configuration.getDialectLaunchCommand()); launch(toExecute); } + @Override public String getExecutable() { return "ptyxis"; diff --git a/app/src/main/java/io/xpipe/app/terminal/TabbyTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/TabbyTerminalType.java index ad4dd4474..46697b9e8 100644 --- a/app/src/main/java/io/xpipe/app/terminal/TabbyTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/TabbyTerminalType.java @@ -69,17 +69,17 @@ public interface TabbyTerminalType extends ExternalTerminalType, TrackableTermin if (configuration.getScriptDialect().equals(ShellDialects.CMD)) { // It also freezes with any other input than .bat files, why? launch(CommandBuilder.of() - .add("run") - .addFile(configuration.getScriptFile()) - .discardAllOutput()); + .add("run") + .addFile(configuration.getScriptFile()) + .discardAllOutput()); } else { // This is probably not going to work as it does not launch a bat file launch(CommandBuilder.of() - .add("run") - .add(sc -> configuration - .getDialectLaunchCommand() - .buildFull(sc) - .replaceFirst("\\.exe", "")) + .add("run") + .add(sc -> configuration + .getDialectLaunchCommand() + .buildFull(sc) + .replaceFirst("\\.exe", "")) .discardAllOutput()); } } diff --git a/app/src/main/java/io/xpipe/app/terminal/TerminalDockComp.java b/app/src/main/java/io/xpipe/app/terminal/TerminalDockComp.java index f7e0145e4..f34bdb9f1 100644 --- a/app/src/main/java/io/xpipe/app/terminal/TerminalDockComp.java +++ b/app/src/main/java/io/xpipe/app/terminal/TerminalDockComp.java @@ -23,7 +23,6 @@ import javafx.scene.layout.Region; import javafx.scene.layout.StackPane; import javafx.stage.WindowEvent; -import atlantafx.base.controls.RingProgressIndicator; import org.kordamp.ikonli.javafx.FontIcon; import java.util.concurrent.atomic.AtomicReference; diff --git a/app/src/main/java/io/xpipe/app/terminal/TerminalLaunchConfiguration.java b/app/src/main/java/io/xpipe/app/terminal/TerminalLaunchConfiguration.java index 798c1d6bc..ba3438c35 100644 --- a/app/src/main/java/io/xpipe/app/terminal/TerminalLaunchConfiguration.java +++ b/app/src/main/java/io/xpipe/app/terminal/TerminalLaunchConfiguration.java @@ -76,8 +76,10 @@ public class TerminalLaunchConfiguration { .replaceAll(" ", "_")); try (var sc = LocalShell.getShell().start()) { if (OsType.getLocal() == OsType.WINDOWS) { - var launcherScript = - ScriptHelper.createExecScript(ShellDialects.POWERSHELL, sc, ShellDialects.POWERSHELL.terminalLauncherScript(request, adjustedTitle, alwaysPromptRestart)); + var launcherScript = ScriptHelper.createExecScript( + ShellDialects.POWERSHELL, + sc, + ShellDialects.POWERSHELL.terminalLauncherScript(request, adjustedTitle, alwaysPromptRestart)); var content = """ echo 'Transcript started, output file is "sessions\\%s"' @@ -110,8 +112,8 @@ public class TerminalLaunchConfiguration { "Logging requires the script command to be installed. " + suffix)); } - var launcherScript = ScriptHelper.createExecScript(sc, - sc.getShellDialect().terminalLauncherScript(request, adjustedTitle, alwaysPromptRestart)); + var launcherScript = ScriptHelper.createExecScript( + sc, sc.getShellDialect().terminalLauncherScript(request, adjustedTitle, alwaysPromptRestart)); var content = sc.getOsType() == OsType.MACOS || sc.getOsType() == OsType.BSD ? """ echo "Transcript started, output file is sessions/%s" diff --git a/app/src/main/java/io/xpipe/app/terminal/WezTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/WezTerminalType.java index 12c8d7371..04bf1a451 100644 --- a/app/src/main/java/io/xpipe/app/terminal/WezTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/WezTerminalType.java @@ -42,9 +42,7 @@ public interface WezTerminalType extends ExternalTerminalType, TrackableTerminal @Override public void launch(TerminalLaunchConfiguration configuration) throws Exception { - launch(CommandBuilder.of() - .add("start") - .add(configuration.getDialectLaunchCommand())); + launch(CommandBuilder.of().add("start").add(configuration.getDialectLaunchCommand())); } @Override @@ -131,7 +129,7 @@ public interface WezTerminalType extends ExternalTerminalType, TrackableTerminal } } - class MacOs implements ExternalApplicationType.MacApplication, WezTerminalType { + class MacOs implements ExternalApplicationType.MacApplication, WezTerminalType { @Override public TerminalOpenFormat getOpenFormat() { diff --git a/app/src/main/java/io/xpipe/app/update/AppDistributionType.java b/app/src/main/java/io/xpipe/app/update/AppDistributionType.java index 318f8c7f9..633e2f151 100644 --- a/app/src/main/java/io/xpipe/app/update/AppDistributionType.java +++ b/app/src/main/java/io/xpipe/app/update/AppDistributionType.java @@ -167,17 +167,20 @@ public enum AppDistributionType implements Translatable { if (OsType.getLocal().equals(OsType.WINDOWS) && !AppProperties.get().isStaging()) { var chocoOut = LocalExec.readStdoutIfPossible("choco", "list", "xpipe"); if (chocoOut.isPresent()) { - if (chocoOut.get().contains("xpipe") && chocoOut.get().contains(AppProperties.get().getVersion())) { + if (chocoOut.get().contains("xpipe") + && chocoOut.get().contains(AppProperties.get().getVersion())) { return CHOCO; } } -// var wingetOut = LocalExec.readStdoutIfPossible("winget", "show", "--id", "xpipe-io.xpipe", "--source", "--winget"); -// if (wingetOut.isPresent()) { -// if (wingetOut.get().contains("xpipe-io.xpipe") && wingetOut.get().contains(AppProperties.get().getVersion())) { -// return WINGET; -// } -// } + // var wingetOut = LocalExec.readStdoutIfPossible("winget", "show", "--id", "xpipe-io.xpipe", + // "--source", "--winget"); + // if (wingetOut.isPresent()) { + // if (wingetOut.get().contains("xpipe-io.xpipe") && + // wingetOut.get().contains(AppProperties.get().getVersion())) { + // return WINGET; + // } + // } } if (OsType.getLocal().equals(OsType.MACOS)) { diff --git a/app/src/main/java/io/xpipe/app/update/AppDownloads.java b/app/src/main/java/io/xpipe/app/update/AppDownloads.java index f414bc4cd..46cf3e8dc 100644 --- a/app/src/main/java/io/xpipe/app/update/AppDownloads.java +++ b/app/src/main/java/io/xpipe/app/update/AppDownloads.java @@ -35,8 +35,12 @@ public class AppDownloads { var downloadFile = FileUtils.getTempDirectory().toPath().resolve(release.getFile()); Files.write(downloadFile, response.body()); - TrackEvent.withInfo("Downloaded asset").tag("version", version).tag("url", release.getUrl()).tag("size", - FileUtils.byteCountToDisplaySize(response.body().length)).tag("target", downloadFile).handle(); + TrackEvent.withInfo("Downloaded asset") + .tag("version", version) + .tag("url", release.getUrl()) + .tag("size", FileUtils.byteCountToDisplaySize(response.body().length)) + .tag("target", downloadFile) + .handle(); return downloadFile; } catch (IOException ex) { @@ -115,5 +119,4 @@ public class AppDownloads { throw ErrorEvent.expected(e); } } - } diff --git a/app/src/main/java/io/xpipe/app/update/AppRelease.java b/app/src/main/java/io/xpipe/app/update/AppRelease.java index 765ac72d9..280e373d5 100644 --- a/app/src/main/java/io/xpipe/app/update/AppRelease.java +++ b/app/src/main/java/io/xpipe/app/update/AppRelease.java @@ -2,6 +2,7 @@ package io.xpipe.app.update; import io.xpipe.app.core.AppProperties; import io.xpipe.core.process.OsType; + import lombok.Value; @Value @@ -9,16 +10,18 @@ public class AppRelease { public static AppRelease of(String tag) { var type = AppInstaller.getSuitablePlatformAsset(); - var os = switch (OsType.getLocal()) { - case OsType.Linux linux -> "linux"; - case OsType.MacOs macOs -> "macos"; - case OsType.Windows windows -> "windows"; - }; + var os = + switch (OsType.getLocal()) { + case OsType.Linux linux -> "linux"; + case OsType.MacOs macOs -> "macos"; + case OsType.Windows windows -> "windows"; + }; var arch = AppProperties.get().getArch(); var name = "xpipe-installer-%s-%s.%s".formatted(os, arch, type.getExtension()); - var url = "https://github.com/xpipe-io/%s/releases/download/%s/%s".formatted(AppProperties.get().isStaging() ? "xpipe-ptb" : "xpipe", tag, - name); - var browser = "https://github.com/xpipe-io/%s/releases/%s".formatted(AppProperties.get().isStaging() ? "xpipe-ptb" : "xpipe", tag); + var url = "https://github.com/xpipe-io/%s/releases/download/%s/%s" + .formatted(AppProperties.get().isStaging() ? "xpipe-ptb" : "xpipe", tag, name); + var browser = "https://github.com/xpipe-io/%s/releases/%s" + .formatted(AppProperties.get().isStaging() ? "xpipe-ptb" : "xpipe", tag); return new AppRelease(tag, url, browser, name); } diff --git a/app/src/main/java/io/xpipe/app/update/ChocoUpdater.java b/app/src/main/java/io/xpipe/app/update/ChocoUpdater.java index 7914d326a..d042f0e7d 100644 --- a/app/src/main/java/io/xpipe/app/update/ChocoUpdater.java +++ b/app/src/main/java/io/xpipe/app/update/ChocoUpdater.java @@ -10,7 +10,6 @@ import io.xpipe.app.terminal.TerminalLauncher; import io.xpipe.app.util.Hyperlinks; import io.xpipe.app.util.LocalShell; import io.xpipe.core.process.CommandBuilder; -import io.xpipe.core.process.ShellDialect; import io.xpipe.core.process.ShellDialects; import io.xpipe.core.process.ShellScript; import io.xpipe.core.util.XPipeInstallation; @@ -63,19 +62,24 @@ public class ChocoUpdater extends UpdateHandler { } var pkg = "xpipe"; - var out = LocalShell.getShell().command(CommandBuilder.of().add("choco", "outdated")).readStdoutIfPossible(); + var out = LocalShell.getShell() + .command(CommandBuilder.of().add("choco", "outdated")) + .readStdoutIfPossible(); if (out.isEmpty()) { return Optional.empty(); } - var line = out.get().lines().filter(s -> { - var split = s.split("\\|"); - if (split.length != 4) { - return false; - } else { - return split[0].equals(pkg); - } - }).findFirst(); + var line = out.get() + .lines() + .filter(s -> { + var split = s.split("\\|"); + if (split.length != 4) { + return false; + } else { + return split[0].equals(pkg); + } + }) + .findFirst(); if (line.isEmpty()) { return Optional.empty(); } @@ -115,18 +119,18 @@ public class ChocoUpdater extends UpdateHandler { var performedUpdate = new PerformedUpdate(p.getVersion(), p.getBody(), p.getVersion()); AppCache.update("performedUpdate", performedUpdate); OperationMode.executeAfterShutdown(() -> { - var systemWide = - Files.exists(XPipeInstallation.getCurrentInstallationBasePath().resolve("system")); + var systemWide = Files.exists( + XPipeInstallation.getCurrentInstallationBasePath().resolve("system")); var propertiesArguments = systemWide ? ", --install-arguments=\"'ALLUSERS=1'\"" : ""; TerminalLauncher.openDirectFallback("XPipe Updater", sc -> { var pkg = "xpipe"; var commandToRun = "Start-Process -Wait -Verb runAs -FilePath choco -ArgumentList upgrade, " + pkg + ", -y" + propertiesArguments; var powershell = ShellDialects.isPowershell(sc); - var powershellCommand = powershell ? "powershell -Command " + sc.getShellDialect().quoteArgument(commandToRun) : "powershell -Command " + commandToRun; - return ShellScript.lines( - powershellCommand, - AppRestart.getTerminalRestartCommand()); + var powershellCommand = powershell + ? "powershell -Command " + sc.getShellDialect().quoteArgument(commandToRun) + : "powershell -Command " + commandToRun; + return ShellScript.lines(powershellCommand, AppRestart.getTerminalRestartCommand()); }); }); } catch (Throwable t) { 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 0235b1f77..d432e9361 100644 --- a/app/src/main/java/io/xpipe/app/update/UpdateHandler.java +++ b/app/src/main/java/io/xpipe/app/update/UpdateHandler.java @@ -107,10 +107,11 @@ public abstract class UpdateHandler { var run = !AppProperties.get().isRestarted(); while (true) { if (run - && (AppPrefs.get() != null && (AppPrefs.get().automaticallyUpdate().get() - || AppPrefs.get() - .checkForSecurityUpdates() - .get()))) { + && (AppPrefs.get() != null + && (AppPrefs.get().automaticallyUpdate().get() + || AppPrefs.get() + .checkForSecurityUpdates() + .get()))) { event("Performing background update"); refreshUpdateCheckSilent( !checked, diff --git a/app/src/main/java/io/xpipe/app/update/WingetUpdater.java b/app/src/main/java/io/xpipe/app/update/WingetUpdater.java index 24e8f66ad..cef900139 100644 --- a/app/src/main/java/io/xpipe/app/update/WingetUpdater.java +++ b/app/src/main/java/io/xpipe/app/update/WingetUpdater.java @@ -61,20 +61,25 @@ public class WingetUpdater extends UpdateHandler { } var pkgId = "xpipe-io.xpipe"; - var out = LocalShell.getShell().command(CommandBuilder.of().add("winget", "list", "--upgrade-available", "--source=winget", "--id", pkgId)) + var out = LocalShell.getShell() + .command(CommandBuilder.of() + .add("winget", "list", "--upgrade-available", "--source=winget", "--id", pkgId)) .readStdoutIfPossible(); if (out.isEmpty()) { return Optional.empty(); } - var line = out.get().lines().filter(s -> { - var split = s.split("\\s+"); - if (split.length != 4) { - return false; - } else { - return split[1].equals(pkgId); - } - }).findFirst(); + var line = out.get() + .lines() + .filter(s -> { + var split = s.split("\\s+"); + if (split.length != 4) { + return false; + } else { + return split[1].equals(pkgId); + } + }) + .findFirst(); if (line.isEmpty()) { return Optional.empty(); } @@ -115,15 +120,17 @@ public class WingetUpdater extends UpdateHandler { AppCache.update("performedUpdate", performedUpdate); OperationMode.executeAfterShutdown(() -> { TerminalLauncher.openDirectFallback("XPipe Updater", sc -> { - var systemWide = Files.exists(XPipeInstallation.getCurrentInstallationBasePath().resolve("system")); + var systemWide = Files.exists( + XPipeInstallation.getCurrentInstallationBasePath().resolve("system")); var pkgId = "xpipe-io.xpipe"; if (systemWide) { return ShellScript.lines( - "powershell -Command \"Start-Process -Verb runAs -FilePath winget -ArgumentList upgrade, --id, " + pkgId - + "\"", + "powershell -Command \"Start-Process -Verb runAs -FilePath winget -ArgumentList upgrade, --id, " + + pkgId + "\"", AppRestart.getTerminalRestartCommand()); } else { - return ShellScript.lines("winget upgrade --id " + pkgId, AppRestart.getTerminalRestartCommand()); + return ShellScript.lines( + "winget upgrade --id " + pkgId, AppRestart.getTerminalRestartCommand()); } }); }); diff --git a/app/src/main/java/io/xpipe/app/util/AppJacksonModule.java b/app/src/main/java/io/xpipe/app/util/AppJacksonModule.java index da3ae226d..dbac379c9 100644 --- a/app/src/main/java/io/xpipe/app/util/AppJacksonModule.java +++ b/app/src/main/java/io/xpipe/app/util/AppJacksonModule.java @@ -1,12 +1,5 @@ package io.xpipe.app.util; -import com.fasterxml.jackson.databind.deser.BeanDeserializerFactory; -import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier; -import com.fasterxml.jackson.databind.deser.DefaultDeserializationContext; -import com.fasterxml.jackson.databind.node.JsonNodeFactory; -import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; -import com.fasterxml.jackson.databind.type.TypeFactory; -import com.fasterxml.jackson.databind.util.TokenBuffer; import io.xpipe.app.action.*; import io.xpipe.app.ext.LocalStore; import io.xpipe.app.pwman.PasswordManager; @@ -15,7 +8,6 @@ import io.xpipe.app.terminal.ExternalTerminalType; import io.xpipe.app.terminal.TerminalMultiplexer; import io.xpipe.app.terminal.TerminalPrompt; import io.xpipe.app.vnc.ExternalVncClient; -import io.xpipe.core.store.DataStore; import io.xpipe.core.util.InPlaceSecretValue; import io.xpipe.core.util.JacksonMapper; @@ -32,8 +24,6 @@ import com.fasterxml.jackson.databind.type.SimpleType; import java.io.CharArrayReader; import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; import java.util.UUID; public class AppJacksonModule extends SimpleModule { diff --git a/app/src/main/java/io/xpipe/app/util/ChainedValidator.java b/app/src/main/java/io/xpipe/app/util/ChainedValidator.java index cbbdbfde8..d6bd9994c 100644 --- a/app/src/main/java/io/xpipe/app/util/ChainedValidator.java +++ b/app/src/main/java/io/xpipe/app/util/ChainedValidator.java @@ -107,5 +107,4 @@ public class ChainedValidator implements Validator { }, observables); } - } diff --git a/app/src/main/java/io/xpipe/app/util/Check.java b/app/src/main/java/io/xpipe/app/util/Check.java index 21d366e80..b2cd35670 100644 --- a/app/src/main/java/io/xpipe/app/util/Check.java +++ b/app/src/main/java/io/xpipe/app/util/Check.java @@ -1,24 +1,25 @@ package io.xpipe.app.util; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Consumer; -import java.util.function.Function; - import javafx.application.Platform; import javafx.beans.property.ReadOnlyObjectProperty; import javafx.beans.property.ReadOnlyObjectWrapper; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.Node; + import lombok.Getter; import net.synedra.validatorfx.Decoration; import net.synedra.validatorfx.DefaultDecoration; import net.synedra.validatorfx.ValidationMessage; import net.synedra.validatorfx.ValidationResult; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; +import java.util.function.Function; + /** A check represents a check for validity in a form. * @author r.lichtenberger@synedra.com */ @@ -28,15 +29,17 @@ public class Check { private Consumer checkMethod; private ReadOnlyObjectWrapper validationResultProperty = new ReadOnlyObjectWrapper<>(); private ValidationResult nextValidationResult = new ValidationResult(); + @Getter private List targets = new ArrayList<>(1); + private List decorations = new ArrayList<>(); private Function decorationFactory; private ChangeListener dependencyListener; public class Context { - private Context() { } + private Context() {} /** Get the current value of a dependency. * @param The type the value should be casted into @@ -100,7 +103,7 @@ public class Check { for (ObservableValue dependency : dependencies.values()) { dependency.addListener(dependencyListener); } - Platform.runLater(this::recheck); // to circumvent problems with decoration pane vs. dialog + Platform.runLater(this::recheck); // to circumvent problems with decoration pane vs. dialog return this; } @@ -139,5 +142,4 @@ public class Check { public ReadOnlyObjectProperty validationResultProperty() { return validationResultProperty.getReadOnlyProperty(); } - } diff --git a/app/src/main/java/io/xpipe/app/util/ClipboardHelper.java b/app/src/main/java/io/xpipe/app/util/ClipboardHelper.java index c67fcc3ef..4a4a2c0e1 100644 --- a/app/src/main/java/io/xpipe/app/util/ClipboardHelper.java +++ b/app/src/main/java/io/xpipe/app/util/ClipboardHelper.java @@ -19,8 +19,7 @@ public class ClipboardHelper { private static final AppLayoutModel.QueueEntry COPY_QUEUE_ENTRY = new AppLayoutModel.QueueEntry( AppI18n.observable("passwordCopied"), new LabelGraphic.IconGraphic("mdi2c-clipboard-check-outline"), - () -> {} - ); + () -> {}); private static void apply(Map map) { Clipboard clipboard = Clipboard.getSystemClipboard(); diff --git a/app/src/main/java/io/xpipe/app/util/DesktopHelper.java b/app/src/main/java/io/xpipe/app/util/DesktopHelper.java index 171ab89b3..e5ca7e974 100644 --- a/app/src/main/java/io/xpipe/app/util/DesktopHelper.java +++ b/app/src/main/java/io/xpipe/app/util/DesktopHelper.java @@ -1,7 +1,7 @@ package io.xpipe.app.util; -import io.xpipe.app.update.AppDistributionType; import io.xpipe.app.issue.ErrorEvent; +import io.xpipe.app.update.AppDistributionType; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.OsType; import io.xpipe.core.process.ShellControl; diff --git a/app/src/main/java/io/xpipe/app/util/DocumentationLink.java b/app/src/main/java/io/xpipe/app/util/DocumentationLink.java index 6ba41c7cb..ea87a9d88 100644 --- a/app/src/main/java/io/xpipe/app/util/DocumentationLink.java +++ b/app/src/main/java/io/xpipe/app/util/DocumentationLink.java @@ -44,7 +44,8 @@ public enum DocumentationLink { SSH_JUMP_SERVERS("guide/ssh#jump-servers"), KEEPASSXC("guide/password-manager#keepassxc"), PASSWORD_MANAGER("guide/password-manager"), - VNC_CLIENTS("guide/vnc#external-clients"),; + VNC_CLIENTS("guide/vnc#external-clients"), + ; private final String page; diff --git a/app/src/main/java/io/xpipe/app/util/ExclusiveValidator.java b/app/src/main/java/io/xpipe/app/util/ExclusiveValidator.java index b7c98aded..90edf21a3 100644 --- a/app/src/main/java/io/xpipe/app/util/ExclusiveValidator.java +++ b/app/src/main/java/io/xpipe/app/util/ExclusiveValidator.java @@ -83,5 +83,4 @@ public final class ExclusiveValidator implements Validator { }, observables); } - } diff --git a/app/src/main/java/io/xpipe/app/util/FileBridge.java b/app/src/main/java/io/xpipe/app/util/FileBridge.java index e22bf50af..856cc5d47 100644 --- a/app/src/main/java/io/xpipe/app/util/FileBridge.java +++ b/app/src/main/java/io/xpipe/app/util/FileBridge.java @@ -195,7 +195,11 @@ public class FileBridge { return; } - var action = ApplyFileEditActionProvider.Action.builder().input(in).output(outSupplier).target(file.getFileName().toString()).build(); + var action = ApplyFileEditActionProvider.Action.builder() + .input(in) + .output(outSupplier) + .target(file.getFileName().toString()) + .build(); action.executeSync(); } catch (Exception ex) { ErrorEvent.fromThrowable(ex).handle(); diff --git a/app/src/main/java/io/xpipe/app/util/FileOpener.java b/app/src/main/java/io/xpipe/app/util/FileOpener.java index 57702fdbd..09b785270 100644 --- a/app/src/main/java/io/xpipe/app/util/FileOpener.java +++ b/app/src/main/java/io/xpipe/app/util/FileOpener.java @@ -1,8 +1,5 @@ package io.xpipe.app.util; -import com.sun.jna.platform.win32.Shell32; -import com.sun.jna.platform.win32.ShellAPI; -import com.sun.jna.platform.win32.User32; import io.xpipe.app.browser.file.BrowserFileOutput; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.prefs.AppPrefs; @@ -11,6 +8,10 @@ import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.OsType; import io.xpipe.core.process.ShellDialects; +import com.sun.jna.platform.win32.Shell32; +import com.sun.jna.platform.win32.ShellAPI; +import com.sun.jna.platform.win32.User32; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -133,12 +134,12 @@ public class FileOpener { @Override public OutputStream open() throws Exception { return new ByteArrayOutputStream(s.length()) { - @Override - public void close() throws IOException { - super.close(); - output.accept(new String(toByteArray(), StandardCharsets.UTF_8)); - } - }; + @Override + public void close() throws IOException { + super.close(); + output.accept(new String(toByteArray(), StandardCharsets.UTF_8)); + } + }; } }; }, diff --git a/app/src/main/java/io/xpipe/app/util/GlobalClipboard.java b/app/src/main/java/io/xpipe/app/util/GlobalClipboard.java index c14ef37f7..aed4f2753 100644 --- a/app/src/main/java/io/xpipe/app/util/GlobalClipboard.java +++ b/app/src/main/java/io/xpipe/app/util/GlobalClipboard.java @@ -1,30 +1,10 @@ package io.xpipe.app.util; -import io.xpipe.app.browser.file.BrowserEntry; -import io.xpipe.app.browser.file.BrowserFileTransferMode; -import io.xpipe.app.browser.file.BrowserLocalFileSystem; -import io.xpipe.app.ext.ProcessControlProvider; -import io.xpipe.app.issue.ErrorEvent; -import io.xpipe.core.store.FileEntry; -import io.xpipe.core.util.FailableRunnable; -import javafx.beans.property.Property; -import javafx.beans.property.SimpleObjectProperty; -import javafx.scene.input.ClipboardContent; -import javafx.scene.input.DataFormat; -import javafx.scene.input.Dragboard; -import lombok.SneakyThrows; -import lombok.Value; - import java.awt.*; import java.awt.datatransfer.Clipboard; -import java.awt.datatransfer.DataFlavor; -import java.io.File; -import java.nio.file.Path; import java.util.ArrayList; import java.util.List; -import java.util.UUID; import java.util.function.Consumer; -import java.util.stream.Collectors; public class GlobalClipboard { @@ -36,20 +16,18 @@ public class GlobalClipboard { public static void init() { // Only access from one thread to fix https://bugs.openjdk.org/browse/JDK-8332271 - Toolkit.getDefaultToolkit() - .getSystemClipboard() - .addFlavorListener(e -> { - // Fix clipboard open issues: https://stackoverflow.com/a/51797746 - ThreadHelper.sleep(20); + Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(e -> { + // Fix clipboard open issues: https://stackoverflow.com/a/51797746 + ThreadHelper.sleep(20); - var cp = (Clipboard) e.getSource(); - ThreadHelper.runFailableAsync(() -> { - synchronized (GlobalClipboard.class) { - for (Consumer clipboardListener : clipboardListeners) { - clipboardListener.accept(cp); - } - } - }); - }); + var cp = (Clipboard) e.getSource(); + ThreadHelper.runFailableAsync(() -> { + synchronized (GlobalClipboard.class) { + for (Consumer clipboardListener : clipboardListeners) { + clipboardListener.accept(cp); + } + } + }); + }); } } diff --git a/app/src/main/java/io/xpipe/app/util/LocalShell.java b/app/src/main/java/io/xpipe/app/util/LocalShell.java index 362f37ec9..2bae0f50d 100644 --- a/app/src/main/java/io/xpipe/app/util/LocalShell.java +++ b/app/src/main/java/io/xpipe/app/util/LocalShell.java @@ -21,7 +21,8 @@ public class LocalShell { // Ensure that electron applications on Linux use wayland features if possible // https://github.com/microsoft/vscode/issues/207033#issuecomment-2167500295 if (OsType.getLocal() == OsType.LINUX) { - local.writeLine(local.getShellDialect().getSetEnvironmentVariableCommand("ELECTRON_OZONE_PLATFORM_HINT", "auto")); + local.writeLine( + local.getShellDialect().getSetEnvironmentVariableCommand("ELECTRON_OZONE_PLATFORM_HINT", "auto")); } localCache = new LocalShellCache(local); diff --git a/app/src/main/java/io/xpipe/app/util/LocalShellCache.java b/app/src/main/java/io/xpipe/app/util/LocalShellCache.java index 18c3b3f05..a24ff0d9f 100644 --- a/app/src/main/java/io/xpipe/app/util/LocalShellCache.java +++ b/app/src/main/java/io/xpipe/app/util/LocalShellCache.java @@ -28,7 +28,9 @@ public class LocalShellCache extends ShellControlCache { .map(s -> s.asLocalPath()); } case OsType.Windows windows -> { - yield ExternalEditorType.VSCODE_WINDOWS.determineFromPath().or(() -> ExternalEditorType.VSCODE_WINDOWS.determineInstallation()); + yield ExternalEditorType.VSCODE_WINDOWS + .determineFromPath() + .or(() -> ExternalEditorType.VSCODE_WINDOWS.determineInstallation()); } }; set("codePath", app.orElse(null)); diff --git a/app/src/main/java/io/xpipe/app/util/ModuleAccess.java b/app/src/main/java/io/xpipe/app/util/ModuleAccess.java index 818095b3c..b21a6d644 100644 --- a/app/src/main/java/io/xpipe/app/util/ModuleAccess.java +++ b/app/src/main/java/io/xpipe/app/util/ModuleAccess.java @@ -1,8 +1,5 @@ package io.xpipe.app.util; -import lombok.SneakyThrows; - -import java.lang.reflect.Field; import java.lang.reflect.Method; public class ModuleAccess { @@ -27,4 +24,4 @@ public class ModuleAccess { modifiers.invoke(source, pkg, target, false, true); modifiers.invoke(source, pkg, target, true, true); } -} \ No newline at end of file +} diff --git a/app/src/main/java/io/xpipe/app/util/OptionsBuilder.java b/app/src/main/java/io/xpipe/app/util/OptionsBuilder.java index e2471e6bd..21291c1fc 100644 --- a/app/src/main/java/io/xpipe/app/util/OptionsBuilder.java +++ b/app/src/main/java/io/xpipe/app/util/OptionsBuilder.java @@ -15,9 +15,9 @@ import javafx.beans.value.ObservableValue; import javafx.geometry.Orientation; import javafx.scene.control.ComboBox; import javafx.scene.layout.Region; +import javafx.scene.layout.VBox; import atlantafx.base.controls.Spacer; -import javafx.scene.layout.VBox; import java.nio.file.InvalidPathException; import java.nio.file.Path; diff --git a/app/src/main/java/io/xpipe/app/util/RemminaHelper.java b/app/src/main/java/io/xpipe/app/util/RemminaHelper.java index c53bb92c7..b75adc05d 100644 --- a/app/src/main/java/io/xpipe/app/util/RemminaHelper.java +++ b/app/src/main/java/io/xpipe/app/util/RemminaHelper.java @@ -5,15 +5,15 @@ import io.xpipe.app.vnc.VncLaunchConfig; import io.xpipe.core.process.OsType; import io.xpipe.core.util.SecretValue; -import javax.crypto.Cipher; -import javax.crypto.spec.IvParameterSpec; -import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; import java.util.Base64; import java.util.Optional; +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; public class RemminaHelper { @@ -23,7 +23,8 @@ public class RemminaHelper { } try (var sc = LocalShell.getShell().start()) { - var prefSecretBase64 = sc.command("sed -n 's/^secret=//p' ~/.config/remmina/remmina.pref").readStdoutIfPossible(); + var prefSecretBase64 = sc.command("sed -n 's/^secret=//p' ~/.config/remmina/remmina.pref") + .readStdoutIfPossible(); if (prefSecretBase64.isEmpty()) { return Optional.empty(); } @@ -47,7 +48,8 @@ public class RemminaHelper { public static Path writeRemminaRdpConfigFile(RdpLaunchConfig configuration, String password) throws Exception { var name = OsType.getLocal().makeFileSystemCompatible(configuration.getTitle()); var file = ShellTemp.getLocalTempDataDirectory(null).resolve(name + ".remmina"); - var string = """ + var string = + """ [remmina] protocol=RDP name=%s @@ -55,8 +57,20 @@ public class RemminaHelper { server=%s password=%s cert_ignore=1 - """.formatted(configuration.getTitle(), configuration.getConfig().get("username").orElseThrow().getValue(), - configuration.getConfig().get("full address").orElseThrow().getValue(), password != null ? password : ""); + """ + .formatted( + configuration.getTitle(), + configuration + .getConfig() + .get("username") + .orElseThrow() + .getValue(), + configuration + .getConfig() + .get("full address") + .orElseThrow() + .getValue(), + password != null ? password : ""); Files.createDirectories(file.getParent()); Files.writeString(file, string); return file; @@ -65,7 +79,8 @@ public class RemminaHelper { public static Path writeRemminaVncConfigFile(VncLaunchConfig configuration, String password) throws Exception { var name = OsType.getLocal().makeFileSystemCompatible(configuration.getTitle()); var file = ShellTemp.getLocalTempDataDirectory(null).resolve(name + ".remmina"); - var string = """ + var string = + """ [remmina] protocol=VNC name=%s @@ -73,8 +88,12 @@ public class RemminaHelper { server=%s password=%s colordepth=32 - """.formatted(configuration.getTitle(), configuration.retrieveUsername().orElse(""), - configuration.getHost() + ":" + configuration.getPort(), password != null ? password : ""); + """ + .formatted( + configuration.getTitle(), + configuration.retrieveUsername().orElse(""), + configuration.getHost() + ":" + configuration.getPort(), + password != null ? password : ""); Files.createDirectories(file.getParent()); Files.writeString(file, string); return file; diff --git a/app/src/main/java/io/xpipe/app/util/ScanSingleDialogComp.java b/app/src/main/java/io/xpipe/app/util/ScanSingleDialogComp.java index ff0072331..3502783df 100644 --- a/app/src/main/java/io/xpipe/app/util/ScanSingleDialogComp.java +++ b/app/src/main/java/io/xpipe/app/util/ScanSingleDialogComp.java @@ -1,9 +1,9 @@ package io.xpipe.app.util; import io.xpipe.app.comp.base.ModalOverlayContentComp; +import io.xpipe.app.ext.ShellStore; import io.xpipe.app.hub.comp.StoreChoiceComp; import io.xpipe.app.hub.comp.StoreViewState; -import io.xpipe.app.ext.ShellStore; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.storage.DataStoreEntryRef; 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 444546fec..e8ab5a37c 100644 --- a/app/src/main/java/io/xpipe/app/util/ScriptHelper.java +++ b/app/src/main/java/io/xpipe/app/util/ScriptHelper.java @@ -9,7 +9,6 @@ import lombok.SneakyThrows; import java.util.List; import java.util.Random; -import java.util.UUID; public class ScriptHelper { diff --git a/app/src/main/java/io/xpipe/app/util/SecretRetrievalStrategy.java b/app/src/main/java/io/xpipe/app/util/SecretRetrievalStrategy.java index fd48d73a9..a73542ea3 100644 --- a/app/src/main/java/io/xpipe/app/util/SecretRetrievalStrategy.java +++ b/app/src/main/java/io/xpipe/app/util/SecretRetrievalStrategy.java @@ -15,8 +15,6 @@ import lombok.extern.jackson.Jacksonized; import java.nio.CharBuffer; import java.time.Duration; -import java.util.Arrays; -import java.util.stream.Stream; @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type") @JsonSubTypes({ @@ -164,7 +162,6 @@ public interface SecretRetrievalStrategy { + " If the output includes any formatting, messages, or your password key either matched multiple entries or none," + " you will have to change the command and/or password key.")); } - }); return new SecretQueryResult(r, SecretQueryState.NORMAL); } diff --git a/app/src/main/java/io/xpipe/app/util/SecretRetrievalStrategyHelper.java b/app/src/main/java/io/xpipe/app/util/SecretRetrievalStrategyHelper.java index b8d6b5dbd..a0a3c172c 100644 --- a/app/src/main/java/io/xpipe/app/util/SecretRetrievalStrategyHelper.java +++ b/app/src/main/java/io/xpipe/app/util/SecretRetrievalStrategyHelper.java @@ -133,8 +133,8 @@ public class SecretRetrievalStrategyHelper { .bindChoice( () -> { return switch (selected.get() - offset) { - case 0 -> new SimpleObjectProperty<>( - allowNone ? new SecretRetrievalStrategy.None() : null); + case 0 -> + new SimpleObjectProperty<>(allowNone ? new SecretRetrievalStrategy.None() : null); case 1 -> new SimpleObjectProperty<>(new SecretRetrievalStrategy.Prompt()); case 2 -> inPlace; case 3 -> passwordManager; diff --git a/app/src/main/java/io/xpipe/app/util/StoreStateFormat.java b/app/src/main/java/io/xpipe/app/util/StoreStateFormat.java index 7c5c1a50a..35fa248d3 100644 --- a/app/src/main/java/io/xpipe/app/util/StoreStateFormat.java +++ b/app/src/main/java/io/xpipe/app/util/StoreStateFormat.java @@ -1,7 +1,7 @@ package io.xpipe.app.util; -import io.xpipe.app.hub.comp.StoreSection; import io.xpipe.app.core.AppI18n; +import io.xpipe.app.hub.comp.StoreSection; import io.xpipe.core.process.ShellDialects; import io.xpipe.core.process.ShellEnvironmentStoreState; import io.xpipe.core.process.ShellStoreState; diff --git a/app/src/main/java/io/xpipe/app/util/Validator.java b/app/src/main/java/io/xpipe/app/util/Validator.java index 249de08a2..ada2072fc 100644 --- a/app/src/main/java/io/xpipe/app/util/Validator.java +++ b/app/src/main/java/io/xpipe/app/util/Validator.java @@ -122,5 +122,4 @@ public interface Validator { * @param separator The string to separate consecutive validation messages with */ StringBinding createStringBinding(String prefix, String separator); - } diff --git a/app/src/main/java/io/xpipe/app/vnc/CustomVncClient.java b/app/src/main/java/io/xpipe/app/vnc/CustomVncClient.java index 8138063ee..a26dbb026 100644 --- a/app/src/main/java/io/xpipe/app/vnc/CustomVncClient.java +++ b/app/src/main/java/io/xpipe/app/vnc/CustomVncClient.java @@ -1,12 +1,14 @@ package io.xpipe.app.vnc; -import com.fasterxml.jackson.annotation.JsonTypeName; import io.xpipe.app.comp.base.TextFieldComp; import io.xpipe.app.prefs.ExternalApplicationHelper; import io.xpipe.app.util.OptionsBuilder; import io.xpipe.core.process.CommandBuilder; + import javafx.beans.property.Property; import javafx.beans.property.SimpleObjectProperty; + +import com.fasterxml.jackson.annotation.JsonTypeName; import lombok.Builder; import lombok.Value; import lombok.extern.jackson.Jacksonized; @@ -23,9 +25,11 @@ public class CustomVncClient implements ExternalVncClient { var command = new SimpleObjectProperty<>(property.getValue().getCommand()); return new OptionsBuilder() .nameAndDescription("customVncCommand") - .addComp(new TextFieldComp(command, false) - .apply(struc -> struc.get().setPromptText("myvncclient $ADDRESS")) - .maxWidth(600), command) + .addComp( + new TextFieldComp(command, false) + .apply(struc -> struc.get().setPromptText("myvncclient $ADDRESS")) + .maxWidth(600), + command) .bind(() -> CustomVncClient.builder().command(command.get()).build(), property); } diff --git a/app/src/main/java/io/xpipe/app/vnc/ExternalVncClient.java b/app/src/main/java/io/xpipe/app/vnc/ExternalVncClient.java index 74d93c70b..296a83740 100644 --- a/app/src/main/java/io/xpipe/app/vnc/ExternalVncClient.java +++ b/app/src/main/java/io/xpipe/app/vnc/ExternalVncClient.java @@ -1,11 +1,11 @@ package io.xpipe.app.vnc; -import com.fasterxml.jackson.annotation.JsonTypeInfo; import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.util.ClipboardHelper; -import io.xpipe.app.util.RemminaHelper; import io.xpipe.core.process.OsType; +import com.fasterxml.jackson.annotation.JsonTypeInfo; + import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/io/xpipe/app/vnc/InternalVncClient.java b/app/src/main/java/io/xpipe/app/vnc/InternalVncClient.java index 01d773ebd..7df5c0b75 100644 --- a/app/src/main/java/io/xpipe/app/vnc/InternalVncClient.java +++ b/app/src/main/java/io/xpipe/app/vnc/InternalVncClient.java @@ -1,10 +1,11 @@ package io.xpipe.app.vnc; -import com.fasterxml.jackson.annotation.JsonTypeName; import io.xpipe.app.browser.BrowserFullSessionModel; import io.xpipe.app.browser.BrowserStoreSessionTab; import io.xpipe.app.core.AppLayoutModel; import io.xpipe.app.ext.ProcessControlProvider; + +import com.fasterxml.jackson.annotation.JsonTypeName; import lombok.Builder; import lombok.extern.jackson.Jacksonized; @@ -13,7 +14,6 @@ import lombok.extern.jackson.Jacksonized; @JsonTypeName("integratedXPipeVncClient") public class InternalVncClient implements ExternalVncClient { - @Override public boolean supportsPasswords() { return true; @@ -32,7 +32,10 @@ public class InternalVncClient implements ExternalVncClient { return; } - BrowserFullSessionModel.DEFAULT.openSync(ProcessControlProvider.get().createVncSession(BrowserFullSessionModel.DEFAULT, configuration.getEntry()), null); + BrowserFullSessionModel.DEFAULT.openSync( + ProcessControlProvider.get() + .createVncSession(BrowserFullSessionModel.DEFAULT, configuration.getEntry()), + null); AppLayoutModel.get().selectBrowser(); } } diff --git a/app/src/main/java/io/xpipe/app/vnc/RealVncClient.java b/app/src/main/java/io/xpipe/app/vnc/RealVncClient.java index ef3319a23..cd83198ed 100644 --- a/app/src/main/java/io/xpipe/app/vnc/RealVncClient.java +++ b/app/src/main/java/io/xpipe/app/vnc/RealVncClient.java @@ -1,8 +1,9 @@ package io.xpipe.app.vnc; -import com.fasterxml.jackson.annotation.JsonTypeName; import io.xpipe.app.prefs.ExternalApplicationType; import io.xpipe.core.process.CommandBuilder; + +import com.fasterxml.jackson.annotation.JsonTypeName; import lombok.Builder; import lombok.extern.jackson.Jacksonized; @@ -86,7 +87,6 @@ public abstract class RealVncClient implements ExternalVncClient { } } - @Builder @Jacksonized @JsonTypeName("realVnc") diff --git a/app/src/main/java/io/xpipe/app/vnc/RemminaVncClient.java b/app/src/main/java/io/xpipe/app/vnc/RemminaVncClient.java index 9d70416ac..200804139 100644 --- a/app/src/main/java/io/xpipe/app/vnc/RemminaVncClient.java +++ b/app/src/main/java/io/xpipe/app/vnc/RemminaVncClient.java @@ -1,18 +1,15 @@ package io.xpipe.app.vnc; -import com.fasterxml.jackson.annotation.JsonTypeName; import io.xpipe.app.prefs.ExternalApplicationType; -import io.xpipe.app.util.LocalShell; import io.xpipe.app.util.RemminaHelper; import io.xpipe.app.util.ThreadHelper; import io.xpipe.core.process.CommandBuilder; -import io.xpipe.core.util.SecretValue; + +import com.fasterxml.jackson.annotation.JsonTypeName; import lombok.Builder; import lombok.extern.jackson.Jacksonized; import org.apache.commons.io.FileUtils; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.Optional; @Builder diff --git a/app/src/main/java/io/xpipe/app/vnc/ScreenSharingVncClient.java b/app/src/main/java/io/xpipe/app/vnc/ScreenSharingVncClient.java index 932bfb467..86c471025 100644 --- a/app/src/main/java/io/xpipe/app/vnc/ScreenSharingVncClient.java +++ b/app/src/main/java/io/xpipe/app/vnc/ScreenSharingVncClient.java @@ -1,17 +1,12 @@ package io.xpipe.app.vnc; -import com.fasterxml.jackson.annotation.JsonTypeName; import io.xpipe.app.prefs.ExternalApplicationType; -import io.xpipe.app.util.LocalShell; import io.xpipe.core.process.CommandBuilder; -import io.xpipe.core.util.SecretValue; + +import com.fasterxml.jackson.annotation.JsonTypeName; import lombok.Builder; import lombok.extern.jackson.Jacksonized; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Optional; - @Builder @Jacksonized @JsonTypeName("screenSharing") @@ -25,7 +20,8 @@ public class ScreenSharingVncClient implements ExternalApplicationType.MacApplic @Override public void launch(VncLaunchConfig configuration) throws Exception { var pw = configuration.retrievePassword(); - var credentials = (configuration.retrieveUsername().orElse("") + pw.map(secretValue -> ":" + secretValue.getSecretValue()).orElse("")); + var credentials = (configuration.retrieveUsername().orElse("") + + pw.map(secretValue -> ":" + secretValue.getSecretValue()).orElse("")); var address = configuration.getHost() + ":" + configuration.getPort(); var args = "vnc://" + credentials + "@" + address; var command = launchCommand(CommandBuilder.of().add(args), false); diff --git a/app/src/main/java/io/xpipe/app/vnc/TigerVncClient.java b/app/src/main/java/io/xpipe/app/vnc/TigerVncClient.java index 1838528df..4d135f150 100644 --- a/app/src/main/java/io/xpipe/app/vnc/TigerVncClient.java +++ b/app/src/main/java/io/xpipe/app/vnc/TigerVncClient.java @@ -1,10 +1,11 @@ package io.xpipe.app.vnc; -import com.fasterxml.jackson.annotation.JsonTypeName; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.prefs.ExternalApplicationType; import io.xpipe.app.util.LocalShell; import io.xpipe.core.process.CommandBuilder; + +import com.fasterxml.jackson.annotation.JsonTypeName; import lombok.Builder; import lombok.extern.jackson.Jacksonized; @@ -16,8 +17,7 @@ import java.util.Optional; public abstract class TigerVncClient implements ExternalVncClient { protected CommandBuilder createBuilder(VncLaunchConfig configuration) { - var builder = CommandBuilder.of() - .addQuoted(configuration.getHost() + ":" + configuration.getPort()); + var builder = CommandBuilder.of().addQuoted(configuration.getHost() + ":" + configuration.getPort()); builder.addQuotedKeyValue("-ReconnectOnError", "off"); return builder; } @@ -74,7 +74,8 @@ public abstract class TigerVncClient implements ExternalVncClient { if (configuration.hasFixedPassword()) { var pw = configuration.retrievePassword(); if (pw.isPresent()) { - builder.add(sc -> "<(echo " + sc.getShellDialect().literalArgument(pw.get().getSecretValue()) + " | vncpasswd -f)"); + builder.add(sc -> "<(echo " + + sc.getShellDialect().literalArgument(pw.get().getSecretValue()) + " | vncpasswd -f)"); } } launch(builder); @@ -101,7 +102,6 @@ public abstract class TigerVncClient implements ExternalVncClient { } } - @Builder @Jacksonized @JsonTypeName("tigerVnc") @@ -130,7 +130,9 @@ public abstract class TigerVncClient implements ExternalVncClient { public Optional determineInstallation() { try (var appsStream = Files.list(Path.of("/Applications"))) { var dirs = appsStream.toList(); - return dirs.stream().filter(path -> path.toString().contains("TigerVNC viewer")).findFirst(); + return dirs.stream() + .filter(path -> path.toString().contains("TigerVNC viewer")) + .findFirst(); } catch (IOException e) { ErrorEvent.fromThrowable(e).handle(); return Optional.empty(); diff --git a/app/src/main/java/io/xpipe/app/vnc/TightVncClient.java b/app/src/main/java/io/xpipe/app/vnc/TightVncClient.java index bd2f0bff9..c1d0b180a 100644 --- a/app/src/main/java/io/xpipe/app/vnc/TightVncClient.java +++ b/app/src/main/java/io/xpipe/app/vnc/TightVncClient.java @@ -1,9 +1,10 @@ package io.xpipe.app.vnc; -import com.fasterxml.jackson.annotation.JsonTypeName; import io.xpipe.app.prefs.ExternalApplicationType; import io.xpipe.app.util.LocalShell; import io.xpipe.core.process.CommandBuilder; + +import com.fasterxml.jackson.annotation.JsonTypeName; import lombok.Builder; import lombok.extern.jackson.Jacksonized; @@ -36,7 +37,8 @@ public class TightVncClient implements ExternalApplicationType.InstallLocationTy @Override public void launch(VncLaunchConfig configuration) throws Exception { - var builder = CommandBuilder.of().addFile(findExecutable()) + var builder = CommandBuilder.of() + .addFile(findExecutable()) .addQuotedKeyValue("-host", configuration.getHost()) .addQuotedKeyValue("-port", "" + configuration.getPort()); var pw = configuration.retrievePassword(); diff --git a/app/src/main/java/io/xpipe/app/vnc/VncBaseStore.java b/app/src/main/java/io/xpipe/app/vnc/VncBaseStore.java index 6d381a0d4..f7d3f1d5b 100644 --- a/app/src/main/java/io/xpipe/app/vnc/VncBaseStore.java +++ b/app/src/main/java/io/xpipe/app/vnc/VncBaseStore.java @@ -1,11 +1,8 @@ package io.xpipe.app.vnc; import io.xpipe.app.util.SecretRetrievalStrategy; -import io.xpipe.core.process.ShellControl; import io.xpipe.core.store.DataStore; -import java.util.Optional; - public interface VncBaseStore extends DataStore { String getEffectiveHost(); diff --git a/app/src/main/java/io/xpipe/app/vnc/VncCategory.java b/app/src/main/java/io/xpipe/app/vnc/VncCategory.java index 4ae3cbb48..86419c1c4 100644 --- a/app/src/main/java/io/xpipe/app/vnc/VncCategory.java +++ b/app/src/main/java/io/xpipe/app/vnc/VncCategory.java @@ -5,11 +5,12 @@ import io.xpipe.app.comp.base.ButtonComp; import io.xpipe.app.core.AppI18n; import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.prefs.AppPrefsCategory; -import io.xpipe.app.pwman.PasswordManager; import io.xpipe.app.util.*; + import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; import javafx.scene.layout.Region; + import org.kordamp.ikonli.javafx.FontIcon; public class VncCategory extends AppPrefsCategory { @@ -43,10 +44,7 @@ public class VncCategory extends AppPrefsCategory { var choice = choiceBuilder.build().buildComp(); return new OptionsBuilder() .addTitle("vncClient") - .sub(new OptionsBuilder() - .pref(prefs.vncClient) - .addComp(choice) - ) + .sub(new OptionsBuilder().pref(prefs.vncClient).addComp(choice)) .buildComp(); } } diff --git a/app/src/main/java/io/xpipe/app/vnc/VncLaunchConfig.java b/app/src/main/java/io/xpipe/app/vnc/VncLaunchConfig.java index 232545c64..6a95d21b6 100644 --- a/app/src/main/java/io/xpipe/app/vnc/VncLaunchConfig.java +++ b/app/src/main/java/io/xpipe/app/vnc/VncLaunchConfig.java @@ -3,6 +3,7 @@ package io.xpipe.app.vnc; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.core.process.ShellControl; import io.xpipe.core.util.SecretValue; + import lombok.Value; import java.util.Optional; @@ -15,14 +16,14 @@ public class VncLaunchConfig { DataStoreEntryRef entry; ShellControl shellControl; - public Optional retrieveUsername() throws Exception{ + public Optional retrieveUsername() throws Exception { return Optional.ofNullable(entry.getStore().retrieveUser()); } public boolean hasFixedPassword() { - return entry.getStore().getPassword() != null && - entry.getStore().getPassword().expectsQuery() && - !entry.getStore().getPassword().query().requiresUserInteraction(); + return entry.getStore().getPassword() != null + && entry.getStore().getPassword().expectsQuery() + && !entry.getStore().getPassword().query().requiresUserInteraction(); } public boolean isTunneled() { diff --git a/app/src/main/java/module-info.java b/app/src/main/java/module-info.java index f8e22e1a7..a88411170 100644 --- a/app/src/main/java/module-info.java +++ b/app/src/main/java/module-info.java @@ -1,6 +1,4 @@ import io.xpipe.app.action.ActionProvider; -import io.xpipe.app.hub.action.impl.EditStoreActionProvider; -import io.xpipe.app.hub.action.impl.LaunchStoreActionProvider; import io.xpipe.app.beacon.impl.*; import io.xpipe.app.browser.action.BrowserActionProvider; import io.xpipe.app.browser.action.impl.*; @@ -8,6 +6,8 @@ import io.xpipe.app.browser.menu.impl.*; import io.xpipe.app.browser.menu.impl.compress.*; import io.xpipe.app.core.AppLogs; import io.xpipe.app.ext.*; +import io.xpipe.app.hub.action.impl.EditStoreActionProvider; +import io.xpipe.app.hub.action.impl.LaunchStoreActionProvider; import io.xpipe.app.hub.action.impl.XPipeUrlActionProvider; import io.xpipe.app.issue.EventHandler; import io.xpipe.app.issue.EventHandlerImpl; @@ -122,16 +122,62 @@ open module io.xpipe.app { uses DataStorageExtensionProvider; uses ProcessControlProvider; - provides ActionProvider with XPipeUrlActionProvider, LaunchStoreActionProvider, EditStoreActionProvider, DownloadMenuProvider, RunCommandInBrowserActionProvider, RunCommandInBackgroundActionProvider, RunCommandInTerminalActionProvider, FollowLinkMenuProvider, BackMenuProvider, ForwardMenuProvider - , RefreshDirectoryMenuProvider, OpenFileDefaultMenuProvider, OpenFileWithMenuProvider, OpenDirectoryMenuProvider, - OpenDirectoryInNewTabMenuProvider, OpenTerminalMenuProvider, OpenNativeFileDetailsMenuProvider, BrowseInNativeManagerActionProvider, - ApplyFileEditActionProvider, TransferFilesActionProvider, - EditFileMenuProvider, RunFileMenuProvider, ChmodMenuProvider, ChownMenuProvider, ChgrpActionProvider, ChgrpMenuProvider, - CopyMenuProvider, CopyPathMenuProvider, PasteMenuProvider, NewItemMenuProvider, FileCompressActionProvider, DirectoryCompressActionProvider, RenameMenuProvider, DeleteActionProvider, DeleteMenuProvider, ChownActionProvider, ChmodActionProvider - , UnzipHereUnixMenuProvider, UnzipDirectoryUnixMenuProvider, UnzipHereWindowsActionProvider, UnzipDirectoryWindowsActionProvider, - UntarHereMenuProvider, UntarGzHereMenuProvider, UntarDirectoryMenuProvider, UntarGzDirectoryMenuProvider, JavapMenuProvider, - JarMenuProvider, NewFileActionProvider, NewDirectoryActionProvider, NewLinkActionProvider, OpenDirectoryActionProvider, OpenFileDefaultActionProvider, OpenFileNativeDetailsActionProvider, OpenFileWithActionProvider, OpenTerminalActionProvider; - + provides ActionProvider with + XPipeUrlActionProvider, + LaunchStoreActionProvider, + EditStoreActionProvider, + DownloadMenuProvider, + RunCommandInBrowserActionProvider, + RunCommandInBackgroundActionProvider, + RunCommandInTerminalActionProvider, + FollowLinkMenuProvider, + BackMenuProvider, + ForwardMenuProvider, + RefreshDirectoryMenuProvider, + OpenFileDefaultMenuProvider, + OpenFileWithMenuProvider, + OpenDirectoryMenuProvider, + OpenDirectoryInNewTabMenuProvider, + OpenTerminalMenuProvider, + OpenNativeFileDetailsMenuProvider, + BrowseInNativeManagerActionProvider, + ApplyFileEditActionProvider, + TransferFilesActionProvider, + EditFileMenuProvider, + RunFileMenuProvider, + ChmodMenuProvider, + ChownMenuProvider, + ChgrpActionProvider, + ChgrpMenuProvider, + CopyMenuProvider, + CopyPathMenuProvider, + PasteMenuProvider, + NewItemMenuProvider, + FileCompressActionProvider, + DirectoryCompressActionProvider, + RenameMenuProvider, + DeleteActionProvider, + DeleteMenuProvider, + ChownActionProvider, + ChmodActionProvider, + UnzipHereUnixMenuProvider, + UnzipDirectoryUnixMenuProvider, + UnzipHereWindowsActionProvider, + UnzipDirectoryWindowsActionProvider, + UntarHereMenuProvider, + UntarGzHereMenuProvider, + UntarDirectoryMenuProvider, + UntarGzDirectoryMenuProvider, + JavapMenuProvider, + JarMenuProvider, + NewFileActionProvider, + NewDirectoryActionProvider, + NewLinkActionProvider, + OpenDirectoryActionProvider, + OpenFileDefaultActionProvider, + OpenFileNativeDetailsActionProvider, + OpenFileWithActionProvider, + OpenTerminalActionProvider; provides Module with AppJacksonModule; provides ModuleLayerLoader with diff --git a/core/src/main/java/io/xpipe/core/process/CommandBuilder.java b/core/src/main/java/io/xpipe/core/process/CommandBuilder.java index 5a66bed43..20313ac9b 100644 --- a/core/src/main/java/io/xpipe/core/process/CommandBuilder.java +++ b/core/src/main/java/io/xpipe/core/process/CommandBuilder.java @@ -97,8 +97,8 @@ public class CommandBuilder { public CommandBuilder addQuotedKeyValue(String key, String value) { return add(sc -> { - var v = sc.getShellDialect().quoteArgument(value); - return key + "=" + v; + var v = sc.getShellDialect().quoteArgument(value); + return key + "=" + v; }); } diff --git a/core/src/main/java/io/xpipe/core/process/OsType.java b/core/src/main/java/io/xpipe/core/process/OsType.java index 405c4bbe5..f624fde20 100644 --- a/core/src/main/java/io/xpipe/core/process/OsType.java +++ b/core/src/main/java/io/xpipe/core/process/OsType.java @@ -68,8 +68,8 @@ public interface OsType { return profile; } - var name = pc.executeSimpleStringCommand( - pc.getShellDialect().getPrintEnvironmentVariableCommand("USERNAME")); + var name = + pc.executeSimpleStringCommand(pc.getShellDialect().getPrintEnvironmentVariableCommand("USERNAME")); if (!name.isEmpty()) { return "C:\\Users\\" + name; } diff --git a/core/src/main/java/io/xpipe/core/process/ProcessOutputException.java b/core/src/main/java/io/xpipe/core/process/ProcessOutputException.java index 04ab32725..60ce5b3e8 100644 --- a/core/src/main/java/io/xpipe/core/process/ProcessOutputException.java +++ b/core/src/main/java/io/xpipe/core/process/ProcessOutputException.java @@ -45,13 +45,11 @@ public class ProcessOutputException extends Exception { var errorSuffix = hasMessage ? ":\n" + combinedError : ""; var message = switch ((int) exitCode) { - case CommandControl - .START_FAILED_EXIT_CODE -> "Process did not start up properly and had to be killed" - + errorSuffix; + case CommandControl.START_FAILED_EXIT_CODE -> + "Process did not start up properly and had to be killed" + errorSuffix; case CommandControl.EXIT_TIMEOUT_EXIT_CODE -> "Wait for process exit timed out" + errorSuffix; - case CommandControl - .UNASSIGNED_EXIT_CODE -> "Process exited with unknown state. Did an external process interfere?" - + errorSuffix; + case CommandControl.UNASSIGNED_EXIT_CODE -> + "Process exited with unknown state. Did an external process interfere?" + errorSuffix; case CommandControl.INTERNAL_ERROR_EXIT_CODE -> "Process execution failed" + errorSuffix; case CommandControl.ELEVATION_FAILED_EXIT_CODE -> "Process elevation failed" + errorSuffix; default -> "Process returned exit code " + exitCode + errorSuffix; diff --git a/core/src/main/java/io/xpipe/core/process/ShellDialectAskpass.java b/core/src/main/java/io/xpipe/core/process/ShellDialectAskpass.java index f84fc08fe..0a8967e30 100644 --- a/core/src/main/java/io/xpipe/core/process/ShellDialectAskpass.java +++ b/core/src/main/java/io/xpipe/core/process/ShellDialectAskpass.java @@ -14,10 +14,12 @@ public interface ShellDialectAskpass { UUID requestId, ElevationHandler handler, CountDown countDown, - String message, String user, CommandConfiguration command - ) + String message, + String user, + CommandConfiguration command) throws Exception; String elevateTerminalCommandWithPreparedAskpass( - ShellControl shellControl, ElevationHandler handler, String command, String prefix, String user) throws Exception; + ShellControl shellControl, ElevationHandler handler, String command, String prefix, String user) + throws Exception; } diff --git a/core/src/main/java/io/xpipe/core/process/ShellDumbMode.java b/core/src/main/java/io/xpipe/core/process/ShellDumbMode.java index 3a5ecbdb0..54ae35cca 100644 --- a/core/src/main/java/io/xpipe/core/process/ShellDumbMode.java +++ b/core/src/main/java/io/xpipe/core/process/ShellDumbMode.java @@ -26,5 +26,4 @@ public interface ShellDumbMode { default void prepareDumbExit(ShellControl shellControl) throws IOException { shellControl.writeLine(" exit"); } - } diff --git a/core/src/main/java/io/xpipe/core/store/FileEntry.java b/core/src/main/java/io/xpipe/core/store/FileEntry.java index 5b49d9023..0a047e7d4 100644 --- a/core/src/main/java/io/xpipe/core/store/FileEntry.java +++ b/core/src/main/java/io/xpipe/core/store/FileEntry.java @@ -3,7 +3,6 @@ package io.xpipe.core.store; import lombok.NonNull; import lombok.Setter; import lombok.Value; -import lombok.With; import lombok.experimental.NonFinal; import java.time.Instant; diff --git a/core/src/main/java/io/xpipe/core/store/FilePath.java b/core/src/main/java/io/xpipe/core/store/FilePath.java index 1d6fe4214..52129185b 100644 --- a/core/src/main/java/io/xpipe/core/store/FilePath.java +++ b/core/src/main/java/io/xpipe/core/store/FilePath.java @@ -2,7 +2,6 @@ package io.xpipe.core.store; import io.xpipe.core.process.OsType; -import lombok.EqualsAndHashCode; import lombok.NonNull; import java.nio.file.Path; @@ -212,7 +211,7 @@ public final class FilePath { } var ar = value.split("[\\\\/]"); - var l = Arrays.stream(ar).filter(s -> !s.isEmpty()).toList(); + var l = Arrays.stream(ar).filter(s -> !s.isEmpty()).toList(); split = l; return l; } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/desktop/DesktopApplicationStoreProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/desktop/DesktopApplicationStoreProvider.java index d08687505..f85719fe4 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/desktop/DesktopApplicationStoreProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/desktop/DesktopApplicationStoreProvider.java @@ -1,18 +1,18 @@ package io.xpipe.ext.base.desktop; import io.xpipe.app.browser.BrowserFullSessionModel; +import io.xpipe.app.ext.*; import io.xpipe.app.hub.comp.StoreChoiceComp; import io.xpipe.app.hub.comp.StoreEntryWrapper; import io.xpipe.app.hub.comp.StoreViewState; -import io.xpipe.app.ext.*; import io.xpipe.app.storage.DataStoreCategory; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.util.DataStoreFormatter; import io.xpipe.app.util.DocumentationLink; import io.xpipe.app.util.OptionsBuilder; import io.xpipe.core.store.DataStore; - import io.xpipe.core.util.FailableRunnable; + import javafx.beans.property.BooleanProperty; import javafx.beans.property.Property; import javafx.beans.property.SimpleObjectProperty; diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityChoice.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityChoice.java index dbbc8fd42..4e67c4e86 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityChoice.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityChoice.java @@ -19,9 +19,7 @@ import lombok.Value; public class IdentityChoice { public static OptionsBuilder ssh( - Property> host, - ObjectProperty identity, - boolean requireUser) { + Property> host, ObjectProperty identity, boolean requireUser) { var i = new IdentityChoice( host, identity, true, requireUser, true, true, true, "identityChoice", "passwordAuthentication"); return i.build(); @@ -76,7 +74,10 @@ public class IdentityChoice { .longDescription("base:sshKey") .sub( SshIdentityStrategyHelper.identity( - host != null ? host : new ReadOnlyObjectWrapper<>(DataStorage.get().local().ref()), + host != null + ? host + : new ReadOnlyObjectWrapper<>( + DataStorage.get().local().ref()), identityStrategy, path -> false, true, diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentitySelectComp.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentitySelectComp.java index cd0e4b17a..29bff6ad9 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentitySelectComp.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentitySelectComp.java @@ -4,12 +4,12 @@ import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.CompStructure; import io.xpipe.app.comp.SimpleCompStructure; import io.xpipe.app.comp.base.*; -import io.xpipe.app.hub.comp.StoreCreationDialog; -import io.xpipe.app.hub.comp.StoreEntryWrapper; -import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.core.AppFontSizes; import io.xpipe.app.core.AppI18n; import io.xpipe.app.ext.DataStoreCreationCategory; +import io.xpipe.app.hub.comp.StoreCreationDialog; +import io.xpipe.app.hub.comp.StoreEntryWrapper; +import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.storage.DataStoreEntryRef; diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityStoreProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityStoreProvider.java index 9c03ea2ed..3bdd2c757 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityStoreProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityStoreProvider.java @@ -50,5 +50,4 @@ public abstract class IdentityStoreProvider implements DataStoreProvider { : " + Key"); return new SimpleStringProperty(s); } - } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityValue.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityValue.java index ae4a70aa3..b65c5dda3 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityValue.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityValue.java @@ -100,7 +100,9 @@ public interface IdentityValue { @Override public LocalIdentityStore unwrap() { - return identityStore != null ? identityStore : LocalIdentityStore.builder().build(); + return identityStore != null + ? identityStore + : LocalIdentityStore.builder().build(); } @Override @@ -125,7 +127,9 @@ public interface IdentityValue { @Override public IdentityStore unwrap() { - return ref != null && ref.getStore() != null ? ref.getStore() : LocalIdentityStore.builder().build(); + return ref != null && ref.getStore() != null + ? ref.getStore() + : LocalIdentityStore.builder().build(); } @Override diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/LocalIdentityConvertActionProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/LocalIdentityConvertActionProvider.java index 91f8c25df..c52c250df 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/LocalIdentityConvertActionProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/LocalIdentityConvertActionProvider.java @@ -1,11 +1,11 @@ package io.xpipe.ext.base.identity; +import io.xpipe.app.action.AbstractAction; import io.xpipe.app.action.LeafStoreActionProvider; +import io.xpipe.app.core.AppI18n; +import io.xpipe.app.ext.DataStoreCreationCategory; import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.hub.comp.StoreCreationDialog; -import io.xpipe.app.core.AppI18n; -import io.xpipe.app.action.AbstractAction; -import io.xpipe.app.ext.DataStoreCreationCategory; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.EncryptedValue; @@ -18,42 +18,43 @@ import lombok.extern.jackson.Jacksonized; public class LocalIdentityConvertActionProvider implements LeafStoreActionProvider { - @Override - public AbstractAction createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public AbstractAction createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("sync"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("sync"); + } - @Override - public boolean isMajor(DataStoreEntryRef o) { - return true; - } + @Override + public boolean isMajor(DataStoreEntryRef o) { + return true; + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2g-git"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2g-git"); + } - @Override - public Class getApplicableClass() { - return LocalIdentityStore.class; - } + @Override + public Class getApplicableClass() { + return LocalIdentityStore.class; + } - @Override - public boolean isApplicable(DataStoreEntryRef o) { - return DataStorage.get().supportsSync(); - } + @Override + public boolean isApplicable(DataStoreEntryRef o) { + return DataStorage.get().supportsSync(); + } - @Override + @Override public String getId() { return "convertLocalIdentity"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/LocalIdentityStoreProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/LocalIdentityStoreProvider.java index b42e72e07..33ee01fd3 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/LocalIdentityStoreProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/LocalIdentityStoreProvider.java @@ -1,8 +1,8 @@ package io.xpipe.ext.base.identity; -import io.xpipe.app.hub.comp.StoreEntryWrapper; import io.xpipe.app.core.AppI18n; import io.xpipe.app.ext.GuiDialog; +import io.xpipe.app.hub.comp.StoreEntryWrapper; import io.xpipe.app.storage.*; import io.xpipe.app.util.EncryptedValue; import io.xpipe.app.util.OptionsBuilder; diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/PasswordManagerIdentityStore.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/PasswordManagerIdentityStore.java index 612d218c0..67dd08a02 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/PasswordManagerIdentityStore.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/PasswordManagerIdentityStore.java @@ -1,12 +1,12 @@ package io.xpipe.ext.base.identity; -import com.fasterxml.jackson.annotation.JsonTypeName; -import io.xpipe.app.core.AppCache; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.pwman.PasswordManager; import io.xpipe.app.util.*; import io.xpipe.core.store.InternalCacheDataStore; + +import com.fasterxml.jackson.annotation.JsonTypeName; import lombok.EqualsAndHashCode; import lombok.ToString; import lombok.Value; diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/PasswordManagerIdentityStoreProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/PasswordManagerIdentityStoreProvider.java index cbc184785..e1683a496 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/PasswordManagerIdentityStoreProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/PasswordManagerIdentityStoreProvider.java @@ -1,15 +1,16 @@ package io.xpipe.ext.base.identity; -import io.xpipe.app.hub.comp.StoreEntryWrapper; import io.xpipe.app.core.AppI18n; import io.xpipe.app.ext.DataStoreCreationCategory; import io.xpipe.app.ext.GuiDialog; +import io.xpipe.app.hub.comp.StoreEntryWrapper; import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.prefs.PasswordManagerTestComp; import io.xpipe.app.storage.DataStoreCategory; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.util.OptionsBuilder; import io.xpipe.core.store.DataStore; + import javafx.beans.property.Property; import javafx.beans.property.SimpleStringProperty; @@ -55,9 +56,7 @@ public class PasswordManagerIdentityStoreProvider extends IdentityStoreProvider @Override public DataStore defaultStore(DataStoreCategory category) { - return PasswordManagerIdentityStore.builder() - .key(null) - .build(); + return PasswordManagerIdentityStore.builder().key(null).build(); } @Override diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/SshIdentityStateManager.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/SshIdentityStateManager.java index 90eabb85a..187626921 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/SshIdentityStateManager.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/SshIdentityStateManager.java @@ -3,7 +3,6 @@ package io.xpipe.ext.base.identity; import io.xpipe.app.issue.ErrorAction; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.util.CommandSupport; -import io.xpipe.app.util.DocumentationLink; import io.xpipe.app.util.LocalShell; import io.xpipe.core.process.*; import io.xpipe.core.store.FilePath; @@ -86,7 +85,8 @@ public class SshIdentityStateManager { public static synchronized void checkAgentIdentities(ShellControl sc, String authSock) throws Exception { var found = sc.view().findProgram("ssh-add"); if (found.isEmpty()) { - throw ErrorEvent.expected(new IllegalStateException("SSH agent tool ssh-add not found in PATH. Is the SSH agent correctly installed?")); + throw ErrorEvent.expected(new IllegalStateException( + "SSH agent tool ssh-add not found in PATH. Is the SSH agent correctly installed?")); } try (var c = sc.command(CommandBuilder.of().add("ssh-add", "-l").fixedEnvironment("SSH_AUTH_SOCK", authSock)) @@ -104,7 +104,9 @@ public class SshIdentityStateManager { } } catch (ProcessOutputException ex) { if (sc.getOsType() == OsType.WINDOWS && ex.getOutput().contains("No such file or directory")) { - throw ProcessOutputException.withPrefix("Failed to connect to the OpenSSH agent service. Is the Windows OpenSSH feature enabled and the OpenSSH Authentication Agent service running?", ex); + throw ProcessOutputException.withPrefix( + "Failed to connect to the OpenSSH agent service. Is the Windows OpenSSH feature enabled and the OpenSSH Authentication Agent service running?", + ex); } else { throw ex; } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/SshIdentityStrategy.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/SshIdentityStrategy.java index a8308b36e..4ce12b33c 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/SshIdentityStrategy.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/SshIdentityStrategy.java @@ -61,7 +61,10 @@ public interface SshIdentityStrategy { @Override public List configOptions(ShellControl parent) { // Don't use any agent keys to prevent too many authentication failures - return List.of(new KeyValue("IdentitiesOnly", "yes"), new KeyValue("IdentityAgent", "none"), new KeyValue("IdentityFile", "none"), + return List.of( + new KeyValue("IdentitiesOnly", "yes"), + new KeyValue("IdentityAgent", "none"), + new KeyValue("IdentityFile", "none"), new KeyValue("PKCS11Provider", "none")); } } @@ -108,7 +111,11 @@ public interface SshIdentityStrategy { @Override public List configOptions(ShellControl parent) { - return List.of(new KeyValue("IdentitiesOnly", "no"), new KeyValue("ForwardAgent", forwardAgent ? "yes" : "no"), new KeyValue("IdentityFile", "none"), new KeyValue("PKCS11Provider", "none")); + return List.of( + new KeyValue("IdentitiesOnly", "no"), + new KeyValue("ForwardAgent", forwardAgent ? "yes" : "no"), + new KeyValue("IdentityFile", "none"), + new KeyValue("PKCS11Provider", "none")); } } @@ -151,7 +158,11 @@ public interface SshIdentityStrategy { @Override public List configOptions(ShellControl parent) { - return List.of(new KeyValue("IdentitiesOnly", "no"), new KeyValue("ForwardAgent", forwardAgent ? "yes" : "no"), new KeyValue("IdentityFile", "none"), new KeyValue("PKCS11Provider", "none")); + return List.of( + new KeyValue("IdentitiesOnly", "no"), + new KeyValue("ForwardAgent", forwardAgent ? "yes" : "no"), + new KeyValue("IdentityFile", "none"), + new KeyValue("PKCS11Provider", "none")); } private String getPageantWindowsPipe(ShellControl parent) throws Exception { @@ -204,7 +215,11 @@ public interface SshIdentityStrategy { @Override public List configOptions(ShellControl parent) { - return List.of(new KeyValue("IdentitiesOnly", "no"), new KeyValue("ForwardAgent", forwardAgent ? "yes" : "no"), new KeyValue("IdentityFile", "none"), new KeyValue("PKCS11Provider", "none")); + return List.of( + new KeyValue("IdentitiesOnly", "no"), + new KeyValue("ForwardAgent", forwardAgent ? "yes" : "no"), + new KeyValue("IdentityFile", "none"), + new KeyValue("PKCS11Provider", "none")); } } @@ -240,7 +255,11 @@ public interface SshIdentityStrategy { @Override public List configOptions(ShellControl parent) { - return List.of(new KeyValue("IdentitiesOnly", "no"), new KeyValue("ForwardAgent", forwardAgent ? "yes" : "no"), new KeyValue("IdentityFile", "none"), new KeyValue("PKCS11Provider", "none")); + return List.of( + new KeyValue("IdentitiesOnly", "no"), + new KeyValue("ForwardAgent", forwardAgent ? "yes" : "no"), + new KeyValue("IdentityFile", "none"), + new KeyValue("PKCS11Provider", "none")); } } @@ -316,8 +335,11 @@ public interface SshIdentityStrategy { @Override public List configOptions(ShellControl parent) throws Exception { - return List.of(new KeyValue("IdentitiesOnly", "yes"), new KeyValue("IdentityAgent", "none"), - new KeyValue("IdentityFile", resolveFilePath(parent).toString()), new KeyValue("PKCS11Provider", "none")); + return List.of( + new KeyValue("IdentitiesOnly", "yes"), + new KeyValue("IdentityAgent", "none"), + new KeyValue("IdentityFile", resolveFilePath(parent).toString()), + new KeyValue("PKCS11Provider", "none")); } private FilePath resolveFilePath(ShellControl sc) throws Exception { @@ -326,9 +348,8 @@ public interface SshIdentityStrategy { if (s.startsWith("~")) { s = s.resolveTildeHome(sc.getOsType().getUserHomeDirectory(sc)); } - var resolved = sc.getShellDialect() - .evaluateExpression(sc, s.toString()) - .readStdoutOrThrow(); + var resolved = + sc.getShellDialect().evaluateExpression(sc, s.toString()).readStdoutOrThrow(); return FilePath.of(resolved); } @@ -400,22 +421,25 @@ public interface SshIdentityStrategy { @Override public void buildCommand(CommandBuilder builder) { builder.setup(sc -> { - var file = getFile(sc); - var dir = FileNames.getParent(file); - if (sc.getOsType() == OsType.WINDOWS) { - var path = sc.view().getPath(); - builder.fixedEnvironment("PATH", dir + ";" + path); - } else { - var path = sc.view().getLibraryPath(); - builder.fixedEnvironment("LD_LIBRARY_PATH", dir + ":" + path); - } - }); + var file = getFile(sc); + var dir = FileNames.getParent(file); + if (sc.getOsType() == OsType.WINDOWS) { + var path = sc.view().getPath(); + builder.fixedEnvironment("PATH", dir + ";" + path); + } else { + var path = sc.view().getLibraryPath(); + builder.fixedEnvironment("LD_LIBRARY_PATH", dir + ":" + path); + } + }); } @Override public List configOptions(ShellControl parent) throws Exception { - return List.of(new KeyValue("IdentitiesOnly", "no"), new KeyValue("PKCS11Provider", getFile(parent)), - new KeyValue("IdentityFile", "none"), new KeyValue("IdentityAgent", "none")); + return List.of( + new KeyValue("IdentitiesOnly", "no"), + new KeyValue("PKCS11Provider", getFile(parent)), + new KeyValue("IdentityFile", "none"), + new KeyValue("IdentityAgent", "none")); } } @@ -454,7 +478,11 @@ public interface SshIdentityStrategy { @Override public List configOptions(ShellControl parent) { - return List.of(new KeyValue("IdentitiesOnly", "no"), new KeyValue("PKCS11Provider", file), new KeyValue("IdentityFile", "none"), new KeyValue("IdentityAgent", "none")); + return List.of( + new KeyValue("IdentitiesOnly", "no"), + new KeyValue("PKCS11Provider", file), + new KeyValue("IdentityFile", "none"), + new KeyValue("IdentityAgent", "none")); } } @@ -474,7 +502,11 @@ public interface SshIdentityStrategy { @Override public List configOptions(ShellControl parent) { - return List.of(new KeyValue("IdentitiesOnly", "no"), new KeyValue("ForwardAgent", forwardAgent ? "yes" : "no"), new KeyValue("IdentityFile", "none"), new KeyValue("PKCS11Provider", "none")); + return List.of( + new KeyValue("IdentitiesOnly", "no"), + new KeyValue("ForwardAgent", forwardAgent ? "yes" : "no"), + new KeyValue("IdentityFile", "none"), + new KeyValue("PKCS11Provider", "none")); } } } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/SyncedIdentityStoreProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/SyncedIdentityStoreProvider.java index 0ba22a16c..5390da759 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/SyncedIdentityStoreProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/SyncedIdentityStoreProvider.java @@ -1,9 +1,9 @@ package io.xpipe.ext.base.identity; -import io.xpipe.app.hub.comp.StoreEntryWrapper; import io.xpipe.app.core.AppI18n; import io.xpipe.app.ext.DataStoreCreationCategory; import io.xpipe.app.ext.GuiDialog; +import io.xpipe.app.hub.comp.StoreEntryWrapper; import io.xpipe.app.storage.*; import io.xpipe.app.util.*; import io.xpipe.core.store.DataStore; diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/UsernameStrategy.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/UsernameStrategy.java index 12ea5fd4b..ce115c491 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/UsernameStrategy.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/UsernameStrategy.java @@ -34,7 +34,9 @@ public interface UsernameStrategy { private final String username; - public Fixed(String username) {this.username = username;} + public Fixed(String username) { + this.username = username; + } public String get() { return username; @@ -60,7 +62,9 @@ public interface UsernameStrategy { private final FailableSupplier username; - public Dynamic(FailableSupplier username) {this.username = username;} + public Dynamic(FailableSupplier username) { + this.username = username; + } @Override public boolean hasUser() { diff --git a/ext/base/src/main/java/io/xpipe/ext/base/script/RunBackgroundScriptActionProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/script/RunBackgroundScriptActionProvider.java index 7f4d397b1..49ace3142 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/script/RunBackgroundScriptActionProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/script/RunBackgroundScriptActionProvider.java @@ -1,21 +1,22 @@ package io.xpipe.ext.base.script; import io.xpipe.app.action.ActionProvider; -import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.ext.ShellStore; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; - public class RunBackgroundScriptActionProvider implements ActionProvider { - @Override + @Override public String getId() { return "runBackgroundScript"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder public static class Action extends StoreAction { private final DataStoreEntryRef scriptStore; diff --git a/ext/base/src/main/java/io/xpipe/ext/base/script/RunFileScriptMenuProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/script/RunFileScriptMenuProvider.java index 083c885f3..8262b2d12 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/script/RunFileScriptMenuProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/script/RunFileScriptMenuProvider.java @@ -1,16 +1,16 @@ package io.xpipe.ext.base.script; import io.xpipe.app.browser.BrowserFullSessionModel; +import io.xpipe.app.browser.file.BrowserEntry; +import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.browser.menu.BrowserMenuBranchProvider; import io.xpipe.app.browser.menu.BrowserMenuItemProvider; import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.browser.menu.MultiExecuteSelectionMenuProvider; -import io.xpipe.app.browser.file.BrowserEntry; -import io.xpipe.app.browser.file.BrowserFileSystemTabModel; import io.xpipe.app.comp.base.PrettyImageHelper; -import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.core.AppI18n; import io.xpipe.app.core.AppLayoutModel; +import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.ScriptHelper; @@ -108,7 +108,8 @@ public class RunFileScriptMenuProvider implements BrowserMenuBranchProvider { return new BrowserMenuBranchProvider() { @Override public Node getIcon(BrowserFileSystemTabModel model, List entries) { - return PrettyImageHelper.ofFixedSize(hierarchy.getBase().get().getEffectiveIconFile(), 16, 16).createRegion(); + return PrettyImageHelper.ofFixedSize(hierarchy.getBase().get().getEffectiveIconFile(), 16, 16) + .createRegion(); } @Override @@ -131,7 +132,8 @@ public class RunFileScriptMenuProvider implements BrowserMenuBranchProvider { @Override public Node getIcon(BrowserFileSystemTabModel model, List entries) { - return PrettyImageHelper.ofFixedSize(ref.get().getEffectiveIconFile(), 16, 16).createRegion(); + return PrettyImageHelper.ofFixedSize(ref.get().getEffectiveIconFile(), 16, 16) + .createRegion(); } @Override diff --git a/ext/base/src/main/java/io/xpipe/ext/base/script/RunHubBatchScriptActionProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/script/RunHubBatchScriptActionProvider.java index 1489dab79..07aff3b5a 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/script/RunHubBatchScriptActionProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/script/RunHubBatchScriptActionProvider.java @@ -1,11 +1,12 @@ package io.xpipe.ext.base.script; import io.xpipe.app.action.ActionProvider; -import io.xpipe.app.hub.action.MultiStoreAction; import io.xpipe.app.ext.ShellStore; +import io.xpipe.app.hub.action.MultiStoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.CommandDialog; import io.xpipe.core.process.CommandControl; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; @@ -13,12 +14,13 @@ import java.util.LinkedHashMap; public class RunHubBatchScriptActionProvider implements ActionProvider { - @Override + @Override public String getId() { return "runHubBatchScript"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder public static class Action extends MultiStoreAction { private final DataStoreEntryRef scriptStore; diff --git a/ext/base/src/main/java/io/xpipe/ext/base/script/RunHubScriptActionProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/script/RunHubScriptActionProvider.java index 284a33667..ff135f589 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/script/RunHubScriptActionProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/script/RunHubScriptActionProvider.java @@ -1,21 +1,23 @@ package io.xpipe.ext.base.script; import io.xpipe.app.action.ActionProvider; -import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.ext.ShellStore; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.CommandDialog; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; public class RunHubScriptActionProvider implements ActionProvider { - @Override + @Override public String getId() { return "runHubScript"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder public static class Action extends StoreAction { DataStoreEntryRef scriptStore; diff --git a/ext/base/src/main/java/io/xpipe/ext/base/script/RunScriptActionProviderMenu.java b/ext/base/src/main/java/io/xpipe/ext/base/script/RunScriptActionProviderMenu.java index d3a47da2c..e6e56773e 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/script/RunScriptActionProviderMenu.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/script/RunScriptActionProviderMenu.java @@ -23,7 +23,8 @@ import lombok.Value; import java.util.List; -public class RunScriptActionProviderMenu implements BranchStoreActionProvider, BatchStoreActionProvider { +public class RunScriptActionProviderMenu + implements BranchStoreActionProvider, BatchStoreActionProvider { @Value private static class TerminalRunActionProvider @@ -35,10 +36,14 @@ public class RunScriptActionProviderMenu implements BranchStoreActionProvider ref) { - return RunTerminalScriptActionProvider.Action.builder().ref(ref).scriptStore(hierarchy.getLeafBase()).build(); - } + + @Override + public RunTerminalScriptActionProvider.Action createAction(DataStoreEntryRef ref) { + return RunTerminalScriptActionProvider.Action.builder() + .ref(ref) + .scriptStore(hierarchy.getLeafBase()) + .build(); + } @Override public boolean isApplicable(DataStoreEntryRef o) { @@ -46,35 +51,33 @@ public class RunScriptActionProviderMenu implements BranchStoreActionProvider getName(DataStoreEntryRef store) { - var t = AppPrefs.get().terminalType().getValue(); - return AppI18n.observable( - "executeInTerminal", - t != null ? t.toTranslatedString().getValue() : "?"); - } + public ObservableValue getName(DataStoreEntryRef store) { + var t = AppPrefs.get().terminalType().getValue(); + return AppI18n.observable( + "executeInTerminal", t != null ? t.toTranslatedString().getValue() : "?"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2c-code-greater-than"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2c-code-greater-than"); + } - @Override - public Class getApplicableClass() { - return ShellStore.class; - } + @Override + public Class getApplicableClass() { + return ShellStore.class; + } - @Override - public ObservableValue getName() { - var t = AppPrefs.get().terminalType().getValue(); - return AppI18n.observable( - "executeInTerminal", - t != null ? t.toTranslatedString().getValue() : "?"); - } + @Override + public ObservableValue getName() { + var t = AppPrefs.get().terminalType().getValue(); + return AppI18n.observable( + "executeInTerminal", t != null ? t.toTranslatedString().getValue() : "?"); + } - @Override - public LabelGraphic getIcon() { - return new LabelGraphic.IconGraphic("mdi2c-code-greater-than"); - } + @Override + public LabelGraphic getIcon() { + return new LabelGraphic.IconGraphic("mdi2c-code-greater-than"); + } } @Value @@ -90,12 +93,18 @@ public class RunScriptActionProviderMenu implements BranchStoreActionProvider ref) { - return RunHubScriptActionProvider.Action.builder().ref(ref).scriptStore(hierarchy.getLeafBase()).build(); + return RunHubScriptActionProvider.Action.builder() + .ref(ref) + .scriptStore(hierarchy.getLeafBase()) + .build(); } @Override public AbstractAction createBatchAction(List> stores) { - return RunHubBatchScriptActionProvider.Action.builder().refs(stores).scriptStore(hierarchy.getLeafBase()).build(); + return RunHubBatchScriptActionProvider.Action.builder() + .refs(stores) + .scriptStore(hierarchy.getLeafBase()) + .build(); } @Override @@ -103,30 +112,30 @@ public class RunScriptActionProviderMenu implements BranchStoreActionProvider getName(DataStoreEntryRef store) { - return AppI18n.observable("runInConnectionHub"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("runInConnectionHub"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2d-desktop-mac"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2d-desktop-mac"); + } - @Override - public Class getApplicableClass() { - return ShellStore.class; - } + @Override + public Class getApplicableClass() { + return ShellStore.class; + } - @Override - public ObservableValue getName() { - return AppI18n.observable("runInConnectionHub"); - } + @Override + public ObservableValue getName() { + return AppI18n.observable("runInConnectionHub"); + } - @Override - public LabelGraphic getIcon() { - return new LabelGraphic.IconGraphic("mdi2d-desktop-mac"); - } + @Override + public LabelGraphic getIcon() { + return new LabelGraphic.IconGraphic("mdi2d-desktop-mac"); + } } @Value @@ -142,7 +151,10 @@ public class RunScriptActionProviderMenu implements BranchStoreActionProvider ref) { - return RunBackgroundScriptActionProvider.Action.builder().ref(ref).scriptStore(hierarchy.getLeafBase()).build(); + return RunBackgroundScriptActionProvider.Action.builder() + .ref(ref) + .scriptStore(hierarchy.getLeafBase()) + .build(); } @Override @@ -150,15 +162,15 @@ public class RunScriptActionProviderMenu implements BranchStoreActionProvider getName(DataStoreEntryRef store) { - return AppI18n.observable("executeInBackground"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("executeInBackground"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2f-flip-to-back"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2f-flip-to-back"); + } @Override public Class getApplicableClass() { @@ -166,20 +178,19 @@ public class RunScriptActionProviderMenu implements BranchStoreActionProvider getName() { - return AppI18n.observable("executeInBackground"); - } + public ObservableValue getName() { + return AppI18n.observable("executeInBackground"); + } - @Override - public LabelGraphic getIcon() { - return new LabelGraphic.IconGraphic("mdi2f-flip-to-back"); - } - - @Override - public List getChildren(List> batch) { - return List.of(); - } + @Override + public LabelGraphic getIcon() { + return new LabelGraphic.IconGraphic("mdi2f-flip-to-back"); + } + @Override + public List getChildren(List> batch) { + return List.of(); + } } @Value @@ -201,17 +212,16 @@ public class RunScriptActionProviderMenu implements BranchStoreActionProvider getApplicableClass() { - return ShellStore.class; - } + public Class getApplicableClass() { + return ShellStore.class; + } @Override public boolean isApplicable(DataStoreEntryRef o) { @@ -219,29 +229,28 @@ public class RunScriptActionProviderMenu implements BranchStoreActionProvider getName(DataStoreEntryRef store) { - return getName(); - } - - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return getIcon(); - } - - @Override - public List getChildren(DataStoreEntryRef store) { - if (hierarchy.isLeaf()) { - return List.of( - new TerminalRunActionProvider(hierarchy), - new HubRunActionProvider(hierarchy), - new BackgroundRunActionProvider(hierarchy)); - } - - return hierarchy.getChildren().stream() - .map(c -> new ScriptActionProvider(c)) - .toList(); + public ObservableValue getName(DataStoreEntryRef store) { + return getName(); } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return getIcon(); + } + + @Override + public List getChildren(DataStoreEntryRef store) { + if (hierarchy.isLeaf()) { + return List.of( + new TerminalRunActionProvider(hierarchy), + new HubRunActionProvider(hierarchy), + new BackgroundRunActionProvider(hierarchy)); + } + + return hierarchy.getChildren().stream() + .map(c -> new ScriptActionProvider(c)) + .toList(); + } } private static class NoScriptsActionProvider @@ -249,13 +258,18 @@ public class RunScriptActionProviderMenu implements BranchStoreActionProvider> stores) { - return CategorySelectActionProvider.Action.builder().ref(stores.getFirst().asNeeded()).build(); + return CategorySelectActionProvider.Action.builder() + .ref(stores.getFirst().asNeeded()) + .build(); } @Override - public StoreAction createAction(DataStoreEntryRef ref) { - return CategorySelectActionProvider.Action.builder().ref(ref.asNeeded()).build().asNeeded(); - } + public StoreAction createAction(DataStoreEntryRef ref) { + return CategorySelectActionProvider.Action.builder() + .ref(ref.asNeeded()) + .build() + .asNeeded(); + } @Override public boolean isApplicable(DataStoreEntryRef o) { @@ -263,39 +277,41 @@ public class RunScriptActionProviderMenu implements BranchStoreActionProvider getName(DataStoreEntryRef store) { - return AppI18n.observable("noScriptsAvailable"); - } + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("noScriptsAvailable"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2i-image-filter-none"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2i-image-filter-none"); + } - @Override - public ObservableValue getName() { - return AppI18n.observable("noScriptsAvailable"); - } + @Override + public ObservableValue getName() { + return AppI18n.observable("noScriptsAvailable"); + } - @Override - public LabelGraphic getIcon() { - return new LabelGraphic.IconGraphic("mdi2i-image-filter-none"); - } + @Override + public LabelGraphic getIcon() { + return new LabelGraphic.IconGraphic("mdi2i-image-filter-none"); + } - @Override - public Class getApplicableClass() { - return ShellStore.class; - } + @Override + public Class getApplicableClass() { + return ShellStore.class; + } } private static class ScriptsDisabledActionProvider implements LeafStoreActionProvider, BatchStoreActionProvider { - - @Override - public StoreAction createAction(DataStoreEntryRef ref) { - return CategoryConfigActionProvider.Action.builder().ref(ref.asNeeded()).build().asNeeded(); - } + @Override + public StoreAction createAction(DataStoreEntryRef ref) { + return CategoryConfigActionProvider.Action.builder() + .ref(ref.asNeeded()) + .build() + .asNeeded(); + } @Override public boolean isApplicable(DataStoreEntryRef o) { @@ -303,29 +319,29 @@ public class RunScriptActionProviderMenu implements BranchStoreActionProvider getName(DataStoreEntryRef store) { - return AppI18n.observable("scriptsDisabled"); - } + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("scriptsDisabled"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2b-block-helper"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2b-block-helper"); + } - @Override - public ObservableValue getName() { - return AppI18n.observable("scriptsDisabled"); - } + @Override + public ObservableValue getName() { + return AppI18n.observable("scriptsDisabled"); + } - @Override - public LabelGraphic getIcon() { - return new LabelGraphic.IconGraphic("mdi2b-block-helper"); - } + @Override + public LabelGraphic getIcon() { + return new LabelGraphic.IconGraphic("mdi2b-block-helper"); + } - @Override - public Class getApplicableClass() { - return ShellStore.class; - } + @Override + public Class getApplicableClass() { + return ShellStore.class; + } } private static class NoStateActionProvider @@ -337,171 +353,168 @@ public class RunScriptActionProviderMenu implements BranchStoreActionProvider getName(DataStoreEntryRef store) { - return AppI18n.observable("noScriptStateAvailable"); - } + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("noScriptStateAvailable"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2i-image-filter-none"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2i-image-filter-none"); + } - @Override - public Class getApplicableClass() { - return ShellStore.class; - } + @Override + public Class getApplicableClass() { + return ShellStore.class; + } - @Override - public ObservableValue getName() { - return AppI18n.observable("noScriptStateAvailable"); - } + @Override + public ObservableValue getName() { + return AppI18n.observable("noScriptStateAvailable"); + } - @Override - public LabelGraphic getIcon() { - return new LabelGraphic.IconGraphic("mdi2i-image-filter-none"); - } + @Override + public LabelGraphic getIcon() { + return new LabelGraphic.IconGraphic("mdi2i-image-filter-none"); + } - @Override - public StoreAction createAction(DataStoreEntryRef ref) { - return RefreshStoreActionProvider.Action.builder().ref(ref.asNeeded()).build().asNeeded(); + @Override + public StoreAction createAction(DataStoreEntryRef ref) { + return RefreshStoreActionProvider.Action.builder() + .ref(ref.asNeeded()) + .build() + .asNeeded(); } } - @Override - public Class getApplicableClass() { - return ShellStore.class; + @Override + public Class getApplicableClass() { + return ShellStore.class; + } + + @Override + public boolean isMajor(DataStoreEntryRef o) { + return true; + } + + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("runScript"); + } + + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2p-play-box-multiple-outline"); + } + + @Override + public boolean isApplicable(DataStoreEntryRef o) { + var state = o.get().getStorePersistentState(); + if (state instanceof SystemState systemState) { + return (systemState.getShellDialect() == null + || systemState.getShellDialect().getDumbMode().supportsAnyPossibleInteraction()) + && (systemState.getTtyState() == null || systemState.getTtyState() == ShellTtyState.NONE); + } else { + return false; + } + } + + @Override + public List getChildren(DataStoreEntryRef store) { + if (Boolean.TRUE.equals( + DataStorage.get().getEffectiveCategoryConfig(store.get()).getDontAllowScripts())) { + return List.of(new ScriptsDisabledActionProvider()); + } + + var replacement = ProcessControlProvider.get().replace(store); + var state = replacement.get().getStorePersistentState(); + if (!(state instanceof SystemState systemState) || systemState.getShellDialect() == null) { + return List.of(new NoStateActionProvider()); + } + + var hierarchy = ScriptHierarchy.buildEnabledHierarchy(ref -> { + if (!ref.getStore().isRunnableScript()) { + return false; } - @Override - public boolean isMajor(DataStoreEntryRef o) { - return true; + if (!ref.getStore().isCompatible(systemState.getShellDialect())) { + return false; } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("runScript"); - } + return true; + }); + var list = hierarchy.getChildren().stream() + .map(c -> new ScriptActionProvider(c)) + .toList(); + if (list.isEmpty()) { + return List.of(new NoScriptsActionProvider()); + } else { + return list; + } + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2p-play-box-multiple-outline"); - } + @Override + public ObservableValue getName() { + return AppI18n.observable("runScript"); + } - @Override - public boolean isApplicable(DataStoreEntryRef o) { - var state = o.get().getStorePersistentState(); - if (state instanceof SystemState systemState) { - return (systemState.getShellDialect() == null - || systemState - .getShellDialect() - .getDumbMode() - .supportsAnyPossibleInteraction()) - && (systemState.getTtyState() == null || systemState.getTtyState() == ShellTtyState.NONE); - } else { - return false; - } - } + @Override + public LabelGraphic getIcon() { + return new LabelGraphic.IconGraphic("mdi2p-play-box-multiple-outline"); + } - @Override - public List getChildren(DataStoreEntryRef store) { - if (Boolean.TRUE.equals(DataStorage.get() + @Override + public List getChildren(List> batch) { + if (batch.stream() + .anyMatch(store -> Boolean.TRUE.equals(DataStorage.get() .getEffectiveCategoryConfig(store.get()) - .getDontAllowScripts())) { - return List.of(new ScriptsDisabledActionProvider()); - } - - var replacement = ProcessControlProvider.get().replace(store); - var state = replacement.get().getStorePersistentState(); - if (!(state instanceof SystemState systemState) || systemState.getShellDialect() == null) { - return List.of(new NoStateActionProvider()); - } - - var hierarchy = ScriptHierarchy.buildEnabledHierarchy(ref -> { - if (!ref.getStore().isRunnableScript()) { - return false; - } - - if (!ref.getStore().isCompatible(systemState.getShellDialect())) { - return false; - } + .getDontAllowScripts()))) { + return List.of(new ScriptsDisabledActionProvider()); + } + var stateMissing = batch.stream().anyMatch(ref -> { + var state = ref.get().getStorePersistentState(); + if (state instanceof SystemState systemState) { + if (systemState.getShellDialect() == null) { return true; - }); - var list = hierarchy.getChildren().stream() - .map(c -> new ScriptActionProvider(c)) - .toList(); - if (list.isEmpty()) { - return List.of(new NoScriptsActionProvider()); + } + + if (systemState.getTtyState() == null || systemState.getTtyState() != ShellTtyState.NONE) { + return true; + } + } + return false; + }); + + if (stateMissing) { + return List.of(new NoStateActionProvider()); + } + + var hierarchy = ScriptHierarchy.buildEnabledHierarchy(scriptRef -> { + var compatible = batch.stream().allMatch(ref -> { + var state = ref.get().getStorePersistentState(); + if (state instanceof SystemState systemState) { + return scriptRef.getStore().isCompatible(systemState.getShellDialect()); } else { - return list; - } - } - - @Override - public ObservableValue getName() { - return AppI18n.observable("runScript"); - } - - @Override - public LabelGraphic getIcon() { - return new LabelGraphic.IconGraphic("mdi2p-play-box-multiple-outline"); - } - - @Override - public List getChildren(List> batch) { - if (batch.stream() - .anyMatch(store -> Boolean.TRUE.equals(DataStorage.get() - .getEffectiveCategoryConfig(store.get()) - .getDontAllowScripts()))) { - return List.of(new ScriptsDisabledActionProvider()); - } - - var stateMissing = batch.stream().anyMatch(ref -> { - var state = ref.get().getStorePersistentState(); - if (state instanceof SystemState systemState) { - if (systemState.getShellDialect() == null) { - return true; - } - - if (systemState.getTtyState() == null || systemState.getTtyState() != ShellTtyState.NONE) { - return true; - } - } return false; - }); - - if (stateMissing) { - return List.of(new NoStateActionProvider()); - } - - var hierarchy = ScriptHierarchy.buildEnabledHierarchy(scriptRef -> { - var compatible = batch.stream().allMatch(ref -> { - var state = ref.get().getStorePersistentState(); - if (state instanceof SystemState systemState) { - return scriptRef - .getStore() - .isCompatible(systemState.getShellDialect()); - } else { - return false; - } - }); - if (!compatible) { - return false; - } - - if (!scriptRef.getStore().isRunnableScript()) { - return false; - } - - return true; - }); - var list = hierarchy.getChildren().stream() - .map(c -> new ScriptActionProvider(c)) - .toList(); - if (list.isEmpty()) { - return List.of(new NoScriptsActionProvider()); - } else { - return list; } + }); + if (!compatible) { + return false; } + + if (!scriptRef.getStore().isRunnableScript()) { + return false; + } + + return true; + }); + var list = hierarchy.getChildren().stream() + .map(c -> new ScriptActionProvider(c)) + .toList(); + if (list.isEmpty()) { + return List.of(new NoScriptsActionProvider()); + } else { + return list; + } + } } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/script/RunTerminalScriptActionProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/script/RunTerminalScriptActionProvider.java index 885765ff3..c057bee62 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/script/RunTerminalScriptActionProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/script/RunTerminalScriptActionProvider.java @@ -1,10 +1,11 @@ package io.xpipe.ext.base.script; import io.xpipe.app.action.ActionProvider; -import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.ext.ShellStore; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.terminal.TerminalLauncher; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; @@ -15,12 +16,13 @@ public class RunTerminalScriptActionProvider implements ActionProvider { return true; } - @Override + @Override public String getId() { return "runTerminalStore"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder public static class Action extends StoreAction { DataStoreEntryRef scriptStore; @@ -29,8 +31,8 @@ public class RunTerminalScriptActionProvider implements ActionProvider { public void executeImpl() throws Exception { var sc = ref.getStore().getOrStartSession(); var script = scriptStore.getStore().assembleScriptChain(sc); - TerminalLauncher.open(ref.get(), scriptStore.get().getName() + " - " + ref.get().getName(), null, - sc.command(script)); + TerminalLauncher.open( + ref.get(), scriptStore.get().getName() + " - " + ref.get().getName(), null, sc.command(script)); } } } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/script/SimpleScriptQuickEditActionProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/script/SimpleScriptQuickEditActionProvider.java index fb9095756..04a36660e 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/script/SimpleScriptQuickEditActionProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/script/SimpleScriptQuickEditActionProvider.java @@ -1,10 +1,10 @@ package io.xpipe.ext.base.script; +import io.xpipe.app.action.AbstractAction; import io.xpipe.app.action.LeafStoreActionProvider; +import io.xpipe.app.core.AppI18n; import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.hub.comp.StoreCreationDialog; -import io.xpipe.app.action.AbstractAction; -import io.xpipe.app.core.AppI18n; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.FileOpener; @@ -12,6 +12,7 @@ import io.xpipe.app.util.LabelGraphic; import io.xpipe.core.process.OsType; import javafx.beans.value.ObservableValue; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; @@ -25,9 +26,9 @@ public class SimpleScriptQuickEditActionProvider implements LeafStoreActionProvi } @Override - public AbstractAction createAction(DataStoreEntryRef store) { - return Action.builder().ref(store).build(); - } + public AbstractAction createAction(DataStoreEntryRef store) { + return Action.builder().ref(store).build(); + } @Override public ObservableValue getName(DataStoreEntryRef store) { @@ -39,18 +40,18 @@ public class SimpleScriptQuickEditActionProvider implements LeafStoreActionProvi return new LabelGraphic.IconGraphic("mdal-edit"); } + @Override + public Class getApplicableClass() { + return SimpleScriptStore.class; + } @Override - public Class getApplicableClass() { - return SimpleScriptStore.class; - } - - @Override public String getId() { return "editScriptInEditor"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/ext/base/src/main/java/io/xpipe/ext/base/script/SimpleScriptStoreProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/script/SimpleScriptStoreProvider.java index 62f91ef15..dceeb0493 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/script/SimpleScriptStoreProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/script/SimpleScriptStoreProvider.java @@ -219,7 +219,9 @@ public class SimpleScriptStoreProvider implements EnabledParentStoreProvider, Da return OsType.LINUX.makeFileSystemCompatible(name) + ".sh"; } - var os = st.getMinimumDialect() == ShellDialects.CMD || ShellDialects.isPowershell(st.getMinimumDialect()) ? OsType.WINDOWS : OsType.LINUX; + var os = st.getMinimumDialect() == ShellDialects.CMD || ShellDialects.isPowershell(st.getMinimumDialect()) + ? OsType.WINDOWS + : OsType.LINUX; return os.makeFileSystemCompatible(name) + "." + st.getMinimumDialect().getScriptFileEnding(); } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStore.java b/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStore.java index 3b17b7f19..3b79c0523 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStore.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStore.java @@ -1,14 +1,14 @@ package io.xpipe.ext.base.service; +import io.xpipe.app.ext.NetworkTunnelSession; +import io.xpipe.app.ext.NetworkTunnelStore; +import io.xpipe.app.ext.SingletonSessionStore; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.HostHelper; import io.xpipe.app.util.LicenseProvider; import io.xpipe.app.util.Validators; import io.xpipe.core.store.DataStore; -import io.xpipe.app.ext.NetworkTunnelSession; -import io.xpipe.app.ext.NetworkTunnelStore; -import io.xpipe.app.ext.SingletonSessionStore; import lombok.EqualsAndHashCode; import lombok.Getter; diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStoreProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStoreProvider.java index 726498587..39a100ca0 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStoreProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStoreProvider.java @@ -12,8 +12,8 @@ import io.xpipe.app.util.DataStoreFormatter; import io.xpipe.app.util.DocumentationLink; import io.xpipe.app.util.StoreStateFormat; import io.xpipe.core.store.DataStore; - import io.xpipe.core.util.FailableRunnable; + import javafx.beans.binding.Bindings; import javafx.beans.value.ObservableValue; @@ -118,7 +118,8 @@ public abstract class AbstractServiceStoreProvider implements SingletonSessionSt public ObservableValue informationString(StoreSection section) { return Bindings.createStringBinding( () -> { - AbstractServiceStore s = section.getWrapper().getEntry().getStore().asNeeded(); + AbstractServiceStore s = + section.getWrapper().getEntry().getStore().asNeeded(); var desc = formatService(s); var type = s.getServiceProtocolType() != null && !(s.getServiceProtocolType() instanceof ServiceProtocolType.Undefined) diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/CustomServiceStore.java b/ext/base/src/main/java/io/xpipe/ext/base/service/CustomServiceStore.java index 24549a0fb..918c3959a 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/CustomServiceStore.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/CustomServiceStore.java @@ -1,7 +1,7 @@ package io.xpipe.ext.base.service; -import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.ext.NetworkTunnelStore; +import io.xpipe.app.storage.DataStoreEntryRef; import com.fasterxml.jackson.annotation.JsonTypeName; import lombok.EqualsAndHashCode; diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/CustomServiceStoreProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/service/CustomServiceStoreProvider.java index 347455636..49aca183f 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/CustomServiceStoreProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/CustomServiceStoreProvider.java @@ -1,14 +1,14 @@ package io.xpipe.ext.base.service; -import io.xpipe.app.hub.comp.StoreChoiceComp; -import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.ext.DataStoreCreationCategory; import io.xpipe.app.ext.GuiDialog; +import io.xpipe.app.ext.NetworkTunnelStore; +import io.xpipe.app.hub.comp.StoreChoiceComp; +import io.xpipe.app.hub.comp.StoreViewState; import io.xpipe.app.storage.DataStoreCategory; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.util.OptionsBuilder; import io.xpipe.core.store.DataStore; -import io.xpipe.app.ext.NetworkTunnelStore; import javafx.beans.property.Property; import javafx.beans.property.SimpleObjectProperty; diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/FixedServiceStore.java b/ext/base/src/main/java/io/xpipe/ext/base/service/FixedServiceStore.java index 0246e299f..01cd9312c 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/FixedServiceStore.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/FixedServiceStore.java @@ -1,10 +1,10 @@ package io.xpipe.ext.base.service; +import io.xpipe.app.ext.NetworkTunnelStore; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.Validators; import io.xpipe.core.store.DataStore; import io.xpipe.core.store.FixedChildStore; -import io.xpipe.app.ext.NetworkTunnelStore; import com.fasterxml.jackson.annotation.JsonTypeName; import lombok.EqualsAndHashCode; diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/FixedServiceStoreProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/service/FixedServiceStoreProvider.java index 5c58e8e35..a9801c74c 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/FixedServiceStoreProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/FixedServiceStoreProvider.java @@ -1,13 +1,13 @@ package io.xpipe.ext.base.service; +import io.xpipe.app.ext.GuiDialog; +import io.xpipe.app.ext.NetworkTunnelStore; import io.xpipe.app.hub.comp.StoreChoiceComp; import io.xpipe.app.hub.comp.StoreViewState; -import io.xpipe.app.ext.GuiDialog; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.util.OptionsBuilder; import io.xpipe.core.store.DataStore; -import io.xpipe.app.ext.NetworkTunnelStore; import javafx.beans.property.Property; import javafx.beans.property.SimpleObjectProperty; diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/MappedServiceStoreProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/service/MappedServiceStoreProvider.java index c6fb6b40e..b12eba9fc 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/MappedServiceStoreProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/MappedServiceStoreProvider.java @@ -1,13 +1,13 @@ package io.xpipe.ext.base.service; +import io.xpipe.app.ext.GuiDialog; +import io.xpipe.app.ext.NetworkTunnelStore; import io.xpipe.app.hub.comp.StoreChoiceComp; import io.xpipe.app.hub.comp.StoreViewState; -import io.xpipe.app.ext.GuiDialog; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.util.OptionsBuilder; import io.xpipe.core.store.DataStore; -import io.xpipe.app.ext.NetworkTunnelStore; import javafx.beans.property.Property; import javafx.beans.property.SimpleObjectProperty; diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceControlSession.java b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceControlSession.java index 2d6bd2b95..f80b5cb9b 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceControlSession.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceControlSession.java @@ -1,9 +1,8 @@ package io.xpipe.ext.base.service; +import io.xpipe.app.ext.Session; import io.xpipe.core.process.CommandBuilder; import io.xpipe.core.process.ElevationFunction; -import io.xpipe.app.ext.Session; -import io.xpipe.app.ext.SessionListener; import lombok.Getter; diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceControlStore.java b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceControlStore.java index b124ac5b5..e0fce2b6b 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceControlStore.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceControlStore.java @@ -1,11 +1,11 @@ package io.xpipe.ext.base.service; import io.xpipe.app.ext.ShellStore; +import io.xpipe.app.ext.SingletonSessionStore; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.Validators; import io.xpipe.core.process.ShellScript; import io.xpipe.core.store.DataStore; -import io.xpipe.app.ext.SingletonSessionStore; import com.fasterxml.jackson.annotation.JsonTypeName; import lombok.Value; diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceCopyAddressActionProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceCopyAddressActionProvider.java index ef0a72e9a..e3d5a3e8b 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceCopyAddressActionProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceCopyAddressActionProvider.java @@ -1,9 +1,9 @@ package io.xpipe.ext.base.service; -import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; -import io.xpipe.app.core.AppI18n; import io.xpipe.app.action.AbstractAction; +import io.xpipe.app.action.LeafStoreActionProvider; +import io.xpipe.app.core.AppI18n; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.ClipboardHelper; import io.xpipe.app.util.LabelGraphic; @@ -15,37 +15,38 @@ import lombok.extern.jackson.Jacksonized; public class ServiceCopyAddressActionProvider implements LeafStoreActionProvider { - @Override - public boolean isMajor(DataStoreEntryRef o) { - return true; - } + @Override + public boolean isMajor(DataStoreEntryRef o) { + return true; + } - @Override - public AbstractAction createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public AbstractAction createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public Class getApplicableClass() { - return AbstractServiceStore.class; - } + @Override + public Class getApplicableClass() { + return AbstractServiceStore.class; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("copyAddress"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("copyAddress"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2c-content-copy"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2c-content-copy"); + } - @Override + @Override public String getId() { return "copyServiceAddress"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceRefreshActionProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceRefreshActionProvider.java index a9373aba7..73f7fa91e 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceRefreshActionProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceRefreshActionProvider.java @@ -1,9 +1,9 @@ package io.xpipe.ext.base.service; -import io.xpipe.app.hub.action.BatchStoreActionProvider; import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.core.AppI18n; +import io.xpipe.app.hub.action.BatchStoreActionProvider; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; @@ -14,55 +14,56 @@ import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; public class ServiceRefreshActionProvider - implements LeafStoreActionProvider, BatchStoreActionProvider { + implements LeafStoreActionProvider, + BatchStoreActionProvider { - @Override - public boolean isMajor(DataStoreEntryRef o) { - return true; - } + @Override + public boolean isMajor(DataStoreEntryRef o) { + return true; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("refreshServices"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("refreshServices"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2w-web"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2w-web"); + } - @Override - public boolean isApplicable(DataStoreEntryRef o) { - return o.getStore().allowManualServicesRefresh(); - } + @Override + public boolean isApplicable(DataStoreEntryRef o) { + return o.getStore().allowManualServicesRefresh(); + } - @Override - public ObservableValue getName() { - return AppI18n.observable("refreshServices"); - } + @Override + public ObservableValue getName() { + return AppI18n.observable("refreshServices"); + } - @Override - public LabelGraphic getIcon() { - return new LabelGraphic.IconGraphic("mdi2w-web"); - } + @Override + public LabelGraphic getIcon() { + return new LabelGraphic.IconGraphic("mdi2w-web"); + } - @Override - public Class getApplicableClass() { - return FixedServiceCreatorStore.class; - } + @Override + public Class getApplicableClass() { + return FixedServiceCreatorStore.class; + } - @Override - public Action createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public Action createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - - @Override + @Override public String getId() { return "refreshServices"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/ext/base/src/main/java/io/xpipe/ext/base/store/ShellStoreProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/store/ShellStoreProvider.java index eab7a33de..353feb393 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/store/ShellStoreProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/store/ShellStoreProvider.java @@ -2,11 +2,11 @@ package io.xpipe.ext.base.store; import io.xpipe.app.browser.BrowserFullSessionModel; import io.xpipe.app.comp.Comp; +import io.xpipe.app.ext.*; import io.xpipe.app.hub.comp.OsLogoComp; import io.xpipe.app.hub.comp.StoreEntryWrapper; import io.xpipe.app.hub.comp.StoreSection; import io.xpipe.app.hub.comp.SystemStateComp; -import io.xpipe.app.ext.*; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.terminal.TerminalLauncher; @@ -28,7 +28,8 @@ public interface ShellStoreProvider extends DataStoreProvider { var control = store.standaloneControl(); ScriptStoreSetup.controlWithDefaultScripts(control); TerminalPromptManager.configurePromptScript(control); - TerminalLauncher.open(replacement.get(), DataStorage.get().getStoreEntryDisplayName(replacement.get()), null, control); + TerminalLauncher.open( + replacement.get(), DataStorage.get().getStoreEntryDisplayName(replacement.get()), null, control); }; } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/store/StorePauseActionProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/store/StorePauseActionProvider.java index 06c2c931b..a28c90831 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/store/StorePauseActionProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/store/StorePauseActionProvider.java @@ -1,9 +1,9 @@ package io.xpipe.ext.base.store; -import io.xpipe.app.hub.action.BatchStoreActionProvider; import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.core.AppI18n; +import io.xpipe.app.hub.action.BatchStoreActionProvider; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; @@ -12,22 +12,23 @@ import javafx.beans.value.ObservableValue; import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -public class StorePauseActionProvider implements LeafStoreActionProvider, BatchStoreActionProvider { +public class StorePauseActionProvider + implements LeafStoreActionProvider, BatchStoreActionProvider { @Override public boolean isMutation() { return true; } - @Override - public Action createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public Action createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public Class getApplicableClass() { - return PauseableStore.class; - } + @Override + public Class getApplicableClass() { + return PauseableStore.class; + } @Override public boolean isApplicable(DataStoreEntryRef o) { @@ -35,36 +36,37 @@ public class StorePauseActionProvider implements LeafStoreActionProvider getName(DataStoreEntryRef store) { - return AppI18n.observable("pause"); - } + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("pause"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2p-pause"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2p-pause"); + } - @Override - public boolean requiresValidStore() { - return false; - } + @Override + public boolean requiresValidStore() { + return false; + } - @Override - public ObservableValue getName() { - return AppI18n.observable("pause"); - } + @Override + public ObservableValue getName() { + return AppI18n.observable("pause"); + } - @Override - public LabelGraphic getIcon() { - return new LabelGraphic.IconGraphic("mdi2p-pause"); - } + @Override + public LabelGraphic getIcon() { + return new LabelGraphic.IconGraphic("mdi2p-pause"); + } - @Override + @Override public String getId() { return "pauseStore"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/ext/base/src/main/java/io/xpipe/ext/base/store/StoreRestartActionProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/store/StoreRestartActionProvider.java index f68368a6c..a15558b01 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/store/StoreRestartActionProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/store/StoreRestartActionProvider.java @@ -1,9 +1,9 @@ package io.xpipe.ext.base.store; -import io.xpipe.app.hub.action.BatchStoreActionProvider; import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.core.AppI18n; +import io.xpipe.app.hub.action.BatchStoreActionProvider; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; import io.xpipe.core.store.DataStore; @@ -13,59 +13,61 @@ import javafx.beans.value.ObservableValue; import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -public class StoreRestartActionProvider implements LeafStoreActionProvider, BatchStoreActionProvider { +public class StoreRestartActionProvider + implements LeafStoreActionProvider, BatchStoreActionProvider { @Override public boolean isMutation() { return true; } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("restart"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("restart"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2r-restart"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2r-restart"); + } - @Override - public boolean requiresValidStore() { - return false; - } + @Override + public boolean requiresValidStore() { + return false; + } - @Override - public ObservableValue getName() { - return AppI18n.observable("restart"); - } + @Override + public ObservableValue getName() { + return AppI18n.observable("restart"); + } - @Override - public LabelGraphic getIcon() { - return new LabelGraphic.IconGraphic("mdi2r-restart"); - } + @Override + public LabelGraphic getIcon() { + return new LabelGraphic.IconGraphic("mdi2r-restart"); + } - @Override - public Class getApplicableClass() { - return DataStore.class; - } + @Override + public Class getApplicableClass() { + return DataStore.class; + } - @Override - public Action createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public Action createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public boolean isApplicable(DataStoreEntryRef o) { - return o.getStore() instanceof StartableStore && o.getStore() instanceof StoppableStore; - } + @Override + public boolean isApplicable(DataStoreEntryRef o) { + return o.getStore() instanceof StartableStore && o.getStore() instanceof StoppableStore; + } - @Override + @Override public String getId() { return "restartStore"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/ext/base/src/main/java/io/xpipe/ext/base/store/StoreStartActionProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/store/StoreStartActionProvider.java index fc39e81e2..8b44b7458 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/store/StoreStartActionProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/store/StoreStartActionProvider.java @@ -1,9 +1,9 @@ package io.xpipe.ext.base.store; -import io.xpipe.app.hub.action.BatchStoreActionProvider; import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.core.AppI18n; +import io.xpipe.app.hub.action.BatchStoreActionProvider; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; @@ -12,22 +12,23 @@ import javafx.beans.value.ObservableValue; import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -public class StoreStartActionProvider implements LeafStoreActionProvider, BatchStoreActionProvider { +public class StoreStartActionProvider + implements LeafStoreActionProvider, BatchStoreActionProvider { @Override public boolean isMutation() { return true; } - @Override - public Action createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public Action createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public Class getApplicableClass() { - return StartableStore.class; - } + @Override + public Class getApplicableClass() { + return StartableStore.class; + } @Override public boolean isApplicable(DataStoreEntryRef o) { @@ -35,36 +36,37 @@ public class StoreStartActionProvider implements LeafStoreActionProvider getName(DataStoreEntryRef store) { - return AppI18n.observable("start"); - } + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("start"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2p-play"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2p-play"); + } - @Override - public boolean requiresValidStore() { - return false; - } + @Override + public boolean requiresValidStore() { + return false; + } - @Override - public ObservableValue getName() { - return AppI18n.observable("start"); - } + @Override + public ObservableValue getName() { + return AppI18n.observable("start"); + } - @Override - public LabelGraphic getIcon() { - return new LabelGraphic.IconGraphic("mdi2p-play"); - } + @Override + public LabelGraphic getIcon() { + return new LabelGraphic.IconGraphic("mdi2p-play"); + } - @Override + @Override public String getId() { return "startStore"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/ext/base/src/main/java/io/xpipe/ext/base/store/StoreStopActionProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/store/StoreStopActionProvider.java index d6c6c7092..b37dc54ca 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/store/StoreStopActionProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/store/StoreStopActionProvider.java @@ -1,9 +1,9 @@ package io.xpipe.ext.base.store; -import io.xpipe.app.hub.action.BatchStoreActionProvider; import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.core.AppI18n; +import io.xpipe.app.hub.action.BatchStoreActionProvider; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; @@ -12,59 +12,61 @@ import javafx.beans.value.ObservableValue; import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -public class StoreStopActionProvider implements LeafStoreActionProvider, BatchStoreActionProvider { +public class StoreStopActionProvider + implements LeafStoreActionProvider, BatchStoreActionProvider { @Override public boolean isMutation() { return true; } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("stop"); - } - - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2s-stop"); - } - - @Override - public boolean requiresValidStore() { - return false; - } - - @Override - public ObservableValue getName() { - return AppI18n.observable("stop"); - } - - @Override - public LabelGraphic getIcon() { - return new LabelGraphic.IconGraphic("mdi2s-stop"); - } - - @Override - public Class getApplicableClass() { - return StoppableStore.class; - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("stop"); + } @Override - public Action createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2s-stop"); + } + + @Override + public boolean requiresValidStore() { + return false; + } + + @Override + public ObservableValue getName() { + return AppI18n.observable("stop"); + } + + @Override + public LabelGraphic getIcon() { + return new LabelGraphic.IconGraphic("mdi2s-stop"); + } + + @Override + public Class getApplicableClass() { + return StoppableStore.class; + } + + @Override + public Action createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } @Override public boolean isApplicable(DataStoreEntryRef o) { return true; } - @Override + @Override public String getId() { return "stopAction"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/ext/base/src/main/java/module-info.java b/ext/base/src/main/java/module-info.java index 80f81c3b2..d0753c237 100644 --- a/ext/base/src/main/java/module-info.java +++ b/ext/base/src/main/java/module-info.java @@ -31,12 +31,28 @@ open module io.xpipe.ext.base { requires org.kordamp.ikonli.javafx; requires atlantafx.base; - provides ActionProvider with LocalIdentityConvertActionProvider, - SimpleScriptQuickEditActionProvider, StoreStartActionProvider, StoreStopActionProvider, StorePauseActionProvider, - StoreRestartActionProvider, ServiceCopyAddressActionProvider, RunScriptActionProviderMenu, - ServiceRefreshActionProvider, RunFileScriptMenuProvider; - provides DataStoreProvider with FixedServiceGroupStoreProvider, CustomServiceGroupStoreProvider, CustomServiceStoreProvider, - MappedServiceStoreProvider, FixedServiceStoreProvider, SimpleScriptStoreProvider, DesktopApplicationStoreProvider, - LocalIdentityStoreProvider, SyncedIdentityStoreProvider, ScriptGroupStoreProvider; - provides DataStorageExtensionProvider with ScriptDataStorageProvider; + provides ActionProvider with + LocalIdentityConvertActionProvider, + SimpleScriptQuickEditActionProvider, + StoreStartActionProvider, + StoreStopActionProvider, + StorePauseActionProvider, + StoreRestartActionProvider, + ServiceCopyAddressActionProvider, + RunScriptActionProviderMenu, + ServiceRefreshActionProvider, + RunFileScriptMenuProvider; + provides DataStoreProvider with + FixedServiceGroupStoreProvider, + CustomServiceGroupStoreProvider, + CustomServiceStoreProvider, + MappedServiceStoreProvider, + FixedServiceStoreProvider, + SimpleScriptStoreProvider, + DesktopApplicationStoreProvider, + LocalIdentityStoreProvider, + SyncedIdentityStoreProvider, + ScriptGroupStoreProvider; + provides DataStorageExtensionProvider with + ScriptDataStorageProvider; } diff --git a/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusCommandView.java b/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusCommandView.java index d219a5c0f..b9e0ed8a1 100644 --- a/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusCommandView.java +++ b/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusCommandView.java @@ -135,7 +135,10 @@ public class IncusCommandView extends CommandViewBase { var output = c.readStdoutOrThrow(); return output.lines() .collect(Collectors.toMap( - s -> s.strip().split(",")[0], s -> s.strip().split(",")[1], (x, y) -> y, LinkedHashMap::new)); + s -> s.strip().split(",")[0], + s -> s.strip().split(",")[1], + (x, y) -> y, + LinkedHashMap::new)); } } diff --git a/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerActionProviderMenu.java b/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerActionProviderMenu.java index b34ee967c..69c3f1338 100644 --- a/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerActionProviderMenu.java +++ b/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerActionProviderMenu.java @@ -1,8 +1,8 @@ package io.xpipe.ext.system.incus; +import io.xpipe.app.action.ActionProvider; import io.xpipe.app.action.BranchStoreActionProvider; import io.xpipe.app.core.AppI18n; -import io.xpipe.app.action.ActionProvider; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; import io.xpipe.ext.base.store.StorePauseActionProvider; @@ -16,35 +16,35 @@ import java.util.List; public class IncusContainerActionProviderMenu implements BranchStoreActionProvider { - @Override - public Class getApplicableClass() { - return IncusContainerStore.class; - } + @Override + public Class getApplicableClass() { + return IncusContainerStore.class; + } - @Override - public boolean isMajor(DataStoreEntryRef o) { - return true; - } + @Override + public boolean isMajor(DataStoreEntryRef o) { + return true; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("containerActions"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("containerActions"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2p-package-variant-closed"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2p-package-variant-closed"); + } - @Override - public List getChildren(DataStoreEntryRef store) { - return List.of( - new StoreStartActionProvider(), - new StoreStopActionProvider(), - new StorePauseActionProvider(), - new StoreRestartActionProvider(), - new IncusContainerConsoleActionProvider(), - new IncusContainerEditConfigActionProvider(), - new IncusContainerEditRunConfigActionProvider()); - } + @Override + public List getChildren(DataStoreEntryRef store) { + return List.of( + new StoreStartActionProvider(), + new StoreStopActionProvider(), + new StorePauseActionProvider(), + new StoreRestartActionProvider(), + new IncusContainerConsoleActionProvider(), + new IncusContainerEditConfigActionProvider(), + new IncusContainerEditRunConfigActionProvider()); + } } diff --git a/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerConsoleActionProvider.java b/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerConsoleActionProvider.java index bd87c3308..ebe52bf03 100644 --- a/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerConsoleActionProvider.java +++ b/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerConsoleActionProvider.java @@ -1,9 +1,9 @@ package io.xpipe.ext.system.incus; -import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; -import io.xpipe.app.core.AppI18n; import io.xpipe.app.action.AbstractAction; +import io.xpipe.app.action.LeafStoreActionProvider; +import io.xpipe.app.core.AppI18n; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.terminal.TerminalLauncher; import io.xpipe.app.util.LabelGraphic; @@ -15,37 +15,38 @@ import lombok.extern.jackson.Jacksonized; public class IncusContainerConsoleActionProvider implements LeafStoreActionProvider { - @Override - public AbstractAction createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public AbstractAction createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public Class getApplicableClass() { - return IncusContainerStore.class; - } + @Override + public Class getApplicableClass() { + return IncusContainerStore.class; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("serialConsole"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("serialConsole"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2c-console"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2c-console"); + } - @Override - public boolean requiresValidStore() { - return false; - } + @Override + public boolean requiresValidStore() { + return false; + } - @Override + @Override public String getId() { return "openIncusContainerConsole"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerEditConfigActionProvider.java b/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerEditConfigActionProvider.java index 3b768fb12..8fe9ba795 100644 --- a/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerEditConfigActionProvider.java +++ b/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerEditConfigActionProvider.java @@ -1,9 +1,9 @@ package io.xpipe.ext.system.incus; -import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; -import io.xpipe.app.core.AppI18n; import io.xpipe.app.action.AbstractAction; +import io.xpipe.app.action.LeafStoreActionProvider; +import io.xpipe.app.core.AppI18n; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.terminal.TerminalLauncher; import io.xpipe.app.util.LabelGraphic; @@ -20,37 +20,38 @@ public class IncusContainerEditConfigActionProvider implements LeafStoreActionPr return true; } - @Override - public AbstractAction createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public AbstractAction createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public Class getApplicableClass() { - return IncusContainerStore.class; - } + @Override + public Class getApplicableClass() { + return IncusContainerStore.class; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("editConfiguration"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("editConfiguration"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2f-file-document-edit"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2f-file-document-edit"); + } - @Override - public boolean requiresValidStore() { - return false; - } + @Override + public boolean requiresValidStore() { + return false; + } - @Override + @Override public String getId() { return "editIncusContainerConfig"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerEditRunConfigActionProvider.java b/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerEditRunConfigActionProvider.java index 9f12c8619..d11583e49 100644 --- a/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerEditRunConfigActionProvider.java +++ b/ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerEditRunConfigActionProvider.java @@ -1,13 +1,13 @@ package io.xpipe.ext.system.incus; +import io.xpipe.app.action.AbstractAction; import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.browser.BrowserFullSessionModel; import io.xpipe.app.browser.file.BrowserFileOpener; import io.xpipe.app.core.AppI18n; import io.xpipe.app.core.AppLayoutModel; -import io.xpipe.app.action.AbstractAction; import io.xpipe.app.ext.ProcessControlProvider; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; import io.xpipe.core.store.FilePath; @@ -24,37 +24,38 @@ public class IncusContainerEditRunConfigActionProvider implements LeafStoreActio return true; } - @Override - public AbstractAction createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public AbstractAction createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public Class getApplicableClass() { - return IncusContainerStore.class; - } + @Override + public Class getApplicableClass() { + return IncusContainerStore.class; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("editRunConfiguration"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("editRunConfiguration"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2m-movie-edit"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2m-movie-edit"); + } - @Override - public boolean requiresValidStore() { - return false; - } + @Override + public boolean requiresValidStore() { + return false; + } - @Override + @Override public String getId() { return "editIncusContainerRunConfig"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdCommandView.java b/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdCommandView.java index 7fe16d11b..303c2eea4 100644 --- a/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdCommandView.java +++ b/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdCommandView.java @@ -141,7 +141,10 @@ public class LxdCommandView extends CommandViewBase { var output = c.readStdoutOrThrow(); return output.lines() .collect(Collectors.toMap( - s -> s.strip().split(",")[0], s -> s.strip().split(",")[1], (x, y) -> y, LinkedHashMap::new)); + s -> s.strip().split(",")[0], + s -> s.strip().split(",")[1], + (x, y) -> y, + LinkedHashMap::new)); } catch (ProcessOutputException ex) { if (ex.getOutput().contains("Error: unknown shorthand flag: 'f' in -f")) { throw ErrorEvent.expected(ProcessOutputException.withParagraph("Unsupported legacy LXD version", ex)); diff --git a/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdContainerActionProviderMenu.java b/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdContainerActionProviderMenu.java index 3a7f7c596..e5e3fb873 100644 --- a/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdContainerActionProviderMenu.java +++ b/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdContainerActionProviderMenu.java @@ -1,8 +1,8 @@ package io.xpipe.ext.system.lxd; +import io.xpipe.app.action.ActionProvider; import io.xpipe.app.action.BranchStoreActionProvider; import io.xpipe.app.core.AppI18n; -import io.xpipe.app.action.ActionProvider; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; import io.xpipe.ext.base.store.StorePauseActionProvider; @@ -16,35 +16,35 @@ import java.util.List; public class LxdContainerActionProviderMenu implements BranchStoreActionProvider { - @Override - public Class getApplicableClass() { - return LxdContainerStore.class; - } + @Override + public Class getApplicableClass() { + return LxdContainerStore.class; + } - @Override - public boolean isMajor(DataStoreEntryRef o) { - return true; - } + @Override + public boolean isMajor(DataStoreEntryRef o) { + return true; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("containerActions"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("containerActions"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2p-package-variant-closed"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2p-package-variant-closed"); + } - @Override - public List getChildren(DataStoreEntryRef store) { - return List.of( - new StoreStartActionProvider(), - new StoreStopActionProvider(), - new StorePauseActionProvider(), - new StoreRestartActionProvider(), - new LxdContainerConsoleActionProvider(), - new LxdContainerEditConfigActionProvider(), - new LxdContainerEditRunConfigActionProvider()); - } + @Override + public List getChildren(DataStoreEntryRef store) { + return List.of( + new StoreStartActionProvider(), + new StoreStopActionProvider(), + new StorePauseActionProvider(), + new StoreRestartActionProvider(), + new LxdContainerConsoleActionProvider(), + new LxdContainerEditConfigActionProvider(), + new LxdContainerEditRunConfigActionProvider()); + } } diff --git a/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdContainerConsoleActionProvider.java b/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdContainerConsoleActionProvider.java index 1b183bf34..09371aeb7 100644 --- a/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdContainerConsoleActionProvider.java +++ b/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdContainerConsoleActionProvider.java @@ -1,9 +1,9 @@ package io.xpipe.ext.system.lxd; -import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; -import io.xpipe.app.core.AppI18n; import io.xpipe.app.action.AbstractAction; +import io.xpipe.app.action.LeafStoreActionProvider; +import io.xpipe.app.core.AppI18n; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.terminal.TerminalLauncher; import io.xpipe.app.util.LabelGraphic; @@ -16,37 +16,38 @@ import lombok.extern.jackson.Jacksonized; public class LxdContainerConsoleActionProvider implements LeafStoreActionProvider { - @Override - public AbstractAction createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public AbstractAction createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public Class getApplicableClass() { - return LxdContainerStore.class; - } + @Override + public Class getApplicableClass() { + return LxdContainerStore.class; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("serialConsole"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("serialConsole"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2c-console"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2c-console"); + } - @Override - public boolean requiresValidStore() { - return false; - } + @Override + public boolean requiresValidStore() { + return false; + } - @Override + @Override public String getId() { return "openLxdContainerConsole"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdContainerEditConfigActionProvider.java b/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdContainerEditConfigActionProvider.java index b0b6b25c8..0c98b1a99 100644 --- a/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdContainerEditConfigActionProvider.java +++ b/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdContainerEditConfigActionProvider.java @@ -1,9 +1,9 @@ package io.xpipe.ext.system.lxd; -import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; -import io.xpipe.app.core.AppI18n; import io.xpipe.app.action.AbstractAction; +import io.xpipe.app.action.LeafStoreActionProvider; +import io.xpipe.app.core.AppI18n; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.terminal.TerminalLauncher; import io.xpipe.app.util.LabelGraphic; @@ -21,37 +21,38 @@ public class LxdContainerEditConfigActionProvider implements LeafStoreActionProv return true; } - @Override - public AbstractAction createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public AbstractAction createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public Class getApplicableClass() { - return LxdContainerStore.class; - } + @Override + public Class getApplicableClass() { + return LxdContainerStore.class; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("editConfiguration"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("editConfiguration"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2f-file-document-edit"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2f-file-document-edit"); + } - @Override - public boolean requiresValidStore() { - return false; - } + @Override + public boolean requiresValidStore() { + return false; + } - @Override + @Override public String getId() { return "editLxdContainerConfig"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdContainerEditRunConfigActionProvider.java b/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdContainerEditRunConfigActionProvider.java index da35e4ab3..75093e5a7 100644 --- a/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdContainerEditRunConfigActionProvider.java +++ b/ext/system/src/main/java/io/xpipe/ext/system/lxd/LxdContainerEditRunConfigActionProvider.java @@ -1,13 +1,13 @@ package io.xpipe.ext.system.lxd; +import io.xpipe.app.action.AbstractAction; import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.browser.BrowserFullSessionModel; import io.xpipe.app.browser.file.BrowserFileOpener; import io.xpipe.app.core.AppI18n; import io.xpipe.app.core.AppLayoutModel; -import io.xpipe.app.action.AbstractAction; import io.xpipe.app.ext.ProcessControlProvider; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; import io.xpipe.core.store.FilePath; @@ -24,37 +24,38 @@ public class LxdContainerEditRunConfigActionProvider implements LeafStoreActionP return true; } - @Override - public AbstractAction createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public AbstractAction createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public Class getApplicableClass() { - return LxdContainerStore.class; - } + @Override + public Class getApplicableClass() { + return LxdContainerStore.class; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("editRunConfiguration"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("editRunConfiguration"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2m-movie-edit"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2m-movie-edit"); + } - @Override - public boolean requiresValidStore() { - return false; - } + @Override + public boolean requiresValidStore() { + return false; + } - @Override + @Override public String getId() { return "editLxdContainerRunConfig"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanCmdStoreProvider.java b/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanCmdStoreProvider.java index 6db5fc13b..dfd385566 100644 --- a/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanCmdStoreProvider.java +++ b/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanCmdStoreProvider.java @@ -1,13 +1,13 @@ package io.xpipe.ext.system.podman; import io.xpipe.app.comp.Comp; +import io.xpipe.app.ext.DataStoreProvider; +import io.xpipe.app.ext.DataStoreUsageCategory; import io.xpipe.app.hub.comp.StoreEntryComp; import io.xpipe.app.hub.comp.StoreEntryWrapper; import io.xpipe.app.hub.comp.StoreSection; import io.xpipe.app.hub.comp.StoreToggleComp; import io.xpipe.app.hub.comp.SystemStateComp; -import io.xpipe.app.ext.DataStoreProvider; -import io.xpipe.app.ext.DataStoreUsageCategory; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.util.BindingsHelper; import io.xpipe.app.util.DataStoreFormatter; diff --git a/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanContainerActionProviderMenu.java b/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanContainerActionProviderMenu.java index 82aacbc0e..ab2e3792c 100644 --- a/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanContainerActionProviderMenu.java +++ b/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanContainerActionProviderMenu.java @@ -1,8 +1,8 @@ package io.xpipe.ext.system.podman; +import io.xpipe.app.action.ActionProvider; import io.xpipe.app.action.BranchStoreActionProvider; import io.xpipe.app.core.AppI18n; -import io.xpipe.app.action.ActionProvider; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.LabelGraphic; import io.xpipe.ext.base.store.StoreRestartActionProvider; @@ -15,34 +15,34 @@ import java.util.List; public class PodmanContainerActionProviderMenu implements BranchStoreActionProvider { - @Override - public Class getApplicableClass() { - return PodmanContainerStore.class; - } + @Override + public Class getApplicableClass() { + return PodmanContainerStore.class; + } - @Override - public boolean isMajor(DataStoreEntryRef o) { - return true; - } + @Override + public boolean isMajor(DataStoreEntryRef o) { + return true; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("containerActions"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("containerActions"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2p-package-variant-closed"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2p-package-variant-closed"); + } - @Override - public List getChildren(DataStoreEntryRef store) { - return List.of( - new StoreStartActionProvider(), - new StoreStopActionProvider(), - new StoreRestartActionProvider(), - new PodmanContainerInspectActionProvider(), - new PodmanContainerLogsActionProvider(), - new PodmanContainerAttachActionProvider()); - } + @Override + public List getChildren(DataStoreEntryRef store) { + return List.of( + new StoreStartActionProvider(), + new StoreStopActionProvider(), + new StoreRestartActionProvider(), + new PodmanContainerInspectActionProvider(), + new PodmanContainerLogsActionProvider(), + new PodmanContainerAttachActionProvider()); + } } diff --git a/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanContainerAttachActionProvider.java b/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanContainerAttachActionProvider.java index fffb604f2..c5ee97d6b 100644 --- a/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanContainerAttachActionProvider.java +++ b/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanContainerAttachActionProvider.java @@ -1,53 +1,53 @@ package io.xpipe.ext.system.podman; import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.core.AppI18n; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.terminal.TerminalLauncher; import io.xpipe.app.util.LabelGraphic; import javafx.beans.value.ObservableValue; + import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; public class PodmanContainerAttachActionProvider implements LeafStoreActionProvider { - @Override - public Action createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public Action createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public Class getApplicableClass() { - return PodmanContainerStore.class; - } + @Override + public Class getApplicableClass() { + return PodmanContainerStore.class; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("attachContainer"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("attachContainer"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2a-attachment"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2a-attachment"); + } - - @Override + @Override public String getId() { return "attachPodmanContainer"; } -@Jacksonized -@SuperBuilder - static class Action extends StoreAction { - @Override - public void executeImpl() throws Exception { - var d = ref.getStore(); - var view = d.commandView( - d.getCmd().getStore().getHost().getStore().getOrStartSession()); - TerminalLauncher.open(ref.get().getName(), view.attach(d.getContainerName())); - } + @Jacksonized + @SuperBuilder + static class Action extends StoreAction { + + @Override + public void executeImpl() throws Exception { + var d = ref.getStore(); + var view = d.commandView(d.getCmd().getStore().getHost().getStore().getOrStartSession()); + TerminalLauncher.open(ref.get().getName(), view.attach(d.getContainerName())); } + } } diff --git a/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanContainerInspectActionProvider.java b/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanContainerInspectActionProvider.java index aec283116..8a498c2e8 100644 --- a/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanContainerInspectActionProvider.java +++ b/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanContainerInspectActionProvider.java @@ -1,9 +1,9 @@ package io.xpipe.ext.system.podman; -import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; -import io.xpipe.app.core.AppI18n; import io.xpipe.app.action.AbstractAction; +import io.xpipe.app.action.LeafStoreActionProvider; +import io.xpipe.app.core.AppI18n; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.FileOpener; import io.xpipe.app.util.LabelGraphic; @@ -15,33 +15,33 @@ import lombok.extern.jackson.Jacksonized; public class PodmanContainerInspectActionProvider implements LeafStoreActionProvider { - @Override - public AbstractAction createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public AbstractAction createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public Class getApplicableClass() { - return PodmanContainerStore.class; - } + @Override + public Class getApplicableClass() { + return PodmanContainerStore.class; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("inspectContainer"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("inspectContainer"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2i-information-outline"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2i-information-outline"); + } - - @Override + @Override public String getId() { return "inspectPodmanContainer"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanContainerLogsActionProvider.java b/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanContainerLogsActionProvider.java index 5973df66e..b5be80827 100644 --- a/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanContainerLogsActionProvider.java +++ b/ext/system/src/main/java/io/xpipe/ext/system/podman/PodmanContainerLogsActionProvider.java @@ -1,9 +1,9 @@ package io.xpipe.ext.system.podman; -import io.xpipe.app.action.LeafStoreActionProvider; -import io.xpipe.app.hub.action.StoreAction; -import io.xpipe.app.core.AppI18n; import io.xpipe.app.action.AbstractAction; +import io.xpipe.app.action.LeafStoreActionProvider; +import io.xpipe.app.core.AppI18n; +import io.xpipe.app.hub.action.StoreAction; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.terminal.TerminalLauncher; import io.xpipe.app.util.LabelGraphic; @@ -15,32 +15,33 @@ import lombok.extern.jackson.Jacksonized; public class PodmanContainerLogsActionProvider implements LeafStoreActionProvider { - @Override - public AbstractAction createAction(DataStoreEntryRef ref) { - return Action.builder().ref(ref).build(); - } + @Override + public AbstractAction createAction(DataStoreEntryRef ref) { + return Action.builder().ref(ref).build(); + } - @Override - public Class getApplicableClass() { - return PodmanContainerStore.class; - } + @Override + public Class getApplicableClass() { + return PodmanContainerStore.class; + } - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("containerLogs"); - } + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("containerLogs"); + } - @Override - public LabelGraphic getIcon(DataStoreEntryRef store) { - return new LabelGraphic.IconGraphic("mdi2v-view-list-outline"); - } + @Override + public LabelGraphic getIcon(DataStoreEntryRef store) { + return new LabelGraphic.IconGraphic("mdi2v-view-list-outline"); + } - @Override + @Override public String getId() { return "openPodmanContainerLogs"; } -@Jacksonized -@SuperBuilder + + @Jacksonized + @SuperBuilder static class Action extends StoreAction { @Override diff --git a/ext/system/src/main/java/module-info.java b/ext/system/src/main/java/module-info.java index 3a8d75ee7..0786b65ef 100644 --- a/ext/system/src/main/java/module-info.java +++ b/ext/system/src/main/java/module-info.java @@ -35,5 +35,8 @@ open module io.xpipe.ext.system { IncusContainerStoreProvider, PodmanContainerStoreProvider, PodmanCmdStoreProvider; - provides ActionProvider with IncusContainerActionProviderMenu, LxdContainerActionProviderMenu, PodmanContainerActionProviderMenu; + provides ActionProvider with + IncusContainerActionProviderMenu, + LxdContainerActionProviderMenu, + PodmanContainerActionProviderMenu; }