@@ -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}