OscarPrivacyEngine::OscarPrivacyEngine( OscarAccount* account, Type type )
: QObject(), m_type( type )
{
	m_client = account->engine();
	
	ContactMap contactMap;
	
	QList<OContact> contactList = m_client->ssiManager()->contactList();
	QList<OContact>::const_iterator it, cEnd;
	
	cEnd = contactList.constEnd();
	for ( it = contactList.constBegin(); it != cEnd; ++it )
	{
		QString contactId = ( *it ).name();
		
		OscarContact* oc = dynamic_cast<OscarContact*>( account->contacts().value( ( *it ).name() ) );
		if ( oc )
		{	//for better orientation in lists use displayName and id
			QString screenName( "%1 (%2)" );
			screenName = screenName.arg( oc->displayName(), contactId );
			contactMap.insert( contactId, screenName );
		}
		else
		{
			contactMap.insert( contactId, contactId );
		}
	}
	addAllContacts( contactMap );
	
	switch( type )
	{
	case Visible:
		contactList = m_client->ssiManager()->visibleList();
		break;
	case Invisible:
		contactList = m_client->ssiManager()->invisibleList();
		break;
	case Ignore:
		contactList = m_client->ssiManager()->ignoreList();
		break;
	}
	
	QSet<QString> tmpSet;
	
	cEnd = contactList.constEnd();
	for ( it = contactList.constBegin(); it != cEnd; ++it )
		tmpSet.insert( ( *it ).name() );
	
	addContacts( contactMap, tmpSet );
}
Пример #2
0
void ChannelContactModel::onGroupMembersChanged(const Tp::Contacts &groupMembersAdded,
                                             const Tp::Contacts &groupLocalPendingMembersAdded,
                                             const Tp::Contacts &groupRemotePendingMembersAdded,
                                             const Tp::Contacts &groupMembersRemoved,
                                             const Tp::Channel::GroupMemberChangeDetails &details)
{
    kDebug();

    Q_UNUSED(groupLocalPendingMembersAdded);
    Q_UNUSED(groupRemotePendingMembersAdded);
    Q_UNUSED(details);

    addContacts(groupMembersAdded);
    removeContacts(groupMembersRemoved);
}
Пример #3
0
void ChannelContactModel::setTextChannel(const Tp::TextChannelPtr &channel)
{
    //remove existing contacts in list
    beginRemoveRows(QModelIndex(), 0, m_contacts.size());
    m_contacts.clear();
    endRemoveRows();

    //add existing contacts from channel
    addContacts(channel->groupContacts());

    //monitor for future changes
    connect(channel.data(),
            SIGNAL(groupMembersChanged(Tp::Contacts,Tp::Contacts,Tp::Contacts,
                                       Tp::Contacts,Tp::Channel::GroupMemberChangeDetails)),
            SLOT(onGroupMembersChanged(Tp::Contacts,Tp::Contacts,Tp::Contacts,
                                     Tp::Contacts,Tp::Channel::GroupMemberChangeDetails)));
}
Пример #4
0
void ContactListModel::Private::commit()
{
    SLOW_TIMER(100);

    commitTimerStartTime = QDateTime();

    commitTimer->stop();
    if (operationQueue.isEmpty())
        return;

    QHashIterator<PsiContact*, int> it(operationQueue);

    QList<PsiContact*> contactsForAdding;
    QList<PsiContact*> contactsForUpdate;


    while (it.hasNext()) {
        it.next();
        PsiContact *contact = it.key();

        int operations = simplifiedOperationList(it.value());
        if (operations & AddContact) {
            Q_ASSERT(!monitoredContacts.contains(contact));
            if (monitoredContacts.contains(contact))
                continue;

            contactsForAdding << contact;

        }
        if (operations & RemoveContact)
            Q_ASSERT(false);
        if (operations & UpdateContact)
            contactsForUpdate << contact;
        if (operations & ContactGroupsChanged) {
            removeContact(contact);
            if (!contactsForAdding.contains(contact)) {
                contactsForAdding << contact;
            }
        }
    }

    addContacts(contactsForAdding);
    updateContacts(contactsForUpdate);
    operationQueue.clear();
}