Renga/jabber/TalkManager.h

117 lines
5.6 KiB
C++

//////////////////////////////////////////////////
// Blabber [TalkManager.h]
// Handles the simultaneous talk sessions
// going on.
//////////////////////////////////////////////////
#ifndef TALK_MANAGER_H
#define TALK_MANAGER_H
#include <gloox/messagesessionhandler.h>
#include <gloox/message.h>
#include <gloox/mucroomhandler.h>
#include <gloox/pubsubresulthandler.h>
#include <map>
#include <string>
#include "GenericFunctions.h"
#include "ui/TalkView.h"
enum {
kWindowList = 'winl',
kAvatarUpdate = 'avup'
};
// FIXME could we replace this with MessageSessionHandler?
class TalkManager : public BHandler, public gloox::MessageSessionHandler,
gloox::MUCRoomHandler, gloox::MessageHandler, gloox::PubSub::ResultHandler {
public:
typedef std::map<gloox::MessageSession*, TalkView *> TalkMap;
typedef std::map<gloox::MUCRoom*, TalkView *> GroupMap;
public:
static TalkManager *Instance();
~TalkManager();
// TODO split out into CreateTalkSession / CreateGroupSession
void CreateTalkSession(const gloox::Message::MessageType type,
const gloox::JID* user,
std::string group_room, std::string group_username,
gloox::MessageSession* session, bool sound_on_new = false);
void* IsExistingWindowToGroup(std::string group_room);
void UpdateWindowTitles(const gloox::JID& user, BString newTitle);
void RemoveWindow(TalkView* view);
void Reset();
void GetAvatar(const gloox::JID& jid, const std::string& hash);
// MUC handlers from gloox
// FIXME probably each TalkView could register for these directly?
void handleMUCParticipantPresence(gloox::MUCRoom *room,
const gloox::MUCRoomParticipant participant,
const gloox::Presence &presence);
void handleMUCMessage(gloox::MUCRoom *room,
const gloox::Message &msg, bool priv);
bool handleMUCRoomCreation(gloox::MUCRoom *room);
void handleMUCSubject(gloox::MUCRoom *room,
const std::string &nick,
const std::string &subject);
void handleMUCInviteDecline(gloox::MUCRoom *room,
const gloox::JID &invitee,
const std::string &reason);
void handleMUCError(gloox::MUCRoom *room,
gloox::StanzaError error);
void handleMUCInfo(gloox::MUCRoom *room, int features,
const std::string &name,
const gloox::DataForm *infoForm);
void handleMUCItems(gloox::MUCRoom *room,
const gloox::Disco::ItemList &items);
// MessageSessionHandler hooks
void handleMessageSession(gloox::MessageSession* session) final;
// gloox::MessageHandler hooks
void handleMessage(const gloox::Message& msg, gloox::MessageSession* session) final;
// gloox::PubSub::ResultHandler hooks
virtual void handleItem(const gloox::JID&, const std::string&, const gloox::Tag*);
virtual void handleItems(const std::string&, const gloox::JID&, const std::string&, const gloox::PubSub::ItemList&, const gloox::Error*);
virtual void handleItemPublication(const std::string&, const gloox::JID&, const std::string&, const gloox::PubSub::ItemList&, const gloox::Error*);
virtual void handleItemDeletion(const std::string&, const gloox::JID&, const std::string&, const gloox::PubSub::ItemList&, const gloox::Error*);
virtual void handleSubscriptionResult(const std::string&, const gloox::JID&, const std::string&, const std::string&, const gloox::JID&, gloox::PubSub::SubscriptionType, const gloox::Error*);
virtual void handleUnsubscriptionResult(const std::string&, const gloox::JID&, const gloox::Error*);
virtual void handleSubscriptionOptions(const std::string&, const gloox::JID&, const gloox::JID&, const std::string&, const gloox::DataForm*, const std::string&, const gloox::Error*);
virtual void handleSubscriptionOptionsResult(const std::string&, const gloox::JID&, const gloox::JID&, const std::string&, const std::string&, const gloox::Error*);
virtual void handleSubscribers(const std::string&, const gloox::JID&, const std::string&, const gloox::PubSub::SubscriptionList&, const gloox::Error*);
virtual void handleSubscribersResult(const std::string&, const gloox::JID&, const std::string&, const gloox::PubSub::SubscriberList*, const gloox::Error*);
virtual void handleAffiliates(const std::string&, const gloox::JID&, const std::string&, const gloox::PubSub::AffiliateList*, const gloox::Error*);
virtual void handleAffiliatesResult(const std::string&, const gloox::JID&, const std::string&, const gloox::PubSub::AffiliateList*, const gloox::Error*);
virtual void handleNodeConfig(const std::string&, const gloox::JID&, const std::string&, const gloox::DataForm*, const gloox::Error*);
virtual void handleNodeConfigResult(const std::string&, const gloox::JID&, const std::string&, const gloox::Error*);
virtual void handleNodeCreation(const std::string&, const gloox::JID&, const std::string&, const gloox::Error*);
virtual void handleNodeDeletion(const std::string&, const gloox::JID&, const std::string&, const gloox::Error*);
virtual void handleNodePurge(const std::string&, const gloox::JID&, const std::string&, const gloox::Error*);
virtual void handleSubscriptions(const std::string&, const gloox::JID&, const gloox::PubSub::SubscriptionMap&, const gloox::Error*);
virtual void handleAffiliations(const std::string&, const gloox::JID&, const gloox::PubSub::AffiliationMap&, const gloox::Error*);
virtual void handleDefaultNodeConfig(const std::string&, const gloox::JID&, const gloox::DataForm*, const gloox::Error*);
protected:
TalkManager();
private:
static TalkManager *_instance;
BDirectory fAvatarCache;
// FIXME remove
TalkMap fTalkMap;
GroupMap fGroupMap;
};
#endif