From 44525f461757fc859616fda16820351b07238842 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 27 Jun 2019 21:23:35 +0300 Subject: manual access to CList/Group restricted --- src/mir_app/src/addcontact.cpp | 2 +- src/mir_app/src/chat_clist.cpp | 10 ++++------ src/mir_app/src/clcitems.cpp | 6 +++--- src/mir_app/src/clistgroups.cpp | 28 +++++++++++++++++++++------- src/mir_app/src/clistsettings.cpp | 2 +- src/mir_app/src/meta_menu.cpp | 4 ++-- src/mir_app/src/mir_app.def | 2 ++ src/mir_app/src/mir_app64.def | 2 ++ src/mir_app/src/movetogroup.cpp | 2 +- 9 files changed, 37 insertions(+), 21 deletions(-) (limited to 'src/mir_app') diff --git a/src/mir_app/src/addcontact.cpp b/src/mir_app/src/addcontact.cpp index a2c80accc2..4d89422941 100644 --- a/src/mir_app/src/addcontact.cpp +++ b/src/mir_app/src/addcontact.cpp @@ -74,7 +74,7 @@ public: SetCaption(TranslateT("Add contact")); int groupSel = 0; - ptrW tszGroup(db_get_wsa(m_hContact, "CList", "Group")); + ptrW tszGroup(Clist_GetGroup(m_hContact)); wchar_t *grpName; for (int groupId = 1; (grpName = Clist_GroupGetName(groupId, nullptr)) != nullptr; groupId++) { int id = m_group.AddString(grpName, groupId); diff --git a/src/mir_app/src/chat_clist.cpp b/src/mir_app/src/chat_clist.cpp index 3a40052fc0..cbfa2c6118 100644 --- a/src/mir_app/src/chat_clist.cpp +++ b/src/mir_app/src/chat_clist.cpp @@ -37,9 +37,9 @@ MCONTACT AddRoom(const char *pszModule, const wchar_t *pszRoom, const wchar_t *p MCONTACT hContact = g_chatApi.FindRoom(pszModule, pszRoom); if (hContact) { // contact exist, make sure it is in the right group if (mir_wstrlen(wszGroup)) { - ptrW grpName(db_get_wsa(hContact, "CList", "Group")); + ptrW grpName(Clist_GetGroup(hContact)); if (!mir_wstrcmp(wszGroup, grpName)) - db_set_ws(hContact, "CList", "Group", wszGroup); + Clist_SetGroup(hContact, wszGroup); } db_set_w(hContact, pszModule, "Status", ID_STATUS_OFFLINE); @@ -52,10 +52,8 @@ MCONTACT AddRoom(const char *pszModule, const wchar_t *pszRoom, const wchar_t *p return 0; Proto_AddToContact(hContact, pszModule); - if (mir_wstrlen(wszGroup)) - db_set_ws(hContact, "CList", "Group", wszGroup); - else - db_unset(hContact, "CList", "Group"); + Clist_SetGroup(hContact, wszGroup); + db_set_ws(hContact, pszModule, "Nick", pszDisplayName); db_set_ws(hContact, pszModule, "ChatRoomID", pszRoom); db_set_b(hContact, pszModule, "ChatRoom", (BYTE)iType); diff --git a/src/mir_app/src/clcitems.cpp b/src/mir_app/src/clcitems.cpp index 72df88ccc5..006b36d6ae 100644 --- a/src/mir_app/src/clcitems.cpp +++ b/src/mir_app/src/clcitems.cpp @@ -224,7 +224,7 @@ void fnAddContactToTree(HWND hwnd, ClcData *dat, MCONTACT hContact, int updateTo int i; DWORD groupFlags; ClcGroup *group; - ptrW tszGroup(db_get_wsa(hContact, "CList", "Group")); + ptrW tszGroup(Clist_GetGroup(hContact)); if (tszGroup == nullptr) group = &dat->list; else { @@ -315,7 +315,7 @@ MIR_APP_DLL(void) Clist_DeleteItemFromTree(HWND hwnd, MCONTACT hItem) if (!IsHContactContact(hItem)) return; - ptrW wszGroup(db_get_wsa(hItem, "CList", "Group")); + ptrW wszGroup(Clist_GetGroup(hItem)); if (wszGroup == nullptr) return; @@ -369,7 +369,7 @@ void fnRebuildEntireList(HWND hwnd, ClcData *dat) continue; ClcGroup *group; - ptrW tszGroupName(db_get_wsa(hContact, "CList", "Group")); + ptrW tszGroupName(Clist_GetGroup(hContact)); if (tszGroupName == nullptr) group = &dat->list; else { diff --git a/src/mir_app/src/clistgroups.cpp b/src/mir_app/src/clistgroups.cpp index 8ef54a46b6..e3d7163257 100644 --- a/src/mir_app/src/clistgroups.cpp +++ b/src/mir_app/src/clistgroups.cpp @@ -216,17 +216,15 @@ MIR_APP_DLL(int) Clist_GroupDelete(MGROUP hGroup) } for (auto &hContact : Contacts()) { - ptrW tszGroupName(db_get_wsa(hContact, "CList", "Group")); + ptrW tszGroupName(Clist_GetGroup(hContact)); if (!tszGroupName || !isParentOf(wszOldName, tszGroupName)) continue; + Clist_SetGroup(hContact, wszNewParent); + CLISTGROUPCHANGE grpChg = { wszOldName, 0 }; - if (!wszNewParent.IsEmpty()) { - db_set_ws(hContact, "CList", "Group", wszNewParent); + if (!wszNewParent.IsEmpty()) grpChg.pszNewName = wszNewParent; - } - else db_unset(hContact, "CList", "Group"); - NotifyEventHooks(hGroupChangeEvent, hContact, (LPARAM)&grpChg); } @@ -350,7 +348,7 @@ static int RenameGroupWithMove(int groupId, const wchar_t *szName, int move) for (auto &hContact : Contacts()) { ClcCacheEntry *cache = Clist_GetCacheEntry(hContact); if (!mir_wstrcmp(cache->tszGroup, oldName)) { - db_set_ws(hContact, "CList", "Group", szName); + Clist_SetGroup(hContact, szName); replaceStrW(cache->tszGroup, szName); } } @@ -432,6 +430,22 @@ MIR_APP_DLL(int) Clist_GroupSetFlags(MGROUP hGroup, LPARAM iNewFlags) ///////////////////////////////////////////////////////////////////////////////////////// +MIR_APP_DLL(wchar_t*) Clist_GetGroup(MCONTACT hContact) +{ + ptrW wszName(db_get_wsa(hContact, "CList", "Group")); + return (mir_wstrlen(wszName)) ? wszName.detach() : nullptr; +} + +MIR_APP_DLL(void) Clist_SetGroup(MCONTACT hContact, const wchar_t *pwszName) +{ + if (mir_wstrlen(pwszName)) + db_set_ws(hContact, "CList", "Group", pwszName); + else + db_unset(hContact, "CList", "Group"); +} + +///////////////////////////////////////////////////////////////////////////////////////// + MIR_APP_DLL(HMENU) Clist_GroupBuildMenu() { if (arByIds.getCount() == 0) diff --git a/src/mir_app/src/clistsettings.cpp b/src/mir_app/src/clistsettings.cpp index 67040037db..9a6c18a7b2 100644 --- a/src/mir_app/src/clistsettings.cpp +++ b/src/mir_app/src/clistsettings.cpp @@ -63,7 +63,7 @@ ClcCacheEntry* fnCreateCacheItem(MCONTACT hContact) void fnCheckCacheItem(ClcCacheEntry *p) { if (p->tszGroup == nullptr) - p->tszGroup = db_get_wsa(p->hContact, "CList", "Group", L""); + p->tszGroup = Clist_GetGroup(p->hContact); if (p->szProto == nullptr) p->szProto = GetContactProto(p->hContact); diff --git a/src/mir_app/src/meta_menu.cpp b/src/mir_app/src/meta_menu.cpp index 1b9ab895e5..bdc340e79d 100644 --- a/src/mir_app/src/meta_menu.cpp +++ b/src/mir_app/src/meta_menu.cpp @@ -49,7 +49,7 @@ static HGENMENU INT_PTR Meta_Convert(WPARAM wParam, LPARAM) { - ptrW tszGroup(db_get_wsa(wParam, "CList", "Group")); + ptrW tszGroup(Clist_GetGroup(wParam)); // Create a new metacontact MCONTACT hMetaContact = db_add_contact(); @@ -68,7 +68,7 @@ INT_PTR Meta_Convert(WPARAM wParam, LPARAM) Proto_AddToContact(hMetaContact, META_PROTO); if (tszGroup) - db_set_ws(hMetaContact, "CList", "Group", tszGroup); + Clist_SetGroup(hMetaContact, tszGroup); // Assign the contact to the MetaContact just created (and make default). if (!Meta_Assign(wParam, hMetaContact, TRUE)) { diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index c2b15bb198..892a952925 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -682,3 +682,5 @@ Srmm_SetIconFlags @767 ?addImgListIcon@CMPluginBase@@QAEHPAU_IMAGELIST@@H@Z @772 NONAME ImageList_AddProtoIcon @773 ImageList_AddSkinIcon @774 +Clist_GetGroup @775 +Clist_SetGroup @776 diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index 864376d2ca..6db702af0e 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -682,3 +682,5 @@ Srmm_SetIconFlags @767 ?addImgListIcon@CMPluginBase@@QEAAHPEAU_IMAGELIST@@H@Z @772 NONAME ImageList_AddProtoIcon @773 ImageList_AddSkinIcon @774 +Clist_GetGroup @775 +Clist_SetGroup @776 diff --git a/src/mir_app/src/movetogroup.cpp b/src/mir_app/src/movetogroup.cpp index d3ce3f24ae..f5d4a96962 100644 --- a/src/mir_app/src/movetogroup.cpp +++ b/src/mir_app/src/movetogroup.cpp @@ -92,7 +92,7 @@ static int OnContactMenuBuild(WPARAM wParam, LPARAM) Menu_RemoveItem((HGENMENU)p); lphGroupsItems.destroy(); - ptrW szContactGroup(db_get_wsa(wParam, "CList", "Group")); + ptrW szContactGroup(Clist_GetGroup(wParam)); int pos = 1000; -- cgit v1.2.3