Do RSS serializing on worker thread

PR #16357.
This commit is contained in:
Prince Gupta
2022-06-09 17:46:37 +05:30
committed by GitHub
parent eddeda7bab
commit c47e29c7c8
7 changed files with 260 additions and 95 deletions

View File

@@ -1,6 +1,6 @@
/*
* Bittorrent Client using Qt and libtorrent.
* Copyright (C) 2015, 2017 Vladimir Golovnev <glassez@yandex.ru>
* Copyright (C) 2015-2022 Vladimir Golovnev <glassez@yandex.ru>
* Copyright (C) 2010 Christophe Dumez <chris@qbittorrent.org>
* Copyright (C) 2010 Arnaud Demaiziere <arnaud@qbittorrent.org>
*
@@ -30,10 +30,12 @@
#pragma once
#include <QtContainerFwd>
#include <QBasicTimer>
#include <QHash>
#include <QList>
#include <QUuid>
#include <QVariantHash>
#include "base/path.h"
#include "rss_item.h"
@@ -53,6 +55,7 @@ namespace RSS
namespace Private
{
class FeedSerializer;
class Parser;
struct ParsingResult;
}
@@ -96,13 +99,12 @@ namespace RSS
void handleDownloadFinished(const Net::DownloadResult &result);
void handleParsingFinished(const Private::ParsingResult &result);
void handleArticleRead(Article *article);
void handleArticleLoadFinished(const QVector<QVariantHash> &articles);
private:
void timerEvent(QTimerEvent *event) override;
void cleanup() override;
void load();
void loadArticles(const QByteArray &data);
void loadArticlesLegacy();
void store();
void storeDeferred();
bool addArticle(Article *article);
@@ -112,14 +114,17 @@ namespace RSS
void downloadIcon();
int updateArticles(const QList<QVariantHash> &loadedArticles);
Session *m_session;
Private::Parser *m_parser;
Session *m_session = nullptr;
Private::Parser *m_parser = nullptr;
Private::FeedSerializer *m_serializer = nullptr;
const QUuid m_uid;
const QString m_url;
QString m_title;
QString m_lastBuildDate;
bool m_hasError = false;
bool m_isLoading = false;
bool m_isInitialized = false;
bool m_pendingRefresh = false;
QHash<QString, Article *> m_articles;
QList<Article *> m_articlesByDate;
int m_unreadCount = 0;