Example #1
0
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);
			}
		}
Example #2
0
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);
	}
}