// Scans a binary buffer for oscar capabilities and adds them to the contact. // You probably want to call ClearAllContactCapabilities() first. void CIcqProto::SetCapabilitiesFromBuffer(HANDLE hContact, BYTE *pBuffer, int nLength, BOOL bReset) { // Get current capability flags DWORD fdwContactCaps = bReset ? 0 : getSettingDword(hContact, DBSETTING_CAPABILITIES, 0); // Get capability flags from buffer DWORD fdwCapabilities = GetCapabilitiesFromBuffer(pBuffer, nLength); #ifdef _DEBUG if (bReset) NetLog_CapabilityChange(this, "Set", fdwCapabilities); else { NetLog_CapabilityChange(this, "Removed", fdwContactCaps & ~fdwCapabilities & CapabilityFlagsMask); NetLog_CapabilityChange(this, "Added", fdwCapabilities & ~fdwContactCaps); } #endif if (fdwCapabilities != (fdwContactCaps & ~CapabilityFlagsMask)) { // Get current unmanaged capability flags fdwContactCaps &= ~CapabilityFlagsMask; // Add capability flags from buffer fdwContactCaps |= fdwCapabilities; // And write them back to database setSettingDword(hContact, DBSETTING_CAPABILITIES, fdwContactCaps); } }
// Returns true if the given contact supports the requested capabilites BOOL CIcqProto::CheckContactCapabilities(HANDLE hContact, DWORD fdwCapabilities) { // Get current capability flags DWORD fdwContactCaps = getSettingDword(hContact, DBSETTING_CAPABILITIES, 0); // Check if all requested capabilities are supported if ((fdwContactCaps & fdwCapabilities) == fdwCapabilities) return TRUE; return FALSE; }
// Sets one or many oscar capabilities for a given contact void CIcqProto::SetContactCapabilities(HANDLE hContact, DWORD fdwCapabilities) { // Get current capability flags DWORD fdwContactCaps = getSettingDword(hContact, DBSETTING_CAPABILITIES, 0); if (fdwContactCaps != (fdwContactCaps | fdwCapabilities)) { #ifdef _DEBUG NetLog_CapabilityChange(this, "Added", fdwCapabilities & ~fdwContactCaps); #endif // Update them fdwContactCaps |= fdwCapabilities; // And write it back to disk setSettingDword(hContact, DBSETTING_CAPABILITIES, fdwContactCaps); } }
// Deletes one or many oscar capabilities for a given contact void CIcqProto::ClearContactCapabilities(HANDLE hContact, DWORD fdwCapabilities) { // Get current capability flags DWORD fdwContactCaps = getSettingDword(hContact, DBSETTING_CAPABILITIES, 0); if (fdwContactCaps != (fdwContactCaps & ~fdwCapabilities)) { #ifdef _DEBUG NetLog_CapabilityChange(this, "Removed", fdwCapabilities & fdwContactCaps); #endif // Clear unwanted capabilities fdwContactCaps &= ~fdwCapabilities; // And write it back to disk setSettingDword(hContact, DBSETTING_CAPABILITIES, fdwContactCaps); } }
// Scans a binary buffer for oscar capabilities and adds them to the contact. // You probably want to call ClearAllContactCapabilities() first. void CIcqProto::AddCapabilitiesFromBuffer(HANDLE hContact, BYTE *pBuffer, int nLength) { // Get current capability flags DWORD fdwContactCaps = getSettingDword(hContact, DBSETTING_CAPABILITIES, 0); // Get capability flags from buffer DWORD fdwCapabilities = GetCapabilitiesFromBuffer(pBuffer, nLength); if (fdwContactCaps != (fdwContactCaps | fdwCapabilities)) { #ifdef _DEBUG NetLog_CapabilityChange(this, "Added", fdwCapabilities & ~fdwContactCaps); #endif // Add capability flags from buffer fdwContactCaps |= fdwCapabilities; // And write them back to database setSettingDword(hContact, DBSETTING_CAPABILITIES, fdwContactCaps); } }
DWORD CIcqProto::getContactUin(HANDLE hContact) { return getSettingDword(hContact, UNIQUEIDSETTING, 0); }
int CIcqProto::ShowPopUpMsg(HANDLE hContact, const char *szTitle, const char *szMsg, BYTE bType) { if (bPopUpService && getSettingByte(NULL, "PopupsEnabled", DEFAULT_POPUPS_ENABLED)) { POPUPDATAEX ppd = {0}; POPUPDATAW ppdw = {0}; LPCTSTR rsIcon; char szPrefix[32], szSetting[32]; strcpy(szPrefix, "Popups"); ppd.iSeconds = 0; switch(bType) { case LOG_NOTE: rsIcon = MAKEINTRESOURCE(IDI_INFORMATION); ppd.colorBack = DEFAULT_LOG0_BACK_COLORS; ppd.colorText = DEFAULT_LOG0_TEXT_COLORS; strcat(szPrefix, "0"); break; case LOG_WARNING: rsIcon = MAKEINTRESOURCE(IDI_WARNING); ppd.colorBack = DEFAULT_LOG1_BACK_COLORS; ppd.colorText = DEFAULT_LOG1_TEXT_COLORS; strcat(szPrefix, "1"); break; case LOG_ERROR: rsIcon = MAKEINTRESOURCE(IDI_ERROR); ppd.colorBack = DEFAULT_LOG2_BACK_COLORS; ppd.colorText = DEFAULT_LOG2_TEXT_COLORS; strcat(szPrefix, "2"); break; case LOG_FATAL: rsIcon = MAKEINTRESOURCE(IDI_ERROR); ppd.colorBack = DEFAULT_LOG3_BACK_COLORS; ppd.colorText = DEFAULT_LOG3_TEXT_COLORS; strcat(szPrefix, "3"); break; case POPTYPE_SPAM: rsIcon = MAKEINTRESOURCE(IDI_WARNING); ppd.colorBack = DEFAULT_SPAM_BACK_COLORS; ppd.colorText = DEFAULT_SPAM_TEXT_COLORS; strcat(szPrefix, "Spam"); break; default: return -1; } if (!getSettingByte(NULL, "PopupsSysIcons", DEFAULT_POPUPS_SYS_ICONS)) ppd.lchIcon = m_hIconProtocol->GetIcon(); else ppd.lchIcon = (HICON)LoadImage( NULL, rsIcon, IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED); if (getSettingByte(NULL, "PopupsWinColors", DEFAULT_POPUPS_WIN_COLORS)) { ppd.colorText = GetSysColor(COLOR_WINDOWTEXT); ppd.colorBack = GetSysColor(COLOR_WINDOW); } else { strcpy(szSetting, szPrefix); strcat(szSetting, "TextColor"); ppd.colorText = getSettingDword(NULL, szSetting, ppd.colorText); strcpy(szSetting, szPrefix); strcat(szSetting, "BackColor"); ppd.colorBack = getSettingDword(NULL, szSetting, ppd.colorBack); } strcpy(szSetting, szPrefix); strcat(szSetting, "Timeout"); ppd.iSeconds = getSettingDword(NULL, szSetting, ppd.iSeconds); #if defined( _UNICODE ) // call unicode popup module - only on unicode OS otherwise it will not work properly :( // due to Popup Plug bug in ADDPOPUPW implementation if ( ServiceExists( MS_POPUP_ADDPOPUPW )) { char str[4096]; make_unicode_string_static(ICQTranslateUtfStatic(szTitle, str, sizeof(str)), ppdw.lpwzContactName, MAX_CONTACTNAME); make_unicode_string_static(ICQTranslateUtfStatic(szMsg, str, sizeof(str)), ppdw.lpwzText, MAX_SECONDLINE); ppdw.lchContact = hContact; ppdw.lchIcon = ppd.lchIcon; ppdw.colorBack = ppd.colorBack; ppdw.colorText = ppd.colorText; ppdw.PluginWindowProc = NULL; ppdw.PluginData = NULL; ppdw.iSeconds = ppd.iSeconds; return CallService(MS_POPUP_ADDPOPUPW, (WPARAM)&ppdw, 0); } else #endif { char str[MAX_PATH]; utf8_decode_static(ICQTranslateUtfStatic(szTitle, str, MAX_PATH), ppd.lpzContactName, MAX_CONTACTNAME); utf8_decode_static(ICQTranslateUtfStatic(szMsg, str, MAX_PATH), ppd.lpzText, MAX_SECONDLINE); ppd.lchContact = hContact; ppd.PluginWindowProc = NULL; ppd.PluginData = NULL; return CallService(MS_POPUP_ADDPOPUPEX, (WPARAM)&ppd, 0); } } return -1; // Failure }