void ContactListFrontModel::onServiceChanged(const QByteArray &name, QObject *newObject, QObject *oldObject) { Q_UNUSED(newObject); Q_UNUSED(oldObject); if (name == m_comparator.name()) { connect(m_comparator, SIGNAL(contactChanged(qutim_sdk_0_3::Contact*)), sourceModel(), SLOT(onContactChanged(qutim_sdk_0_3::Contact*))); invalidate(); } else if (name == m_model.name()) { ContactListBaseModel *oldModel = qobject_cast<ContactListBaseModel*>(oldObject); ContactListBaseModel *newModel = qobject_cast<ContactListBaseModel*>(newObject); if (newModel) { connect(newModel, SIGNAL(tagsChanged(QStringList)), this, SIGNAL(tagsChanged(QStringList))); connect(m_comparator, SIGNAL(contactChanged(qutim_sdk_0_3::Contact*)), newModel, SLOT(onContactChanged(qutim_sdk_0_3::Contact*))); foreach(Protocol *proto, Protocol::all()) { connect(proto, SIGNAL(accountCreated(qutim_sdk_0_3::Account*)), newModel, SLOT(onAccountCreated(qutim_sdk_0_3::Account*))); connect(proto, SIGNAL(accountRemoved(qutim_sdk_0_3::Account*)), newModel, SLOT(onAccountRemoved(qutim_sdk_0_3::Account*))); foreach(Account *account, proto->accounts()) newModel->onAccountCreated(account, !oldModel); } if (oldModel) { QSet<Contact*> contacts; oldModel->findContacts(contacts, oldModel->rootNode()); foreach (Contact *contact, contacts) newModel->addContact(contact); } }
void ContactListFrontModel::onServiceChanged(const QByteArray &name, QObject *newObject, QObject *oldObject) { Q_UNUSED(newObject); Q_UNUSED(oldObject); if (name == m_comparator.name()) { connect(m_comparator, SIGNAL(contactChanged(qutim_sdk_0_3::Contact*)), sourceModel(), SLOT(onContactChanged(qutim_sdk_0_3::Contact*))); invalidate(); } else if (name == m_model.name()) { ContactListBaseModel *oldModel = qobject_cast<ContactListBaseModel*>(oldObject); ContactListBaseModel *newModel = qobject_cast<ContactListBaseModel*>(newObject); if (newModel) { connect(newModel, &ContactListBaseModel::tagsChanged, this, &ContactListFrontModel::tagsChanged); connect(m_comparator, SIGNAL(contactChanged(qutim_sdk_0_3::Contact*)), newModel, SLOT(onContactChanged(qutim_sdk_0_3::Contact*))); AccountManager *manager = AccountManager::instance(); connect(manager, &AccountManager::accountAdded, newModel, [newModel] (Account *account) { newModel->onAccountCreated(account); }); connect(manager, &AccountManager::accountRemoved, newModel, &ContactListBaseModel::onAccountRemoved); foreach (Account *account, manager->accounts()) newModel->onAccountCreated(account, !oldModel); if (oldModel) { QSet<Contact*> contacts; oldModel->findContacts(contacts, oldModel->rootNode()); foreach (Contact *contact, contacts) newModel->addContact(contact); } } setSourceModel(newModel); } else if (name == m_metaManager.name()) { if (MetaContactManager *oldManager = qobject_cast<MetaContactManager*>(oldObject)) m_model->onAccountRemoved(oldManager); if (m_metaManager) m_model->onAccountCreated(m_metaManager); } }