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 */