rssguard/src/librssguard/core/messageobject.h
2020-12-10 12:20:51 +01:00

130 lines
4.4 KiB
C++
Executable File

// For license of this file, see <project-root-folder>/LICENSE.md.
#ifndef MESSAGEOBJECT_H
#define MESSAGEOBJECT_H
#include <QObject>
#include "services/abstract/label.h"
class MessageObject : public QObject {
Q_OBJECT
Q_PROPERTY(QList<Label*> assignedLabels READ assignedLabels)
Q_PROPERTY(QList<Label*> availableLabels READ availableLabels)
Q_PROPERTY(QString feedCustomId READ feedCustomId)
Q_PROPERTY(int accountId READ accountId)
Q_PROPERTY(QString title READ title WRITE setTitle)
Q_PROPERTY(QString url READ url WRITE setUrl)
Q_PROPERTY(QString author READ author WRITE setAuthor)
Q_PROPERTY(QString contents READ contents WRITE setContents)
Q_PROPERTY(QDateTime created READ created WRITE setCreated)
Q_PROPERTY(bool isRead READ isRead WRITE setIsRead)
Q_PROPERTY(bool isImportant READ isImportant WRITE setIsImportant)
Q_PROPERTY(bool alreadyStored READ alreadyStored)
public:
enum class FilteringAction {
// Message is normally accepted and stored in DB or updated.
Accept = 1,
// Message is ignored and will not be stored in DB but is not purge if it already exists.
Ignore = 2,
// Message is purged from DB if it already exists.
Purge = 4
};
Q_ENUM(FilteringAction)
enum class DuplicationAttributeCheck {
// Message with same title in DB.
SameTitle = 1,
// Message with same URL in DB.
SameUrl = 2,
// Message with same author in DB.
SameAuthor = 4,
// Messages with same creation date in DB.
SameDateCreated = 8,
// Compare with all messages from the account not only with messages from same feed.
// Note that this value must be used via bitwise OR with other values,
// for example 2 | 4 | 16.
AllFeedsSameAccount = 16
};
Q_ENUM(DuplicationAttributeCheck)
explicit MessageObject(QSqlDatabase* db, const QString& feed_custom_id,
int account_id, QList<Label*> available_labels,
QObject* parent = nullptr);
void setMessage(Message* message);
// Check if message is duplicate with another messages in DB.
// Parameter "attribute_check" is DuplicationAttributeCheck enum
// value casted to int.
Q_INVOKABLE bool isDuplicateWithAttribute(DuplicationAttributeCheck attribute_check) const;
// Adds given label to list of assigned labels to this message.
// Returns true if label was assigned now or if the message already has it assigned.
Q_INVOKABLE bool assignLabel(QString label_custom_id) const;
// Removes given label from list of assigned labels of this message.
// Returns true if label was now removed or if it is not assigned to the message at all.
Q_INVOKABLE bool deassignLabel(QString label_custom_id) const;
// Returns list of assigned and available messages.
QList<Label*> assignedLabels() const;
QList<Label*> availableLabels() const;
bool alreadyStored() const;
// Generic Message's properties bindings.
QString feedCustomId() const;
int accountId() const;
QString title() const;
void setTitle(const QString& title);
QString url() const;
void setUrl(const QString& url);
QString author() const;
void setAuthor(const QString& author);
QString contents() const;
void setContents(const QString& contents);
QDateTime created() const;
void setCreated(const QDateTime& created);
bool isRead() const;
void setIsRead(bool is_read);
bool isImportant() const;
void setIsImportant(bool is_important);
private:
QSqlDatabase* m_db;
QString m_feedCustomId;
int m_accountId;
Message* m_message;
QList<Label*> m_availableLabels;
};
inline MessageObject::DuplicationAttributeCheck operator|(MessageObject::DuplicationAttributeCheck lhs,
MessageObject::DuplicationAttributeCheck rhs) {
return static_cast<MessageObject::DuplicationAttributeCheck>(int(lhs) | int(rhs));
}
inline MessageObject::DuplicationAttributeCheck operator&(MessageObject::DuplicationAttributeCheck lhs,
MessageObject::DuplicationAttributeCheck rhs) {
return static_cast<MessageObject::DuplicationAttributeCheck>(int(lhs) & int(rhs));
}
#endif // MESSAGEOBJECT_H