on xenial help sign in
Hook up with QNetworkConfigurationManager
commite15bd647a1a1d4dd5748e97511c67fefb824df27 authorMichal Hruby <michal.mhr@gmail.com> dateMon 30 Jun 2014, 17:42 (12 years ago) parent82f700e
2 files changed+51−9
src/CachingNetworkManagerFactory.cpp+33−4 src/CachingNetworkManagerFactory.h+18−5
src/CachingNetworkManagerFactory.cpp+33−4
@@ -20,15 +20,44 @@
2020#include <QNetworkDiskCache>
2121#include <QNetworkAccessManager>
2222#include <QStandardPaths>
23+#include <QThread>
24+#include <QNetworkConfigurationManager>
25+
26+CachingNetworkAccessManager::CachingNetworkAccessManager(QObject *parent)
27+ : QNetworkAccessManager(parent)
28+{
29+ m_networkManager = new QNetworkConfigurationManager(this);
30+
31+ QObject::connect(m_networkManager, &QNetworkConfigurationManager::onlineStateChanged, this, &CachingNetworkAccessManager::onlineStateChanged);
32+ m_isOnline = m_networkManager->isOnline();
33+}
34+
35+void CachingNetworkAccessManager::onlineStateChanged(bool isOnline)
36+{
37+ m_isOnline = isOnline;
38+}
39+
40+QNetworkReply* CachingNetworkAccessManager::createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData)
41+{
42+ if (!m_isOnline) {
43+ QNetworkRequest req(request);
44+ req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysCache);
45+ return QNetworkAccessManager::createRequest(op, req, outgoingData);
46+ }
47+
48+ return QNetworkAccessManager::createRequest(op, request, outgoingData);
49+}
2350
2451CachingNetworkManagerFactory::CachingNetworkManagerFactory()
25− : m_cache(new QNetworkDiskCache())
2652{
27− m_cache->setCacheDirectory(QString("%1/network").arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)));
2853}
2954
3055QNetworkAccessManager *CachingNetworkManagerFactory::create(QObject *parent) {
31− QNetworkAccessManager *manager = new QNetworkAccessManager(parent);
32− manager->setCache(m_cache);
56+ QNetworkAccessManager *manager = new CachingNetworkAccessManager(parent);
57+
58+ QNetworkDiskCache* cache = new QNetworkDiskCache(manager);
59+ cache->setCacheDirectory(QString("%1/network").arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)));
60+
61+ manager->setCache(cache);
3362 return manager;
3463}
src/CachingNetworkManagerFactory.h+18−5
@@ -19,9 +19,25 @@
1919#define CACHINGNETWORKMANAGERFACTORY_H
2020
2121#include <QQmlNetworkAccessManagerFactory>
22+#include <QNetworkAccessManager>
2223
23−class QNetworkDiskCache;
24−class QNetworkAccessManager;
24+class QNetworkConfigurationManager;
25+
26+class CachingNetworkAccessManager : public QNetworkAccessManager
27+{
28+public:
29+ CachingNetworkAccessManager(QObject *parent = 0);
30+
31+protected:
32+ QNetworkReply* createRequest(Operation op, const QNetworkRequest &req, QIODevice *outgoingData = 0) override;
33+
34+private Q_SLOTS:
35+ void onlineStateChanged(bool isOnline);
36+
37+private:
38+ QNetworkConfigurationManager* m_networkManager;
39+ bool m_isOnline;
40+};
2541
2642class CachingNetworkManagerFactory : public QQmlNetworkAccessManagerFactory
2743{
@@ -29,9 +45,6 @@ public:
2945 CachingNetworkManagerFactory();
3046
3147 QNetworkAccessManager *create(QObject *parent) override;
32−
33−private:
34− QNetworkDiskCache *m_cache;
3548};
3649
3750#endif // CACHINGNETWORKMANAGERFACTORY_H