Skip to content
28 changes: 27 additions & 1 deletion src/base/bittorrent/sessionimpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ using namespace std::chrono_literals;
using namespace BitTorrent;

const Path CATEGORIES_FILE_NAME {u"categories.json"_s};
const Path ADDITIONAL_TRACKERS_FROM_URL_FILE_NAME {u"additional_trackers_from_url.txt"_s};
const int MAX_PROCESSING_RESUMEDATA_COUNT = 50;
const std::chrono::seconds FREEDISKSPACE_CHECK_TIMEOUT = 30s;

Expand Down Expand Up @@ -682,8 +683,10 @@ SessionImpl::SessionImpl(QObject *parent)
m_updateTrackersFromURLTimer = new QTimer(this);
m_updateTrackersFromURLTimer->setInterval(24h);
connect(m_updateTrackersFromURLTimer, &QTimer::timeout, this, &SessionImpl::updateTrackersFromURL);

if (isAddTrackersFromURLEnabled())
{
updateTrackersFromFile();
updateTrackersFromURL();
m_updateTrackersFromURLTimer->start();
}
Expand Down Expand Up @@ -3998,6 +4001,8 @@ void SessionImpl::setAddTrackersFromURLEnabled(const bool enabled)
{
m_updateTrackersFromURLTimer->stop();
setAdditionalTrackersFromURL({});
const Path path = specialFolderLocation(SpecialFolder::Data) / Path(ADDITIONAL_TRACKERS_FROM_URL_FILE_NAME);
Utils::Fs::removeFile(path);
}
}
}
Expand Down Expand Up @@ -4040,7 +4045,8 @@ void SessionImpl::updateTrackersFromURL()
}
else
{
Net::DownloadManager::instance()->download(Net::DownloadRequest(url)
const Path path = specialFolderLocation(SpecialFolder::Data) / ADDITIONAL_TRACKERS_FROM_URL_FILE_NAME;
Net::DownloadManager::instance()->download(Net::DownloadRequest(url).saveToFile(true).destFileName(path)
, Preferences::instance()->useProxyForGeneralPurposes(), this, [this](const Net::DownloadResult &result)
{
if (result.status == Net::DownloadStatus::Success)
Expand Down Expand Up @@ -6624,3 +6630,23 @@ void SessionImpl::handleRemovedTorrent(const TorrentID &torrentID, const QString

m_removingTorrents.erase(removingTorrentDataIter);
}

void SessionImpl::updateTrackersFromFile()
{
const qint64 fileMaxSize = 1024 * 1024;
const Path path = specialFolderLocation(SpecialFolder::Data) / Path(ADDITIONAL_TRACKERS_FROM_URL_FILE_NAME);

const auto readResult = Utils::IO::readFile(path, fileMaxSize);
if (!readResult)
{
if (readResult.error().status == Utils::IO::ReadError::NotExist)
{
return;
}

LogMsg(tr("Failed to load additional trackers from file. Reason: %1").arg(readResult.error().message), Log::WARNING);
return;
}

setAdditionalTrackersFromURL(QString::fromUtf8(readResult.value()));
}
1 change: 1 addition & 0 deletions src/base/bittorrent/sessionimpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -650,6 +650,7 @@ namespace BitTorrent

void setAdditionalTrackersFromURL(const QString &trackers);
void updateTrackersFromURL();
void updateTrackersFromFile();

CachedSettingValue<QString> m_DHTBootstrapNodes;
CachedSettingValue<bool> m_isDHTEnabled;
Expand Down
Loading