You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
4.0 KiB
141 lines
4.0 KiB
/*
|
|
Kopete Groupwise Protocol
|
|
chatroommanager.cpp - tracks our knowledge of server side chatrooms
|
|
|
|
Copyright (c) 2005 SUSE Linux Products GmbH http://www.suse.com
|
|
|
|
Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
|
|
|
|
*************************************************************************
|
|
* *
|
|
* This library is free software; you can redistribute it and/or *
|
|
* modify it under the terms of the GNU Lesser General Public *
|
|
* License as published by the Free Software Foundation; either *
|
|
* version 2 of the License, or (at your option) any later version. *
|
|
* *
|
|
*************************************************************************
|
|
*/
|
|
|
|
#include <qmap.h>
|
|
#include <qvaluelist.h>
|
|
|
|
#include <kdebug.h>
|
|
|
|
#include "client.h"
|
|
#include "tasks/chatcountstask.h"
|
|
#include "tasks/chatpropertiestask.h"
|
|
#include "tasks/searchchattask.h"
|
|
|
|
#include "chatroommanager.h"
|
|
|
|
ChatroomManager::ChatroomManager( Client * parent, const char *name)
|
|
: QObject(parent, name), m_client( parent ), m_replace( false )
|
|
{
|
|
}
|
|
|
|
ChatroomManager::~ChatroomManager()
|
|
{
|
|
}
|
|
|
|
void ChatroomManager::updateRooms()
|
|
{
|
|
getChatrooms( !m_rooms.isEmpty() );
|
|
}
|
|
|
|
GroupWise::ChatroomMap ChatroomManager::rooms()
|
|
{
|
|
return m_rooms;
|
|
}
|
|
|
|
void ChatroomManager::getChatrooms( bool refresh )
|
|
{
|
|
m_replace = !refresh;
|
|
SearchChatTask * sct = new SearchChatTask( m_client->rootTask() );
|
|
sct->search( ( refresh ? SearchChatTask::SinceLastSearch : SearchChatTask::FetchAll ) );
|
|
connect( sct, SIGNAL( finished() ), SLOT( slotGotChatroomList() ) );
|
|
sct->go( true );
|
|
}
|
|
|
|
void ChatroomManager::slotGotChatroomList()
|
|
{
|
|
kdDebug ( GROUPWISE_DEBUG_GLOBAL ) << k_funcinfo << endl;
|
|
SearchChatTask * sct = (SearchChatTask *)sender();
|
|
if ( sct )
|
|
{
|
|
if ( m_replace )
|
|
m_rooms.clear();
|
|
|
|
QValueList<ChatroomSearchResult> roomsFound = sct->results();
|
|
QValueList<ChatroomSearchResult>::Iterator it = roomsFound.begin();
|
|
const QValueList<ChatroomSearchResult>::Iterator end = roomsFound.end();
|
|
for ( ; it != end; ++it )
|
|
{
|
|
GroupWise::Chatroom c( *it );
|
|
m_rooms.insert( c.displayName, c );
|
|
}
|
|
}
|
|
emit updated();
|
|
}
|
|
|
|
void ChatroomManager::updateCounts()
|
|
{
|
|
ChatCountsTask * cct = new ChatCountsTask( m_client->rootTask() );
|
|
connect( cct, SIGNAL( finished() ), SLOT( slotGotChatCounts() ) );
|
|
cct->go( true );
|
|
}
|
|
|
|
void ChatroomManager::slotGotChatCounts()
|
|
{
|
|
ChatCountsTask * cct = (ChatCountsTask *)sender();
|
|
if ( cct )
|
|
{
|
|
QMap< QString, int > newCounts = cct->results();
|
|
QMap< QString, int >::iterator it = newCounts.begin();
|
|
const QMap< QString, int >::iterator end = newCounts.end();
|
|
|
|
for ( ; it != end; ++it )
|
|
if ( m_rooms.contains( it.key() ) )
|
|
m_rooms[ it.key() ].participantsCount = it.data();
|
|
}
|
|
emit updated();
|
|
}
|
|
|
|
void ChatroomManager::requestProperties( const QString & displayName )
|
|
{
|
|
if ( 0 /*m_rooms.contains( displayName ) */)
|
|
emit gotProperties( m_rooms[ displayName ] );
|
|
else
|
|
{
|
|
ChatPropertiesTask * cpt = new ChatPropertiesTask( m_client->rootTask() );
|
|
cpt->setChat( displayName );
|
|
connect ( cpt, SIGNAL( finished() ), SLOT( slotGotChatProperties() ) );
|
|
cpt->go( true );
|
|
}
|
|
}
|
|
|
|
void ChatroomManager::slotGotChatProperties()
|
|
{
|
|
kdDebug( GROUPWISE_DEBUG_GLOBAL ) << k_funcinfo << endl;
|
|
ChatPropertiesTask * cpt = (ChatPropertiesTask *)sender();
|
|
if ( cpt )
|
|
{
|
|
Chatroom room = m_rooms[ cpt->m_chat ];
|
|
room.displayName = cpt->m_chat;
|
|
room.ownerDN = cpt->m_ownerDn;
|
|
room.description = cpt->m_description;
|
|
room.disclaimer = cpt->m_disclaimer;
|
|
room.query = cpt->m_query;
|
|
room.archive = ( cpt->m_archive == "0" );
|
|
room.maxUsers = cpt->m_maxUsers.toInt();
|
|
room.topic = cpt->m_topic;
|
|
room.creatorDN = cpt->m_creatorDn;
|
|
room.createdOn = cpt->m_creationTime;
|
|
room.acl = cpt->m_aclEntries;
|
|
room.chatRights = cpt->m_rights;
|
|
m_rooms.insert( room.displayName, room );
|
|
emit gotProperties( room );
|
|
}
|
|
}
|
|
|
|
#include "chatroommanager.moc"
|