Move RSSFetcher into its own thread.

This should keep QNAM from blocking the startup in some network setups.

Reviewed-by: dt
Task-number: QTCREATORBUG-1250
This commit is contained in:
Daniel Molkentin
2010-05-05 16:02:54 +02:00
parent deba740559
commit 10157163f4
4 changed files with 33 additions and 13 deletions

View File

@@ -33,6 +33,7 @@
#include <QtCore/QDebug>
#include <QtCore/QSysInfo>
#include <QtCore/QLocale>
#include <QtCore/QEventLoop>
#include <QtGui/QDesktopServices>
#include <QtGui/QLineEdit>
#include <QtNetwork/QNetworkReply>
@@ -113,15 +114,22 @@ static const QString getOsString()
return osString;
}
RSSFetcher::RSSFetcher(int maxItems, QObject *parent)
: QObject(parent), m_maxItems(maxItems), m_items(0)
RSSFetcher::RSSFetcher(int maxItems)
: QThread(0), m_maxItems(maxItems), m_items(0), m_networkAccessManager(0)
{
moveToThread(this);
}
RSSFetcher::~RSSFetcher()
{
}
void RSSFetcher::run()
{
exec();
delete m_networkAccessManager;
}
void RSSFetcher::fetch(const QUrl &url)
{
QString agentStr = QString::fromLatin1("Qt-Creator/%1 (QHttp %2; %3; %4; %5 bit)")
@@ -130,9 +138,9 @@ void RSSFetcher::fetch(const QUrl &url)
.arg(QSysInfo::WordSize);
QNetworkRequest req(url);
req.setRawHeader("User-Agent", agentStr.toLatin1());
if (m_networkAccessManager.isNull()) {
m_networkAccessManager.reset(new QNetworkAccessManager);
connect(m_networkAccessManager.data(), SIGNAL(finished(QNetworkReply*)),
if (!m_networkAccessManager) {
m_networkAccessManager = new QNetworkAccessManager;
connect(m_networkAccessManager, SIGNAL(finished(QNetworkReply*)),
SLOT(fetchingFinished(QNetworkReply*)));
}
m_networkAccessManager->get(req);