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 6821bc9d..34ff5d0e 100644 --- a/app/src/main/java/io/xpipe/app/storage/DataStorage.java +++ b/app/src/main/java/io/xpipe/app/storage/DataStorage.java @@ -304,6 +304,7 @@ public abstract class DataStorage { var displayParent = syntheticParent.or(() -> getDisplayParent(e)); if (displayParent.isPresent()) { displayParent.get().setExpanded(true); + e.setCategoryUuid(displayParent.get().getCategoryUuid()); } e.setDirectory(getStoresDir().resolve(e.getUuid().toString())); 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 db928d42..05643800 100644 --- a/app/src/main/java/io/xpipe/app/storage/StandardStorage.java +++ b/app/src/main/java/io/xpipe/app/storage/StandardStorage.java @@ -149,16 +149,22 @@ public class StandardStorage extends DataStorage { ErrorEvent.fromThrowable(exception.get()).handle(); } - if (getStoreCategoryIfPresent(ALL_CONNECTIONS_CATEGORY_UUID).isEmpty()) { + var allConnections = getStoreCategoryIfPresent(ALL_CONNECTIONS_CATEGORY_UUID); + if (allConnections.isEmpty()) { var cat = DataStoreCategory.createNew(null, ALL_CONNECTIONS_CATEGORY_UUID, "All connections"); cat.setDirectory(categoriesDir.resolve(ALL_CONNECTIONS_CATEGORY_UUID.toString())); storeCategories.add(cat); + } else { + allConnections.get().setParentCategory(null); } - if (getStoreCategoryIfPresent(ALL_SCRIPTS_CATEGORY_UUID).isEmpty()) { + var allScripts = getStoreCategoryIfPresent(ALL_SCRIPTS_CATEGORY_UUID); + if (allScripts.isEmpty()) { var cat = DataStoreCategory.createNew(null, ALL_SCRIPTS_CATEGORY_UUID, "All scripts"); cat.setDirectory(categoriesDir.resolve(ALL_SCRIPTS_CATEGORY_UUID.toString())); storeCategories.add(cat); + } else { + allScripts.get().setParentCategory(null); } if (getStoreCategoryIfPresent(PREDEFINED_SCRIPTS_CATEGORY_UUID).isEmpty()) { diff --git a/app/src/main/java/io/xpipe/app/update/UpdateChangelogAlert.java b/app/src/main/java/io/xpipe/app/update/UpdateChangelogAlert.java index 8392ef47..a41526d8 100644 --- a/app/src/main/java/io/xpipe/app/update/UpdateChangelogAlert.java +++ b/app/src/main/java/io/xpipe/app/update/UpdateChangelogAlert.java @@ -11,6 +11,8 @@ import javafx.stage.Modality; public class UpdateChangelogAlert { + private static boolean shown = false; + public static void showIfNeeded() { var update = XPipeDistributionType.get().getUpdateHandler().getPerformedUpdate(); if (update != null && !XPipeDistributionType.get().getUpdateHandler().isUpdateSucceeded()) { @@ -22,6 +24,11 @@ public class UpdateChangelogAlert { return; } + if (shown) { + return; + } + shown = true; + AppWindowHelper.showAlert( alert -> { alert.setTitle(AppI18n.get("updateChangelogAlertTitle")); diff --git a/app/src/main/java/io/xpipe/app/util/UnlockAlert.java b/app/src/main/java/io/xpipe/app/util/UnlockAlert.java index b31a0623..a1b89784 100644 --- a/app/src/main/java/io/xpipe/app/util/UnlockAlert.java +++ b/app/src/main/java/io/xpipe/app/util/UnlockAlert.java @@ -19,6 +19,10 @@ public class UnlockAlert { return; } + if (AppPrefs.get().getLockPassword().getValue() != null) { + return; + } + while (true) { var pw = new SimpleObjectProperty(); var canceled = new SimpleBooleanProperty();