diff --git a/src/account.cpp b/src/account.cpp index 5b26c3f66cb39c7d43e7586f544a4d5447dabf4a..29e3c567a069be352782b0ac4ba84cc486565d37 100644 --- a/src/account.cpp +++ b/src/account.cpp @@ -708,7 +708,7 @@ bool Account::needsMigration() const * return all ContactsMethod from @this account * @return Account::ContactMethods a.k.a. QVector<ContactMethod*> */ -const Account::ContactMethods& +Account::ContactMethods& Account::getContacts() const { return d_ptr->m_NumbersFromDaemon; diff --git a/src/account.h b/src/account.h index 11b0f71804178bc45cdb658ddf0f22b379192262..d360780083070a56039a1585c9fbb79f67c8bdf3 100644 --- a/src/account.h +++ b/src/account.h @@ -473,7 +473,7 @@ class LIB_EXPORT Account : public ItemBase { uint trimesterCallCount () const; time_t lastUsed () const; - const ContactMethods& getContacts () const; + ContactMethods& getContacts () const; Q_INVOKABLE QVariant roleData ( int role ) const; Q_INVOKABLE bool supportScheme ( URI::SchemeType type ) const; diff --git a/src/accountmodel.cpp b/src/accountmodel.cpp index af87936a6255b45450152a6462034a532b0ae211..d8f5a6776a4e7f0858fb8284d8425f899832e0d2 100644 --- a/src/accountmodel.cpp +++ b/src/accountmodel.cpp @@ -54,6 +54,7 @@ #include "private/vcardutils.h" #include "phonedirectorymodel.h" #include "bannedcontactmodel.h" +#include "contactmethod.h" QHash<QByteArray,AccountPlaceHolder*> AccountModelPrivate::m_hsPlaceHolder; @@ -97,6 +98,8 @@ void AccountModelPrivate::init() &AccountModelPrivate::slotExportOnRingEnded, Qt::QueuedConnection); connect(&configurationManager, &ConfigurationManagerInterface::migrationEnded, this, &AccountModelPrivate::slotMigrationEnded, Qt::QueuedConnection); + connect(&configurationManager, &ConfigurationManagerInterface::contactAdded, this, + &AccountModelPrivate::slotContactAdded, Qt::QueuedConnection); connect(&configurationManager, &ConfigurationManagerInterface::contactRemoved, this, &AccountModelPrivate::slotContactRemoved, Qt::QueuedConnection); } @@ -308,7 +311,7 @@ QList<Account*> AccountModel::accountsToMigrate() const /** * returns a vector of contacts from the daemon * @param account the account to query - * @return contacts a QVector<QMap<QString, QString>>, keywords : "id" and "added" + * @return contacts a QVector<QMap<QString, QString>> */ QVector<QMap<QString, QString>> AccountModel::getContacts(const Account* account) const @@ -532,6 +535,21 @@ AccountModelPrivate::slotMigrationEnded(const QString& accountId, const QString& emit a->migrationEnded(status); } + +/// slot function used with ConfigurationManagerInterface::contactAdded signal +void +AccountModelPrivate::slotContactAdded(const QString &accountID, const QString &uri, bool confirmed) +{ + if (auto account = q_ptr->getById(accountID.toLatin1())) { + if (auto cm = PhoneDirectoryModel::instance().getNumber(uri, account)) { + cm->setConfirmed(confirmed); + auto& daemon_contacts = account->getContacts(); + if (not daemon_contacts.contains(cm)) + daemon_contacts << cm; + } + } +} + /** * slot function used with ConfigurationManagerInterface::contactRemoved signal */ diff --git a/src/private/accountmodel_p.h b/src/private/accountmodel_p.h index 076cfaded363670885cf0b59549546d2c3ae9374..fa21fa3d30d7cbdb2ec2dffa6523ebfbfd34f9a8 100644 --- a/src/private/accountmodel_p.h +++ b/src/private/accountmodel_p.h @@ -75,5 +75,6 @@ public Q_SLOTS: void slotKownDevicesChanged(const QString& accountId, const MapStringString& devices); void slotExportOnRingEnded(const QString& accountId, int status, const QString& pin); void slotMigrationEnded(const QString& accountId, const QString& result); + void slotContactAdded(const QString &accountID, const QString &uri, bool confirmed); void slotContactRemoved(const QString &accountID, const QString &uri, bool banned); };