HANDLE CList_AddRoom(const char* pszModule, const TCHAR* pszRoom, const TCHAR* pszDisplayName, int iType) { HANDLE hContact = CList_FindRoom(pszModule, pszRoom); DBVARIANT dbv; TCHAR pszGroup[50]; *pszGroup = '\0'; if (!M->GetTString(NULL, "Chat", "AddToGroup", &dbv)) { if (lstrlen(dbv.ptszVal) > 0) lstrcpyn(pszGroup, dbv.ptszVal, 50); DBFreeVariant(&dbv); } else lstrcpyn(pszGroup, _T("Chat rooms"), 50); if (pszGroup[0]) CList_CreateGroup(pszGroup); if (hContact) return hContact; // here we create a new one since no one is to be found if ((hContact = (HANDLE) CallService(MS_DB_CONTACT_ADD, 0, 0)) == NULL) return NULL; CallService(MS_PROTO_ADDTOCONTACT, (WPARAM) hContact, (LPARAM) pszModule); if (pszGroup && lstrlen(pszGroup) > 0) CallService(MS_CLIST_CONTACTCHANGEGROUP, (WPARAM)hContact, (LPARAM)g_Settings.hGroup); else DBDeleteContactSetting(hContact, "CList", "Group"); M->WriteTString(hContact, pszModule, "Nick", pszDisplayName); M->WriteTString(hContact, pszModule, "ChatRoomID", pszRoom); M->WriteByte(hContact, pszModule, "ChatRoom", (BYTE)iType); DBWriteContactSettingWord(hContact, pszModule, "Status", ID_STATUS_OFFLINE); return hContact; }
HANDLE CList_AddRoom(const char* pszModule, const TCHAR* pszRoom, const TCHAR* pszDisplayName, int iType) { HANDLE hContact = CList_FindRoom(pszModule, pszRoom); DBVARIANT dbv; TCHAR pszGroup[50]; *pszGroup = '\0'; if ( !DBGetContactSettingTString( NULL, "Chat", "AddToGroup", &dbv )) { if ( lstrlen( dbv.ptszVal ) > 0 ) lstrcpyn( pszGroup, dbv.ptszVal, 50); DBFreeVariant(&dbv); } else lstrcpyn( pszGroup, _T("Chat rooms"), 50); if ( pszGroup[0] ) CList_CreateGroup(pszGroup); if ( hContact ) { //contact exist, make sure it is in the right group DBVARIANT dbv; DBVARIANT dbv2; char str[50]; int i; if ( pszGroup[0] ) { for (i = 0;; i++) { itoa(i, str, 10); if ( DBGetContactSettingTString( NULL, "CListGroups", str, &dbv )) { DBWriteContactSettingTString(hContact, "CList", "Group", pszGroup); goto END_GROUPLOOP; } if ( !DBGetContactSettingTString( hContact, "CList", "Group", &dbv2 )) { if ( dbv.ptszVal[0] != '\0' && dbv2.ptszVal[0] != '\0' && !lstrcmpi( dbv.ptszVal + 1, dbv2.ptszVal )) { DBFreeVariant(&dbv); DBFreeVariant(&dbv2); goto END_GROUPLOOP; } DBFreeVariant(&dbv2); } DBFreeVariant(&dbv); } } END_GROUPLOOP: DBWriteContactSettingWord(hContact, pszModule, "Status", ID_STATUS_OFFLINE); DBWriteContactSettingTString(hContact, pszModule, "Nick", pszDisplayName ); if(iType != GCW_SERVER) DBWriteContactSettingByte(hContact, "CList", "Hidden", 1); return hContact; } // here we create a new one since no one is to be found if (( hContact = (HANDLE) CallService(MS_DB_CONTACT_ADD, 0, 0)) == NULL ) return NULL; CallService(MS_PROTO_ADDTOCONTACT, (WPARAM) hContact, (LPARAM) pszModule); if ( pszGroup && lstrlen( pszGroup ) > 0 ) DBWriteContactSettingTString(hContact, "CList", "Group", pszGroup ); else DBDeleteContactSetting(hContact, "CList", "Group"); DBWriteContactSettingTString( hContact, pszModule, "Nick", pszDisplayName ); DBWriteContactSettingTString( hContact, pszModule, "ChatRoomID", pszRoom ); DBWriteContactSettingByte(hContact, pszModule, "ChatRoom", (BYTE)iType); DBWriteContactSettingWord(hContact, pszModule, "Status", ID_STATUS_OFFLINE); // if(iType == GCW_SERVER) DBWriteContactSettingByte(hContact, "CList", "Hidden", 1); return hContact; }