- EmailListModel: QAbstractListModel with canFetchMore/fetchMore * Batch loading (default 50 emails per fetch) * Total count query for scrollbar * TotalCountChanged signal * Paginated DB queries: findAllPaginated, findByFolderIdPaginated * Count queries: countAll, countByFolderId - MailItemDao: new paginated methods * findAllPaginated(offset, limit, filters...) * findByFolderIdPaginated(folderId, offset, limit, filters...) * countAll(filters...), countByFolderId(folderId, filters...) - MailListView: scroll-triggered fetchMore * Connects verticalScrollBar valueChanged on both TreeView and ListView * Triggers fetchMore at 90% scroll threshold * onRowsInserted updates EmailTreeModel when new emails arrive * Works in both normal (tree) and compact (list) views
41 lines
1.8 KiB
C++
41 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include "../databasemanager.h"
|
|
#include "../../core/mailitem.h"
|
|
#include <QVector>
|
|
#include <optional>
|
|
|
|
struct StoredAttachmentRecord
|
|
{
|
|
QString fileName;
|
|
QString mimeType;
|
|
QString contentId;
|
|
qint64 size{0};
|
|
QString storedPath;
|
|
};
|
|
|
|
class MailItemDao
|
|
{
|
|
public:
|
|
static bool insert(MailItem& item);
|
|
static bool upsert(MailItem& item);
|
|
static bool update(const MailItem& item);
|
|
static bool remove(qint64 id);
|
|
static std::optional<MailItem> findById(qint64 id);
|
|
static QVector<MailItem> findAll();
|
|
static QVector<MailItem> findByFolderId(int folderId);
|
|
static QVector<MailItem> findByFolderIdSinceUid(int folderId, qint64 sinceUid);
|
|
static std::optional<qint64> maxUidForFolder(int folderId);
|
|
static QVector<qint64> getUidsForFolder(int folderId);
|
|
static QVector<qint64> uidsForFolder(int folderId);
|
|
static std::optional<MailItem> findByUid(int folderId, qint64 uid);
|
|
static bool removeByUid(int folderId, qint64 uid);
|
|
static bool replaceAttachments(qint64 mailItemId, const QVector<StoredAttachmentRecord>& attachments);
|
|
static QVector<StoredAttachmentRecord> attachmentsForMail(qint64 mailItemId);
|
|
static int countUnreadByFolderId(int folderId);
|
|
static int countAll(const QString& searchFilter, bool unreadOnly, bool flaggedOnly, bool hasAttachments);
|
|
static int countByFolderId(int folderId, const QString& searchFilter, bool unreadOnly, bool flaggedOnly, bool hasAttachments);
|
|
static QVector<MailItem> findAllPaginated(int offset, int limit, const QString& searchFilter, bool unreadOnly, bool flaggedOnly, bool hasAttachments);
|
|
static QVector<MailItem> findByFolderIdPaginated(int folderId, int offset, int limit, const QString& searchFilter, bool unreadOnly, bool flaggedOnly, bool hasAttachments);
|
|
};
|