From 3308189951995b42d439bd86cf061852e0edef3b Mon Sep 17 00:00:00 2001 From: crschnick Date: Sat, 24 May 2025 09:55:31 +0000 Subject: [PATCH] Rework for single refreshes --- .../browser/file/BrowserFileListModel.java | 16 ++++++++++++++++ .../file/BrowserFileSystemTabModel.java | 19 +++++++++++++++++++ .../xpipe/app/ext/ConnectionFileSystem.java | 10 +++++++++- .../io/xpipe/core/process/ShellDialect.java | 2 +- .../java/io/xpipe/core/store/FileSystem.java | 2 ++ 5 files changed, 47 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileListModel.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileListModel.java index 9160c743f..0ca98bf2a 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileListModel.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileListModel.java @@ -56,6 +56,22 @@ public final class BrowserFileListModel { } } + public void updateEntry(BrowserEntry old, FileEntry n) { + var index = all.getValue().indexOf(old); + if (index == -1) { + return; + } + + var l = all.getValue(); + if (n != null) { + l.set(index, new BrowserEntry(n, this)); + } else { + l.remove(index); + } + all.setValue(l); + refreshShown(); + } + public void setComparator(Comparator comparator) { comparatorProperty.setValue(comparator); refreshShown(); diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabModel.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabModel.java index b7091b32b..dca231ed3 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabModel.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabModel.java @@ -187,6 +187,25 @@ public final class BrowserFileSystemTabModel extends BrowserStoreSessionTab entries) throws Exception { + if (fileList.getAll().getValue().size() < 10) { + refreshSync(); + return; + } + + if (entries.size() > 10 && fileList.getAll().getValue().size() < 100) { + refreshSync(); + return; + } + + for (BrowserEntry browserEntry : entries) { + var refresh = fileSystem.getFileInfo(browserEntry.getRawFileEntry().getPath()); + fileList.updateEntry(browserEntry, refresh.orElse(null)); + } + + cdSyncWithoutCheck(currentPath.get()); + } + public FileEntry getCurrentParentDirectory() { var current = getCurrentDirectory(); if (current == null) { diff --git a/app/src/main/java/io/xpipe/app/ext/ConnectionFileSystem.java b/app/src/main/java/io/xpipe/app/ext/ConnectionFileSystem.java index fb6603335..bfe374145 100644 --- a/app/src/main/java/io/xpipe/app/ext/ConnectionFileSystem.java +++ b/app/src/main/java/io/xpipe/app/ext/ConnectionFileSystem.java @@ -170,9 +170,17 @@ public class ConnectionFileSystem implements FileSystem { shellControl.command(shellControl.getShellDialect().getCdCommand(current)); } + @Override + public Optional getFileInfo(FilePath file) throws Exception { + try (var stream = shellControl.getShellDialect().listFiles(this, shellControl, file.toString(), false)) { + var l = stream.toList(); + return l.stream().findFirst(); + } + } + @Override public Stream listFiles(FilePath file) throws Exception { - return shellControl.getShellDialect().listFiles(this, shellControl, file.toString()); + return shellControl.getShellDialect().listFiles(this, shellControl, file.toString(), true); } @Override diff --git a/core/src/main/java/io/xpipe/core/process/ShellDialect.java b/core/src/main/java/io/xpipe/core/process/ShellDialect.java index 9b95694eb..3376178dd 100644 --- a/core/src/main/java/io/xpipe/core/process/ShellDialect.java +++ b/core/src/main/java/io/xpipe/core/process/ShellDialect.java @@ -79,7 +79,7 @@ public interface ShellDialect { String assembleCommand(String command, Map variables); - Stream listFiles(FileSystem fs, ShellControl control, String dir) throws Exception; + Stream listFiles(FileSystem fs, ShellControl control, String path, boolean sub) throws Exception; Stream listRoots(ShellControl control) throws Exception; diff --git a/core/src/main/java/io/xpipe/core/store/FileSystem.java b/core/src/main/java/io/xpipe/core/store/FileSystem.java index 2d9fef3c6..6fd89cc8e 100644 --- a/core/src/main/java/io/xpipe/core/store/FileSystem.java +++ b/core/src/main/java/io/xpipe/core/store/FileSystem.java @@ -40,6 +40,8 @@ public interface FileSystem extends Closeable, AutoCloseable { void directoryAccessible(FilePath file) throws Exception; + Optional getFileInfo(FilePath file) throws Exception; + Stream listFiles(FilePath file) throws Exception; default List listFilesRecursively(FilePath file) throws Exception {