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 33d8b078f..70c69b403 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 @@ -48,7 +48,7 @@ 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().equals(OsType.getLocal().makeFileSystemCompatible(file.toString()))) + .filter(file -> file.toString().chars().noneMatch(value -> Character.isISOControl(value))) .map(f -> f.toPath()).toList(); if (files.size() == 0) { return; diff --git a/app/src/main/java/io/xpipe/app/comp/store/OsLogoComp.java b/app/src/main/java/io/xpipe/app/comp/store/OsLogoComp.java index 0e3254059..0995fc840 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/OsLogoComp.java +++ b/app/src/main/java/io/xpipe/app/comp/store/OsLogoComp.java @@ -52,8 +52,8 @@ public class OsLogoComp extends SimpleComp { wrapper.getPersistentState(), state); var hide = Bindings.createBooleanBinding(() -> { - return img.get() != null && !wrapper.getLargeCategoryOptimizations().getValue(); - }, img, wrapper.getLargeCategoryOptimizations()); + return img.get() != null; + }, img); return new StackComp(List.of( new SystemStateComp(state).hide(hide), PrettyImageHelper.ofFixedSize(img, 24, 24).visible(hide))) 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 2f6f9b3e1..aeec23ea2 100644 --- a/app/src/main/java/io/xpipe/app/core/AppExtensionManager.java +++ b/app/src/main/java/io/xpipe/app/core/AppExtensionManager.java @@ -26,7 +26,6 @@ import java.util.stream.Stream; public class AppExtensionManager { private static AppExtensionManager INSTANCE; - private final boolean loadedProviders; private final List loadedExtensions = new ArrayList<>(); private final List leafModuleLayers = new ArrayList<>(); private final List extensionBaseDirectories = new ArrayList<>(); @@ -35,29 +34,22 @@ public class AppExtensionManager { @Getter private ModuleLayer extendedLayer; - public AppExtensionManager(boolean loadedProviders) { - this.loadedProviders = loadedProviders; - } - - public static void init(boolean loadProviders) throws Exception { - var load = INSTANCE == null || !INSTANCE.loadedProviders && loadProviders; - - if (INSTANCE == null) { - INSTANCE = new AppExtensionManager(loadProviders); - INSTANCE.determineExtensionDirectories(); - INSTANCE.loadBaseExtension(); - INSTANCE.loadAllExtensions(); + public static synchronized void init() throws Exception { + if (INSTANCE != null) { + return; } - if (load) { - try { - ProcessControlProvider.init(INSTANCE.extendedLayer); - ModuleLayerLoader.loadAll(INSTANCE.extendedLayer, t -> { - ErrorEvent.fromThrowable(t).handle(); - }); - } catch (Throwable t) { - throw ExtensionException.corrupt("Service provider initialization failed", t); - } + INSTANCE = new AppExtensionManager(); + INSTANCE.determineExtensionDirectories(); + INSTANCE.loadBaseExtension(); + INSTANCE.loadAllExtensions(); + try { + ProcessControlProvider.init(INSTANCE.extendedLayer); + ModuleLayerLoader.loadAll(INSTANCE.extendedLayer, t -> { + ErrorEvent.fromThrowable(t).handle(); + }); + } catch (Throwable t) { + throw ExtensionException.corrupt("Service provider initialization failed", t); } } diff --git a/app/src/main/java/io/xpipe/app/core/mode/OperationMode.java b/app/src/main/java/io/xpipe/app/core/mode/OperationMode.java index 780ffecff..0a513ebb9 100644 --- a/app/src/main/java/io/xpipe/app/core/mode/OperationMode.java +++ b/app/src/main/java/io/xpipe/app/core/mode/OperationMode.java @@ -109,7 +109,7 @@ public abstract class OperationMode { AppProperties.logSystemProperties(); AppProperties.get().logArguments(); AppDistributionType.init(); - AppExtensionManager.init(true); + AppExtensionManager.init(); AppI18n.init(); AppPrefs.initLocal(); AppBeaconServer.setupPort(); diff --git a/app/src/main/java/io/xpipe/app/issue/GuiErrorHandlerBase.java b/app/src/main/java/io/xpipe/app/issue/GuiErrorHandlerBase.java index 1a52ffc39..04a764bf8 100644 --- a/app/src/main/java/io/xpipe/app/issue/GuiErrorHandlerBase.java +++ b/app/src/main/java/io/xpipe/app/issue/GuiErrorHandlerBase.java @@ -10,7 +10,7 @@ public class GuiErrorHandlerBase { protected boolean startupGui(Consumer onFail) { try { AppProperties.init(); - AppExtensionManager.init(false); + AppExtensionManager.init(); PlatformInit.init(true); } catch (Throwable ex) { onFail.accept(ex); diff --git a/app/src/main/java/io/xpipe/app/issue/TerminalErrorHandler.java b/app/src/main/java/io/xpipe/app/issue/TerminalErrorHandler.java index 244a6a1a1..c0aff26f3 100644 --- a/app/src/main/java/io/xpipe/app/issue/TerminalErrorHandler.java +++ b/app/src/main/java/io/xpipe/app/issue/TerminalErrorHandler.java @@ -43,7 +43,7 @@ public class TerminalErrorHandler extends GuiErrorHandlerBase implements ErrorHa private void handleGui(ErrorEvent event) { try { AppProperties.init(); - AppExtensionManager.init(false); + AppExtensionManager.init(); PlatformInit.init(true); ErrorHandlerDialog.showAndWait(event); } catch (Throwable r) { diff --git a/app/src/main/java/io/xpipe/app/update/GitHubUpdater.java b/app/src/main/java/io/xpipe/app/update/GitHubUpdater.java index 47f0a6ba1..d5c10e556 100644 --- a/app/src/main/java/io/xpipe/app/update/GitHubUpdater.java +++ b/app/src/main/java/io/xpipe/app/update/GitHubUpdater.java @@ -40,7 +40,7 @@ public class GitHubUpdater extends UpdateHandler { () -> { executeUpdateAndClose(); }, - false, + true, true)); return list; } diff --git a/version b/version index 1eaf26985..d0031ed27 100644 --- a/version +++ b/version @@ -1 +1 @@ -15.0-50 +15.0-51