From a962e068f811391cb46aeb4ad5e2463409d9fc8e Mon Sep 17 00:00:00 2001 From: csf Date: Wed, 8 Mar 2023 23:06:34 +0900 Subject: [PATCH] fix sendFiles wrong direction --- .../lib/desktop/pages/file_manager_page.dart | 7 +++- flutter/lib/models/file_model.dart | 37 +++++++++++++------ 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/flutter/lib/desktop/pages/file_manager_page.dart b/flutter/lib/desktop/pages/file_manager_page.dart index 99b873cdc..1010d56c4 100644 --- a/flutter/lib/desktop/pages/file_manager_page.dart +++ b/flutter/lib/desktop/pages/file_manager_page.dart @@ -338,7 +338,8 @@ class _FileManagerPageState extends State ..name = file.name ..size = FileSystemEntity.isDirectorySync(f.path) ? 0 : f.lengthSync()); } - model.remoteController.sendFiles(items); + final otherSideData = model.localController.directoryData(); + model.remoteController.sendFiles(items, otherSideData); } } @@ -741,7 +742,9 @@ class _FileManagerViewState extends State { ), onPressed: validItems(_selectedItems) ? () { - controller.sendFiles(_selectedItems); + final otherSideData = + controller.getOtherSideDirectoryData(); + controller.sendFiles(_selectedItems, otherSideData); _selectedItems.clear(); } : null, diff --git a/flutter/lib/models/file_model.dart b/flutter/lib/models/file_model.dart index aa4b6253f..2073991ef 100644 --- a/flutter/lib/models/file_model.dart +++ b/flutter/lib/models/file_model.dart @@ -55,13 +55,15 @@ class FileModel { getSessionID: getSessionID, dialogManager: parent.target?.dialogManager, jobController: jobController, - fileFetcher: fileFetcher); + fileFetcher: fileFetcher, + getOtherSideDirectoryData: () => remoteController.directoryData()); remoteController = FileController( isLocal: false, getSessionID: getSessionID, dialogManager: parent.target?.dialogManager, jobController: jobController, - fileFetcher: fileFetcher); + fileFetcher: fileFetcher, + getOtherSideDirectoryData: () => localController.directoryData()); } Future onReady() async { @@ -189,6 +191,12 @@ class FileModel { } } +class DirectoryData { + final DirectoryOptions options; + final FileDirectory directory; + DirectoryData(this.directory, this.options); +} + class FileController { final bool isLocal; final GetSessionID getSessionID; @@ -205,12 +213,15 @@ class FileController { final JobController jobController; final OverlayDialogManager? dialogManager; + final DirectoryData Function() getOtherSideDirectoryData; + FileController( {required this.isLocal, required this.getSessionID, required this.dialogManager, required this.jobController, - required this.fileFetcher}); + required this.fileFetcher, + required this.getOtherSideDirectoryData}); String get homePath => options.value.home; @@ -229,6 +240,10 @@ class FileController { } } + DirectoryData directoryData() { + return DirectoryData(directory.value, options.value); + } + Future onReady() async { options.value.home = await bind.mainGetHomeDir(); options.value.showHidden = (await bind.sessionGetPeerOption( @@ -372,18 +387,18 @@ class FileController { } /// sendFiles from other side (SelectedItems) to current side (FileController.isLocal). - void sendFiles(SelectedItems items) { - /// ignore same side - if (items.isLocal == isLocal) { + void sendFiles(SelectedItems items, DirectoryData otherSideData) { + /// ignore wrong items side status + if (items.isLocal != isLocal) { return; } // alias - final isRemoteToLocal = isLocal; + final isRemoteToLocal = !isLocal; - final toPath = directory.value.path; - final isWindows = options.value.isWindows; - final showHidden = options.value.showHidden; + final toPath = otherSideData.directory.path; + final isWindows = otherSideData.options.isWindows; + final showHidden = otherSideData.options.showHidden; for (var from in items.items) { final jobID = jobController.add(from, isRemoteToLocal); bind.sessionSendFiles( @@ -403,7 +418,7 @@ class FileController { Future removeAction(SelectedItems items) async { _removeCheckboxRemember = false; - if (items.isLocal == isLocal) { + if (items.isLocal != isLocal) { debugPrint("Failed to removeFile, wrong files"); return; }