mirror of
https://github.com/kiwix/kiwix-desktop.git
synced 2025-09-22 03:26:05 -04:00
ContentManager::updateDownloads() runs in a separate thread
This commit is contained in:
parent
b6a86918ff
commit
5340bc4b01
@ -130,12 +130,36 @@ ContentManager::ContentManager(Library* library, kiwix::Downloader* downloader,
|
||||
setCategories();
|
||||
setLanguages();
|
||||
|
||||
m_downloadUpdateTimer.start(1000);
|
||||
connect(&m_downloadUpdateTimer, &QTimer::timeout,
|
||||
this, &ContentManager::updateDownloads);
|
||||
|
||||
connect(this, &ContentManager::downloadUpdated,
|
||||
this, &ContentManager::updateDownload);
|
||||
|
||||
if ( mp_downloader ) {
|
||||
startDownloadUpdaterThread();
|
||||
}
|
||||
}
|
||||
|
||||
void ContentManager::startDownloadUpdaterThread()
|
||||
{
|
||||
// so that DownloadInfo can be copied across threads
|
||||
qRegisterMetaType<DownloadInfo>("DownloadInfo");
|
||||
|
||||
mp_downloadUpdaterThread = QThread::create([=]() {
|
||||
while ( mp_downloadUpdaterThread != nullptr ) {
|
||||
updateDownloads();
|
||||
QThread::msleep(1000);
|
||||
}
|
||||
});
|
||||
mp_downloadUpdaterThread->start();
|
||||
}
|
||||
|
||||
ContentManager::~ContentManager()
|
||||
{
|
||||
if ( mp_downloadUpdaterThread )
|
||||
{
|
||||
QThread* t = mp_downloadUpdaterThread;
|
||||
mp_downloadUpdaterThread = nullptr; // tell the thread to terminate
|
||||
t->wait();
|
||||
}
|
||||
}
|
||||
|
||||
void ContentManager::updateModel()
|
||||
|
@ -22,7 +22,7 @@ public: // types
|
||||
|
||||
public: // functions
|
||||
explicit ContentManager(Library* library, kiwix::Downloader *downloader, QObject *parent = nullptr);
|
||||
virtual ~ContentManager() {}
|
||||
virtual ~ContentManager();
|
||||
|
||||
ContentManagerView* getView() { return mp_view; }
|
||||
void setLocal(bool local);
|
||||
@ -84,6 +84,7 @@ private: // functions
|
||||
// the remote or local library (in that order).
|
||||
const kiwix::Book& getRemoteOrLocalBook(const QString &id);
|
||||
|
||||
void startDownloadUpdaterThread();
|
||||
std::string startDownload(const kiwix::Book& book);
|
||||
void removeDownload(QString bookId);
|
||||
void downloadStarted(const kiwix::Book& book, const std::string& downloadId);
|
||||
@ -96,7 +97,7 @@ private: // data
|
||||
kiwix::LibraryPtr mp_remoteLibrary;
|
||||
kiwix::Downloader* mp_downloader;
|
||||
ContentManagerModel::Downloads m_downloads;
|
||||
QTimer m_downloadUpdateTimer;
|
||||
QThread* mp_downloadUpdaterThread = nullptr;
|
||||
OpdsRequestManager m_remoteLibraryManager;
|
||||
ContentManagerView* mp_view;
|
||||
bool m_local = true;
|
||||
|
Loading…
x
Reference in New Issue
Block a user