diff --git a/lib/sftp_worker.dart b/lib/sftp_worker.dart index 120c6af..fb4607c 100644 --- a/lib/sftp_worker.dart +++ b/lib/sftp_worker.dart @@ -35,6 +35,13 @@ class Remove extends SftpCommand { Remove(this.dirEntry, this.path); } +class Rename extends SftpCommand { + final String oldpath; + final String newpath; + + Rename(this.oldpath, this.newpath); +} + class SftpWorker { @@ -163,7 +170,15 @@ class SftpWorker { } sendPort.send((id, 0)); } - on SftpStatusError catch (e) { + on SftpStatusError catch (e) { + sendPort.send((id, RemoteError(e.message, ''))); + } + case Rename(:final oldpath, :final newpath): + try { + await sftpClient.rename(oldpath, newpath); + sendPort.send((id, 0)); + } + on SftpStatusError catch (e) { sendPort.send((id, RemoteError(e.message, ''))); } } @@ -232,4 +247,12 @@ class SftpWorker { await completer.future; } + Future rename(String oldpath, String newpath) async { + final completer = Completer.sync(); + final id = _idCounter++; + _activeRequests[id] = completer; + _commands.send((id, Rename(oldpath, newpath))); + await completer.future; + } + } diff --git a/lib/widgets/operation_buttons.dart b/lib/widgets/operation_buttons.dart index f6d157e..fe32b75 100644 --- a/lib/widgets/operation_buttons.dart +++ b/lib/widgets/operation_buttons.dart @@ -51,19 +51,19 @@ class OperationButtons extends StatelessWidget { TextButton(onPressed: () => Navigator.pop(context), child: Text('Cancel')), TextButton( onPressed: () async { - // try { - // await sftpWorker.rename('${path}${dirEntry.filename}', '${widget.path}${newNameController.text}'); - // _listDir(); - // } - // on SftpStatusError catch (e) { - // if (context.mounted) { - // ScaffoldMessenger.of(context).showSnackBar(_buildErrorSnackBar(context, e.message)); - // } - // } - // if (context.mounted) { - // Navigator.pop(context); - // } - // + try { + await sftpWorker.rename('$path${dirEntry.filename}', '$path${newNameController.text}'); + listDir(); + } + on SftpStatusError catch (e) { + if (context.mounted) { + ScaffoldMessenger.of(context).showSnackBar(buildErrorSnackBar(context, e.message)); + } + } + if (context.mounted) { + Navigator.pop(context); + } + }, child: Text('Rename') ),