mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-09-19 13:51:23 +00:00
Improve browser chooser history
This commit is contained in:
parent
68cf68ea70
commit
7f62c94881
|
@ -29,7 +29,16 @@ public class BrowserSavedStateImpl implements BrowserSavedState {
|
||||||
this.lastSystems = FXCollections.observableArrayList(lastSystems);
|
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 AppCache.get("browser-state", BrowserSavedStateImpl.class, () -> {
|
||||||
return new BrowserSavedStateImpl(FXCollections.observableArrayList());
|
return new BrowserSavedStateImpl(FXCollections.observableArrayList());
|
||||||
});
|
});
|
||||||
|
|
|
@ -43,7 +43,7 @@ public class BrowserWelcomeComp extends SimpleComp {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Region createSimple() {
|
protected Region createSimple() {
|
||||||
var state = model.getSavedState();
|
var state = BrowserSavedStateImpl.get();
|
||||||
|
|
||||||
var welcome = new BrowserGreetingComp().createSimple();
|
var welcome = new BrowserGreetingComp().createSimple();
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package io.xpipe.app.browser.fs;
|
package io.xpipe.app.browser.fs;
|
||||||
|
|
||||||
import io.xpipe.app.browser.BrowserSavedState;
|
import io.xpipe.app.browser.BrowserSavedState;
|
||||||
|
import io.xpipe.app.browser.BrowserSavedStateImpl;
|
||||||
import io.xpipe.app.browser.BrowserTransferProgress;
|
import io.xpipe.app.browser.BrowserTransferProgress;
|
||||||
import io.xpipe.app.browser.action.BrowserAction;
|
import io.xpipe.app.browser.action.BrowserAction;
|
||||||
import io.xpipe.app.browser.file.BrowserFileListModel;
|
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.BrowserFileTransferOperation;
|
||||||
import io.xpipe.app.browser.file.FileSystemHelper;
|
import io.xpipe.app.browser.file.FileSystemHelper;
|
||||||
import io.xpipe.app.browser.session.BrowserAbstractSessionModel;
|
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.browser.session.BrowserSessionTab;
|
||||||
import io.xpipe.app.comp.base.ModalOverlayComp;
|
import io.xpipe.app.comp.base.ModalOverlayComp;
|
||||||
import io.xpipe.app.fxcomps.Comp;
|
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.process.ShellOpenFunction;
|
||||||
import io.xpipe.core.store.*;
|
import io.xpipe.core.store.*;
|
||||||
import io.xpipe.core.util.FailableConsumer;
|
import io.xpipe.core.util.FailableConsumer;
|
||||||
|
|
||||||
import javafx.beans.binding.Bindings;
|
import javafx.beans.binding.Bindings;
|
||||||
import javafx.beans.property.*;
|
import javafx.beans.property.*;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
|
|
||||||
|
@ -110,13 +108,12 @@ public final class OpenFileSystemModel extends BrowserSessionTab<FileSystemStore
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var current = getCurrentDirectory();
|
||||||
if (DataStorage.get().getStoreEntries().contains(getEntry().get())
|
if (DataStorage.get().getStoreEntries().contains(getEntry().get())
|
||||||
&& savedState != null
|
&& savedState != null
|
||||||
&& getCurrentPath().get() != null) {
|
&& current != null) {
|
||||||
if (getBrowserModel() instanceof BrowserSessionModel bm) {
|
savedState.cd(current.getPath(), false);
|
||||||
bm.getSavedState()
|
BrowserSavedStateImpl.get().add(new BrowserSavedState.Entry(getEntry().get().getUuid(), current.getPath()));
|
||||||
.add(new BrowserSavedState.Entry(getEntry().get().getUuid(), getCurrentPath().get()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
fileSystem.close();
|
fileSystem.close();
|
||||||
|
@ -299,7 +296,7 @@ public final class OpenFileSystemModel extends BrowserSessionTab<FileSystemStore
|
||||||
// path = FileSystemHelper.normalizeDirectoryPath(this, path);
|
// path = FileSystemHelper.normalizeDirectoryPath(this, path);
|
||||||
|
|
||||||
filter.setValue(null);
|
filter.setValue(null);
|
||||||
savedState.cd(path);
|
savedState.cd(path, true);
|
||||||
history.updateCurrent(path);
|
history.updateCurrent(path);
|
||||||
currentPath.set(path);
|
currentPath.set(path);
|
||||||
loadFilesSync(path);
|
loadFilesSync(path);
|
||||||
|
@ -460,7 +457,7 @@ public final class OpenFileSystemModel extends BrowserSessionTab<FileSystemStore
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initWithDefaultDirectory() {
|
public void initWithDefaultDirectory() {
|
||||||
savedState.cd(null);
|
savedState.cd(null, false);
|
||||||
history.updateCurrent(null);
|
history.updateCurrent(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -72,32 +72,36 @@ public class OpenFileSystemSavedState {
|
||||||
AppCache.update("fs-state-" + model.getEntry().get().getUuid(), this);
|
AppCache.update("fs-state-" + model.getEntry().get().getUuid(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cd(String dir) {
|
public void cd(String dir, boolean delay) {
|
||||||
if (dir == null) {
|
if (dir == null) {
|
||||||
lastDirectory = null;
|
lastDirectory = null;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
lastDirectory = dir;
|
lastDirectory = dir;
|
||||||
// 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)) {
|
if (delay) {
|
||||||
updateRecent(dir);
|
// After 10 seconds
|
||||||
save();
|
TIMEOUT_TIMER.schedule(new TimerTask() {
|
||||||
}
|
@Override
|
||||||
});
|
public void run() {
|
||||||
}
|
// Synchronize with platform thread
|
||||||
},
|
Platform.runLater(() -> {
|
||||||
10000);
|
if (model.isClosed()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Objects.equals(lastDirectory, dir)) {
|
||||||
|
updateRecent(dir);
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, 10000);
|
||||||
|
} else {
|
||||||
|
updateRecent(dir);
|
||||||
|
save();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateRecent(String dir) {
|
private void updateRecent(String dir) {
|
||||||
|
|
|
@ -2,14 +2,12 @@ package io.xpipe.app.browser.session;
|
||||||
|
|
||||||
import io.xpipe.app.util.BooleanScope;
|
import io.xpipe.app.util.BooleanScope;
|
||||||
import io.xpipe.app.util.ThreadHelper;
|
import io.xpipe.app.util.ThreadHelper;
|
||||||
|
|
||||||
import javafx.beans.property.BooleanProperty;
|
import javafx.beans.property.BooleanProperty;
|
||||||
import javafx.beans.property.Property;
|
import javafx.beans.property.Property;
|
||||||
import javafx.beans.property.SimpleBooleanProperty;
|
import javafx.beans.property.SimpleBooleanProperty;
|
||||||
import javafx.beans.property.SimpleObjectProperty;
|
import javafx.beans.property.SimpleObjectProperty;
|
||||||
import javafx.collections.FXCollections;
|
import javafx.collections.FXCollections;
|
||||||
import javafx.collections.ObservableList;
|
import javafx.collections.ObservableList;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
|
|
|
@ -67,6 +67,10 @@ public class BrowserChooserComp extends SimpleComp {
|
||||||
window.close();
|
window.close();
|
||||||
});
|
});
|
||||||
window.show();
|
window.show();
|
||||||
|
window.setOnHidden(event -> {
|
||||||
|
model.finishWithoutChoice();
|
||||||
|
event.consume();
|
||||||
|
});
|
||||||
ThreadHelper.runAsync(() -> {
|
ThreadHelper.runAsync(() -> {
|
||||||
model.openFileSystemAsync(store.get(), null, null);
|
model.openFileSystemAsync(store.get(), null, null);
|
||||||
});
|
});
|
||||||
|
|
|
@ -65,6 +65,18 @@ public class BrowserFileChooserModel extends BrowserAbstractSessionModel<OpenFil
|
||||||
onFinish.accept(stores);
|
onFinish.accept(stores);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void finishWithoutChoice() {
|
||||||
|
synchronized (BrowserFileChooserModel.this) {
|
||||||
|
var open = selectedEntry.getValue();
|
||||||
|
if (open != null) {
|
||||||
|
ThreadHelper.runAsync(() -> {
|
||||||
|
open.close();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void openFileSystemAsync(
|
public void openFileSystemAsync(
|
||||||
DataStoreEntryRef<? extends FileSystemStore> store,
|
DataStoreEntryRef<? extends FileSystemStore> store,
|
||||||
FailableFunction<OpenFileSystemModel, String, Exception> path,
|
FailableFunction<OpenFileSystemModel, String, Exception> path,
|
||||||
|
|
|
@ -23,16 +23,11 @@ import java.util.ArrayList;
|
||||||
@Getter
|
@Getter
|
||||||
public class BrowserSessionModel extends BrowserAbstractSessionModel<BrowserSessionTab<?>> {
|
public class BrowserSessionModel extends BrowserAbstractSessionModel<BrowserSessionTab<?>> {
|
||||||
|
|
||||||
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 BrowserTransferModel localTransfersStage = new BrowserTransferModel(this);
|
||||||
private final BrowserSavedState savedState;
|
|
||||||
private final Property<Boolean> draggingFiles = new SimpleBooleanProperty();
|
private final Property<Boolean> draggingFiles = new SimpleBooleanProperty();
|
||||||
|
|
||||||
public BrowserSessionModel(BrowserSavedState savedState) {
|
|
||||||
this.savedState = savedState;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void restoreState(BrowserSavedState state) {
|
public void restoreState(BrowserSavedState state) {
|
||||||
ThreadHelper.runAsync(() -> {
|
ThreadHelper.runAsync(() -> {
|
||||||
var l = new ArrayList<>(state.getEntries());
|
var l = new ArrayList<>(state.getEntries());
|
||||||
|
@ -62,9 +57,7 @@ public class BrowserSessionModel extends BrowserAbstractSessionModel<BrowserSess
|
||||||
|
|
||||||
closeSync(o);
|
closeSync(o);
|
||||||
}
|
}
|
||||||
if (savedState != null) {
|
BrowserSavedStateImpl.get().save();
|
||||||
savedState.save();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete all files
|
// Delete all files
|
||||||
|
|
Loading…
Reference in a new issue