Browse Source

Correctly handle "no enough disk space" error

If torrent failed to write, it stops downloading and goes to
"upload mode" instead of errored state so it just keeps seeding.
Now qBittorrent indicates this state as "errored" and allows
the user to manually bring the torrent out of this state.
adaptive-webui-19844
Vladimir Golovnev (Glassez) 4 years ago
parent
commit
d4554c2e5c
No known key found for this signature in database
GPG Key ID: 52A2C7DEE2DFA6F7
  1. 16
      src/base/bittorrent/torrentimpl.cpp

16
src/base/bittorrent/torrentimpl.cpp

@ -948,7 +948,7 @@ bool TorrentImpl::hasMissingFiles() const
bool TorrentImpl::hasError() const bool TorrentImpl::hasError() const
{ {
return static_cast<bool>(m_nativeStatus.errc); return (m_nativeStatus.errc || (m_nativeStatus.flags & lt::torrent_flags::upload_mode));
} }
bool TorrentImpl::hasFilteredPieces() const bool TorrentImpl::hasFilteredPieces() const
@ -967,7 +967,13 @@ int TorrentImpl::queuePosition() const
QString TorrentImpl::error() const QString TorrentImpl::error() const
{ {
return QString::fromStdString(m_nativeStatus.errc.message()); if (m_nativeStatus.errc)
return QString::fromStdString(m_nativeStatus.errc.message());
if (m_nativeStatus.flags & lt::torrent_flags::upload_mode)
return tr("There's not enough space on disk. Torrent is currently in \"upload only\" mode.");
return {};
} }
qlonglong TorrentImpl::totalDownload() const qlonglong TorrentImpl::totalDownload() const
@ -1527,7 +1533,10 @@ void TorrentImpl::pause()
void TorrentImpl::resume(const TorrentOperatingMode mode) void TorrentImpl::resume(const TorrentOperatingMode mode)
{ {
if (hasError()) if (hasError())
{
m_nativeHandle.clear_error(); m_nativeHandle.clear_error();
m_nativeHandle.unset_flags(lt::torrent_flags::upload_mode);
}
m_operatingMode = mode; m_operatingMode = mode;
@ -1770,6 +1779,9 @@ void TorrentImpl::prepareResumeData(const lt::add_torrent_params &params)
m_ltAddTorrentParams.added_time = addedTime().toSecsSinceEpoch(); m_ltAddTorrentParams.added_time = addedTime().toSecsSinceEpoch();
// We shouldn't save upload_mode flag to allow torrent operate normally on next run
m_ltAddTorrentParams.flags &= ~lt::torrent_flags::upload_mode;
LoadTorrentParams resumeData; LoadTorrentParams resumeData;
resumeData.name = m_name; resumeData.name = m_name;
resumeData.category = m_category; resumeData.category = m_category;

Loading…
Cancel
Save