]> git.sur5r.net Git - minitube/blob - lib/http/src/cachedhttp.h
4ce5e1294f1dfdbf8c4c0f0e8639182815a2dbbc
[minitube] / lib / http / src / cachedhttp.h
1 #ifndef CACHEDHTTP_H
2 #define CACHEDHTTP_H
3
4 #include "http.h"
5
6 class LocalCache;
7
8 class CachedHttp : public Http {
9 public:
10     CachedHttp(Http &http = Http::instance(), const char *name = "http");
11     void setMaxSeconds(uint seconds);
12     void setMaxSize(uint maxSize);
13     void setCachePostRequests(bool value) { cachePostRequests = value; }
14     void setIgnoreHostname(bool value) { ignoreHostname = value; }
15     auto &getValidators() { return validators; };
16     HttpReply *request(const HttpRequest &req);
17
18 private:
19     QByteArray requestHash(const HttpRequest &req);
20
21     Http &http;
22     LocalCache *cache;
23     bool cachePostRequests;
24     bool ignoreHostname = false;
25
26     /// Mapping is MIME -> validating function
27     /// Use * as MIME to define a catch-all validator
28     QMap<QByteArray, std::function<bool(const HttpReply &)>> validators;
29 };
30
31 class CachedHttpReply : public HttpReply {
32     Q_OBJECT
33
34 public:
35     CachedHttpReply(const QByteArray &body, const HttpRequest &req);
36     QUrl url() const { return req.url; }
37     int statusCode() const { return 200; }
38     QByteArray body() const;
39
40 private slots:
41     void emitSignals();
42
43 private:
44     const QByteArray bytes;
45     const HttpRequest req;
46 };
47
48 class WrappedHttpReply : public HttpReply {
49     Q_OBJECT
50
51 public:
52     WrappedHttpReply(CachedHttp &cachedHttp,
53                      LocalCache *cache,
54                      const QByteArray &key,
55                      HttpReply *httpReply);
56     QUrl url() const { return httpReply->url(); }
57     int statusCode() const { return httpReply->statusCode(); }
58     QByteArray body() const { return httpReply->body(); }
59
60 private slots:
61     void originFinished(const HttpReply &reply);
62
63 private:
64     CachedHttp &cachedHttp;
65     LocalCache *cache;
66     QByteArray key;
67     HttpReply *httpReply;
68 };
69
70 #endif // CACHEDHTTP_H