summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/stdmsg/src/msgdialog.cpp2
-rw-r--r--src/mir_app/src/chat.h1
-rw-r--r--src/mir_app/src/chat_manager.cpp67
-rw-r--r--src/mir_app/src/chat_svc.cpp1
-rw-r--r--src/mir_app/src/mir_app.def1
-rw-r--r--src/mir_app/src/mir_app64.def1
-rw-r--r--src/mir_app/src/srmm_base.cpp17
7 files changed, 26 insertions, 64 deletions
diff --git a/src/core/stdmsg/src/msgdialog.cpp b/src/core/stdmsg/src/msgdialog.cpp
index a13c704257..4254e28119 100644
--- a/src/core/stdmsg/src/msgdialog.cpp
+++ b/src/core/stdmsg/src/msgdialog.cpp
@@ -1488,7 +1488,7 @@ void CMsgDialog::UpdateTitle()
{
wchar_t newtitle[256];
if (isChat()) {
- int nUsers = m_si->getUserList().getCount();
+ int nUsers = m_nickList.GetCount();
switch (m_si->iType) {
case GCW_CHATROOM:
diff --git a/src/mir_app/src/chat.h b/src/mir_app/src/chat.h
index d1082c802e..6be46ab3ba 100644
--- a/src/mir_app/src/chat.h
+++ b/src/mir_app/src/chat.h
@@ -90,7 +90,6 @@ USERINFO* UM_AddUser(SESSION_INFO *si, const wchar_t *pszUID, const wchar_t
BOOL UM_RemoveAll(SESSION_INFO *si);
BOOL UM_SetStatusEx(SESSION_INFO *si, const wchar_t* pszText, int flags);
void UM_SortKeys(SESSION_INFO *si);
-void UM_SortUser(SESSION_INFO *si);
// clist.c
MCONTACT AddRoom(const char *pszModule, const wchar_t *pszRoom, const wchar_t *pszDisplayName, int iType);
diff --git a/src/mir_app/src/chat_manager.cpp b/src/mir_app/src/chat_manager.cpp
index 0474d942bb..589c03610d 100644
--- a/src/mir_app/src/chat_manager.cpp
+++ b/src/mir_app/src/chat_manager.cpp
@@ -28,14 +28,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
static USERINFO* UM_FindUser(SESSION_INFO *si, const wchar_t *pszUID);
-static int CompareKeys(const USERINFO *u1, const USERINFO *u2)
-{
- return mir_wstrcmp(u1->pszUID, u2->pszUID);
-}
-
static int CompareUser(const USERINFO *u1, const USERINFO *u2)
{
- return g_chatApi.UM_CompareItem(u1, u2);
+ return mir_wstrcmp(u1->pszUID, u2->pszUID);
}
static int compareSessions(const SESSION_INFO *p1, const SESSION_INFO *p2)
@@ -68,7 +63,6 @@ static int CompareEvents(const LOGINFO *p1, const LOGINFO *p2)
}
SESSION_INFO::SESSION_INFO() :
- arKeys(10, CompareKeys),
arUsers(10, CompareUser),
arEvents(10, CompareEvents)
{
@@ -237,10 +231,6 @@ BOOL SM_RemoveUser(SESSION_INFO *si, const wchar_t *pszUID)
if (si->pMe == ui)
si->pMe = nullptr;
- auto &arKeys = si->getKeyList();
- if (arKeys.remove(ui) == -1)
- DebugBreak();
-
auto &arUsers = si->getUserList();
for (auto &it : arUsers) {
if (!mir_wstrcmpi(it->pszUID, pszUID)) {
@@ -263,11 +253,8 @@ BOOL SM_GiveStatus(SESSION_INFO *si, const wchar_t *pszUID, const wchar_t *pszSt
return FALSE;
USERINFO *ui = g_chatApi.UM_GiveStatus(si, pszUID, TM_StringToWord(si->pStatuses, pszStatus));
- if (ui) {
- UM_SortUser(si);
- if (si->pDlg)
- si->pDlg->UpdateNickList();
- }
+ if (ui && si->pDlg)
+ si->pDlg->UpdateNickList();
return TRUE;
}
@@ -277,11 +264,8 @@ BOOL SM_SetContactStatus(SESSION_INFO *si, const wchar_t *pszUID, uint16_t wStat
return FALSE;
USERINFO *ui = g_chatApi.UM_SetContactStatus(si, pszUID, wStatus);
- if (ui) {
- UM_SortUser(si);
- if (si->pDlg)
- si->pDlg->UpdateNickList();
- }
+ if (ui && si->pDlg)
+ si->pDlg->UpdateNickList();
return TRUE;
}
@@ -291,11 +275,8 @@ BOOL SM_TakeStatus(SESSION_INFO *si, const wchar_t *pszUID, const wchar_t *pszSt
return FALSE;
USERINFO *ui = g_chatApi.UM_TakeStatus(si, pszUID, TM_StringToWord(si->pStatuses, pszStatus));
- if (ui) {
- UM_SortUser(si);
- if (si->pDlg)
- si->pDlg->UpdateNickList();
- }
+ if (ui && si->pDlg)
+ si->pDlg->UpdateNickList();
return TRUE;
}
@@ -344,7 +325,6 @@ BOOL SM_ChangeNick(SESSION_INFO *si, GCEVENT *gce)
USERINFO *ui = UM_FindUser(si, gce->pszUID.w);
if (ui) {
replaceStrW(ui->pszNick, gce->pszText.w);
- UM_SortUser(si);
if (si->pDlg)
si->pDlg->UpdateNickList();
if (g_chatApi.OnChangeNick)
@@ -399,19 +379,6 @@ SESSION_INFO* SM_FindSessionByIndex(const char *pszModule, int iItem)
return nullptr;
}
-char* SM_GetUsers(SESSION_INFO *si)
-{
- if (si == nullptr)
- return nullptr;
-
- CMStringA res;
-
- for (auto &it : si->getUserList())
- res.AppendFormat("%S ", it->pszNick);
-
- return res.Detach();
-}
-
static void SM_InvalidateLogDirectories()
{
for (auto &si : g_arSessions)
@@ -584,31 +551,19 @@ static USERINFO* UM_FindUser(SESSION_INFO *si, const wchar_t *pszUID)
mir_cslock lck(si->csLock);
USERINFO tmp;
tmp.pszUID = (wchar_t*)pszUID;
- return si->getKeyList().find(&tmp);
+ return si->getUserList().find(&tmp);
}
/////////////////////////////////////////////////////////////////////////////////////////
static int compareKeysStub(const void *p1, const void *p2)
{
- return CompareKeys(*(USERINFO**)p1, *(USERINFO**)p2);
-}
-
-void UM_SortKeys(SESSION_INFO *si)
-{
- qsort(si->arKeys.getArray(), si->arKeys.getCount(), sizeof(void*), compareKeysStub);
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-static int compareStub(const void *p1, const void *p2)
-{
return CompareUser(*(USERINFO**)p1, *(USERINFO**)p2);
}
-void UM_SortUser(SESSION_INFO *si)
+void UM_SortKeys(SESSION_INFO *si)
{
- qsort(si->arUsers.getArray(), si->arUsers.getCount(), sizeof(void*), compareStub);
+ qsort(si->arUsers.getArray(), si->arUsers.getCount(), sizeof(void*), compareKeysStub);
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -623,7 +578,6 @@ USERINFO* UM_AddUser(SESSION_INFO *si, const wchar_t *pszUID, const wchar_t *psz
if (pUser == nullptr) {
pUser = new USERINFO();
replaceStrW(pUser->pszUID, pszUID);
- si->getKeyList().insert(pUser);
si->getUserList().insert(pUser);
}
@@ -737,7 +691,6 @@ BOOL UM_RemoveAll(SESSION_INFO *si)
mir_free(ui->pszUID);
mir_free(ui->pszNick);
}
- si->arKeys.destroy();
si->arUsers.destroy();
}
return TRUE;
diff --git a/src/mir_app/src/chat_svc.cpp b/src/mir_app/src/chat_svc.cpp
index aebd340a80..d68448b53e 100644
--- a/src/mir_app/src/chat_svc.cpp
+++ b/src/mir_app/src/chat_svc.cpp
@@ -158,7 +158,6 @@ MIR_APP_DLL(int) Chat_GetInfo(GC_INFO *gci)
if (gci->Flags & GCF_HCONTACT) gci->hContact = si->hContact;
if (gci->Flags & GCF_TYPE) gci->iType = si->iType;
if (gci->Flags & GCF_COUNT) gci->iCount = si->getUserList().getCount();
- if (gci->Flags & GCF_USERS) gci->pszUsers = SM_GetUsers(si);
if (gci->Flags & GCF_ID) gci->pszID = si->ptszID;
if (gci->Flags & GCF_NAME) gci->pszName = si->ptszName;
return 0;
diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def
index 161aad88ce..0e5b7801ad 100644
--- a/src/mir_app/src/mir_app.def
+++ b/src/mir_app/src/mir_app.def
@@ -629,7 +629,6 @@ db_mc_tryMeta @732
?setUString@PROTO_INTERFACE@@QAEXPBD0@Z @742 NONAME
?setUString@CMPluginBase@@QAEXIPBD0@Z @743 NONAME
?setUString@CMPluginBase@@QAEXPBD0@Z @744 NONAME
-?getKeyList@SESSION_INFO@@QAEAAU?$LIST@UUSERINFO@@@@XZ @745 NONAME
PUAddPopup @746
PUAddPopupW @747
PUChangeTextW @748
diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def
index 55a7147c2c..8950337b68 100644
--- a/src/mir_app/src/mir_app64.def
+++ b/src/mir_app/src/mir_app64.def
@@ -629,7 +629,6 @@ db_mc_tryMeta @732
?setUString@PROTO_INTERFACE@@QEAAXPEBD0@Z @742 NONAME
?setUString@CMPluginBase@@QEAAXIPEBD0@Z @743 NONAME
?setUString@CMPluginBase@@QEAAXPEBD0@Z @744 NONAME
-?getKeyList@SESSION_INFO@@QEAAAEAU?$LIST@UUSERINFO@@@@XZ @745 NONAME
PUAddPopup @746
PUAddPopupW @747
PUChangeTextW @748
diff --git a/src/mir_app/src/srmm_base.cpp b/src/mir_app/src/srmm_base.cpp
index e2a0912349..39cc182ea2 100644
--- a/src/mir_app/src/srmm_base.cpp
+++ b/src/mir_app/src/srmm_base.cpp
@@ -425,7 +425,7 @@ LRESULT CSrmmBaseDialog::WndProc_Nicklist(UINT msg, WPARAM wParam, LPARAM lParam
if (dc == nullptr)
break;
- int nUsers = m_si->getUserList().getCount();
+ int nUsers = m_nickList.GetCount();
int index = m_nickList.SendMsg(LB_GETTOPINDEX, 0, 0);
if (index == LB_ERR || nUsers <= 0)
@@ -675,13 +675,26 @@ void CSrmmBaseDialog::UpdateFilterButton()
m_btnFilter.SendMsg(BUTTONADDTOOLTIP, (WPARAM)(m_bFilterEnabled ? TranslateT("Disable the event filter (Ctrl+F)") : TranslateT("Enable the event filter (Ctrl+F)")), BATF_UNICODE);
}
+/////////////////////////////////////////////////////////////////////////////////////////
+
+static int compareStub(const void *p1, const void *p2)
+{
+ return g_chatApi.UM_CompareItem(*(USERINFO **)p1, *(USERINFO **)p2);
+}
+
void CSrmmBaseDialog::UpdateNickList()
{
int idx = m_nickList.SendMsg(LB_GETTOPINDEX, 0, 0);
m_nickList.SetDraw(false);
m_nickList.ResetContent();
- for (auto &ui : m_si->getUserList())
+
+ auto &fromList = m_si->getUserList();
+ LIST<USERINFO> tmpList(fromList.getCount());
+ List_Copy((SortedList *)&fromList, (SortedList *)&tmpList, sizeof(void *));
+ qsort(tmpList.getArray(), tmpList.getCount(), sizeof(void *), compareStub);
+
+ for (auto &ui : tmpList)
m_nickList.AddString(ui->pszNick, LPARAM(ui));
m_nickList.SendMsg(LB_SETTOPINDEX, idx, 0);