diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp index 03ed07680..edfd093b3 100644 --- a/src/base/bittorrent/session.cpp +++ b/src/base/bittorrent/session.cpp @@ -4699,10 +4699,13 @@ void Session::handleStorageMovedAlert(const lt::storage_moved_alert *p) Q_ASSERT(newPath == currentJob.path); const InfoHash infoHash = currentJob.torrentHandle.info_hash(); - const TorrentHandleImpl *torrent = m_torrents.value(infoHash); + TorrentHandleImpl *torrent = m_torrents.value(infoHash); const QString torrentName = (torrent ? torrent->name() : QString {infoHash}); LogMsg(tr("\"%1\" is successfully moved to \"%2\".").arg(torrentName, newPath)); + if (torrent) + emit torrentStorageMoveFinished(torrent, newPath); + handleMoveTorrentStorageJobFinished(); } @@ -4714,11 +4717,15 @@ void Session::handleStorageMovedFailedAlert(const lt::storage_moved_failed_alert Q_ASSERT(currentJob.torrentHandle == p->handle); const InfoHash infoHash = currentJob.torrentHandle.info_hash(); - const TorrentHandleImpl *torrent = m_torrents.value(infoHash); + TorrentHandleImpl *torrent = m_torrents.value(infoHash); const QString torrentName = (torrent ? torrent->name() : QString {infoHash}); const QString currentLocation = QString::fromStdString(p->handle.status(lt::torrent_handle::query_save_path).save_path); + const QString errorMessage = QString::fromStdString(p->message()); LogMsg(tr("Failed to move \"%1\" from \"%2\" to \"%3\". Reason: %4.") - .arg(torrentName, currentLocation, currentJob.path, QString::fromStdString(p->message())), Log::CRITICAL); + .arg(torrentName, currentLocation, currentJob.path, errorMessage), Log::CRITICAL); + + if (torrent) + emit torrentStorageMoveFailed(torrent, currentJob.path, errorMessage); handleMoveTorrentStorageJobFinished(); } diff --git a/src/base/bittorrent/session.h b/src/base/bittorrent/session.h index bbacff77b..ced39d9e0 100644 --- a/src/base/bittorrent/session.h +++ b/src/base/bittorrent/session.h @@ -502,6 +502,8 @@ namespace BitTorrent void torrentResumed(BitTorrent::TorrentHandle *const torrent); void torrentSavePathChanged(BitTorrent::TorrentHandle *const torrent); void torrentSavingModeChanged(BitTorrent::TorrentHandle *const torrent); + void torrentStorageMoveFailed(BitTorrent::TorrentHandle *const torrent, const QString &targetPath, const QString &error); + void torrentStorageMoveFinished(BitTorrent::TorrentHandle *const torrent, const QString &newPath); void torrentsUpdated(const QVector &torrents); void torrentTagAdded(TorrentHandle *const torrent, const QString &tag); void torrentTagRemoved(TorrentHandle *const torrent, const QString &tag); diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 3035e2d1a..5926c299a 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -201,6 +201,8 @@ MainWindow::MainWindow(QWidget *parent) connect(BitTorrent::Session::instance(), &BitTorrent::Session::downloadFromUrlFailed, this, &MainWindow::handleDownloadFromUrlFailure); connect(BitTorrent::Session::instance(), &BitTorrent::Session::speedLimitModeChanged, this, &MainWindow::updateAltSpeedsBtn); connect(BitTorrent::Session::instance(), &BitTorrent::Session::recursiveTorrentDownloadPossible, this, &MainWindow::askRecursiveTorrentDownloadConfirmation); + connect(BitTorrent::Session::instance(), &BitTorrent::Session::torrentStorageMoveFinished, this, &MainWindow::moveTorrentFinished); + connect(BitTorrent::Session::instance(), &BitTorrent::Session::torrentStorageMoveFailed, this, &MainWindow::moveTorrentFailed); qDebug("create tabWidget"); m_tabs = new HidableTabWidget(this); @@ -836,6 +838,16 @@ void MainWindow::finishedTorrent(BitTorrent::TorrentHandle *const torrent) const showNotificationBaloon(tr("Download completion"), tr("'%1' has finished downloading.", "e.g: xxx.avi has finished downloading.").arg(torrent->name())); } +void MainWindow::moveTorrentFinished(BitTorrent::TorrentHandle *const torrent, const QString &newPath) const +{ + showNotificationBaloon(tr("Torrent moving finished"), tr("'%1' has finished moving files to '%2'.").arg(torrent->name(), newPath)); +} + +void MainWindow::moveTorrentFailed(BitTorrent::TorrentHandle *const torrent, const QString &targetPath, const QString &error) const +{ + showNotificationBaloon(tr("Torrent moving failed"), tr("'%1' has failed moving files to '%2'. Reason: %3").arg(torrent->name(), targetPath, error)); +} + // Notification when disk is full void MainWindow::fullDiskError(BitTorrent::TorrentHandle *const torrent, const QString &msg) const { diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index ac434ce9b..529e26025 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -133,6 +133,8 @@ private slots: void addTorrentFailed(const QString &error) const; void torrentNew(BitTorrent::TorrentHandle *const torrent) const; void finishedTorrent(BitTorrent::TorrentHandle *const torrent) const; + void moveTorrentFinished(BitTorrent::TorrentHandle *const torrent, const QString &newPath) const; + void moveTorrentFailed(BitTorrent::TorrentHandle *const torrent, const QString &targetPath, const QString &error) const; void askRecursiveTorrentDownloadConfirmation(BitTorrent::TorrentHandle *const torrent); void optionsSaved(); #if defined(Q_OS_WIN) || defined(Q_OS_MACOS)