Skip to content

Commit

Permalink
[contacts] Add primary and secondary contact name roles to SeasideSim…
Browse files Browse the repository at this point in the history
…pleContactModel
  • Loading branch information
blammit committed Nov 5, 2020
1 parent 17e7d9e commit b00bdd5
Show file tree
Hide file tree
Showing 8 changed files with 56 additions and 19 deletions.
12 changes: 12 additions & 0 deletions lib/seasidecache.cpp
Expand Up @@ -1174,6 +1174,18 @@ bool SeasideCache::isPopulated(FilterType filterType)
return instancePtr->m_populated & (1 << filterType);
}

QString SeasideCache::getPrimaryName(const QContact &contact)
{
const QContactName nameDetail = contact.detail<QContactName>();
return primaryName(nameDetail.firstName(), nameDetail.lastName());
}

QString SeasideCache::getSecondaryName(const QContact &contact)
{
const QContactName nameDetail = contact.detail<QContactName>();
return secondaryName(nameDetail.firstName(), nameDetail.lastName());
}

QString SeasideCache::primaryName(const QString &firstName, const QString &lastName)
{
if (firstName.isEmpty() && lastName.isEmpty()) {
Expand Down
3 changes: 3 additions & 0 deletions lib/seasidecache.h
Expand Up @@ -352,6 +352,9 @@ class CONTACTCACHE_EXPORT SeasideCache : public QObject
static const QList<quint32> *contacts(FilterType filterType);
static bool isPopulated(FilterType filterType);

static QString getPrimaryName(const QContact &contact);
static QString getSecondaryName(const QContact &contact);

static QString primaryName(const QString &firstName, const QString &lastName);
static QString secondaryName(const QString &firstName, const QString &lastName);

Expand Down
20 changes: 4 additions & 16 deletions src/seasideperson.cpp
Expand Up @@ -311,7 +311,7 @@ QString SeasidePerson::displayLabel() const

QString SeasidePerson::primaryName() const
{
QString primaryName(getPrimaryName(*mContact));
QString primaryName(SeasideCache::getPrimaryName(*mContact));
if (!primaryName.isEmpty())
return primaryName;

Expand All @@ -325,7 +325,7 @@ QString SeasidePerson::primaryName() const

QString SeasidePerson::secondaryName() const
{
return getSecondaryName(*mContact);
return SeasideCache::getSecondaryName(*mContact);
}

QString SeasidePerson::sectionBucket() const
Expand Down Expand Up @@ -1951,10 +1951,10 @@ void SeasidePerson::updateContactDetails(const QContact &oldContact)
if (oldContact.collectionId() != mContact->collectionId())
emitChangeSignal(&SeasidePerson::addressBookChanged);

if (getPrimaryName(oldContact) != primaryName())
if (SeasideCache::getPrimaryName(oldContact) != primaryName())
emitChangeSignal(&SeasidePerson::primaryNameChanged);

if (getSecondaryName(oldContact) != secondaryName())
if (SeasideCache::getSecondaryName(oldContact) != secondaryName())
emitChangeSignal(&SeasidePerson::secondaryNameChanged);

QContactName oldName = oldContact.detail<QContactName>();
Expand Down Expand Up @@ -2084,18 +2084,6 @@ void SeasidePerson::emitChangeSignals()
emit dataChanged();
}

QString SeasidePerson::getPrimaryName(const QContact &contact) const
{
const QContactName nameDetail = contact.detail<QContactName>();
return SeasideCache::primaryName(nameDetail.firstName(), nameDetail.lastName());
}

QString SeasidePerson::getSecondaryName(const QContact &contact) const
{
const QContactName nameDetail = contact.detail<QContactName>();
return SeasideCache::secondaryName(nameDetail.firstName(), nameDetail.lastName());
}

void SeasidePerson::ensureComplete()
{
if (SeasideCache::CacheItem *item = SeasideCache::itemById(SeasideCache::apiId(*mContact))) {
Expand Down
3 changes: 0 additions & 3 deletions src/seasideperson.h
Expand Up @@ -421,9 +421,6 @@ public slots:
void emitChangeSignals();
static QDateTime birthday(const QContact &contact);

QString getPrimaryName(const QContact &contact) const;
QString getSecondaryName(const QContact &contact) const;

enum AttachState {
Unattached = 0,
Attached,
Expand Down
20 changes: 20 additions & 0 deletions src/seasidesimplecontactmodel.cpp
Expand Up @@ -43,6 +43,8 @@ namespace {
const QByteArray idRole("id");
const QByteArray addressBookRole("addressBook");
const QByteArray displayLabelRole("displayLabel");
const QByteArray primaryNameRole("primaryName");
const QByteArray secondaryNameRole("secondaryName");

}

Expand Down Expand Up @@ -77,6 +79,8 @@ QHash<int, QByteArray> SeasideSimpleContactModel::roleNames() const
{
QHash<int, QByteArray> roles;
roles.insert(IdRole, idRole);
roles.insert(PrimaryNameRole, primaryNameRole);
roles.insert(SecondaryNameRole, secondaryNameRole);
roles.insert(DisplayLabelRole, displayLabelRole);
roles.insert(AddressBookRole, addressBookRole);
return roles;
Expand All @@ -98,6 +102,10 @@ QVariant SeasideSimpleContactModel::data(const QModelIndex &index, int role) con
switch (role) {
case IdRole:
return contactInfo.cacheItem->iid;
case PrimaryNameRole:
return getPrimaryName(contactInfo.cacheItem);
case SecondaryNameRole:
return SeasideCache::getSecondaryName(contactInfo.cacheItem->contact);
case DisplayLabelRole:
return contactInfo.cacheItem->displayLabel;
case AddressBookRole:
Expand Down Expand Up @@ -207,6 +215,12 @@ void SeasideSimpleContactModel::itemUpdated(SeasideCache::CacheItem *item)
if (m_contacts[i].cacheItem->iid != item->iid) {
roles << IdRole;
}
if (getPrimaryName(m_contacts[i].cacheItem) != getPrimaryName(item)) {
roles << PrimaryNameRole;
}
if (SeasideCache::getSecondaryName(m_contacts[i].cacheItem->contact) != SeasideCache::getSecondaryName(item->contact)) {
roles << SecondaryNameRole;
}
if (m_contacts[i].cacheItem->displayLabel != item->displayLabel) {
roles << DisplayLabelRole;
}
Expand All @@ -230,3 +244,9 @@ void SeasideSimpleContactModel::itemAboutToBeRemoved(SeasideCache::CacheItem *it
}
}
}

QString SeasideSimpleContactModel::getPrimaryName(SeasideCache::CacheItem *item)
{
const QString primaryName = SeasideCache::getPrimaryName(item->contact);
return !primaryName.isEmpty() ? primaryName : item->displayLabel;
}
4 changes: 4 additions & 0 deletions src/seasidesimplecontactmodel.h
Expand Up @@ -54,6 +54,8 @@ class SeasideSimpleContactModel : public QAbstractListModel,
public:
enum Role {
IdRole = Qt::UserRole,
PrimaryNameRole,
SecondaryNameRole,
DisplayLabelRole,
AddressBookRole,
};
Expand Down Expand Up @@ -93,6 +95,8 @@ class SeasideSimpleContactModel : public QAbstractListModel,
void setContactIds(const QList<int> &contactIds);
void updateOrReset(const QList<int> &newContactIds);

static QString getPrimaryName(SeasideCache::CacheItem *item);

QList<ContactInfo> m_contacts;
bool m_complete = false;
bool m_populated = false;
Expand Down
10 changes: 10 additions & 0 deletions tests/tst_seasidefilteredmodel/seasidecache.cpp
Expand Up @@ -417,6 +417,16 @@ bool SeasideCache::isPopulated(FilterType filterType)
return instancePtr->m_populated[filterType];
}

QString SeasideCache::getPrimaryName(const QContact &contact)
{
return QString();
}

QString SeasideCache::getSecondaryName(const QContact &contact)
{
return QString();
}

QString SeasideCache::primaryName(const QString &, const QString &)
{
return QString();
Expand Down
3 changes: 3 additions & 0 deletions tests/tst_seasidefilteredmodel/seasidecache.h
Expand Up @@ -208,6 +208,9 @@ class SeasideCache : public QObject
static const QList<quint32> *contacts(FilterType filterType);
static bool isPopulated(FilterType filterType);

static QString getPrimaryName(const QContact &contact);
static QString getSecondaryName(const QContact &contact);

static QString primaryName(const QString &firstName, const QString &lastName);
static QString secondaryName(const QString &firstName, const QString &lastName);

Expand Down

0 comments on commit b00bdd5

Please sign in to comment.