Show
Ignore:
Timestamp:
06/11/08 08:20:10 (6 months ago)
Author:
eugene
Message:

Applied the latest version of flynd's daemon patch.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/licq_group/src/icqd-srv.cpp

    r6246 r6257  
    118118{ 
    119119  // Export groups 
    120   GroupList groups; 
    121   GroupList *g = gUserManager.LockGroupList(LOCK_R); 
    122   GroupIDList *gID = gUserManager.LockGroupIDList(LOCK_R); 
    123  
    124   for (unsigned int i = 0; i < gID->size(); i++) 
    125   { 
    126     if ((*gID)[i] == 0) 
    127     { 
    128       groups.push_back((*g)[i]); 
    129     } 
    130   } 
    131  
    132   gUserManager.UnlockGroupList(); 
    133   gUserManager.UnlockGroupIDList(); 
    134  
    135   if (groups.size()) 
     120  GroupNameMap groups; 
     121  FOR_EACH_GROUP_START(LOCK_R) 
     122  { 
     123    if (pGroup->icqGroupId() == 0) 
     124      groups[pGroup->id()] = pGroup->name(); 
     125  } 
     126  FOR_EACH_GROUP_END 
     127 
     128  if (groups.size() > 0) 
    136129    icqExportGroups(groups); 
    137130 
     
    224217  if (!UseServerContactList())  return; 
    225218  CSrvPacketTcp *pReply; 
    226    
     219 
    227220  pReply = new CPU_UpdateToServerList("", ICQ_ROSTxGROUP, 0); 
    228221  addToModifyUsers(pReply->SubSequence(), ""); 
    229222  gLog.Info(tr("%sUpdating top level group.\n"), L_SRVxSTR); 
    230223  SendExpectEvent_Server(0, pReply, NULL); 
    231   
    232   GroupList *g = gUserManager.LockGroupList(LOCK_R); 
    233   GroupIDList *gID = gUserManager.LockGroupIDList(LOCK_R); 
    234  
    235   for (unsigned int i = 0; i < gID->size(); i++) 
    236   { 
    237     if ((*gID)[i]) 
    238     { 
    239       pReply = new CPU_UpdateToServerList((*g)[i], ICQ_ROSTxGROUP, 
    240         (*gID)[i]); 
    241       gLog.Info(tr("%sUpdating group %s.\n"), L_SRVxSTR, (*g)[i]);    
     224 
     225  FOR_EACH_GROUP_START(LOCK_R) 
     226  { 
     227    unsigned int gid = pGroup->icqGroupId(); 
     228    if (gid != 0) 
     229    { 
     230      const char* gname = pGroup->name().c_str(); 
     231      pReply = new CPU_UpdateToServerList(gname, ICQ_ROSTxGROUP, gid); 
     232      gLog.Info(tr("%sUpdating group %s.\n"), L_SRVxSTR, gname); 
    242233      addToModifyUsers(pReply->SubSequence(), ""); 
    243234      SendExpectEvent_Server(0, pReply, NULL); 
    244235    } 
    245236  } 
    246  
    247   gUserManager.UnlockGroupList(); 
    248   gUserManager.UnlockGroupIDList();        
     237  FOR_EACH_GROUP_END 
    249238} 
    250239 
     
    310299 
    311300//-----icqExportGroups---------------------------------------------------------- 
    312 void CICQDaemon::icqExportGroups(GroupList &groups) 
     301void CICQDaemon::icqExportGroups(const GroupNameMap& groups) 
    313302{ 
    314303  if (!UseServerContactList()) return; 
     
    42714260                } 
    42724261              } 
    4273                
     4262 
    42744263              u->SetIgnoreList(nType == ICQ_ROSTxIGNORE); 
    4275                
     4264 
    42764265              if (!isOnList) 
    42774266              { 
     
    42804269              } 
    42814270 
     4271              // Save GSID, SID and group memberships 
     4272              u->SaveLicqInfo(); 
     4273 
    42824274              PushPluginSignal(new CICQSignal(SIGNAL_UPDATExUSER, USER_GENERAL, 
    42834275                u->IdString(), u->PPID())); 
     
    43024294          { 
    43034295            if (!UseServerContactList()) break;  
    4304                        
     4296 
    43054297            if (szId[0] != '\0' && nTag != 0) 
    43064298            { 
    43074299              // Rename the group if we have it already or else add it 
    43084300              unsigned short nGroup = gUserManager.GetGroupFromID(nTag); 
    4309               if (nGroup == gUserManager.NumGroups()) 
     4301              if (nGroup == 0) 
    43104302              { 
    43114303                if (!gUserManager.AddGroup(szUnicodeName, nTag)) 
     
    45204512 
    45214513 
    4522               GroupList *g = gUserManager.LockGroupList(LOCK_R); 
     4514              LicqGroup* group = gUserManager.FetchGroup(n, LOCK_R); 
    45234515              std::string groupName; 
    4524               if (e->ExtraInfo() == 0) 
     4516              if (e->ExtraInfo() == 0 || group == NULL) 
    45254517                groupName = ""; // top level 
    45264518              else 
    4527                 groupName = (*g)[n-1]; 
    4528               gUserManager.UnlockGroupList(); 
     4519                groupName = group->name(); 
     4520              if (group != NULL) 
     4521                gUserManager.DropGroup(group); 
    45294522 
    45304523              // Start editing server list