Sending messages to MUCs, proper logging
This commit is contained in:
parent
b66ea722b0
commit
a89bec40a3
|
@ -109,6 +109,7 @@ JabberHandler::Process(BMessage* msg)
|
||||||
const char* id = msg->FindString("chat_id");
|
const char* id = msg->FindString("chat_id");
|
||||||
const char* subject = msg->FindString("subject");
|
const char* subject = msg->FindString("subject");
|
||||||
const char* body = msg->FindString("body");
|
const char* body = msg->FindString("body");
|
||||||
|
gloox::MUCRoom* room = fRooms.ValueFor(id);
|
||||||
|
|
||||||
if (!id || !body)
|
if (!id || !body)
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
|
@ -116,9 +117,16 @@ JabberHandler::Process(BMessage* msg)
|
||||||
// Send JabberHandler message
|
// Send JabberHandler message
|
||||||
gloox::Message jm(gloox::Message::Chat, gloox::JID(id),
|
gloox::Message jm(gloox::Message::Chat, gloox::JID(id),
|
||||||
body, (subject ? subject : gloox::EmptyString));
|
body, (subject ? subject : gloox::EmptyString));
|
||||||
|
if (room != NULL) {
|
||||||
|
room->send(body);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
fClient->send(jm);
|
fClient->send(jm);
|
||||||
|
|
||||||
// Tell Caya we actually sent the message
|
// If non-MUC, tell Caya we actually sent the message
|
||||||
|
// (An MUC should echo the message back to us later, see
|
||||||
|
// handleMUCMessage)
|
||||||
_MessageSent(id, subject, body);
|
_MessageSent(id, subject, body);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -840,6 +848,33 @@ JabberHandler::_GlooxStatusToCaya(gloox::Presence::PresenceType type)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char*
|
||||||
|
JabberHandler::_MUCChatId(gloox::MUCRoom* room)
|
||||||
|
{
|
||||||
|
BString chat_id(room->name().c_str());
|
||||||
|
chat_id << "@" << room->service().c_str();
|
||||||
|
|
||||||
|
return chat_id.String();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
JabberHandler::_MUCUserId(const char* chat_id, const char* nick, BString* id)
|
||||||
|
{
|
||||||
|
BString chat(chat_id);
|
||||||
|
chat << "/" << nick;
|
||||||
|
|
||||||
|
// If sent from own user, use normal ID
|
||||||
|
if (nick == fNick) {
|
||||||
|
*id = fJid.bare().c_str();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
*id = chat;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
BMessage
|
BMessage
|
||||||
JabberHandler::_SettingsTemplate(const char* username, bool serverOption)
|
JabberHandler::_SettingsTemplate(const char* username, bool serverOption)
|
||||||
{
|
{
|
||||||
|
@ -1078,14 +1113,13 @@ 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());
|
const char* chat_id = _MUCChatId(room);
|
||||||
chat_id << "@" << room->service().c_str();
|
const char* nick = participant.nick->resource().c_str();
|
||||||
|
|
||||||
BString nick = participant.nick->resource().c_str();
|
BString user_id;
|
||||||
BString user_id(chat_id);
|
bool isSelf = _MUCUserId(chat_id, nick, &user_id);
|
||||||
user_id << "/" << nick;
|
|
||||||
|
|
||||||
if (nick == fNick) {
|
if (isSelf == true) {
|
||||||
BMessage joinedMsg(IM_MESSAGE);
|
BMessage joinedMsg(IM_MESSAGE);
|
||||||
joinedMsg.AddInt32("im_what", IM_ROOM_JOINED);
|
joinedMsg.AddInt32("im_what", IM_ROOM_JOINED);
|
||||||
joinedMsg.AddString("chat_id", chat_id);
|
joinedMsg.AddString("chat_id", chat_id);
|
||||||
|
@ -1122,20 +1156,25 @@ void
|
||||||
JabberHandler::handleMUCMessage(gloox::MUCRoom *room, const gloox::Message &m,
|
JabberHandler::handleMUCMessage(gloox::MUCRoom *room, const gloox::Message &m,
|
||||||
bool priv)
|
bool priv)
|
||||||
{
|
{
|
||||||
|
const char* chat_id = _MUCChatId(room);
|
||||||
|
BString user_id;
|
||||||
|
bool isSelf = _MUCUserId(chat_id, m.from().resource().c_str(), &user_id);
|
||||||
|
|
||||||
|
int32 im_what = IM_MESSAGE_RECEIVED;
|
||||||
|
|
||||||
// We need a body
|
// We need a body
|
||||||
if (m.body() == "")
|
if (m.body() == "")
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int32 im_what = IM_MESSAGE_RECEIVED;
|
|
||||||
|
// If sent from own user, then IM_MESSAGE_SENT
|
||||||
|
if (isSelf == true)
|
||||||
|
im_what = IM_MESSAGE_SENT;
|
||||||
|
|
||||||
|
// when() is only nonzero when sending backdated messages (logs)
|
||||||
if (m.when() != 0)
|
if (m.when() != 0)
|
||||||
im_what = IM_LOGS_RECEIVED;
|
im_what = IM_LOGS_RECEIVED;
|
||||||
|
|
||||||
BString chat_id(room->name().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.AddInt32("im_what", im_what);
|
msg.AddInt32("im_what", im_what);
|
||||||
|
@ -1191,8 +1230,7 @@ JabberHandler::handleMUCItems(gloox::MUCRoom *room, const gloox::Disco::ItemList
|
||||||
BStringList nicks;
|
BStringList nicks;
|
||||||
BStringList ids;
|
BStringList ids;
|
||||||
|
|
||||||
BString chat_id(room->name().c_str());
|
const char* chat_id = _MUCChatId(room);
|
||||||
chat_id << "@" << room->service().c_str();
|
|
||||||
|
|
||||||
for (auto item: items) {
|
for (auto item: items) {
|
||||||
BString nick = item->jid().resource().c_str();
|
BString nick = item->jid().resource().c_str();
|
||||||
|
|
|
@ -130,6 +130,9 @@ private:
|
||||||
|
|
||||||
CayaStatus _GlooxStatusToCaya(gloox::Presence::PresenceType type);
|
CayaStatus _GlooxStatusToCaya(gloox::Presence::PresenceType type);
|
||||||
|
|
||||||
|
const char* _MUCChatId(gloox::MUCRoom* room);
|
||||||
|
bool _MUCUserId(const char* chat_id, const char* nick, BString* id);
|
||||||
|
|
||||||
virtual void onConnect();
|
virtual void onConnect();
|
||||||
virtual void onDisconnect(gloox::ConnectionError);
|
virtual void onDisconnect(gloox::ConnectionError);
|
||||||
virtual bool onTLSConnect(const gloox::CertInfo&);
|
virtual bool onTLSConnect(const gloox::CertInfo&);
|
||||||
|
|
Ŝarĝante…
Reference in New Issue