data/CollectedAddressStore.h
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include <QDateTime> | ||
| 4 | #include <QList> | ||
| 5 | #include <QSqlDatabase> | ||
| 6 | #include <QString> | ||
| 7 | |||
| 8 | #include <functional> | ||
| 9 | |||
| 10 | // Collected addresses and send counts (Sprint 97 S97.1.6, CONTACT-COLLECTED, | ||
| 11 | // decision D-4) on a contacts.db connection owned by the caller. | ||
| 12 | // | ||
| 13 | // Every recipient of a successfully sent mail counts once in address_usage | ||
| 14 | // (completion ranking for cards and collected addresses alike; survives | ||
| 15 | // re-syncs). An address that belongs to no card is also kept in | ||
| 16 | // collected_addresses: used by the completion, listed under "Collected | ||
| 17 | // addresses", never synced and never mixed into "All contacts". An address | ||
| 18 | // that later gets a card simply stops being listed as collected. | ||
| 19 | class CollectedAddressStore { | ||
| 20 | public: | ||
| 21 | struct Recipient { | ||
| 22 | QString name; | ||
| 23 | QString address; | ||
| 24 | }; | ||
| 25 | |||
| 26 | 30 | explicit CollectedAddressStore(QSqlDatabase database) : m_db(std::move(database)) {} | |
| 27 | |||
| 28 | // Records the recipients of one sent message (each address once). | ||
| 29 | // collect = false only counts usage of addresses that have a card. | ||
| 30 | bool recordSent(const QList<Recipient> &recipients, bool collect, const QDateTime &now = {}); | ||
| 31 | // "Forget collected addresses": removes every collected address and the | ||
| 32 | // usage of addresses that belong to no card. | ||
| 33 | bool forgetAll(); | ||
| 34 | // Context menu "Forget" on one collected address. | ||
| 35 | bool forget(const QString &address); | ||
| 36 | int collectedCount() const; | ||
| 37 | |||
| 38 | private: | ||
| 39 | bool inTransaction(const std::function<bool()> &write); | ||
| 40 | QSqlDatabase m_db; | ||
| 41 | }; | ||
| 42 |