mirror of https://github.com/kiwix/libkiwix.git
Get `Waiting` downloads before `Active` ones.
`Waiting` can become `Active` while we are getting the downloads. We may have rare case where we miss a download if we get `Active` before `Waiting`.
This commit is contained in:
parent
2c3b7409aa
commit
1ba588272c
|
@ -127,14 +127,6 @@ void Download::cancelDownload()
|
||||||
Downloader::Downloader() :
|
Downloader::Downloader() :
|
||||||
mp_aria(new Aria2())
|
mp_aria(new Aria2())
|
||||||
{
|
{
|
||||||
try {
|
|
||||||
for (auto gid : mp_aria->tellActive()) {
|
|
||||||
m_knownDownloads[gid] = std::unique_ptr<Download>(new Download(mp_aria, gid));
|
|
||||||
m_knownDownloads[gid]->updateStatus(false);
|
|
||||||
}
|
|
||||||
} catch (std::exception& e) {
|
|
||||||
std::cerr << "aria2 tellActive failed : " << e.what() << std::endl;
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
for (auto gid : mp_aria->tellWaiting()) {
|
for (auto gid : mp_aria->tellWaiting()) {
|
||||||
m_knownDownloads[gid] = std::unique_ptr<Download>(new Download(mp_aria, gid));
|
m_knownDownloads[gid] = std::unique_ptr<Download>(new Download(mp_aria, gid));
|
||||||
|
@ -143,6 +135,16 @@ Downloader::Downloader() :
|
||||||
} catch (std::exception& e) {
|
} catch (std::exception& e) {
|
||||||
std::cerr << "aria2 tellWaiting failed : " << e.what() << std::endl;
|
std::cerr << "aria2 tellWaiting failed : " << e.what() << std::endl;
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
for (auto gid : mp_aria->tellActive()) {
|
||||||
|
if( m_knownDownloads.find(gid) == m_knownDownloads.end()) {
|
||||||
|
m_knownDownloads[gid] = std::unique_ptr<Download>(new Download(mp_aria, gid));
|
||||||
|
m_knownDownloads[gid]->updateStatus(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (std::exception& e) {
|
||||||
|
std::cerr << "aria2 tellActive failed : " << e.what() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Destructor */
|
/* Destructor */
|
||||||
|
@ -185,13 +187,13 @@ std::shared_ptr<Download> Downloader::getDownload(const std::string& did)
|
||||||
try {
|
try {
|
||||||
return m_knownDownloads.at(did);
|
return m_knownDownloads.at(did);
|
||||||
} catch(std::exception& e) {
|
} catch(std::exception& e) {
|
||||||
for (auto gid : mp_aria->tellActive()) {
|
for (auto gid : mp_aria->tellWaiting()) {
|
||||||
if (gid == did) {
|
if (gid == did) {
|
||||||
m_knownDownloads[gid] = std::make_shared<Download>(mp_aria, gid);
|
m_knownDownloads[gid] = std::make_shared<Download>(mp_aria, gid);
|
||||||
return m_knownDownloads[gid];
|
return m_knownDownloads[gid];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (auto gid : mp_aria->tellWaiting()) {
|
for (auto gid : mp_aria->tellActive()) {
|
||||||
if (gid == did) {
|
if (gid == did) {
|
||||||
m_knownDownloads[gid] = std::make_shared<Download>(mp_aria, gid);
|
m_knownDownloads[gid] = std::make_shared<Download>(mp_aria, gid);
|
||||||
return m_knownDownloads[gid];
|
return m_knownDownloads[gid];
|
||||||
|
|
Loading…
Reference in New Issue