void Meta_Assign(HANDLE hSub, HANDLE hMeta) { metaMap[hMeta].add(hSub); DBWriteContactSettingDword(hSub, MODULE, "ParentMetaID", DBGetContactSettingDword(hMeta, MODULE, META_ID, -1)); DBWriteContactSettingDword(hSub, MODULE, "Handle", (DWORD)hMeta); DBWriteContactSettingByte(hSub, MODULE, "IsSubcontact", 1); if(MetaEnabled()) { if(!meta_group_hack_disabled) DBWriteContactSettingByte(hSub, "CList", "Hidden", 1); } else // shouldn't happen, as the menu option is hidden when metas are disabled... DBWriteContactSettingByte(hMeta, "CList", "Hidden", 1); CallService(MS_IGNORE_IGNORE, (WPARAM)hSub, (WPARAM)IGNOREEVENT_USERONLINE); DBVARIANT dbv; if(DBGetContactSettingUTF8String(hMeta, "CList", "MyHandle", &dbv)) { if(!DBGetContactSettingUTF8String(hSub, "CList", "MyHandle", &dbv)) { DBWriteContactSettingUTF8String(hMeta, "CList", "MyHandle", dbv.pszVal); DBFreeVariant(&dbv); } } else DBFreeVariant(&dbv); if(DBGetContactSettingUTF8String(hMeta, MODULE, "Nick", &dbv)) { char *subProto = ContactProto(hSub); if(subProto) { if(!DBGetContactSettingUTF8String(hSub, subProto, "Nick", &dbv)) { DBWriteContactSettingUTF8String(hMeta, MODULE, "Nick", dbv.pszVal); DBFreeVariant(&dbv); } } } else DBFreeVariant(&dbv); FireSubcontactsChanged(hMeta); }
HANDLE Meta_Convert(HANDLE hSub) { HANDLE hMeta = NewMetaContact(); DBWriteContactSettingByte(hMeta, MODULE, "Default", 0); Meta_Assign(hSub, hMeta); DBVARIANT dbv; if(!DBGetContactSettingUTF8String(hSub, "CList", "Group", &dbv)) { DBWriteContactSettingUTF8String(hMeta, "CList", "Group", dbv.pszVal); DBFreeVariant(&dbv); } if(!DBGetContactSettingUTF8String(hSub, "CList", "MyHandle", &dbv)) { DBWriteContactSettingUTF8String(hMeta, "CList", "MyHandle", dbv.pszVal); DBFreeVariant(&dbv); } char *subProto = ContactProto(hSub); if(subProto) { if(!DBGetContactSettingUTF8String(hSub, subProto, "Nick", &dbv)) { DBWriteContactSettingUTF8String(hMeta, MODULE, "Nick", dbv.pszVal); DBFreeVariant(&dbv); } } Meta_CalcStatus(hMeta); return hMeta; }
char* CIcqProto::getSettingStringUtf(HANDLE hContact, const char *szModule, const char *szSetting, char *szDef) { DBVARIANT dbv = {DBVT_DELETED}; if (DBGetContactSettingUTF8String(hContact, szModule, szSetting, &dbv)) { ICQFreeVariant(&dbv); // for a setting with invalid contents/type return null_strdup(szDef); } char *szRes = null_strdup(dbv.pszVal); ICQFreeVariant(&dbv); return szRes; }