mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-07-02 21:11:03 +12:00
Fix browser shell locks
This commit is contained in:
parent
46de09ccd3
commit
1ddc58d254
|
@ -8,6 +8,7 @@ import io.xpipe.app.util.InputHelper;
|
||||||
import io.xpipe.app.util.ThreadHelper;
|
import io.xpipe.app.util.ThreadHelper;
|
||||||
import io.xpipe.core.store.FileKind;
|
import io.xpipe.core.store.FileKind;
|
||||||
|
|
||||||
|
import io.xpipe.core.store.FileSystem;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.beans.property.SimpleBooleanProperty;
|
import javafx.beans.property.SimpleBooleanProperty;
|
||||||
import javafx.geometry.Side;
|
import javafx.geometry.Side;
|
||||||
|
@ -84,12 +85,14 @@ public class BrowserQuickAccessContextMenu extends ContextMenu {
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<MenuItem> updateMenuItems(Menu m, BrowserEntry entry, boolean updateInstantly) throws Exception {
|
private List<MenuItem> updateMenuItems(Menu m, BrowserEntry entry, boolean updateInstantly) throws Exception {
|
||||||
var newFiles = model.getFileSystem()
|
List<FileSystem.FileEntry> list = new ArrayList<>();
|
||||||
.listFiles(entry.getRawFileEntry().resolved().getPath());
|
model.withFiles(entry.getRawFileEntry().resolved().getPath(), newFiles -> {
|
||||||
try (var s = newFiles) {
|
try (var s = newFiles) {
|
||||||
var list = s.map(fileEntry -> fileEntry.resolved()).toList();
|
var l = s.map(fileEntry -> fileEntry.resolved()).toList();
|
||||||
// Wait until all files are listed, i.e. do not skip the stream elements
|
// Wait until all files are listed, i.e. do not skip the stream elements
|
||||||
list = list.subList(0, Math.min(list.size(), 150));
|
list.addAll(l.subList(0, Math.min(l.size(), 150)));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
var newItems = new ArrayList<MenuItem>();
|
var newItems = new ArrayList<MenuItem>();
|
||||||
if (list.isEmpty()) {
|
if (list.isEmpty()) {
|
||||||
|
@ -116,7 +119,6 @@ public class BrowserQuickAccessContextMenu extends ContextMenu {
|
||||||
}
|
}
|
||||||
return newItems;
|
return newItems;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
class QuickAccessMenu {
|
class QuickAccessMenu {
|
||||||
|
|
|
@ -22,10 +22,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;
|
||||||
|
|
||||||
|
@ -299,6 +297,18 @@ public final class OpenFileSystemModel extends BrowserSessionTab<FileSystemStore
|
||||||
loadFilesSync(path);
|
loadFilesSync(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void withFiles(String dir, FailableConsumer<Stream<FileSystem.FileEntry>, Exception> consumer) throws Exception {
|
||||||
|
BooleanScope.executeExclusive(busy, () -> {
|
||||||
|
if (dir != null) {
|
||||||
|
startIfNeeded();
|
||||||
|
var stream = getFileSystem().listFiles(dir);
|
||||||
|
consumer.accept(stream);
|
||||||
|
} else {
|
||||||
|
consumer.accept(Stream.of());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private boolean loadFilesSync(String dir) {
|
private boolean loadFilesSync(String dir) {
|
||||||
try {
|
try {
|
||||||
if (dir != null) {
|
if (dir != null) {
|
||||||
|
|
Loading…
Reference in a new issue