1 // For license of this file, see <project-root-folder>/LICENSE.md. 2 3 #ifndef FEED_H 4 #define FEED_H 5 6 #include "services/abstract/rootitem.h" 7 8 #include "core/message.h" 9 #include "core/messagefilter.h" 10 11 #include <QPointer> 12 #include <QVariant> 13 14 // Base class for "feed" nodes. 15 class Feed : public RootItem { 16 Q_OBJECT 17 18 public: 19 20 // Specifies the auto-download strategy for the feed. 21 enum class AutoUpdateType { 22 DontAutoUpdate = 0, 23 DefaultAutoUpdate = 1, 24 SpecificAutoUpdate = 2 25 }; 26 27 // Specifies the actual "status" of the feed. 28 // For example if it has new messages, error 29 // occurred, and so on. 30 enum class Status { 31 Normal = 0, 32 NewMessages = 1, 33 NetworkError = 2, 34 AuthError = 3, 35 ParsingError = 4, 36 OtherError = 5 37 }; 38 39 Q_ENUM(Status) 40 41 explicit Feed(RootItem* parent = nullptr); 42 explicit Feed(const Feed& other); 43 explicit Feed(const QString& title, const QString& custom_id, const QIcon& icon, RootItem* parent = nullptr); 44 45 virtual QList<Message> undeletedMessages() const; 46 virtual QString additionalTooltip() const; 47 virtual bool markAsReadUnread(ReadStatus status); 48 virtual bool cleanMessages(bool clean_read_only); 49 virtual int countOfAllMessages() const; 50 virtual int countOfUnreadMessages() const; 51 virtual QVariantHash customDatabaseData() const; 52 virtual void setCustomDatabaseData(const QVariantHash& data); 53 virtual bool canBeEdited() const; 54 virtual bool editViaGui(); 55 virtual QVariant data(int column, int role) const; 56 57 void setCountOfAllMessages(int count_all_messages); 58 void setCountOfUnreadMessages(int count_unread_messages); 59 60 int autoUpdateInitialInterval() const; 61 void setAutoUpdateInitialInterval(int auto_update_interval); 62 63 AutoUpdateType autoUpdateType() const; 64 void setAutoUpdateType(AutoUpdateType auto_update_type); 65 66 int autoUpdateRemainingInterval() const; 67 void setAutoUpdateRemainingInterval(int auto_update_remaining_interval); 68 69 Status status() const; 70 QString statusString() const; 71 void setStatus(Feed::Status status, const QString& status_text = {}); 72 73 QString source() const; 74 void setSource(const QString& source); 75 76 void appendMessageFilter(MessageFilter* filter); 77 QList<QPointer<MessageFilter>> messageFilters() const; 78 void setMessageFilters(const QList<QPointer<MessageFilter>>& messageFilters); 79 void removeMessageFilter(MessageFilter* filter); 80 81 public slots: 82 virtual void updateCounts(bool including_total_count); 83 84 protected: 85 QString getAutoUpdateStatusDescription() const; 86 QString getStatusDescription() const; 87 88 private: 89 QString m_source; 90 Status m_status; 91 QString m_statusString; 92 AutoUpdateType m_autoUpdateType; 93 int m_autoUpdateInitialInterval{}; 94 int m_autoUpdateRemainingInterval{}; 95 int m_totalCount{}; 96 int m_unreadCount{}; 97 QList<QPointer<MessageFilter>> m_messageFilters; 98 }; 99 100 Q_DECLARE_METATYPE(Feed::AutoUpdateType) 101 102 #endif // FEED_H 103