summaryrefslogtreecommitdiff
path: root/protocols/JabberG
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2019-02-25 21:02:11 +0300
committerGeorge Hazan <ghazan@miranda.im>2019-02-25 21:02:11 +0300
commit45bf5f51cc788cb8f19e1b8fcd5b8818dc7a2e00 (patch)
tree40a087f36b75b4c1fb7218bd06052df2968bf2d2 /protocols/JabberG
parent8ba9e423e683d570702476dd93571cea26a27c1a (diff)
GCEVENT::GCEF_UTF8 - flag for direct communication with utf8-encoded chat events (UTF16LE by default)
Diffstat (limited to 'protocols/JabberG')
-rw-r--r--protocols/JabberG/src/jabber_chat.cpp77
-rw-r--r--protocols/JabberG/src/jabber_groupchat.cpp41
2 files changed, 57 insertions, 61 deletions
diff --git a/protocols/JabberG/src/jabber_chat.cpp b/protocols/JabberG/src/jabber_chat.cpp
index 70dd3e66cc..e29c2a9d75 100644
--- a/protocols/JabberG/src/jabber_chat.cpp
+++ b/protocols/JabberG/src/jabber_chat.cpp
@@ -97,7 +97,7 @@ static TRoleOrAffiliationInfo sttRoleItems[] =
/////////////////////////////////////////////////////////////////////////////////////////
// JabberGcInit - initializes the new chat
-static const wchar_t *sttStatuses[] = { LPGENW("Visitors"), LPGENW("Participants"), LPGENW("Moderators"), LPGENW("Owners") };
+static const char *sttStatuses[] = { LPGEN("Owners"), LPGEN("Moderators"), LPGEN("Participants"), LPGEN("Visitors") };
int JabberGcGetStatus(JABBER_GC_AFFILIATION a, JABBER_GC_ROLE r)
{
@@ -162,7 +162,7 @@ int CJabberProto::GcInit(JABBER_LIST_ITEM *item)
item->bChatActive = true;
for (int i = _countof(sttStatuses) - 1; i >= 0; i--)
- Chat_AddGroup(si, TranslateW(sttStatuses[i]));
+ Chat_AddGroup(si, TranslateW(Utf2T(sttStatuses[i])));
Chat_Control(m_szModuleName, wszJid, (item->bAutoJoin && m_bAutoJoinHidden) ? WINDOW_HIDDEN : SESSION_INITDONE);
Chat_Control(m_szModuleName, wszJid, SESSION_ONLINE);
@@ -173,69 +173,67 @@ void CJabberProto::GcLogShowInformation(JABBER_LIST_ITEM *item, pResourceStatus
{
if (!item || !user || (item->bChatActive != 2)) return;
- CMStringW buf;
- Utf2T wszRoomJid(item->jid), wszUserId(user->m_szResourceName);
+ CMStringA buf;
switch (type) {
case INFO_BAN:
if (m_bGcLogBans)
- buf.Format(TranslateT("User %s is now banned."), wszUserId.get());
+ buf.Format(TranslateU("User %s is now banned."), user->m_szResourceName);
break;
case INFO_STATUS:
if (m_bGcLogStatuses) {
wchar_t *ptszDescr = Clist_GetStatusModeDescription(user->m_iStatus, 0);
if (user->m_szStatusMessage)
- buf.Format(TranslateT("User %s changed status to %s with message: %s"), wszUserId.get(), ptszDescr, user->m_szStatusMessage);
+ buf.Format(TranslateU("User %s changed status to %s with message: %s"), user->m_szResourceName, ptszDescr, user->m_szStatusMessage);
else
- buf.Format(TranslateT("User %s changed status to %s"), wszUserId.get(), ptszDescr);
+ buf.Format(TranslateU("User %s changed status to %s"), user->m_szResourceName, ptszDescr);
}
break;
case INFO_CONFIG:
if (m_bGcLogConfig)
- buf.Format(TranslateT("Room configuration was changed."));
+ buf.Append(TranslateU("Room configuration was changed."));
break;
case INFO_AFFILIATION:
if (m_bGcLogAffiliations) {
- wchar_t *name = nullptr;
+ const char *name = nullptr;
switch (user->m_affiliation) {
- case AFFILIATION_NONE: name = TranslateT("None"); break;
- case AFFILIATION_MEMBER: name = TranslateT("Member"); break;
- case AFFILIATION_ADMIN: name = TranslateT("Admin"); break;
- case AFFILIATION_OWNER: name = TranslateT("Owner"); break;
- case AFFILIATION_OUTCAST: name = TranslateT("Outcast"); break;
+ case AFFILIATION_NONE: name = TranslateU("None"); break;
+ case AFFILIATION_MEMBER: name = TranslateU("Member"); break;
+ case AFFILIATION_ADMIN: name = TranslateU("Admin"); break;
+ case AFFILIATION_OWNER: name = TranslateU("Owner"); break;
+ case AFFILIATION_OUTCAST: name = TranslateU("Outcast"); break;
}
if (name)
- buf.Format(TranslateT("Affiliation of %s was changed to '%s'."), wszUserId.get(), name);
+ buf.Format(TranslateU("Affiliation of %s was changed to '%s'."), user->m_szResourceName, name);
}
break;
case INFO_ROLE:
if (m_bGcLogRoles) {
- wchar_t *name = nullptr;
+ const char *name = nullptr;
switch (user->m_role) {
- case ROLE_NONE: name = TranslateT("None"); break;
- case ROLE_VISITOR: name = TranslateT("Visitor"); break;
- case ROLE_PARTICIPANT: name = TranslateT("Participant"); break;
- case ROLE_MODERATOR: name = TranslateT("Moderator"); break;
+ case ROLE_NONE: name = TranslateU("None"); break;
+ case ROLE_VISITOR: name = TranslateU("Visitor"); break;
+ case ROLE_PARTICIPANT: name = TranslateU("Participant"); break;
+ case ROLE_MODERATOR: name = TranslateU("Moderator"); break;
}
if (name)
- buf.Format(TranslateT("Role of %s was changed to '%s'."), wszUserId.get(), name);
+ buf.Format(Translate("Role of %s was changed to '%s'."), user->m_szResourceName, name);
}
break;
}
if (!buf.IsEmpty()) {
- buf.Replace(L"%", L"%%");
+ buf.Replace("%", "%%");
- GCEVENT gce = { m_szModuleName, wszRoomJid, GC_EVENT_INFORMATION };
- gce.ptszNick = wszUserId;
- gce.ptszUID = wszUserId;
- gce.ptszText = buf;
- gce.dwFlags = GCEF_ADDTOLOG;
+ GCEVENT gce = { m_szModuleName, item->jid, GC_EVENT_INFORMATION };
+ gce.dwFlags = GCEF_UTF8 + GCEF_ADDTOLOG;
+ gce.pszNick.a = gce.pszUID.a = user->m_szResourceName;
+ gce.pszText.a = buf;
gce.time = time(0);
Chat_Event(&gce);
}
@@ -257,12 +255,12 @@ void CJabberProto::GcLogUpdateMemberStatus(JABBER_LIST_ITEM *item, const char *r
if (myNick == nullptr)
myNick = JabberNickFromJID(m_szJabberJID);
- Utf2T wszRoomJid(item->jid), wszNick(nick), wszUserId(resource), wszText(szReason), wszUserInfo(jid);
- GCEVENT gce = { m_szModuleName, wszRoomJid };
- gce.ptszNick = wszNick;
- gce.ptszUID = wszUserId;
- gce.ptszUserInfo = wszUserInfo;
- gce.ptszText = wszText;
+ GCEVENT gce = { m_szModuleName, item->jid, 0 };
+ gce.dwFlags = GCEF_UTF8;
+ gce.pszNick.a = nick;
+ gce.pszUID.a = resource;
+ gce.pszUserInfo.a = jid;
+ gce.pszText.a = szReason;
if (item->bChatActive == 2) {
gce.dwFlags |= GCEF_ADDTOLOG;
gce.time = time(0);
@@ -271,7 +269,7 @@ void CJabberProto::GcLogUpdateMemberStatus(JABBER_LIST_ITEM *item, const char *r
switch (gce.iType = action) {
case GC_EVENT_PART: break;
case GC_EVENT_KICK:
- gce.ptszStatus = TranslateT("Moderator");
+ gce.pszStatus.a = TranslateU("Moderator");
break;
default:
@@ -285,27 +283,26 @@ void CJabberProto::GcLogUpdateMemberStatus(JABBER_LIST_ITEM *item, const char *r
case GC_EVENT_REMOVESTATUS:
gce.dwFlags &= ~GCEF_ADDTOLOG;
}
- gce.ptszText = TranslateT("Moderator");
+ gce.pszText.a = TranslateU("Moderator");
}
- gce.ptszStatus = TranslateW(sttStatuses[JabberGcGetStatus(JS)]);
+ gce.pszStatus.a = TranslateU(sttStatuses[JabberGcGetStatus(JS)]);
gce.bIsMe = (mir_strcmp(nick, myNick) == 0);
statusToSet = JS->m_iStatus;
break;
}
}
}
-
Chat_Event(&gce);
if (statusToSet != 0) {
int flags = GC_SSE_ONLYLISTED;
if (statusToSet == ID_STATUS_AWAY || statusToSet == ID_STATUS_NA || statusToSet == ID_STATUS_DND)
flags += GC_SSE_ONLINE;
- Chat_SetStatusEx(m_szModuleName, wszRoomJid, flags, wszNick);
+ Chat_SetStatusEx(m_szModuleName, Utf2T(item->jid), flags, Utf2T(nick));
gce.iType = GC_EVENT_SETCONTACTSTATUS;
- gce.ptszText = wszNick;
- gce.ptszUID = wszUserId;
+ gce.pszText.a = nick;
+ gce.pszUID.a = resource;
gce.dwItemData = statusToSet;
Chat_Event(&gce);
}
diff --git a/protocols/JabberG/src/jabber_groupchat.cpp b/protocols/JabberG/src/jabber_groupchat.cpp
index 682de9e84a..2719ba4690 100644
--- a/protocols/JabberG/src/jabber_groupchat.cpp
+++ b/protocols/JabberG/src/jabber_groupchat.cpp
@@ -788,15 +788,16 @@ void CJabberProto::RenameParticipantNick(JABBER_LIST_ITEM *item, const char *old
setUString(hContact, "MyNick", newNick);
}
- Utf2T wszRoomId(item->jid), wszOld(oldNick), wszNew(newNick), wszInfo(jid);
- Chat_ChangeUserId(m_szModuleName, wszRoomId, wszOld, wszNew);
+ Chat_ChangeUserId(m_szModuleName, Utf2T(item->jid), Utf2T(oldNick), Utf2T(newNick));
- GCEVENT gce = { m_szModuleName, wszRoomId, GC_EVENT_NICK };
- gce.ptszUserInfo = wszInfo;
+ GCEVENT gce = { m_szModuleName, item->jid, GC_EVENT_NICK };
+ gce.dwFlags = GCEF_UTF8;
+ gce.pszID.a = item->jid;
+ gce.pszUserInfo.a = jid;
gce.time = time(0);
- gce.ptszNick = wszOld;
- gce.ptszUID = wszNew;
- gce.ptszText = wszNew;
+ gce.pszNick.a = oldNick;
+ gce.pszUID.a = newNick;
+ gce.pszText.a = newNick;
Chat_Event(&gce);
}
@@ -1010,7 +1011,7 @@ void CJabberProto::GroupchatProcessPresence(const TiXmlElement *node)
void CJabberProto::GroupchatProcessMessage(const TiXmlElement *node)
{
const TiXmlElement *n, *m;
- const char *from, *type, *p, *nick, *resource;
+ const char *from, *type, *p, *nick;
JABBER_LIST_ITEM *item;
CMStringW imgLink;
@@ -1022,12 +1023,10 @@ void CJabberProto::GroupchatProcessMessage(const TiXmlElement *node)
if (!mir_strcmp(type, "error"))
return;
- Utf2T roomJid(item->jid);
- GCEVENT gce = { m_szModuleName, roomJid, 0 };
+ GCEVENT gce = { m_szModuleName, item->jid, 0 };
+ gce.dwFlags = GCEF_UTF8;
- const char *msgText = nullptr;
-
- resource = strchr(from, '/');
+ const char *resource = strchr(from, '/'), *msgText;
if (resource != nullptr && *++resource == '\0')
resource = nullptr;
@@ -1051,6 +1050,7 @@ void CJabberProto::GroupchatProcessMessage(const TiXmlElement *node)
resource = tmpnick;
}
}
+
item->getTemp()->m_szStatusMessage = mir_strdup(msgText);
}
else {
@@ -1093,15 +1093,14 @@ void CJabberProto::GroupchatProcessMessage(const TiXmlElement *node)
}
else nick = nullptr;
- CMStringW tszText(Utf2T(msgText).get());
- tszText.Replace(L"%", L"%%");
- tszText += imgLink;
+ CMStringA szText(msgText);
+ szText.Replace("%", "%%");
+ szText += imgLink;
- Utf2T wszUserId(resource), wszNick(nick);
- gce.ptszUID = wszUserId;
- gce.ptszNick = wszNick;
+ gce.pszUID.a = resource;
+ gce.pszNick.a = nick;
gce.time = msgTime;
- gce.ptszText = tszText;
+ gce.pszText.a = szText;
gce.bIsMe = nick == nullptr ? FALSE : (mir_strcmp(resource, item->nick) == 0);
if (!isHistory)
@@ -1115,7 +1114,7 @@ void CJabberProto::GroupchatProcessMessage(const TiXmlElement *node)
item->bChatActive = 2;
if (gce.iType == GC_EVENT_TOPIC)
- Chat_SetStatusbarText(m_szModuleName, roomJid, tszText);
+ Chat_SetStatusbarText(m_szModuleName, Utf2T(item->jid), Utf2T(szText));
}
/////////////////////////////////////////////////////////////////////////////////////////