mirror of
https://github.com/xpipe-io/xpipe.git
synced 2026-08-23 17:56:29 +00:00
Various fixes
This commit is contained in:
@@ -403,6 +403,10 @@ final class BrowserFileListComp extends SimpleComp {
|
||||
VirtualFlow<?> flow = (VirtualFlow<?>) skin.getChildren().get(1);
|
||||
ScrollBar vbar = (ScrollBar) flow.getChildrenUnmodifiable().get(2);
|
||||
|
||||
if (!vbar.isVisible()) {
|
||||
return;
|
||||
}
|
||||
|
||||
double proximity = 100;
|
||||
Bounds tableBounds = tableView.localToScene(tableView.getBoundsInParent());
|
||||
double dragY = event.getSceneY();
|
||||
|
||||
@@ -80,7 +80,7 @@ public class BrowserTransferComp extends SimpleComp {
|
||||
});
|
||||
|
||||
var listBox = new VerticalComp(List.of(list, dragNotice)).padding(new Insets(10, 10, 5, 10));
|
||||
var stack = new LoadingOverlayComp(
|
||||
var stack = LoadingOverlayComp.noProgress(
|
||||
new StackComp(List.of(backgroundStack, listBox, clearPane))
|
||||
.apply(DragOverPseudoClassAugment.create())
|
||||
.apply(struc -> {
|
||||
|
||||
@@ -104,7 +104,12 @@ public class FileSystemHelper {
|
||||
throw ErrorEvent.unreportable(new IllegalArgumentException(String.format("Directory %s does not exist", path)));
|
||||
}
|
||||
|
||||
model.getFileSystem().directoryAccessible(path);
|
||||
try {
|
||||
model.getFileSystem().directoryAccessible(path);
|
||||
} catch (Exception ex) {
|
||||
ErrorEvent.unreportable(ex);
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
|
||||
private static FileSystem localFileSystem;
|
||||
@@ -229,7 +234,7 @@ public class FileSystemHelper {
|
||||
|
||||
if (sourceFile.getKind() == FileKind.DIRECTORY) {
|
||||
target.getFileSystem().mkdirs(targetFile);
|
||||
} else {
|
||||
} else if (sourceFile.getKind() == FileKind.FILE) {
|
||||
try (var in = sourceFile.getFileSystem().openInput(sourceFile.getPath());
|
||||
var out = target.getFileSystem().openOutput(targetFile)) {
|
||||
in.transferTo(out);
|
||||
|
||||
@@ -9,18 +9,25 @@ import io.xpipe.app.prefs.AppPrefs;
|
||||
import io.xpipe.app.util.ThreadHelper;
|
||||
import javafx.application.Platform;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.property.SimpleDoubleProperty;
|
||||
import javafx.beans.value.ChangeListener;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.scene.layout.StackPane;
|
||||
|
||||
public class LoadingOverlayComp extends Comp<CompStructure<StackPane>> {
|
||||
|
||||
public static LoadingOverlayComp noProgress(Comp<?> comp, ObservableValue<Boolean> loading) {
|
||||
return new LoadingOverlayComp(comp, loading, new SimpleDoubleProperty(-1));
|
||||
}
|
||||
|
||||
private final Comp<?> comp;
|
||||
private final ObservableValue<Boolean> showLoading;
|
||||
private final ObservableValue<Number> progress;
|
||||
|
||||
public LoadingOverlayComp(Comp<?> comp, ObservableValue<Boolean> loading) {
|
||||
public LoadingOverlayComp(Comp<?> comp, ObservableValue<Boolean> loading, ObservableValue<Number> progress) {
|
||||
this.comp = comp;
|
||||
this.showLoading = PlatformThread.sync(loading);
|
||||
this.progress = PlatformThread.sync(progress);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -29,7 +36,7 @@ public class LoadingOverlayComp extends Comp<CompStructure<StackPane>> {
|
||||
var r = compStruc.get();
|
||||
|
||||
var loading = new RingProgressIndicator(0, false);
|
||||
loading.setProgress(-1);
|
||||
loading.progressProperty().bind(progress);
|
||||
loading.visibleProperty().bind(Bindings.not(AppPrefs.get().performanceMode()));
|
||||
|
||||
var loadingOverlay = new StackPane(loading);
|
||||
|
||||
@@ -103,7 +103,7 @@ public abstract class StoreEntryComp extends SimpleComp {
|
||||
});
|
||||
new ContextMenuAugment<>(() -> this.createContextMenu()).augment(new SimpleCompStructure<>(button));
|
||||
|
||||
var loading = new LoadingOverlayComp(
|
||||
var loading = LoadingOverlayComp.noProgress(
|
||||
Comp.of(() -> button),
|
||||
BindingsHelper.persist(
|
||||
wrapper.getInRefresh().and(wrapper.getObserving().not())));
|
||||
|
||||
@@ -164,7 +164,6 @@ public class StoreEntryListStatusComp extends SimpleComp {
|
||||
});
|
||||
alphabetical.accessibleTextKey("sortAlphabetical");
|
||||
alphabetical.apply(new FancyTooltipAugment<>("sortAlphabetical"));
|
||||
alphabetical.shortcut(new KeyCodeCombination(KeyCode.P, KeyCombination.SHORTCUT_DOWN));
|
||||
return alphabetical;
|
||||
}
|
||||
|
||||
@@ -204,7 +203,6 @@ public class StoreEntryListStatusComp extends SimpleComp {
|
||||
});
|
||||
date.accessibleTextKey("sortLastUsed");
|
||||
date.apply(new FancyTooltipAugment<>("sortLastUsed"));
|
||||
date.shortcut(new KeyCodeCombination(KeyCode.L, KeyCombination.SHORTCUT_DOWN));
|
||||
return date;
|
||||
}
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@ public class AppWindowHelper {
|
||||
public static void setupContent(
|
||||
Stage stage, Function<Stage, Comp<?>> contentFunc, boolean bindSize, ObservableValue<Boolean> loading) {
|
||||
var baseComp = contentFunc.apply(stage);
|
||||
var content = loading != null ? new LoadingOverlayComp(baseComp, loading) : baseComp;
|
||||
var content = loading != null ? LoadingOverlayComp.noProgress(baseComp, loading) : baseComp;
|
||||
var contentR = content.createRegion();
|
||||
AppFont.small(contentR);
|
||||
var scene = new Scene(bindSize ? new Pane(contentR) : contentR, -1, -1, false);
|
||||
@@ -175,7 +175,7 @@ public class AppWindowHelper {
|
||||
scene.addEventHandler(KeyEvent.KEY_PRESSED, event -> {
|
||||
if (AppProperties.get().isDeveloperMode() && event.getCode().equals(KeyCode.F6)) {
|
||||
var newBaseComp = contentFunc.apply(stage);
|
||||
var newComp = loading != null ? new LoadingOverlayComp(newBaseComp, loading) : newBaseComp;
|
||||
var newComp = loading != null ? LoadingOverlayComp.noProgress(newBaseComp, loading) : newBaseComp;
|
||||
var newR = newComp.createRegion();
|
||||
AppFont.medium(newR);
|
||||
scene.setRoot(bindSize ? new Pane(newR) : newR);
|
||||
|
||||
@@ -125,10 +125,6 @@ public class ScriptHelper {
|
||||
.getShellDialect()
|
||||
.createScriptTextFileWriteCommand(processControl, content, file)
|
||||
.execute();
|
||||
var e = processControl.getShellDialect().getScriptPermissionsCommand(file);
|
||||
if (e != null) {
|
||||
processControl.executeSimpleCommand(e, "Failed to set script permissions of " + file);
|
||||
}
|
||||
return file;
|
||||
}
|
||||
|
||||
|
||||
@@ -84,7 +84,6 @@ public class ConnectionFileSystem implements FileSystem {
|
||||
try (var pc = shellControl
|
||||
.getShellDialect()
|
||||
.createFileExistsCommand(shellControl, file)
|
||||
.complex()
|
||||
.start()) {
|
||||
return pc.discardAndCheckExit();
|
||||
}
|
||||
@@ -124,7 +123,6 @@ public class ConnectionFileSystem implements FileSystem {
|
||||
public void mkdirs(String file) throws Exception {
|
||||
try (var pc = shellControl
|
||||
.command(proc -> proc.getShellDialect().getMkdirsCommand(file))
|
||||
.complex()
|
||||
.start()) {
|
||||
pc.discardOrThrow();
|
||||
}
|
||||
|
||||
@@ -115,7 +115,10 @@ public interface FileSystem extends Closeable, AutoCloseable {
|
||||
Stream<FileEntry> listFiles(String file) throws Exception;
|
||||
|
||||
default List<FileEntry> listFilesRecursively(String file) throws Exception {
|
||||
var base = listFiles(file).toList();
|
||||
List<FileEntry> base;
|
||||
try (var filesStream = listFiles(file)) {
|
||||
base = filesStream.toList();
|
||||
}
|
||||
return base.stream()
|
||||
.flatMap(fileEntry -> {
|
||||
if (fileEntry.getKind() != FileKind.DIRECTORY) {
|
||||
|
||||
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
## Changes in 1.7.5
|
||||
|
||||
- Implement some more performance improvements
|
||||
- Fix file browser transfer freezing up when trying to copy/move nested directories
|
||||
- Fix file browser transfer failing when trying to copy symbolic links
|
||||
- Fix file browser jittering when dragging and dropping files
|
||||
- Fix performance regression when transferring large files
|
||||
|
||||
## Previous changes in 1.7
|
||||
|
||||
- [1.7.4](https://github.com/xpipe-io/xpipe/releases/tag/1.7.4)
|
||||
- [1.7.3](https://github.com/xpipe-io/xpipe/releases/tag/1.7.3)
|
||||
- [1.7.2](https://github.com/xpipe-io/xpipe/releases/tag/1.7.2)
|
||||
- [1.7.1](https://github.com/xpipe-io/xpipe/releases/tag/1.7.1)
|
||||
@@ -99,11 +99,6 @@ public abstract class ScriptStore extends JacksonizedValue implements DataStore,
|
||||
var fileName = scriptStore.get().getName().toLowerCase(Locale.ROOT).replaceAll(" ", "_");
|
||||
var scriptFile = FileNames.join(targetDir, fileName + "." + d.getScriptFileEnding());
|
||||
d.createScriptTextFileWriteCommand(proc, content, scriptFile).execute();
|
||||
|
||||
var chmod = d.getScriptPermissionsCommand(scriptFile);
|
||||
if (chmod != null) {
|
||||
proc.executeSimpleBooleanCommand(chmod);
|
||||
}
|
||||
}
|
||||
|
||||
d.createTextFileWriteCommand(proc, String.valueOf(hash), hashFile).execute();
|
||||
|
||||
Reference in New Issue
Block a user