From 1ba1e51fc6fa7e30b0a627a141348f515ffaba76 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 13 Oct 2018 21:29:05 +0300 Subject: chat api: - GC_SHAREDUSERS flag added to share the same array of users for all group chats; - USERINFO.next removed; - MODULEINFO.arUsers & SESSION_INFO.arUsers introduced to maintain user lists; - MM_AddModule removed; - memory allocation model changed for MODULEINFO & SESSION_INFO - MM_CreateModule & SM_CreateSession members are added to g_chatApi --- plugins/Scriver/src/chat_main.cpp | 6 +++ plugins/Scriver/src/chat_window.cpp | 73 +++++++++++++++--------------------- plugins/Scriver/src/input.cpp | 1 - plugins/TabSRMM/src/chat.h | 2 +- plugins/TabSRMM/src/chat_log.cpp | 4 +- plugins/TabSRMM/src/chat_main.cpp | 12 ++++++ plugins/TabSRMM/src/chat_manager.cpp | 17 ++++----- plugins/TabSRMM/src/chat_tools.cpp | 2 +- plugins/TabSRMM/src/chat_window.cpp | 44 +++++++++------------- plugins/TabSRMM/src/msgdlgutils.cpp | 2 +- plugins/TabSRMM/src/taskbar.cpp | 61 ++++++++++++++---------------- 11 files changed, 106 insertions(+), 118 deletions(-) (limited to 'plugins') diff --git a/plugins/Scriver/src/chat_main.cpp b/plugins/Scriver/src/chat_main.cpp index 191bd75ffd..9bd5f5b4f2 100644 --- a/plugins/Scriver/src/chat_main.cpp +++ b/plugins/Scriver/src/chat_main.cpp @@ -80,6 +80,11 @@ static void OnDestroyModule(MODULEINFO *mi) if (mi->hOfflineTalkIcon) DestroyIcon(mi->hOfflineTalkIcon); } +static MODULEINFO* MM_CreateModule() +{ + return new MODULEINFO(); +} + static void OnCreateModule(MODULEINFO *mi) { HIMAGELIST hList = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 0); @@ -130,6 +135,7 @@ int Chat_Load() CHAT_MANAGER_INITDATA data = { &g_Settings, sizeof(MODULEINFO), sizeof(SESSION_INFO), LPGENW("Messaging") L"/" LPGENW("Group chats"), FONTMODE_SKIP, &g_plugin }; Chat_CustomizeApi(&data); + g_chatApi.MM_CreateModule = MM_CreateModule; g_chatApi.OnCreateModule = OnCreateModule; g_chatApi.OnDestroyModule = OnDestroyModule; g_chatApi.OnLoadSettings = OnLoadSettings; diff --git a/plugins/Scriver/src/chat_window.cpp b/plugins/Scriver/src/chat_window.cpp index 005c5e1114..ead6d34283 100644 --- a/plugins/Scriver/src/chat_window.cpp +++ b/plugins/Scriver/src/chat_window.cpp @@ -83,7 +83,7 @@ LBL_SkipEnd: if (m_pLastSession != nullptr) pszName = m_pLastSession->ptszName; } - else pszName = g_chatApi.UM_FindUserAutoComplete(m_si->pUsers, m_wszSearchQuery, m_wszSearchResult); + else pszName = g_chatApi.UM_FindUserAutoComplete(m_si, m_wszSearchQuery, m_wszSearchResult); mir_free(pszText); replaceStrW(m_wszSearchResult, nullptr); @@ -116,9 +116,9 @@ void CChatRoomDlg::FixTabIcons() HICON hIcon; if (!(m_si->wState & GC_EVENT_HIGHLIGHT)) { if (m_si->wState & STATE_TALK) - hIcon = (m_si->wStatus == ID_STATUS_ONLINE) ? g_chatApi.MM_FindModule(m_si->pszModule)->hOnlineTalkIcon : g_chatApi.MM_FindModule(m_si->pszModule)->hOfflineTalkIcon; + hIcon = (m_si->wStatus == ID_STATUS_ONLINE) ? m_si->pMI->hOnlineTalkIcon : m_si->pMI->hOfflineTalkIcon; else - hIcon = (m_si->wStatus == ID_STATUS_ONLINE) ? g_chatApi.MM_FindModule(m_si->pszModule)->hOnlineIcon : g_chatApi.MM_FindModule(m_si->pszModule)->hOfflineIcon; + hIcon = (m_si->wStatus == ID_STATUS_ONLINE) ? m_si->pMI->hOnlineIcon : m_si->pMI->hOfflineIcon; } else hIcon = g_dat.hMsgIcon; @@ -157,7 +157,7 @@ void CChatRoomDlg::MessageDialogResize(int w, int h) m_btnNickList.Enable(true); m_btnFilter.Enable(true); if (m_si->iType == GCW_CHATROOM) - m_btnChannelMgr.Enable(g_chatApi.MM_FindModule(m_si->pszModule)->bChanMgr); + m_btnChannelMgr.Enable(m_si->pMI->bChanMgr); } int toolbarTopY = bToolbar ? h - m_pParent->iSplitterY - toolbarHeight : h - m_pParent->iSplitterY; @@ -310,10 +310,6 @@ void CChatRoomDlg::onClick_Ok(CCtrlButton *pButton) if (!pButton->Enabled()) return; - MODULEINFO *mi = g_chatApi.MM_FindModule(m_si->pszModule); - if (mi == nullptr) - return; - char *pszRtf = m_message.GetRichTextRtf(); if (pszRtf == nullptr) return; @@ -332,7 +328,7 @@ void CChatRoomDlg::onClick_Ok(CCtrlButton *pButton) ptszText.Trim(); ptszText.Replace(L"%", L"%%"); - if (mi->bAckMsg) { + if (m_si->pMI->bAckMsg) { EnableWindow(m_message.GetHwnd(), FALSE); m_message.SendMsg(EM_SETREADONLY, TRUE, 0); } @@ -437,17 +433,14 @@ void CChatRoomDlg::UpdateNickList() { m_nickList.SendMsg(WM_SETREDRAW, FALSE, 0); m_nickList.SendMsg(LB_RESETCONTENT, 0, 0); - for (int index = 0; index < m_si->nUsersInNicklist; index++) { - USERINFO *ui = g_chatApi.SM_GetUserFromIndex(m_si->ptszID, m_si->pszModule, index); - if (ui) { - char szIndicator = SM_GetStatusIndicator(m_si, ui); - if (szIndicator > '\0') { - static wchar_t ptszBuf[128]; - mir_snwprintf(ptszBuf, L"%c%s", szIndicator, ui->pszNick); - m_nickList.SendMsg(LB_ADDSTRING, 0, (LPARAM)ptszBuf); - } - else m_nickList.SendMsg(LB_ADDSTRING, 0, (LPARAM)ui->pszNick); + for (auto &ui : m_si->getUserList()) { + char szIndicator = SM_GetStatusIndicator(m_si, ui); + if (szIndicator > '\0') { + static wchar_t ptszBuf[128]; + mir_snwprintf(ptszBuf, L"%c%s", szIndicator, ui->pszNick); + m_nickList.SendMsg(LB_ADDSTRING, 0, (LPARAM)ptszBuf); } + else m_nickList.SendMsg(LB_ADDSTRING, 0, (LPARAM)ui->pszNick); } m_nickList.SendMsg(WM_SETREDRAW, TRUE, 0); InvalidateRect(m_nickList.GetHwnd(), nullptr, FALSE); @@ -459,18 +452,14 @@ void CChatRoomDlg::UpdateOptions() { m_btnNickList.SendMsg(BM_SETIMAGE, IMAGE_ICON, (LPARAM)GetCachedIcon(m_bNicklistEnabled ? "chat_nicklist" : "chat_nicklist2")); m_btnFilter.SendMsg(BM_SETIMAGE, IMAGE_ICON, (LPARAM)GetCachedIcon(m_bFilterEnabled ? "chat_filter" : "chat_filter2")); - { - MODULEINFO *pInfo = g_chatApi.MM_FindModule(m_si->pszModule); - if (pInfo) { - m_btnBold.Enable(pInfo->bBold); - m_btnItalic.Enable(pInfo->bItalics); - m_btnUnderline.Enable(pInfo->bUnderline); - m_btnColor.Enable(pInfo->bColor); - m_btnBkColor.Enable(pInfo->bBkgColor); - if (m_si->iType == GCW_CHATROOM) - m_btnChannelMgr.Enable(pInfo->bChanMgr); - } - } + + m_btnBold.Enable(m_si->pMI->bBold); + m_btnItalic.Enable(m_si->pMI->bItalics); + m_btnUnderline.Enable(m_si->pMI->bUnderline); + m_btnColor.Enable(m_si->pMI->bColor); + m_btnBkColor.Enable(m_si->pMI->bBkgColor); + if (m_si->iType == GCW_CHATROOM) + m_btnChannelMgr.Enable(m_si->pMI->bChanMgr); UpdateStatusBar(); UpdateTitle(); @@ -511,14 +500,13 @@ void CChatRoomDlg::UpdateOptions() void CChatRoomDlg::UpdateStatusBar() { - MODULEINFO *mi = g_chatApi.MM_FindModule(m_si->pszModule); wchar_t szTemp[512]; - mir_snwprintf(szTemp, L"%s : %s", mi->ptszModDispName, m_si->ptszStatusbarText ? m_si->ptszStatusbarText : L""); + mir_snwprintf(szTemp, L"%s : %s", m_si->pMI->ptszModDispName, m_si->ptszStatusbarText ? m_si->ptszStatusbarText : L""); StatusBarData sbd; sbd.iItem = 0; sbd.iFlags = SBDF_TEXT | SBDF_ICON; - sbd.hIcon = m_si->wStatus == ID_STATUS_ONLINE ? mi->hOnlineIcon : mi->hOfflineIcon; + sbd.hIcon = m_si->wStatus == ID_STATUS_ONLINE ? m_si->pMI->hOnlineIcon : m_si->pMI->hOfflineIcon; sbd.pszText = szTemp; SendMessage(m_hwndParent, CM_UPDATESTATUSBAR, (WPARAM)&sbd, (LPARAM)m_hwnd); @@ -534,24 +522,23 @@ void CChatRoomDlg::UpdateStatusBar() void CChatRoomDlg::UpdateTitle() { - MODULEINFO *mi = g_chatApi.MM_FindModule(m_si->pszModule); - TitleBarData tbd = {}; - tbd.hIcon = (m_si->wStatus == ID_STATUS_ONLINE) ? mi->hOnlineIcon : mi->hOfflineIcon; - tbd.hIconBig = (m_si->wStatus == ID_STATUS_ONLINE) ? mi->hOnlineIconBig : mi->hOfflineIconBig; + tbd.hIcon = (m_si->wStatus == ID_STATUS_ONLINE) ? m_si->pMI->hOnlineIcon : m_si->pMI->hOfflineIcon; + tbd.hIconBig = (m_si->wStatus == ID_STATUS_ONLINE) ? m_si->pMI->hOnlineIconBig : m_si->pMI->hOfflineIconBig; tbd.hIconNot = (m_si->wState & (GC_EVENT_HIGHLIGHT | STATE_TALK)) ? GetCachedIcon("chat_overlay") : nullptr; + int nUsers = m_si->getUserList().getCount(); wchar_t szTemp[512]; switch (m_si->iType) { case GCW_CHATROOM: mir_snwprintf(szTemp, - (m_si->nUsersInNicklist == 1) ? TranslateT("%s: chat room (%u user)") : TranslateT("%s: chat room (%u users)"), - m_si->ptszName, m_si->nUsersInNicklist); + (nUsers == 1) ? TranslateT("%s: chat room (%u user)") : TranslateT("%s: chat room (%u users)"), + m_si->ptszName, nUsers); break; case GCW_PRIVMESS: mir_snwprintf(szTemp, - (m_si->nUsersInNicklist == 1) ? TranslateT("%s: message session") : TranslateT("%s: message session (%u users)"), - m_si->ptszName, m_si->nUsersInNicklist); + (nUsers == 1) ? TranslateT("%s: message session") : TranslateT("%s: message session (%u users)"), + m_si->ptszName, nUsers); break; case GCW_SERVER: mir_snwprintf(szTemp, L"%s: Server", m_si->ptszName); @@ -845,7 +832,7 @@ LRESULT CChatRoomDlg::WndProc_Nicklist(UINT msg, WPARAM wParam, LPARAM lParam) // string we have int iItems = m_nickList.SendMsg(LB_GETCOUNT, 0, 0); for (int i = 0; i < iItems; i++) { - USERINFO *ui = g_chatApi.UM_FindUserFromIndex(m_si->pUsers, i); + USERINFO *ui = g_chatApi.UM_FindUserFromIndex(m_si, i); if (ui) { if (!wcsnicmp(ui->pszNick, m_wszSearch, mir_wstrlen(m_wszSearch))) { m_nickList.SendMsg(LB_SETCURSEL, i, 0); diff --git a/plugins/Scriver/src/input.cpp b/plugins/Scriver/src/input.cpp index 620db9d6b1..048e2adcde 100644 --- a/plugins/Scriver/src/input.cpp +++ b/plugins/Scriver/src/input.cpp @@ -116,7 +116,6 @@ bool CScriverWindow::CheckSend() { BOOL isShift = GetKeyState(VK_SHIFT) & 0x8000; BOOL isCtrl = GetKeyState(VK_CONTROL) & 0x8000; - BOOL isAlt = GetKeyState(VK_MENU) & 0x8000; if (!isShift && !isCtrl && g_dat.sendMode == SEND_ON_ENTER) { PostMessage(m_hwnd, WM_COMMAND, IDOK, 0); diff --git a/plugins/TabSRMM/src/chat.h b/plugins/TabSRMM/src/chat.h index 56a0b742b8..d5d928b135 100644 --- a/plugins/TabSRMM/src/chat.h +++ b/plugins/TabSRMM/src/chat.h @@ -117,7 +117,7 @@ SESSION_INFO* SM_FindSessionAutoComplete(const char* pszModule, SESSION_INFO* cu BOOL SM_ReconfigureFilters(); -int UM_CompareItem(USERINFO *u1, const wchar_t* pszNick, WORD wStatus); +int UM_CompareItem(const USERINFO *u1, const USERINFO *u2); // tools.c BOOL DoSoundsFlashPopupTrayStuff(SESSION_INFO *si, GCEVENT *gce, BOOL bHighlight, int bManyFix); diff --git a/plugins/TabSRMM/src/chat_log.cpp b/plugins/TabSRMM/src/chat_log.cpp index d65b6a0e1f..4bce806bb2 100644 --- a/plugins/TabSRMM/src/chat_log.cpp +++ b/plugins/TabSRMM/src/chat_log.cpp @@ -78,7 +78,7 @@ static int Log_AppendIEView(LOGSTREAMDATA* streamData, BOOL simpleMode, wchar_t int lineLen, textCharsCount = 0; wchar_t* line = (wchar_t*)_alloca(8001 * sizeof(wchar_t)); wchar_t* d; - MODULEINFO *mi = g_chatApi.MM_FindModule(streamData->si->pszModule); + MODULEINFO *mi = streamData->si->pMI; va_start(va, fmt); lineLen = mir_vsnwprintf(line, 8000, fmt, va); @@ -697,8 +697,8 @@ char* Log_CreateRtfHeader(void) char* Log_CreateRTF(LOGSTREAMDATA *streamData) { LOGINFO *lin = streamData->lin; - MODULEINFO *mi = g_chatApi.MM_FindModule(streamData->si->pszModule); SESSION_INFO *si = streamData->si; + MODULEINFO *mi = si->pMI; // ### RTF HEADER diff --git a/plugins/TabSRMM/src/chat_main.cpp b/plugins/TabSRMM/src/chat_main.cpp index 1dc5e20f7e..73611ef337 100644 --- a/plugins/TabSRMM/src/chat_main.cpp +++ b/plugins/TabSRMM/src/chat_main.cpp @@ -209,6 +209,16 @@ static void stubShowRoom(SESSION_INFO *si) ShowRoom(nullptr, si); } +static MODULEINFO* MM_CreateModule() +{ + return new MODULEINFO(); +} + +static SESSION_INFO* SM_CreateSession() +{ + return new SESSION_INFO(); +} + // load the module int Chat_Load() { @@ -218,11 +228,13 @@ int Chat_Load() CHAT_MANAGER_INITDATA data = { &g_Settings, sizeof(MODULEINFO), sizeof(SESSION_INFO), LPGENW("Message sessions") L"/" LPGENW("Group chats"), FONTMODE_ALTER, &g_plugin }; Chat_CustomizeApi(&data); + g_chatApi.MM_CreateModule = MM_CreateModule; g_chatApi.OnCreateModule = OnCreateModule; g_chatApi.OnNewUser = OnNewUser; g_chatApi.OnSetTopic = OnSetTopic; + g_chatApi.SM_CreateSession = SM_CreateSession; g_chatApi.OnCreateSession = OnCreateSession; g_chatApi.OnReplaceSession = OnReplaceSession; diff --git a/plugins/TabSRMM/src/chat_manager.cpp b/plugins/TabSRMM/src/chat_manager.cpp index c40ed9e821..e2232e6050 100644 --- a/plugins/TabSRMM/src/chat_manager.cpp +++ b/plugins/TabSRMM/src/chat_manager.cpp @@ -44,29 +44,26 @@ static int sttCompareNicknames(const wchar_t *s1, const wchar_t *s2) return mir_wstrcmpi(s1, s2); } -int UM_CompareItem(USERINFO *u1, const wchar_t* pszNick, WORD wStatus) +int UM_CompareItem(const USERINFO *u1, const USERINFO *u2) { WORD dw1 = u1->Status; - WORD dw2 = wStatus; + WORD dw2 = u2->Status; for (int i = 0; i < 8; i++) { if ((dw1 & 1) && !(dw2 & 1)) return -1; if ((dw2 & 1) && !(dw1 & 1)) return 1; - if ((dw1 & 1) && (dw2 & 1)) { - if (g_Settings.bAlternativeSorting) - return sttCompareNicknames(u1->pszNick, pszNick); - else - return mir_wstrcmp(u1->pszNick, pszNick); - } + if ((dw1 & 1) && (dw2 & 1)) + break; + dw1 = dw1 >> 1; dw2 = dw2 >> 1; } if (g_Settings.bAlternativeSorting) - return sttCompareNicknames(u1->pszNick, pszNick); - return mir_wstrcmp(u1->pszNick, pszNick); + return sttCompareNicknames(u1->pszNick, u2->pszNick); + return mir_wstrcmp(u1->pszNick, u2->pszNick); } //--------------------------------------------------- diff --git a/plugins/TabSRMM/src/chat_tools.cpp b/plugins/TabSRMM/src/chat_tools.cpp index cebe7cb32c..0fd56c7b0d 100644 --- a/plugins/TabSRMM/src/chat_tools.cpp +++ b/plugins/TabSRMM/src/chat_tools.cpp @@ -534,7 +534,7 @@ char GetIndicator(SESSION_INFO *si, LPCTSTR ptszNick, int *iNickIndex) if (iNickIndex) *iNickIndex = 0; - for (USERINFO *ui = si->pUsers; ui; ui = ui->next) { + for (auto &ui : si->getUserList()) { if (!mir_wstrcmp(ui->pszNick, ptszNick)) { STATUSINFO *ti = g_chatApi.TM_FindStatus(si->pStatuses, g_chatApi.TM_WordToString(si->pStatuses, ui->Status)); if (ti) { diff --git a/plugins/TabSRMM/src/chat_window.cpp b/plugins/TabSRMM/src/chat_window.cpp index 4b2381cb64..e554a73c3b 100644 --- a/plugins/TabSRMM/src/chat_window.cpp +++ b/plugins/TabSRMM/src/chat_window.cpp @@ -254,11 +254,8 @@ int CChatRoomDlg::Resizer(UTILRESIZECONTROL *urc) m_btnNickList.Enable(true); m_btnFilter.Enable(true); - if (m_si->iType == GCW_CHATROOM) { - MODULEINFO *tmp = g_chatApi.MM_FindModule(m_si->pszModule); - if (tmp) - m_btnChannelMgr.Enable(tmp->bChanMgr); - } + if (m_si->iType == GCW_CHATROOM) + m_btnChannelMgr.Enable(m_si->pMI->bChanMgr); } else { m_nickList.Hide(); @@ -421,7 +418,7 @@ LBL_SkipEnd: if (m_pLastSession != nullptr) pszName = m_pLastSession->ptszName; } - else pszName = g_chatApi.UM_FindUserAutoComplete(m_si->pUsers, m_wszSearchQuery, m_wszSearchResult); + else pszName = g_chatApi.UM_FindUserAutoComplete(m_si, m_wszSearchQuery, m_wszSearchResult); replaceStrW(m_wszSearchResult, nullptr); @@ -623,10 +620,6 @@ void CChatRoomDlg::onClick_OK(CCtrlButton*) if (GetSendButtonState(m_hwnd) == PBS_DISABLED) return; - MODULEINFO *mi = g_chatApi.MM_FindModule(m_si->pszModule); - if (mi == nullptr) - return; - ptrA pszRtf(m_message.GetRichTextRtf()); g_chatApi.SM_AddCommand(m_si->ptszID, m_si->pszModule, pszRtf); @@ -637,7 +630,7 @@ void CChatRoomDlg::onClick_OK(CCtrlButton*) DoRtfToTags(ptszText); ptszText.Trim(); - if (mi->bAckMsg) { + if (m_si->pMI->bAckMsg) { m_message.Enable(false); m_message.SendMsg(EM_SETREADONLY, TRUE, 0); } @@ -654,7 +647,7 @@ void CChatRoomDlg::onClick_OK(CCtrlButton*) if (ptszText[0] == '/' || m_si->iType == GCW_SERVER) fSound = false; Chat_DoEventHook(m_si, GC_USER_MESSAGE, nullptr, ptszText, 0); - mi->idleTimeStamp = time(0); + m_si->pMI->idleTimeStamp = time(0); UpdateStatusBar(); if (m_pContainer) if (fSound && !nen_options.iNoSounds && !(m_pContainer->dwFlags & CNT_NOSOUND)) @@ -831,7 +824,7 @@ void CChatRoomDlg::ShowFilterMenu() void CChatRoomDlg::UpdateNickList() { int i = m_nickList.SendMsg(LB_GETTOPINDEX, 0, 0); - m_nickList.SendMsg(LB_SETCOUNT, m_si->nUsersInNicklist, 0); + m_nickList.SendMsg(LB_SETCOUNT, m_si->getUserList().getCount(), 0); m_nickList.SendMsg(LB_SETTOPINDEX, i, 0); UpdateTitle(); m_hTabIcon = m_hTabStatusIcon; @@ -839,7 +832,7 @@ void CChatRoomDlg::UpdateNickList() void CChatRoomDlg::UpdateOptions() { - MODULEINFO *pInfo = m_si ? g_chatApi.MM_FindModule(m_si->pszModule) : nullptr; + MODULEINFO *pInfo = m_si ? m_si->pMI : nullptr; if (pInfo) { m_btnBold.Enable(pInfo->bBold); m_btnItalic.Enable(pInfo->bItalics); @@ -871,10 +864,7 @@ void CChatRoomDlg::UpdateStatusBar() return; //Mad: strange rare crash here... - MODULEINFO *mi = g_chatApi.MM_FindModule(m_si->pszModule); - if (!mi) - return; - + MODULEINFO *mi = m_si->pMI; if (!mi->ptszModDispName) return; @@ -927,20 +917,21 @@ void CChatRoomDlg::UpdateTitle() wchar_t szTemp[100]; HICON hIcon = nullptr; + int nUsers = m_si->getUserList().getCount(); switch (m_si->iType) { case GCW_CHATROOM: hIcon = Skin_LoadProtoIcon(m_si->pszModule, (m_wStatus <= ID_STATUS_OFFLINE) ? ID_STATUS_OFFLINE : m_wStatus); mir_snwprintf(szTemp, - (m_si->nUsersInNicklist == 1) ? TranslateT("%s: chat room (%u user%s)") : TranslateT("%s: chat room (%u users%s)"), - szNick, m_si->nUsersInNicklist, m_bFilterEnabled ? TranslateT(", event filter active") : L""); + (nUsers == 1) ? TranslateT("%s: chat room (%u user%s)") : TranslateT("%s: chat room (%u users%s)"), + szNick, nUsers, m_bFilterEnabled ? TranslateT(", event filter active") : L""); break; case GCW_PRIVMESS: hIcon = Skin_LoadProtoIcon(m_si->pszModule, (m_wStatus <= ID_STATUS_OFFLINE) ? ID_STATUS_OFFLINE : m_wStatus); - if (m_si->nUsersInNicklist == 1) + if (nUsers == 1) mir_snwprintf(szTemp, TranslateT("%s: message session"), szNick); else - mir_snwprintf(szTemp, TranslateT("%s: message session (%u users)"), szNick, m_si->nUsersInNicklist); + mir_snwprintf(szTemp, TranslateT("%s: message session (%u users)"), szNick, nUsers); break; case GCW_SERVER: mir_snwprintf(szTemp, L"%s: Server", szNick); @@ -1092,8 +1083,7 @@ LRESULT CChatRoomDlg::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) RemoveMenu(hSubMenu, 8, MF_BYPOSITION); RemoveMenu(hSubMenu, 4, MF_BYPOSITION); - MODULEINFO *mi = g_chatApi.MM_FindModule(m_si->pszModule); - EnableMenuItem(hSubMenu, IDM_PASTEFORMATTED, MF_BYCOMMAND | ((mi && mi->bBold) ? MF_ENABLED : MF_GRAYED)); + EnableMenuItem(hSubMenu, IDM_PASTEFORMATTED, MF_BYCOMMAND | (m_si->pMI->bBold ? MF_ENABLED : MF_GRAYED)); TranslateMenu(hSubMenu); CHARRANGE sel, all = { 0, -1 }; @@ -1500,7 +1490,7 @@ LRESULT CChatRoomDlg::WndProc_Nicklist(UINT msg, WPARAM wParam, LPARAM lParam) // string we have int i, iItems = m_nickList.SendMsg(LB_GETCOUNT, 0, 0); for (i = 0; i < iItems; i++) { - USERINFO *ui = g_chatApi.UM_FindUserFromIndex(m_si->pUsers, i); + USERINFO *ui = g_chatApi.UM_FindUserFromIndex(m_si, i); if (ui) { if (!wcsnicmp(ui->pszNick, m_wszSearch, mir_wstrlen(m_wszSearch))) { m_nickList.SendMsg(LB_SETSEL, FALSE, -1); @@ -1765,7 +1755,7 @@ INT_PTR CChatRoomDlg::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) int x_offset = 0; int index = dis->itemID; - USERINFO *ui = g_chatApi.UM_FindUserFromIndex(m_si->pUsers, index); + USERINFO *ui = g_chatApi.UM_FindUserFromIndex(m_si, index); if (ui == nullptr) return TRUE; @@ -2047,7 +2037,7 @@ INT_PTR CChatRoomDlg::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) // clicked a nick name if (g_Settings.bClickableNicks) { if (msg == WM_RBUTTONDOWN) { - for (USERINFO *ui = m_si->pUsers; ui; ui = ui->next) { + for (auto &ui : m_si->getUserList()) { if (mir_wstrcmp(ui->pszNick, tr.lpstrText)) continue; diff --git a/plugins/TabSRMM/src/msgdlgutils.cpp b/plugins/TabSRMM/src/msgdlgutils.cpp index 7de395df5e..b870db669d 100644 --- a/plugins/TabSRMM/src/msgdlgutils.cpp +++ b/plugins/TabSRMM/src/msgdlgutils.cpp @@ -862,7 +862,7 @@ BOOL CTabBaseDlg::DoRtfToTags(CMStringW &pszText) const } else idx += 5; - MODULEINFO *mi = (isChat()) ? g_chatApi.MM_FindModule(m_si->pszModule) : nullptr; + MODULEINFO *mi = (isChat()) ? m_si->pMI : nullptr; bool bInsideColor = false, bInsideUl = false; CMStringW res; diff --git a/plugins/TabSRMM/src/taskbar.cpp b/plugins/TabSRMM/src/taskbar.cpp index 42acd42c6d..88c7c38328 100644 --- a/plugins/TabSRMM/src/taskbar.cpp +++ b/plugins/TabSRMM/src/taskbar.cpp @@ -840,39 +840,37 @@ void CThumbMUC::renderContent() if (si == nullptr) return; - const MODULEINFO *mi = g_chatApi.MM_FindModule(si->pszModule); - if (mi) { - wchar_t szTemp[250]; - if (m_dat->m_dwUnread) { - mir_snwprintf(szTemp, TranslateT("%d unread"), m_dat->m_dwUnread); - CSkin::RenderText(m_hdc, m_dat->m_hTheme, szTemp, &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true); - m_rcIcon.top += m_sz.cy; + const MODULEINFO *mi = si->pMI; + wchar_t szTemp[250]; + if (m_dat->m_dwUnread) { + mir_snwprintf(szTemp, TranslateT("%d unread"), m_dat->m_dwUnread); + CSkin::RenderText(m_hdc, m_dat->m_hTheme, szTemp, &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true); + m_rcIcon.top += m_sz.cy; + } + if (si->iType != GCW_SERVER) { + wchar_t* _p = nullptr; + if (si->ptszStatusbarText) + _p = wcschr(si->ptszStatusbarText, ']'); + if (_p) { + _p++; + wchar_t _t = *_p; + *_p = 0; + mir_snwprintf(szTemp, TranslateT("Chat room %s"), si->ptszStatusbarText); + *_p = _t; } - if (si->iType != GCW_SERVER) { - wchar_t* _p = nullptr; - if (si->ptszStatusbarText) - _p = wcschr(si->ptszStatusbarText, ']'); - if (_p) { - _p++; - wchar_t _t = *_p; - *_p = 0; - mir_snwprintf(szTemp, TranslateT("Chat room %s"), si->ptszStatusbarText); - *_p = _t; - } - else - mir_snwprintf(szTemp, TranslateT("Chat room %s"), L""); - CSkin::RenderText(m_hdc, m_dat->m_hTheme, szTemp, &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true); + else + mir_snwprintf(szTemp, TranslateT("Chat room %s"), L""); + CSkin::RenderText(m_hdc, m_dat->m_hTheme, szTemp, &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true); + m_rcIcon.top += m_sz.cy; + mir_snwprintf(szTemp, TranslateT("%d user(s)"), si->getUserList().getCount()); + CSkin::RenderText(m_hdc, m_dat->m_hTheme, szTemp, &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true); + } + else { + mir_snwprintf(szTemp, TranslateT("Server window")); + CSkin::RenderText(m_hdc, m_dat->m_hTheme, szTemp, &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true); + if (mi->tszIdleMsg[0] && mir_wstrlen(mi->tszIdleMsg) > 2) { m_rcIcon.top += m_sz.cy; - mir_snwprintf(szTemp, TranslateT("%d user(s)"), si->nUsersInNicklist); - CSkin::RenderText(m_hdc, m_dat->m_hTheme, szTemp, &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true); - } - else { - mir_snwprintf(szTemp, TranslateT("Server window")); - CSkin::RenderText(m_hdc, m_dat->m_hTheme, szTemp, &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true); - if (mi->tszIdleMsg[0] && mir_wstrlen(mi->tszIdleMsg) > 2) { - m_rcIcon.top += m_sz.cy; - CSkin::RenderText(m_hdc, m_dat->m_hTheme, &mi->tszIdleMsg[2], &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true); - } + CSkin::RenderText(m_hdc, m_dat->m_hTheme, &mi->tszIdleMsg[2], &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true); } } @@ -887,7 +885,6 @@ void CThumbMUC::renderContent() szStatusMsg = TranslateT("no topic set."); } else if (mi) { - wchar_t szTemp[250]; mir_snwprintf(szTemp, TranslateT("%s on %s%s"), m_dat->m_wszMyNickname, mi->ptszModDispName, L""); szStatusMsg = szTemp; } -- cgit v1.2.3