mirror of
https://github.com/xpipe-io/xpipe.git
synced 2026-05-03 11:20:34 +00:00
Browser transfer fixes
This commit is contained in:
@@ -161,6 +161,12 @@ public class BrowserFileTransferOperation {
|
||||
|
||||
reinitFileSystemsIfNeeded();
|
||||
|
||||
if (target.getKind() != FileKind.DIRECTORY) {
|
||||
throw new IllegalStateException("Target " + target.getPath() + " is not a directory");
|
||||
}
|
||||
|
||||
BrowserFileSystemHelper.validateDirectoryPath(target.getFileSystem(), target.getPath(), true);
|
||||
|
||||
cancelled.set(false);
|
||||
|
||||
var same = files.getFirst().getFileSystem().equals(target.getFileSystem());
|
||||
@@ -244,12 +250,6 @@ public class BrowserFileTransferOperation {
|
||||
}
|
||||
|
||||
private void handleSingleAcrossFileSystems(FileEntry source) throws Exception {
|
||||
if (target.getKind() != FileKind.DIRECTORY) {
|
||||
throw new IllegalStateException("Target " + target.getPath() + " is not a directory");
|
||||
}
|
||||
|
||||
BrowserFileSystemHelper.validateDirectoryPath(target.getFileSystem(), target.getPath(), true);
|
||||
|
||||
var flatFiles = new LinkedHashMap<FileEntry, FilePath>();
|
||||
|
||||
// Prevent dropping directory into itself
|
||||
@@ -263,11 +263,14 @@ public class BrowserFileTransferOperation {
|
||||
// Source might have been deleted meanwhile
|
||||
var exists = source.getFileSystem().directoryExists(source.getPath());
|
||||
if (!exists) {
|
||||
progress.accept(BrowserTransferProgress.finished(source.getName(), 0));
|
||||
return;
|
||||
}
|
||||
|
||||
var directoryName = source.getPath().getFileName();
|
||||
flatFiles.put(source, FilePath.of(directoryName));
|
||||
if (!source.getPath().isRoot()) {
|
||||
flatFiles.put(source, FilePath.of(directoryName));
|
||||
}
|
||||
|
||||
var baseRelative = source.getPath().getParent().toDirectory();
|
||||
var list = new ArrayList<FileEntry>();
|
||||
@@ -288,16 +291,21 @@ public class BrowserFileTransferOperation {
|
||||
list.add(fileEntry);
|
||||
return true;
|
||||
});
|
||||
} else {
|
||||
} else if (source.getKind() == FileKind.FILE) {
|
||||
// Source might have been deleted meanwhile
|
||||
var exists = source.getFileSystem().fileExists(source.getPath());
|
||||
if (!exists) {
|
||||
progress.accept(BrowserTransferProgress.finished(source.getName(), 0));
|
||||
return;
|
||||
}
|
||||
|
||||
flatFiles.put(source, FilePath.of(source.getPath().getFileName()));
|
||||
// If we don't have a size, it doesn't matter that much as the total size is only for display
|
||||
totalSize.addAndGet(source.getFileSizeLong().orElse(0));
|
||||
} else {
|
||||
// Unsupported type, e.g. a socket
|
||||
progress.accept(BrowserTransferProgress.finished(source.getName(), 0));
|
||||
return;
|
||||
}
|
||||
|
||||
var originalSourceFs = flatFiles.keySet().iterator().next().getFileSystem();
|
||||
|
||||
@@ -106,13 +106,14 @@ public class BrowserTransferModel {
|
||||
public void drop(BrowserFileSystemTabModel model, List<BrowserEntry> entries) {
|
||||
synchronized (items) {
|
||||
entries.forEach(entry -> {
|
||||
var name = entry.getFileName();
|
||||
var resolved = entry.getRawFileEntry().resolved();
|
||||
var name = resolved.getName();
|
||||
if (items.stream().anyMatch(item -> item.getName().equals(name))) {
|
||||
return;
|
||||
}
|
||||
|
||||
var fixedFile = OsFileSystem.ofLocal()
|
||||
.makeFileSystemCompatible(entry.getRawFileEntry().getPath());
|
||||
.makeFileSystemCompatible(resolved.getPath());
|
||||
Path file = TEMP.resolve(fixedFile.getFileName());
|
||||
var item = new Item(model, name, entry, file);
|
||||
items.add(item);
|
||||
@@ -145,7 +146,7 @@ public class BrowserTransferModel {
|
||||
transferring.setValue(true);
|
||||
var op = new BrowserFileTransferOperation(
|
||||
BrowserLocalFileSystem.getLocalFileEntry(TEMP),
|
||||
List.of(item.getBrowserEntry().getRawFileEntry()),
|
||||
List.of(item.getBrowserEntry().getRawFileEntry().resolved()),
|
||||
BrowserFileTransferMode.COPY,
|
||||
false,
|
||||
progress -> {
|
||||
@@ -192,6 +193,7 @@ public class BrowserTransferModel {
|
||||
var files = toMove.stream().map(item -> item.getLocalFile()).toList();
|
||||
var downloads = getDownloadsTargetDirectory();
|
||||
Files.createDirectories(downloads);
|
||||
Path firstToOpen = null;
|
||||
for (Path file : files) {
|
||||
if (!Files.exists(file)) {
|
||||
continue;
|
||||
@@ -207,10 +209,13 @@ public class BrowserTransferModel {
|
||||
} else {
|
||||
Files.move(file, target, StandardCopyOption.REPLACE_EXISTING);
|
||||
}
|
||||
|
||||
if (firstToOpen == null) {
|
||||
firstToOpen = target;
|
||||
}
|
||||
}
|
||||
if (open) {
|
||||
DesktopHelper.browseFileInDirectory(
|
||||
downloads.resolve(files.getFirst().getFileName()));
|
||||
if (open && firstToOpen != null) {
|
||||
DesktopHelper.browseFileInDirectory(firstToOpen);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user