summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Pösel <robyer@seznam.cz>2016-08-28 12:00:29 +0000
committerRobert Pösel <robyer@seznam.cz>2016-08-28 12:00:29 +0000
commitc98539ee79a0d7e6ee2c20172a3387d6e38674d7 (patch)
treebfca89ed4bc57bdae1ba613c10565ae4d89e220e
parent2dce488713913a350803cd188919984b5d9b4f90 (diff)
SkypeWeb: Show better names for chat contacts
Based on idea of olegtarasov - https://github.com/miranda-ng/miranda-ng/pull/8 It primarily uses custom nicks (changed via chatroom), then it tries to get custom name of the contact in our contact list, or his nick (if custom name is not present), or as last option his id. Also custom name is used on more places (when adding new contact, or kicking contact - and also the "initiator" of the kick). git-svn-id: http://svn.miranda-ng.org/main/trunk@17211 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
-rw-r--r--protocols/SkypeWeb/src/skype_chatrooms.cpp48
-rw-r--r--protocols/SkypeWeb/src/skype_proto.h1
2 files changed, 42 insertions, 7 deletions
diff --git a/protocols/SkypeWeb/src/skype_chatrooms.cpp b/protocols/SkypeWeb/src/skype_chatrooms.cpp
index 35e40e9045..2e67171846 100644
--- a/protocols/SkypeWeb/src/skype_chatrooms.cpp
+++ b/protocols/SkypeWeb/src/skype_chatrooms.cpp
@@ -442,9 +442,11 @@ void CSkypeProto::AddMessageToChat(const wchar_t *chat_id, const wchar_t *from,
{
GCDEST gcd = { m_szModuleName, chat_id, isAction ? GC_EVENT_ACTION : GC_EVENT_MESSAGE };
GCEVENT gce = { sizeof(GCEVENT), &gcd };
+
+ ptrW tnick(GetChatContactNick(_T2A(chat_id), _T2A(from), _T2A(from)));
gce.bIsMe = IsMe(_T2A(from));
- gce.ptszNick = from;
+ gce.ptszNick = tnick;
gce.time = timestamp;
gce.ptszUID = from;
@@ -536,15 +538,47 @@ char *CSkypeProto::GetChatUsers(const wchar_t *chat_id)
return gci.pszUsers;
}
+wchar_t* CSkypeProto::GetChatContactNick(const char *chat_id, const char *id, const char *name) {
+ // Check if there is custom nick for this chat contact
+ if (chat_id != NULL) {
+ if (wchar_t *tname = db_get_wsa(FindChatRoom(chat_id), "UsersNicks", id))
+ return tname;
+ }
+
+ // Check if we have this contact in database
+ if (IsMe(id))
+ {
+ // Return my nick
+ if (wchar_t *tname = getWStringA(NULL, "Nick"))
+ return tname;
+ }
+ else
+ {
+ MCONTACT hContact = FindContact(id);
+ if (hContact != NULL) {
+ // Primarily return custom name
+ if (wchar_t *tname = db_get_wsa(hContact, "CList", "MyHandle"))
+ return tname;
+
+ // If not exists, then user nick
+ if (wchar_t *tname = getWStringA(hContact, "Nick"))
+ return tname;
+ }
+ }
+
+ // Return default value as nick - given name or user id
+ if (name != NULL)
+ return mir_a2u_cp(name, CP_UTF8);
+ else
+ return mir_a2u(id);
+}
+
void CSkypeProto::AddChatContact(const wchar_t *tchat_id, const char *id, const char *name, const wchar_t *role, bool isChange)
{
if (IsChatContact(tchat_id, id))
return;
- ptrW tnick(mir_a2u_cp(name, CP_UTF8));
- if (wchar_t *tmp = db_get_wsa(FindChatRoom(_T2A(tchat_id)), "UsersNicks", id))
- tnick = tmp;
-
+ ptrW tnick(GetChatContactNick(_T2A(tchat_id), id, name));
ptrW tid(mir_a2u(id));
GCDEST gcd = { m_szModuleName, tchat_id, GC_EVENT_JOIN };
@@ -565,9 +599,9 @@ void CSkypeProto::RemoveChatContact(const wchar_t *tchat_id, const char *id, con
if (IsMe(id))
return;
- ptrW tnick(mir_a2u_cp(name, CP_UTF8));
+ ptrW tnick(GetChatContactNick(_T2A(tchat_id), id, name));
+ ptrW tinitiator(GetChatContactNick(_T2A(tchat_id), initiator, initiator));
ptrW tid(mir_a2u(id));
- ptrW tinitiator(mir_a2u(initiator));
GCDEST gcd = { m_szModuleName, tchat_id, isKick ? GC_EVENT_KICK : GC_EVENT_PART };
GCEVENT gce = { sizeof(gce), &gcd };
diff --git a/protocols/SkypeWeb/src/skype_proto.h b/protocols/SkypeWeb/src/skype_proto.h
index 964bbc1ac5..d9414dea98 100644
--- a/protocols/SkypeWeb/src/skype_proto.h
+++ b/protocols/SkypeWeb/src/skype_proto.h
@@ -350,6 +350,7 @@ private:
void AddMessageToChat(const wchar_t *chat_id, const wchar_t *from, const char *content, bool isAction, int emoteOffset, time_t timestamp, bool isLoading = false);
void AddChatContact(const wchar_t *tchat_id, const char *id, const char *name, const wchar_t *role, bool isChange = false);
void RemoveChatContact(const wchar_t *tchat_id, const char *id, const char *name, bool isKick = false, const char *initiator = "");
+ wchar_t *GetChatContactNick(const char *chat_id, const char *id, const char *name);
void RenameChat(const char *chat_id, const char *name);
void ChangeChatTopic(const char * chat_id, const char *topic, const char *initiator);