2828#include < fmt/format.h>
2929
3030#include " addtorrenthelpers.h"
31+ #include " fileutils.h"
3132#include " formatutils.h"
3233#include " magnetlinkparser.h"
3334#include " settings.h"
@@ -64,6 +65,19 @@ namespace tremotesf {
6465 }
6566 return row;
6667 }
68+
69+ Rpc::DeleteFileMode determineDeleteFileMode (const AddTorrentDialog::AddTorrentParametersWidgets& widgets) {
70+ if (!widgets.deleteTorrentFileGroupBox || !widgets.moveTorrentFileToTrashCheckBox ) {
71+ return Rpc::DeleteFileMode::No;
72+ }
73+ if (!widgets.deleteTorrentFileGroupBox ->isChecked ()) {
74+ return Rpc::DeleteFileMode::No;
75+ }
76+ if (widgets.moveTorrentFileToTrashCheckBox ->isChecked ()) {
77+ return Rpc::DeleteFileMode::MoveToTrash;
78+ }
79+ return Rpc::DeleteFileMode::Delete;
80+ }
6781 }
6882
6983 AddTorrentDialog::AddTorrentDialog (Rpc* rpc, std::variant<FileParams, UrlParams> params, QWidget* parent)
@@ -95,7 +109,8 @@ namespace tremotesf {
95109 mFilesModel ->lowPriorityFiles (),
96110 mFilesModel ->renamedFiles (),
97111 priorityFromComboBoxIndex (mAddTorrentParametersWidgets .priorityComboBox ->currentIndex ()),
98- mAddTorrentParametersWidgets .startTorrentCheckBox ->isChecked ()
112+ mAddTorrentParametersWidgets .startTorrentCheckBox ->isChecked (),
113+ determineDeleteFileMode (mAddTorrentParametersWidgets )
99114 );
100115 }
101116 } else {
@@ -117,7 +132,6 @@ namespace tremotesf {
117132 if (settings->rememberAddTorrentParameters ()) {
118133 mAddTorrentParametersWidgets .saveToSettings ();
119134 }
120- deleteTorrentFileIfEnabled ();
121135 QDialog::accept ();
122136 }
123137
@@ -349,7 +363,9 @@ namespace tremotesf {
349363 mTorrentFileInfoHashAndTrackers =
350364 std::pair{std::move (torrentFile.infoHashV1 ), std::move (torrentFile.trackers )};
351365 if (checkIfTorrentFileExists ()) {
352- deleteTorrentFileIfEnabled ();
366+ if (isAddingFile ()) {
367+ co_await deleteTorrentFileIfEnabled ();
368+ }
353369 close ();
354370 co_return ;
355371 }
@@ -407,13 +423,22 @@ namespace tremotesf {
407423 return false ;
408424 }
409425
410- void AddTorrentDialog::deleteTorrentFileIfEnabled () {
411- if (isAddingFile () && mAddTorrentParametersWidgets .deleteTorrentFileGroupBox ->isChecked ()) {
412- deleteTorrentFile (
413- std::get<FileParams>(mParams ).filePath ,
414- mAddTorrentParametersWidgets .moveTorrentFileToTrashCheckBox ->isChecked ()
415- );
426+ Coroutine<> AddTorrentDialog::deleteTorrentFileIfEnabled () {
427+ const auto deleteFileMode = determineDeleteFileMode (mAddTorrentParametersWidgets );
428+ if (deleteFileMode == Rpc::DeleteFileMode::No) {
429+ co_return ;
416430 }
431+ co_await runOnThreadPool ([deleteFileMode, filePath = std::get<FileParams>(mParams ).filePath ] {
432+ try {
433+ if (deleteFileMode == Rpc::DeleteFileMode::MoveToTrash) {
434+ moveFileToTrashOrDelete (filePath);
435+ } else {
436+ deleteFile (filePath);
437+ }
438+ } catch (const QFileError& e) {
439+ warning ().logWithException (e, " Failed to delete torrent file" );
440+ }
441+ });
417442 }
418443
419444 void AddTorrentDialog::AddTorrentParametersWidgets::reset (Rpc* rpc) const {
0 commit comments