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