Send MUC participants on join, and send participants' status
This commit is contained in:
parent
ad1c7b5782
commit
b66ea722b0
|
@ -11,6 +11,7 @@
|
||||||
#include <File.h>
|
#include <File.h>
|
||||||
#include <FindDirectory.h>
|
#include <FindDirectory.h>
|
||||||
#include <List.h>
|
#include <List.h>
|
||||||
|
#include <StringList.h>
|
||||||
|
|
||||||
#include <CayaProtocolMessages.h>
|
#include <CayaProtocolMessages.h>
|
||||||
|
|
||||||
|
@ -137,12 +138,13 @@ JabberHandler::Process(BMessage* msg)
|
||||||
case IM_JOIN_ROOM: {
|
case IM_JOIN_ROOM: {
|
||||||
BString chat_id = msg->FindString("chat_id");
|
BString chat_id = msg->FindString("chat_id");
|
||||||
BString join_id = chat_id;
|
BString join_id = chat_id;
|
||||||
join_id << "/" << fUsername;
|
join_id << "/" << fNick;
|
||||||
|
|
||||||
gloox::MUCRoom* room =
|
gloox::MUCRoom* room =
|
||||||
new gloox::MUCRoom(fClient, gloox::JID(join_id.String()),
|
new gloox::MUCRoom(fClient, gloox::JID(join_id.String()),
|
||||||
this, this);
|
this, this);
|
||||||
room->join();
|
room->join();
|
||||||
|
room->getRoomItems();
|
||||||
|
|
||||||
fRooms.AddItem(chat_id, room);
|
fRooms.AddItem(chat_id, room);
|
||||||
break;
|
break;
|
||||||
|
@ -213,6 +215,7 @@ JabberHandler::UpdateSettings(BMessage* msg)
|
||||||
|
|
||||||
// Store settings
|
// Store settings
|
||||||
fUsername = username;
|
fUsername = username;
|
||||||
|
fNick = username;
|
||||||
fPassword = password;
|
fPassword = password;
|
||||||
fServer = server;
|
fServer = server;
|
||||||
fResource = resource;
|
fResource = resource;
|
||||||
|
@ -1075,6 +1078,43 @@ JabberHandler::handleMUCParticipantPresence(gloox::MUCRoom *room,
|
||||||
const gloox::MUCRoomParticipant participant,
|
const gloox::MUCRoomParticipant participant,
|
||||||
const gloox::Presence &presence)
|
const gloox::Presence &presence)
|
||||||
{
|
{
|
||||||
|
BString chat_id(room->name().c_str());
|
||||||
|
chat_id << "@" << room->service().c_str();
|
||||||
|
|
||||||
|
BString nick = participant.nick->resource().c_str();
|
||||||
|
BString user_id(chat_id);
|
||||||
|
user_id << "/" << nick;
|
||||||
|
|
||||||
|
if (nick == fNick) {
|
||||||
|
BMessage joinedMsg(IM_MESSAGE);
|
||||||
|
joinedMsg.AddInt32("im_what", IM_ROOM_JOINED);
|
||||||
|
joinedMsg.AddString("chat_id", chat_id);
|
||||||
|
_SendMessage(&joinedMsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BMessage statusMsg(IM_MESSAGE);
|
||||||
|
statusMsg.AddInt32("im_what", IM_STATUS_SET);
|
||||||
|
statusMsg.AddString("user_id", user_id);
|
||||||
|
statusMsg.AddInt32("status", _GlooxStatusToCaya(presence.presence()));
|
||||||
|
_SendMessage(&statusMsg);
|
||||||
|
|
||||||
|
// If unavailable (disconnected/left chat)
|
||||||
|
if (presence.presence() == 5) {
|
||||||
|
BMessage leftMsg(IM_MESSAGE);
|
||||||
|
leftMsg.AddInt32("im_what", IM_ROOM_PARTICIPANT_LEFT);
|
||||||
|
leftMsg.AddString("user_id", user_id);
|
||||||
|
leftMsg.AddString("chat_id", chat_id);
|
||||||
|
_SendMessage(&leftMsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BMessage joinMsg(IM_MESSAGE);
|
||||||
|
joinMsg.AddInt32("im_what", IM_ROOM_PARTICIPANTS);
|
||||||
|
joinMsg.AddString("user_id", user_id);
|
||||||
|
joinMsg.AddString("user_name", nick);
|
||||||
|
joinMsg.AddString("chat_id", chat_id);
|
||||||
|
_SendMessage(&joinMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1086,14 +1126,21 @@ JabberHandler::handleMUCMessage(gloox::MUCRoom *room, const gloox::Message &m,
|
||||||
if (m.body() == "")
|
if (m.body() == "")
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
int32 im_what = IM_MESSAGE_RECEIVED;
|
||||||
|
if (m.when() != 0)
|
||||||
|
im_what = IM_LOGS_RECEIVED;
|
||||||
|
|
||||||
BString chat_id(room->name().c_str());
|
BString chat_id(room->name().c_str());
|
||||||
chat_id << "@" << room->service().c_str();
|
chat_id << "@" << room->service().c_str();
|
||||||
|
|
||||||
|
BString user_id(chat_id);
|
||||||
|
user_id << "/" << m.from().resource().c_str();
|
||||||
|
|
||||||
// Notify that a chat message was received
|
// Notify that a chat message was received
|
||||||
BMessage msg(IM_MESSAGE);
|
BMessage msg(IM_MESSAGE);
|
||||||
msg.AddString("user_id", m.from().resource().c_str());
|
msg.AddInt32("im_what", im_what);
|
||||||
|
msg.AddString("user_id", user_id);
|
||||||
msg.AddString("chat_id", chat_id);
|
msg.AddString("chat_id", chat_id);
|
||||||
msg.AddInt32("im_what", IM_MESSAGE_RECEIVED);
|
|
||||||
if (m.subject() != "")
|
if (m.subject() != "")
|
||||||
msg.AddString("subject", m.subject().c_str());
|
msg.AddString("subject", m.subject().c_str());
|
||||||
msg.AddString("body", m.body().c_str());
|
msg.AddString("body", m.body().c_str());
|
||||||
|
@ -1141,6 +1188,33 @@ JabberHandler::handleMUCInfo(gloox::MUCRoom *room, int features,
|
||||||
void
|
void
|
||||||
JabberHandler::handleMUCItems(gloox::MUCRoom *room, const gloox::Disco::ItemList &items)
|
JabberHandler::handleMUCItems(gloox::MUCRoom *room, const gloox::Disco::ItemList &items)
|
||||||
{
|
{
|
||||||
|
BStringList nicks;
|
||||||
|
BStringList ids;
|
||||||
|
|
||||||
|
BString chat_id(room->name().c_str());
|
||||||
|
chat_id << "@" << room->service().c_str();
|
||||||
|
|
||||||
|
for (auto item: items) {
|
||||||
|
BString nick = item->jid().resource().c_str();
|
||||||
|
nicks.Add(nick);
|
||||||
|
|
||||||
|
// Unless it's the user, derive ID from room resource
|
||||||
|
if (fNick != nick) {
|
||||||
|
BString user_id(chat_id);
|
||||||
|
user_id << "/" << nick;
|
||||||
|
ids.Add(user_id);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ids.Add(BString(fJid.bare().c_str()));
|
||||||
|
}
|
||||||
|
|
||||||
|
BMessage msg(IM_MESSAGE);
|
||||||
|
msg.AddStrings("user_id", ids);
|
||||||
|
msg.AddStrings("user_name", nicks);
|
||||||
|
msg.AddString("chat_id", chat_id);
|
||||||
|
msg.AddInt32("im_what", IM_ROOM_PARTICIPANTS);
|
||||||
|
|
||||||
|
_SendMessage(&msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -84,6 +84,7 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
BString fUsername;
|
BString fUsername;
|
||||||
|
BString fNick;
|
||||||
BString fPassword;
|
BString fPassword;
|
||||||
BString fServer;
|
BString fServer;
|
||||||
BString fResource;
|
BString fResource;
|
||||||
|
|
Ŝarĝante…
Reference in New Issue