File indexing completed on 2024-11-24 04:53:08

0001 /* Copyright (C) 2006 - 2014 Jan Kundrát <jkt@flaska.net>
0002 
0003    This file is part of the Trojita Qt IMAP e-mail client,
0004    http://trojita.flaska.net/
0005 
0006    This program is free software; you can redistribute it and/or
0007    modify it under the terms of the GNU General Public License as
0008    published by the Free Software Foundation; either version 2 of
0009    the License or (at your option) version 3 or any later version
0010    accepted by the membership of KDE e.V. (or its successor approved
0011    by the membership of KDE e.V.), which shall act as a proxy
0012    defined in Section 14 of version 3 of the license.
0013 
0014    This program is distributed in the hope that it will be useful,
0015    but WITHOUT ANY WARRANTY; without even the implied warranty of
0016    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0017    GNU General Public License for more details.
0018 
0019    You should have received a copy of the GNU General Public License
0020    along with this program.  If not, see <http://www.gnu.org/licenses/>.
0021 */
0022 
0023 #ifndef IMAP_MODEL_DISKPARTCACHE_H
0024 #define IMAP_MODEL_DISKPARTCACHE_H
0025 
0026 #include <functional>
0027 #include <QString>
0028 
0029 namespace Imap
0030 {
0031 
0032 namespace Mailbox
0033 {
0034 
0035 /** @short Cache for storing big message parts using plain files on the disk
0036 
0037 The API is designed to be "similar" to the AbstractCache, but because certain
0038 operations do not really make much sense (like working with a list of mailboxes),
0039 we do not inherit from that abstract base class.
0040 */
0041 class DiskPartCache
0042 {
0043 public:
0044     /** @short Create the cache occupying the @arg cacheDir directory */
0045     explicit DiskPartCache(const QString &cacheDir);
0046 
0047     /** @short Delete all data of message parts which belongs to that particular mailbox */
0048     void clearAllMessages(const QString &mailbox);
0049     /** @short Delete all data for a particular message in the given mailbox */
0050     void clearMessage(const QString mailbox, const uint uid);
0051 
0052     /** @short Return data for some message part, or a null QByteArray if not found */
0053     QByteArray messagePart(const QString &mailbox, const uint uid, const QByteArray &partId) const;
0054     /** @short Store the data for a specified message part */
0055     void setMsgPart(const QString &mailbox, const uint uid, const QByteArray &partId, const QByteArray &data);
0056     void forgetMessagePart(const QString &mailbox, const uint uid, const QByteArray &partId);
0057 
0058     /** @short Inform about runtime failures */
0059     void setErrorHandler(const std::function<void(const QString &)> &handler);
0060 
0061 private:
0062     /** @short Return the directory which should be used as a storage dir for a particular mailbox */
0063     QString dirForMailbox(const QString &mailbox) const;
0064 
0065     QString fileForPart(const QString &mailbox, const uint uid, const QByteArray &partId) const;
0066 
0067     /** @short The root directory for all caching */
0068     QString cacheDir;
0069 
0070 protected:
0071     std::function<void(const QString&)> m_errorHandler;
0072 };
0073 
0074 }
0075 
0076 }
0077 
0078 #endif /* IMAP_MODEL_DISKPARTCACHE_H */