diff --git a/app/src/main/java/io/xpipe/app/browser/BrowserSavedStateImpl.java b/app/src/main/java/io/xpipe/app/browser/BrowserSavedStateImpl.java index 82528ffd..cf78e25d 100644 --- a/app/src/main/java/io/xpipe/app/browser/BrowserSavedStateImpl.java +++ b/app/src/main/java/io/xpipe/app/browser/BrowserSavedStateImpl.java @@ -29,7 +29,16 @@ public class BrowserSavedStateImpl implements BrowserSavedState { this.lastSystems = FXCollections.observableArrayList(lastSystems); } - public static BrowserSavedStateImpl load() { + private static BrowserSavedStateImpl INSTANCE; + + public static BrowserSavedState get() { + if (INSTANCE == null) { + INSTANCE = load(); + } + return INSTANCE; + } + + private static BrowserSavedStateImpl load() { return AppCache.get("browser-state", BrowserSavedStateImpl.class, () -> { return new BrowserSavedStateImpl(FXCollections.observableArrayList()); }); diff --git a/app/src/main/java/io/xpipe/app/browser/BrowserWelcomeComp.java b/app/src/main/java/io/xpipe/app/browser/BrowserWelcomeComp.java index ab9a252c..41f88616 100644 --- a/app/src/main/java/io/xpipe/app/browser/BrowserWelcomeComp.java +++ b/app/src/main/java/io/xpipe/app/browser/BrowserWelcomeComp.java @@ -43,7 +43,7 @@ public class BrowserWelcomeComp extends SimpleComp { @Override protected Region createSimple() { - var state = model.getSavedState(); + var state = BrowserSavedStateImpl.get(); var welcome = new BrowserGreetingComp().createSimple(); diff --git a/app/src/main/java/io/xpipe/app/browser/fs/OpenFileSystemModel.java b/app/src/main/java/io/xpipe/app/browser/fs/OpenFileSystemModel.java index 5b27f436..f1ac7afa 100644 --- a/app/src/main/java/io/xpipe/app/browser/fs/OpenFileSystemModel.java +++ b/app/src/main/java/io/xpipe/app/browser/fs/OpenFileSystemModel.java @@ -1,6 +1,7 @@ package io.xpipe.app.browser.fs; import io.xpipe.app.browser.BrowserSavedState; +import io.xpipe.app.browser.BrowserSavedStateImpl; import io.xpipe.app.browser.BrowserTransferProgress; import io.xpipe.app.browser.action.BrowserAction; import io.xpipe.app.browser.file.BrowserFileListModel; @@ -8,7 +9,6 @@ import io.xpipe.app.browser.file.BrowserFileTransferMode; import io.xpipe.app.browser.file.BrowserFileTransferOperation; import io.xpipe.app.browser.file.FileSystemHelper; import io.xpipe.app.browser.session.BrowserAbstractSessionModel; -import io.xpipe.app.browser.session.BrowserSessionModel; import io.xpipe.app.browser.session.BrowserSessionTab; import io.xpipe.app.comp.base.ModalOverlayComp; import io.xpipe.app.fxcomps.Comp; @@ -24,10 +24,8 @@ import io.xpipe.core.process.ShellDialects; import io.xpipe.core.process.ShellOpenFunction; import io.xpipe.core.store.*; import io.xpipe.core.util.FailableConsumer; - import javafx.beans.binding.Bindings; import javafx.beans.property.*; - import lombok.Getter; import lombok.SneakyThrows; @@ -110,13 +108,12 @@ public final class OpenFileSystemModel extends BrowserSessionTab { - if (model.isClosed()) { - return; - } - if (Objects.equals(lastDirectory, dir)) { - updateRecent(dir); - save(); - } - }); - } - }, - 10000); + if (delay) { + // After 10 seconds + TIMEOUT_TIMER.schedule(new TimerTask() { + @Override + public void run() { + // Synchronize with platform thread + Platform.runLater(() -> { + if (model.isClosed()) { + return; + } + + if (Objects.equals(lastDirectory, dir)) { + updateRecent(dir); + save(); + } + }); + } + }, 10000); + } else { + updateRecent(dir); + save(); + } } private void updateRecent(String dir) { diff --git a/app/src/main/java/io/xpipe/app/browser/session/BrowserAbstractSessionModel.java b/app/src/main/java/io/xpipe/app/browser/session/BrowserAbstractSessionModel.java index 980f1387..bc28ec91 100644 --- a/app/src/main/java/io/xpipe/app/browser/session/BrowserAbstractSessionModel.java +++ b/app/src/main/java/io/xpipe/app/browser/session/BrowserAbstractSessionModel.java @@ -2,14 +2,12 @@ package io.xpipe.app.browser.session; import io.xpipe.app.util.BooleanScope; import io.xpipe.app.util.ThreadHelper; - import javafx.beans.property.BooleanProperty; import javafx.beans.property.Property; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; - import lombok.Getter; @Getter diff --git a/app/src/main/java/io/xpipe/app/browser/session/BrowserChooserComp.java b/app/src/main/java/io/xpipe/app/browser/session/BrowserChooserComp.java index 9eb4d19e..8b38c6bb 100644 --- a/app/src/main/java/io/xpipe/app/browser/session/BrowserChooserComp.java +++ b/app/src/main/java/io/xpipe/app/browser/session/BrowserChooserComp.java @@ -67,6 +67,10 @@ public class BrowserChooserComp extends SimpleComp { window.close(); }); window.show(); + window.setOnHidden(event -> { + model.finishWithoutChoice(); + event.consume(); + }); ThreadHelper.runAsync(() -> { model.openFileSystemAsync(store.get(), null, null); }); diff --git a/app/src/main/java/io/xpipe/app/browser/session/BrowserFileChooserModel.java b/app/src/main/java/io/xpipe/app/browser/session/BrowserFileChooserModel.java index 6bfbd5ff..8fe04a8d 100644 --- a/app/src/main/java/io/xpipe/app/browser/session/BrowserFileChooserModel.java +++ b/app/src/main/java/io/xpipe/app/browser/session/BrowserFileChooserModel.java @@ -65,6 +65,18 @@ public class BrowserFileChooserModel extends BrowserAbstractSessionModel { + open.close(); + }); + } + } + } + public void openFileSystemAsync( DataStoreEntryRef store, FailableFunction path, diff --git a/app/src/main/java/io/xpipe/app/browser/session/BrowserSessionModel.java b/app/src/main/java/io/xpipe/app/browser/session/BrowserSessionModel.java index ae7c65fb..653097ef 100644 --- a/app/src/main/java/io/xpipe/app/browser/session/BrowserSessionModel.java +++ b/app/src/main/java/io/xpipe/app/browser/session/BrowserSessionModel.java @@ -23,16 +23,11 @@ import java.util.ArrayList; @Getter public class BrowserSessionModel extends BrowserAbstractSessionModel> { - public static final BrowserSessionModel DEFAULT = new BrowserSessionModel(BrowserSavedStateImpl.load()); + public static final BrowserSessionModel DEFAULT = new BrowserSessionModel(); private final BrowserTransferModel localTransfersStage = new BrowserTransferModel(this); - private final BrowserSavedState savedState; private final Property draggingFiles = new SimpleBooleanProperty(); - public BrowserSessionModel(BrowserSavedState savedState) { - this.savedState = savedState; - } - public void restoreState(BrowserSavedState state) { ThreadHelper.runAsync(() -> { var l = new ArrayList<>(state.getEntries()); @@ -62,9 +57,7 @@ public class BrowserSessionModel extends BrowserAbstractSessionModel