]> git.sur5r.net Git - minitube/blob - src/ytjs/ytjsnamfactory.cpp
New upstream version 3.6.1
[minitube] / src / ytjs / ytjsnamfactory.cpp
1 #include "ytjsnamfactory.h"
2
3 YTJSDiskCache::YTJSDiskCache(QObject *parent) : QNetworkDiskCache(parent) {}
4
5 void YTJSDiskCache::updateMetaData(const QNetworkCacheMetaData &meta) {
6     auto meta2 = fixMetadata(meta);
7     QNetworkDiskCache::updateMetaData(meta2);
8 }
9
10 QIODevice *YTJSDiskCache::prepare(const QNetworkCacheMetaData &meta) {
11     auto meta2 = fixMetadata(meta);
12     return QNetworkDiskCache::prepare(meta2);
13 }
14
15 QNetworkCacheMetaData YTJSDiskCache::fixMetadata(const QNetworkCacheMetaData &meta) {
16     auto meta2 = meta;
17
18     auto now = QDateTime::currentDateTimeUtc();
19     if (meta2.expirationDate() < now) {
20         meta2.setExpirationDate(now.addSecs(3600));
21     }
22
23     // Remove caching headers
24     auto headers = meta2.rawHeaders();
25     for (auto i = headers.begin(); i != headers.end(); ++i) {
26         // qDebug() << i->first << i->second;
27         if (i->first == "Cache-Control" || i->first == "Expires") {
28             qDebug() << "Removing" << i->first << i->second;
29             headers.erase(i);
30         }
31     }
32     meta2.setRawHeaders(headers);
33
34     return meta2;
35 }
36
37 YTJSNAM::YTJSNAM(QObject *parent) : QNetworkAccessManager(parent) {
38     auto cache = new YTJSDiskCache(this);
39     cache->setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) +
40                              "/ytjs");
41     setCache(cache);
42     setRedirectPolicy(QNetworkRequest::NoLessSafeRedirectPolicy);
43 }
44
45 QNetworkReply *YTJSNAM::createRequest(QNetworkAccessManager::Operation op,
46                                       const QNetworkRequest &request,
47                                       QIODevice *outgoingData) {
48     auto req2 = request;
49     req2.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
50     qDebug() << req2.url();
51     return QNetworkAccessManager::createRequest(op, req2, outgoingData);
52 }
53
54 QNetworkAccessManager *YTJSNAMFactory::create(QObject *parent) {
55     qDebug() << "Creating NAM";
56     return new YTJSNAM(parent);
57 }