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