Files
wino-mail-dtkqt/src/db/dao/mailitemdao.h
T
javier 68d237c873 feat: Pagination/virtualization (fetchMore) for EmailListModel
- 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
2026-08-25 22:20:06 +02:00

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);
};