diff --git a/app/src/main/java/io/xpipe/app/beacon/BlobManager.java b/app/src/main/java/io/xpipe/app/beacon/BlobManager.java index 7ea1d74d3..ddc3e318e 100644 --- a/app/src/main/java/io/xpipe/app/beacon/BlobManager.java +++ b/app/src/main/java/io/xpipe/app/beacon/BlobManager.java @@ -53,6 +53,14 @@ public class BlobManager { return file; } + public long getSize(UUID id) throws IOException { + if (memoryBlobs.containsKey(id)) { + return memoryBlobs.get(id).length; + } else { + return Files.size(fileBlobs.get(id)); + } + } + public void store(UUID uuid, byte[] blob) { memoryBlobs.put(uuid, blob); } diff --git a/app/src/main/java/io/xpipe/app/beacon/api/FsWriteExchange.java b/app/src/main/java/io/xpipe/app/beacon/api/FsWriteExchange.java index dcdd6436a..5f13d74de 100644 --- a/app/src/main/java/io/xpipe/app/beacon/api/FsWriteExchange.java +++ b/app/src/main/java/io/xpipe/app/beacon/api/FsWriteExchange.java @@ -13,6 +13,7 @@ import lombok.SneakyThrows; import lombok.Value; import lombok.extern.jackson.Jacksonized; +import java.nio.file.Files; import java.util.UUID; public class FsWriteExchange extends BeaconInterface { @@ -28,7 +29,7 @@ public class FsWriteExchange extends BeaconInterface { var shell = AppBeaconServer.get().getCache().getShellSession(msg.getStore()); var fs = new ConnectionFileSystem(shell.getControl()); try (var in = BlobManager.get().getBlob(msg.getBlob()); - var os = fs.openOutput(msg.getPath(), in.available())) { + var os = fs.openOutput(msg.getPath(), BlobManager.get().getSize(msg.getBlob()))) { in.transferTo(os); } return Response.builder().build(); diff --git a/app/src/main/java/io/xpipe/app/core/AppWindowsLock.java b/app/src/main/java/io/xpipe/app/core/AppWindowsLock.java index 592e1a30e..062ae309b 100644 --- a/app/src/main/java/io/xpipe/app/core/AppWindowsLock.java +++ b/app/src/main/java/io/xpipe/app/core/AppWindowsLock.java @@ -31,7 +31,7 @@ public class AppWindowsLock { User32.INSTANCE.GetWindowLongPtr(hwnd, GWLP_WNDPROC).toPointer(); User32Ex.INSTANCE.SetWindowLongPtr(hwnd, GWLP_WNDPROC, PROC); } catch (Throwable t) { - ErrorEventFactory.fromThrowable(t).omit().handle(); + ErrorEventFactory.fromThrowable(t).omit().expected().handle(); } } diff --git a/app/src/main/java/io/xpipe/app/process/ShellView.java b/app/src/main/java/io/xpipe/app/process/ShellView.java index 908fcdef3..fa48a5b2e 100644 --- a/app/src/main/java/io/xpipe/app/process/ShellView.java +++ b/app/src/main/java/io/xpipe/app/process/ShellView.java @@ -203,8 +203,9 @@ public class ShellView { } public void transferLocalFile(Path localPath, FilePath target) throws Exception { + long size = Files.size(localPath); try (var in = Files.newInputStream(localPath)) { - writeStreamFile(target, in, in.available()); + writeStreamFile(target, in, size); } } diff --git a/app/src/main/java/io/xpipe/app/terminal/TerminalDockView.java b/app/src/main/java/io/xpipe/app/terminal/TerminalDockView.java index 50feb9ec5..ad8ff2702 100644 --- a/app/src/main/java/io/xpipe/app/terminal/TerminalDockView.java +++ b/app/src/main/java/io/xpipe/app/terminal/TerminalDockView.java @@ -225,7 +225,7 @@ public class TerminalDockView implements WindowDockListener { TrackEvent.withTrace("Terminal view window shown").handle(); terminalInstances.forEach(terminalInstance -> { var controllable = terminalInstance.getControllable(); - if (controllable.isActive()) { + if (!controllable.isActive()) { return; } diff --git a/app/src/main/java/io/xpipe/app/util/FileBridge.java b/app/src/main/java/io/xpipe/app/util/FileBridge.java index 5733d97db..1ee1360e9 100644 --- a/app/src/main/java/io/xpipe/app/util/FileBridge.java +++ b/app/src/main/java/io/xpipe/app/util/FileBridge.java @@ -104,14 +104,14 @@ public class FileBridge { + e.getLastModified()); if (e.registerChange()) { event("Registering change for file " + TEMP.relativize(e.file) + " for editor entry " + e.getName()); + var size = Files.size(e.file); try (var in = Files.newInputStream(e.file)) { - var actualSize = (long) in.available(); var started = Instant.now(); - var fixedIn = new FixedSizeInputStream(new BufferedInputStream(in), actualSize); - e.writer.accept(fixedIn, actualSize); + var fixedIn = new FixedSizeInputStream(new BufferedInputStream(in), size); + e.writer.accept(fixedIn, size); in.transferTo(OutputStream.nullOutputStream()); var taken = Duration.between(started, Instant.now()); - event("Wrote " + HumanReadableFormat.byteCount(actualSize) + " in " + taken.toMillis() + "ms"); + event("Wrote " + HumanReadableFormat.byteCount(size) + " in " + taken.toMillis() + "ms"); } catch (NoSuchFileException ex) { // The file might be removed meanwhile ErrorEventFactory.fromThrowable(ex).expected().omit().handle();