Merge branch 1.7.5 into master [release]

This commit is contained in:
crschnick 2023-11-18 01:29:38 +00:00
parent 63ab4cfef5
commit eac9504e14
18 changed files with 69 additions and 41 deletions

View file

@ -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();

View file

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

View file

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

View file

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

View file

@ -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())));

View file

@ -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;
}

View file

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

View file

@ -16,10 +16,6 @@ import java.util.List;
public class AboutComp extends Comp<CompStructure<?>> {
private Region createDepsList() {
return new ThirdPartyDependencyListComp().createRegion();
}
private Comp<?> createLinks() {
return new OptionsBuilder()
.addComp(

View file

@ -1,13 +1,12 @@
package io.xpipe.app.prefs;
import atlantafx.base.controls.Tile;
import io.xpipe.app.core.*;
import io.xpipe.app.core.AppI18n;
import io.xpipe.app.core.AppProperties;
import io.xpipe.app.fxcomps.Comp;
import io.xpipe.app.fxcomps.SimpleComp;
import io.xpipe.app.fxcomps.impl.LabelComp;
import io.xpipe.app.util.JfxHelper;
import io.xpipe.app.util.OptionsBuilder;
import javafx.scene.control.Label;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Region;
public class PropertiesComp extends SimpleComp {
@ -15,19 +14,13 @@ public class PropertiesComp extends SimpleComp {
@Override
protected Region createSimple() {
var title = Comp.of(() -> {
var image = new ImageView(AppImages.image("logo/logo_48x48.png"));
image.setPreserveRatio(true);
image.setSmooth(true);
image.setFitHeight(40);
var label = new Label(AppI18n.get("xPipeClient"), image);
label.getStyleClass().add("header");
AppFont.setSize(label, 5);
return new Tile(AppI18n.get("xPipeClient"), "Version " + AppProperties.get().getVersion() + " ("
+ AppProperties.get().getArch() + ")", image);
return JfxHelper.createNamedEntry(AppI18n.get("xPipeClient"), "Version " + AppProperties.get().getVersion() + " ("
+ AppProperties.get().getArch() + ")", "logo/logo_48x48.png");
});
var section = new OptionsBuilder()
.addComp(title, null)
.addComp(Comp.vspacer(10))
.name("build")
.addComp(
new LabelComp(AppProperties.get().getBuild()),

View file

@ -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;
}

View file

@ -231,7 +231,7 @@
}
.browser .table-view:drag-into-current .table-row-cell {
-fx-opacity: 0.8;
-fx-opacity: 0.65;
}
.browser .table-row-cell:file:hover,.table-row-cell:folder:hover {

View file

@ -0,0 +1,15 @@
package io.xpipe.core.process;
import java.io.BufferedInputStream;
import java.io.InputStream;
public class BufferedProcessInputStream extends BufferedInputStream {
public BufferedProcessInputStream(InputStream in, int size) {
super(in, size);
}
public int bufferedAvailable() {
return count - pos;
}
}

View file

@ -21,6 +21,10 @@ public interface ShellControl extends ProcessControl {
ShellDialect getTargetTerminalShellDialect();
BufferedProcessInputStream getStdout();
BufferedProcessInputStream getStderr();
default boolean hasLocalSystemAccess() {
return getSystemId().equals(XPipeSystemId.getLocal());
}

View 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();
}

View file

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

14
dist/changelogs/1.7.5.md vendored Normal file
View file

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

View file

@ -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();

View file

@ -1 +1 @@
1.7.4
1.7.5