2026-05-17 01:52:34 +02:00
|
|
|
#ifndef EMAILLISTMODEL_H
|
|
|
|
|
#define EMAILLISTMODEL_H
|
|
|
|
|
|
2026-08-19 09:43:03 +02:00
|
|
|
#include <QAbstractTableModel>
|
2026-05-17 01:52:34 +02:00
|
|
|
#include <QHash>
|
|
|
|
|
#include <QByteArray>
|
|
|
|
|
#include "../db/dao/mailitemdao.h"
|
|
|
|
|
|
2026-08-19 09:43:03 +02:00
|
|
|
class EmailListModel : public QAbstractTableModel
|
2026-05-17 01:52:34 +02:00
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
public:
|
|
|
|
|
explicit EmailListModel(QObject *parent = nullptr);
|
|
|
|
|
~EmailListModel() override = default;
|
|
|
|
|
|
|
|
|
|
enum EmailRoles {
|
|
|
|
|
IdRole = Qt::UserRole + 1,
|
|
|
|
|
SubjectRole,
|
|
|
|
|
SenderRole,
|
|
|
|
|
RecipientRole,
|
|
|
|
|
DateRole,
|
|
|
|
|
ReadRole,
|
|
|
|
|
FlaggedRole,
|
|
|
|
|
AttachmentsRole,
|
|
|
|
|
FileIdRole,
|
|
|
|
|
SizeRole,
|
|
|
|
|
MessageIdRole,
|
|
|
|
|
SenderInitialRole // computed from sender
|
|
|
|
|
};
|
|
|
|
|
|
2026-08-19 09:43:03 +02:00
|
|
|
// Column indices (match role order for simplicity)
|
|
|
|
|
enum Columns {
|
|
|
|
|
ColSubject = 0,
|
|
|
|
|
ColSender = 1,
|
|
|
|
|
ColDate = 2,
|
|
|
|
|
ColCount = 3 // number of visible columns
|
|
|
|
|
};
|
|
|
|
|
|
2026-05-17 01:52:34 +02:00
|
|
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
2026-08-19 09:43:03 +02:00
|
|
|
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
2026-05-17 01:52:34 +02:00
|
|
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
2026-08-19 09:43:03 +02:00
|
|
|
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
|
2026-05-17 01:52:34 +02:00
|
|
|
QHash<int, QByteArray> roleNames() const override;
|
|
|
|
|
|
|
|
|
|
// Set the folderId to filter emails; -1 means all folders
|
|
|
|
|
void setFolderId(int folderId);
|
|
|
|
|
// Refresh the model from the database based on current folderId
|
|
|
|
|
void refresh();
|
2026-08-23 14:49:58 +02:00
|
|
|
// Set search filter on the model
|
|
|
|
|
void setSearchFilter(const QString &filter);
|
|
|
|
|
// Set filter flags
|
|
|
|
|
void setShowUnreadOnly(bool show);
|
|
|
|
|
void setShowFlaggedOnly(bool show);
|
|
|
|
|
void setShowHasAttachments(bool show);
|
2026-05-17 01:52:34 +02:00
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
QVector<MailItem> m_emails;
|
|
|
|
|
int m_folderId{-1}; // -1 means all folders
|
2026-08-23 14:49:58 +02:00
|
|
|
QString m_searchFilter;
|
|
|
|
|
bool m_unreadOnly{false};
|
|
|
|
|
bool m_flaggedOnly{false};
|
|
|
|
|
bool m_hasAttachments{false};
|
2026-05-17 01:52:34 +02:00
|
|
|
};
|
|
|
|
|
#endif // EMAILLISTMODEL_H
|