// For license of this file, see /LICENSE.md. #ifndef CACHEFORSERVICEROOT_H #define CACHEFORSERVICEROOT_H #include "services/abstract/serviceroot.h" #include #include #include class QMutex; struct CacheSnapshot { QMap m_cachedLabelAssignments; QMap m_cachedLabelDeassignments; QMap m_cachedStatesRead; QMap> m_cachedStatesImportant; }; class CacheForServiceRoot { public: explicit CacheForServiceRoot(); void addLabelsAssignmentsToCache(const QList& ids_of_messages, Label* lbl, bool assign); void addMessageStatesToCache(const QList& ids_of_messages, RootItem::Importance importance); void addMessageStatesToCache(const QStringList& ids_of_messages, RootItem::ReadStatus read); // Persistently saves/loads cached changes to/from file. // NOTE: The whole cache is cleared after save is done and before load is done. void saveCacheToFile(int acc_id); void loadCacheFromFile(int acc_id); virtual void saveAllCachedData(bool async = true) = 0; protected: CacheSnapshot takeMessageCache(); QScopedPointer m_cacheSaveMutex; // Map where key is label's custom ID and value is list of message custom IDs // which we want to assign to the label. QMap m_cachedLabelAssignments; // Map where key is label's custom ID and value is list of message custom IDs // which we want to remove from the label assignment. QMap m_cachedLabelDeassignments; // Map of cached read/unread changes. QMap m_cachedStatesRead; // Map of cached important/unimportant changes. QMap> m_cachedStatesImportant; private: bool isEmpty() const; void clearCache(); }; #endif // CACHEFORSERVICEROOT_H