From d3778c11bec78ec484295727391a1a52d02e459c Mon Sep 17 00:00:00 2001 From: LI Daobing Date: Sat, 9 Oct 2021 20:39:47 +0800 Subject: [PATCH] remove sgmlist --- src/iptux/GroupInfoManager.cpp | 16 +++++++++ src/iptux/GroupInfoManager.h | 4 +++ src/iptux/UiCoreThread.cpp | 64 +++++++++------------------------- src/iptux/UiCoreThread.h | 3 +- 4 files changed, 38 insertions(+), 49 deletions(-) diff --git a/src/iptux/GroupInfoManager.cpp b/src/iptux/GroupInfoManager.cpp index 28486862..e3c4a0e6 100644 --- a/src/iptux/GroupInfoManager.cpp +++ b/src/iptux/GroupInfoManager.cpp @@ -21,6 +21,22 @@ GroupInfo_S GroupInfoManager::addPal(PalInfo_S pal, PalInfo_SC me) { return grpinf; } +GroupInfo_S GroupInfoManager::getGroupInfo(const GroupInfo::KeyType& key) { + return groupInfos[key]; +} + +GroupInfo_S GroupInfoManager::addGroup(GroupBelongType type, + PalInfo_SC me, + std::string name) { + GroupInfo_S grpinf(new GroupInfo(type, vector(), me, logSystem)); + grpinf->grpid = g_quark_from_static_string(name.c_str()); + grpinf->name = name; + grpinf->buffer = gtk_text_buffer_new(programData->table); + grpinf->clearDialog(); + addGroupInfo(grpinf); + return grpinf; +} + GroupInfo_S GroupInfoManager::getGroupInfo(const PalInfo* pal) { return groupInfos[GroupInfo::genKey(pal)]; } diff --git a/src/iptux/GroupInfoManager.h b/src/iptux/GroupInfoManager.h index 22de1b2e..e0db8531 100644 --- a/src/iptux/GroupInfoManager.h +++ b/src/iptux/GroupInfoManager.h @@ -12,8 +12,12 @@ class GroupInfoManager { GroupInfoManager(UiProgramData_S programData, LogSystem_S logSystem); void addGroupInfo(GroupInfo_S groupInfo); + GroupInfo_S addPal(PalInfo_S pal, PalInfo_SC me); + GroupInfo_S addGroup(GroupBelongType type, PalInfo_SC me, std::string name); + GroupInfo_S getGroupInfo(const PalInfo* pal); + GroupInfo_S getGroupInfo(const GroupInfo::KeyType& key); private: UiProgramData_S programData; diff --git a/src/iptux/UiCoreThread.cpp b/src/iptux/UiCoreThread.cpp index fb0cf478..4a3a5f3d 100644 --- a/src/iptux/UiCoreThread.cpp +++ b/src/iptux/UiCoreThread.cpp @@ -35,7 +35,6 @@ namespace iptux { UiCoreThread::UiCoreThread(Application* app, shared_ptr data) : CoreThread(data), programData(data), - sgmlist(NULL), grplist(NULL), brdlist(NULL), pbn(1), @@ -63,28 +62,6 @@ void UiCoreThread::ClearAllPalFromList() { GroupInfo* grpinf; GSList* tlist; - // /* 清空常规模式下所有群组的成员 */ - // tlist = groupInfos; - // while (tlist) { - // grpinf = (GroupInfo*)tlist->data; - // if (grpinf->getDialog()) { - // session = (SessionAbstract*)g_object_get_data( - // G_OBJECT(grpinf->getDialog()), "session-class"); - // session->ClearAllPalData(); - // } - // tlist = g_slist_next(tlist); - // } - /* 清空网段模式下所有群组的成员 */ - tlist = sgmlist; - while (tlist) { - grpinf = (GroupInfo*)tlist->data; - if (grpinf->getDialog()) { - session = (SessionAbstract*)g_object_get_data( - G_OBJECT(grpinf->getDialog()), "session-class"); - session->ClearAllPalData(); - } - tlist = g_slist_next(tlist); - } /* 清空分组模式下所有群组的成员 */ tlist = grplist; while (tlist) { @@ -235,21 +212,12 @@ GroupInfo* UiCoreThread::GetPalRegularItem(const PalInfo* pal) { * @return 群组信息 */ GroupInfo* UiCoreThread::GetPalSegmentItem(const PalInfo* pal) { - GSList* tlist; - GQuark grpid; - /* 获取局域网网段ID */ auto name = ipv4_get_lan_name(pal->ipv4); - grpid = g_quark_from_string(name.empty() ? _("Others") : name.c_str()); - - tlist = sgmlist; - while (tlist) { - if (((GroupInfo*)tlist->data)->grpid == grpid) - break; - tlist = g_slist_next(tlist); - } - - return (GroupInfo*)(tlist ? tlist->data : NULL); + auto key = make_pair(GROUP_BELONG_TYPE_SEGMENT, + name.empty() ? _("Others") : name.c_str()); + auto res = groupInfoManager->getGroupInfo(key); + return res ? res.get() : nullptr; } /** @@ -298,9 +266,6 @@ void UiCoreThread::ClearSublayer() { CoreThread::ClearSublayer(); - for (tlist = sgmlist; tlist; tlist = g_slist_next(tlist)) - delete (GroupInfo*)tlist->data; - g_slist_free(sgmlist); for (tlist = grplist; tlist; tlist = g_slist_next(tlist)) delete (GroupInfo*)tlist->data; g_slist_free(grplist); @@ -357,15 +322,18 @@ GroupInfo* UiCoreThread::AttachPalSegmentItem(PPalInfo pal) { name = _("Others"); } - grpinf = new GroupInfo(GROUP_BELONG_TYPE_SEGMENT, vector(), getMe(), - logSystem); - grpinf->grpid = g_quark_from_static_string(name.c_str()); - grpinf->name = name; - grpinf->buffer = gtk_text_buffer_new(programData->table); - grpinf->clearDialog(); - sgmlist = g_slist_append(sgmlist, grpinf); - - return grpinf; + auto res = + groupInfoManager->addGroup(GROUP_BELONG_TYPE_SEGMENT, getMe(), name); + return res.get(); + + // grpinf = new GroupInfo(GROUP_BELONG_TYPE_SEGMENT, vector(), + // getMe(), + // logSystem); + // grpinf->grpid = g_quark_from_static_string(name.c_str()); + // grpinf->name = name; + // grpinf->buffer = gtk_text_buffer_new(programData->table); + // grpinf->clearDialog(); + // sgmlist = g_slist_append(sgmlist, grpinf); } /** diff --git a/src/iptux/UiCoreThread.h b/src/iptux/UiCoreThread.h index 8b1f5c2a..05c898b6 100644 --- a/src/iptux/UiCoreThread.h +++ b/src/iptux/UiCoreThread.h @@ -84,7 +84,8 @@ class UiCoreThread : public CoreThread { std::queue messages; GroupInfoManager_U groupInfoManager; - GSList *sgmlist, *grplist, *brdlist; //群组链表(成员不能被删除) + // GSList *sgmlist; + GSList *grplist, *brdlist; //群组链表(成员不能被删除) uint32_t pbn, prn; //当前已使用的文件编号(共享/私有) GSList* ecsList; //文件链表(好友发过来)