Fix browser shell locks

This commit is contained in:
crschnick 2024-04-21 09:17:58 +00:00
parent 46de09ccd3
commit 1ddc58d254
2 changed files with 43 additions and 31 deletions

View file

@ -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 {

View file

@ -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) {