1 /* Copyright (C) 2006 - 2014 Jan Kundrát <jkt@flaska.net>
2 
3    This file is part of the Trojita Qt IMAP e-mail client,
4    http://trojita.flaska.net/
5 
6    This program is free software; you can redistribute it and/or
7    modify it under the terms of the GNU General Public License as
8    published by the Free Software Foundation; either version 2 of
9    the License or (at your option) version 3 or any later version
10    accepted by the membership of KDE e.V. (or its successor approved
11    by the membership of KDE e.V.), which shall act as a proxy
12    defined in Section 14 of version 3 of the license.
13 
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18 
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.
21 */
22 
23 #include "CombinedCache.h"
24 #include "DiskPartCache.h"
25 #include "SQLCache.h"
26 
27 namespace Imap
28 {
29 namespace Mailbox
30 {
31 
CombinedCache(QObject * parent,const QString & name,const QString & cacheDir)32 CombinedCache::CombinedCache(QObject *parent, const QString &name, const QString &cacheDir):
33     AbstractCache(parent), name(name), cacheDir(cacheDir)
34 {
35     sqlCache = new SQLCache(this);
36     connect(sqlCache, &AbstractCache::error, this, &AbstractCache::error);
37     diskPartCache = new DiskPartCache(this, cacheDir);
38     connect(diskPartCache, &DiskPartCache::error, this, &AbstractCache::error);
39 }
40 
~CombinedCache()41 CombinedCache::~CombinedCache()
42 {
43 }
44 
open()45 bool CombinedCache::open()
46 {
47     return sqlCache->open(name, cacheDir + QLatin1String("/imap.cache.sqlite"));
48 }
49 
childMailboxes(const QString & mailbox) const50 QList<MailboxMetadata> CombinedCache::childMailboxes(const QString &mailbox) const
51 {
52     return sqlCache->childMailboxes(mailbox);
53 }
54 
childMailboxesFresh(const QString & mailbox) const55 bool CombinedCache::childMailboxesFresh(const QString &mailbox) const
56 {
57     return sqlCache->childMailboxesFresh(mailbox);
58 }
59 
setChildMailboxes(const QString & mailbox,const QList<MailboxMetadata> & data)60 void CombinedCache::setChildMailboxes(const QString &mailbox, const QList<MailboxMetadata> &data)
61 {
62     sqlCache->setChildMailboxes(mailbox, data);
63 }
64 
mailboxSyncState(const QString & mailbox) const65 SyncState CombinedCache::mailboxSyncState(const QString &mailbox) const
66 {
67     return sqlCache->mailboxSyncState(mailbox);
68 }
69 
setMailboxSyncState(const QString & mailbox,const SyncState & state)70 void CombinedCache::setMailboxSyncState(const QString &mailbox, const SyncState &state)
71 {
72     sqlCache->setMailboxSyncState(mailbox, state);
73 }
74 
uidMapping(const QString & mailbox) const75 Imap::Uids CombinedCache::uidMapping(const QString &mailbox) const
76 {
77     return sqlCache->uidMapping(mailbox);
78 }
79 
setUidMapping(const QString & mailbox,const Imap::Uids & seqToUid)80 void CombinedCache::setUidMapping(const QString &mailbox, const Imap::Uids &seqToUid)
81 {
82     sqlCache->setUidMapping(mailbox, seqToUid);
83 }
84 
clearUidMapping(const QString & mailbox)85 void CombinedCache::clearUidMapping(const QString &mailbox)
86 {
87     sqlCache->clearUidMapping(mailbox);
88 }
89 
clearAllMessages(const QString & mailbox)90 void CombinedCache::clearAllMessages(const QString &mailbox)
91 {
92     sqlCache->clearAllMessages(mailbox);
93     diskPartCache->clearAllMessages(mailbox);
94 }
95 
clearMessage(const QString mailbox,const uint uid)96 void CombinedCache::clearMessage(const QString mailbox, const uint uid)
97 {
98     sqlCache->clearMessage(mailbox, uid);
99     diskPartCache->clearMessage(mailbox, uid);
100 }
101 
msgFlags(const QString & mailbox,const uint uid) const102 QStringList CombinedCache::msgFlags(const QString &mailbox, const uint uid) const
103 {
104     return sqlCache->msgFlags(mailbox, uid);
105 }
106 
setMsgFlags(const QString & mailbox,const uint uid,const QStringList & flags)107 void CombinedCache::setMsgFlags(const QString &mailbox, const uint uid, const QStringList &flags)
108 {
109     sqlCache->setMsgFlags(mailbox, uid, flags);
110 }
111 
messageMetadata(const QString & mailbox,const uint uid) const112 AbstractCache::MessageDataBundle CombinedCache::messageMetadata(const QString &mailbox, const uint uid) const
113 {
114     return sqlCache->messageMetadata(mailbox, uid);
115 }
116 
setMessageMetadata(const QString & mailbox,const uint uid,const MessageDataBundle & metadata)117 void CombinedCache::setMessageMetadata(const QString &mailbox, const uint uid, const MessageDataBundle &metadata)
118 {
119     sqlCache->setMessageMetadata(mailbox, uid, metadata);
120 }
121 
messagePart(const QString & mailbox,const uint uid,const QByteArray & partId) const122 QByteArray CombinedCache::messagePart(const QString &mailbox, const uint uid, const QByteArray &partId) const
123 {
124     QByteArray res = sqlCache->messagePart(mailbox, uid, partId);
125     if (res.isEmpty()) {
126         res = diskPartCache->messagePart(mailbox, uid, partId);
127     }
128     return res;
129 }
130 
setMsgPart(const QString & mailbox,const uint uid,const QByteArray & partId,const QByteArray & data)131 void CombinedCache::setMsgPart(const QString &mailbox, const uint uid, const QByteArray &partId, const QByteArray &data)
132 {
133     if (data.size() < 1024 * 1024) {
134         sqlCache->setMsgPart(mailbox, uid, partId, data);
135     } else {
136         diskPartCache->setMsgPart(mailbox, uid, partId, data);
137     }
138 }
139 
forgetMessagePart(const QString & mailbox,const uint uid,const QByteArray & partId)140 void CombinedCache::forgetMessagePart(const QString &mailbox, const uint uid, const QByteArray &partId)
141 {
142     sqlCache->forgetMessagePart(mailbox, uid, partId);
143     diskPartCache->forgetMessagePart(mailbox, uid, partId);
144 }
145 
messageThreading(const QString & mailbox)146 QVector<Imap::Responses::ThreadingNode> CombinedCache::messageThreading(const QString &mailbox)
147 {
148     return sqlCache->messageThreading(mailbox);
149 }
150 
setMessageThreading(const QString & mailbox,const QVector<Imap::Responses::ThreadingNode> & threading)151 void CombinedCache::setMessageThreading(const QString &mailbox, const QVector<Imap::Responses::ThreadingNode> &threading)
152 {
153     sqlCache->setMessageThreading(mailbox, threading);
154 }
155 
setRenewalThreshold(const int days)156 void CombinedCache::setRenewalThreshold(const int days)
157 {
158     sqlCache->setRenewalThreshold(days);
159 }
160 
161 }
162 }
163