DWORD CMraProto::MraSendNewStatus(DWORD dwStatusMir, DWORD dwXStatusMir, const CMStringW &pwszStatusTitle, const CMStringW &pwszStatusDesc) { if (!m_bLoggedIn) return 0; CMStringW wszStatusTitle, wszStatusDesc; DWORD dwXStatus, dwStatus = GetMraStatusFromMiradaStatus(dwStatusMir, dwXStatusMir, &dwXStatus); if (IsXStatusValid(dwXStatusMir)) { char szValueName[MAX_PATH]; if (pwszStatusTitle.IsEmpty()) { mir_snprintf(szValueName, SIZEOF(szValueName), "XStatus%ldName", dwXStatusMir); // custom xstatus name if (!mraGetStringW(NULL, szValueName, wszStatusTitle)) wszStatusTitle = TranslateTS(lpcszXStatusNameDef[dwXStatusMir]); } else wszStatusTitle = pwszStatusTitle; if (pwszStatusDesc.IsEmpty()) { mir_snprintf(szValueName, SIZEOF(szValueName), "XStatus%ldMsg", dwXStatusMir); // custom xstatus description mraGetStringW(NULL, szValueName, wszStatusDesc); } else wszStatusDesc = pwszStatusDesc; } else if (pwszStatusTitle.IsEmpty()) wszStatusTitle = pcli->pfnGetStatusModeDescription(dwStatusMir, 0); MraChangeStatus(dwStatus, lpcszStatusUri[dwXStatus], wszStatusTitle, wszStatusDesc, ((getByte("RTFReceiveEnable", MRA_DEFAULT_RTF_RECEIVE_ENABLE) ? FEATURE_FLAG_RTF_MESSAGE : 0) | MRA_FEATURE_FLAGS)); return 0; }
DWORD CMraProto::MraSetXStatusInternal(DWORD dwXStatus) { if (IsXStatusValid(dwXStatus)) { CMStringW szBuff; // obsolete (TODO: remove in next version) char szValueName[MAX_PATH]; mir_snprintf(szValueName, SIZEOF(szValueName), "XStatus%ldName", dwXStatus); if (!mraGetStringW(NULL, szValueName, szBuff)) szBuff = lpcszXStatusNameDef[dwXStatus]; mraSetStringExW(NULL, DBSETTING_XSTATUSNAME, szBuff); // obsolete (TODO: remove in next version) mir_snprintf(szValueName, SIZEOF(szValueName), "XStatus%ldMsg", dwXStatus); if (mraGetStringW(NULL, szValueName, szBuff)) mraSetStringExW(NULL, DBSETTING_XSTATUSMSG, szBuff); else delSetting(DBSETTING_XSTATUSMSG); } else { delSetting(DBSETTING_XSTATUSNAME); delSetting(DBSETTING_XSTATUSMSG); dwXStatus = MRA_MIR_XSTATUS_NONE; } DWORD dwOldStatusMode = InterlockedExchange((volatile LONG*)&m_iXStatus, dwXStatus); setByte(DBSETTING_XSTATUSID, (BYTE)dwXStatus); MraSendNewStatus(m_iStatus, dwXStatus, _T(""), _T("")); return dwOldStatusMode; }
void CMraProto::MraPopupShowFromContactW(HANDLE hContact, DWORD dwType, DWORD dwFlags, LPCWSTR lpszMessage) { WCHAR szTitle[MAX_CONTACTNAME]; CMStringW szNick, szEmail; mraGetStringW(hContact, "Nick", szNick); mraGetStringW(hContact, "e-mail", szEmail); if (hContact) mir_snwprintf(szTitle, SIZEOF(szTitle), L"%s <%s>", szNick, szEmail); else mir_snwprintf(szTitle, SIZEOF(szTitle), L"%s: %s <%s>", m_tszUserName, szNick, szEmail); MraPopupShowW(hContact, dwType, dwFlags, szTitle, lpszMessage); }
DWORD CMraProto::MraAvatarsGetFileName(HANDLE hAvatarsQueueHandle, MCONTACT hContact, DWORD dwFormat, CMStringW &res) { res.Empty(); if (hAvatarsQueueHandle == NULL) return ERROR_INVALID_HANDLE; if (IsContactChatAgent(hContact)) return ERROR_NOT_SUPPORTED; TCHAR tszBase[MAX_PATH]; mir_sntprintf(tszBase, SIZEOF(tszBase), _T("%s\\%s\\"), VARST(_T("%miranda_avatarcache%")), m_tszUserName); res = tszBase; // some path in buff and free space for file name is avaible CreateDirectoryTreeT(res); if (dwFormat != PA_FORMAT_DEFAULT) { CMStringW szEmail; if (mraGetStringW(hContact, "e-mail", szEmail)) { szEmail.MakeLower(); res += szEmail + ProtoGetAvatarExtension(dwFormat); return NO_ERROR; } } else { CMStringW szDefName; if (!DB_GetStringW(NULL, MRA_AVT_SECT_NAME, "DefaultAvatarFileName", szDefName)) { res += MRA_AVT_DEFAULT_AVT_FILENAME; return NO_ERROR; } } return ERROR_INSUFFICIENT_BUFFER; }
int CMraProto::SendContacts(MCONTACT hContact, int, int nContacts, MCONTACT *hContactsList) { INT_PTR iRet = 0; if (m_bLoggedIn && hContact) { BOOL bSlowSend; CMStringW wszData, wszEmail; CMStringA szEmail; if (mraGetStringA(hContact, "e-mail", szEmail)) { for (int i = 0; i < nContacts; i++) { if (IsContactMra(hContactsList[i])) if (mraGetStringW(hContactsList[i], "e-mail", wszEmail)) wszData += wszEmail + ';' + pcli->pfnGetContactDisplayName(hContactsList[i], 0) + ';'; } bSlowSend = getByte("SlowSend", MRA_DEFAULT_SLOW_SEND); iRet = MraMessage(bSlowSend, hContact, ACKTYPE_CONTACTS, MESSAGE_FLAG_CONTACT, szEmail, wszData, NULL, 0); if (bSlowSend == FALSE) ProtoBroadcastAck(hContact, ACKTYPE_CONTACTS, ACKRESULT_SUCCESS, (HANDLE)iRet, 0); } } else ProtoBroadcastAck(hContact, ACKTYPE_CONTACTS, ACKRESULT_FAILED, NULL, (LPARAM)"You cannot send when you are offline."); return iRet; }
INT_PTR CMraProto::MraChatSessionNew(HANDLE hContact) { if (bChatExists) if (hContact) { CMStringW wszEMail; mraGetStringW(hContact, "e-mail", wszEMail); GCSESSION gcw = { sizeof(gcw) }; gcw.iType = GCW_CHATROOM; gcw.pszModule = m_szModuleName; gcw.ptszName = GetContactNameW(hContact); gcw.ptszID = wszEMail; gcw.ptszStatusbarText = _T("status bar"); gcw.dwItemData = (DWORD)hContact; if (!CallServiceSync(MS_GC_NEWSESSION, NULL, (LPARAM)&gcw)) { GCDEST gcd = { m_szModuleName, wszEMail.c_str(), GC_EVENT_ADDGROUP }; GCEVENT gce = { sizeof(gce), &gcd }; for (int i = 0; i < SIZEOF(lpwszStatuses); i++) { gce.ptszStatus = TranslateTS(lpwszStatuses[i]); CallServiceSync(MS_GC_EVENT, NULL, (LPARAM)&gce); } gcd.iType = GC_EVENT_CONTROL; CallServiceSync(MS_GC_EVENT, SESSION_INITDONE, (LPARAM)&gce); CallServiceSync(MS_GC_EVENT, SESSION_ONLINE, (LPARAM)&gce); DWORD opcode = MULTICHAT_GET_MEMBERS; CMStringA szEmail; mraGetStringA(hContact, "e-mail", szEmail); MraMessage(FALSE, NULL, 0, MESSAGE_FLAG_MULTICHAT, szEmail, _T(""), (LPBYTE)&opcode, sizeof(opcode)); return 0; } } return 1; }
INT_PTR CMraProto::MraChatSessionEventSendByHandle(HANDLE hContactChatSession, DWORD dwType, DWORD dwFlags, const CMStringA &lpszUID, LPCWSTR lpwszStatus, LPCWSTR lpwszMessage, DWORD_PTR dwItemData, DWORD dwTime) { if (!bChatExists) return 1; CMStringW wszID, wszUID, wszNick; GCDEST gcd = { m_szModuleName, 0, dwType }; if (hContactChatSession) { mraGetStringW(hContactChatSession, "e-mail", wszID); gcd.ptszID = (LPWSTR)wszID.c_str(); } GCEVENT gce = { sizeof(gce), &gcd }; gce.dwFlags = dwFlags; gce.ptszUID = wszUID; gce.ptszStatus = lpwszStatus; gce.ptszText = lpwszMessage; gce.dwItemData = dwItemData; gce.time = dwTime; if (!lpszUID.IsEmpty()) gce.bIsMe = IsEMailMy(lpszUID); else gce.bIsMe = TRUE; if (gce.bIsMe) { mraGetStringW(NULL, "e-mail", wszUID); mraGetStringW(NULL, "Nick", wszNick); gce.ptszNick = wszNick; } else { HANDLE hContactSender = MraHContactFromEmail(lpszUID, FALSE, TRUE, NULL); wszUID = lpszUID; if (hContactSender) gce.ptszNick = GetContactNameW(hContactSender); else gce.ptszNick = wszUID; } return CallServiceSync(MS_GC_EVENT, NULL, (LPARAM)&gce); }
INT_PTR CMraProto::MraReplyBlogStatus(WPARAM wParam, LPARAM lParam) { if (!m_bLoggedIn) return 0; CMStringW blogStatusMsg; mraGetStringW((HANDLE)wParam, DBSETTING_BLOGSTATUS, blogStatusMsg); if (!blogStatusMsg.IsEmpty()|| wParam == 0) MraSendReplyBlogStatus((HANDLE)wParam); return 0; }
int CMraProto::MraRebuildContactMenu(WPARAM wParam, LPARAM lParam) { BOOL bIsContactMRA, bHasEMail, bHasEMailMR, bChatAgent; DWORD dwContactSeverFlags = 0; CMStringW blogStatusMsgSize; HANDLE hContact = (HANDLE)wParam; // proto own contact bIsContactMRA = IsContactMra(hContact); if (bIsContactMRA) { bHasEMail = TRUE; bHasEMailMR = TRUE; bChatAgent = IsContactChatAgent(hContact); GetContactBasicInfoW(hContact, NULL, NULL, NULL, &dwContactSeverFlags, NULL, NULL, NULL, NULL); mraGetStringW(hContact, DBSETTING_BLOGSTATUS, blogStatusMsgSize); } // non proto contact else bHasEMail = bHasEMailMR = bChatAgent = FALSE; // menu root; Menu_ShowItem(hContactMenuRoot, bIsContactMRA); //"Request authorization" Menu_ShowItem(hContactMenuItems[0], (m_bLoggedIn && bIsContactMRA));// && (dwContactSeverFlags&CONTACT_INTFLAG_NOT_AUTHORIZED) //"Grant authorization" Menu_ShowItem(hContactMenuItems[1], (m_bLoggedIn && bIsContactMRA && bChatAgent == FALSE)); //"&Send postcard" Menu_ShowItem(hContactMenuItems[2], (m_bLoggedIn && bHasEMail && bChatAgent == FALSE)); //"&View Album" Menu_ShowItem(hContactMenuItems[3], (m_bLoggedIn && bHasEMailMR && bChatAgent == FALSE)); //"&Read Blog" Menu_ShowItem(hContactMenuItems[4], (m_bLoggedIn && bHasEMailMR && bChatAgent == FALSE)); //"Reply Blog Status" Menu_ShowItem(hContactMenuItems[5], (m_bLoggedIn && blogStatusMsgSize.GetLength() && bChatAgent == FALSE)); //"View Video" Menu_ShowItem(hContactMenuItems[6], (m_bLoggedIn && bHasEMailMR && bChatAgent == FALSE)); //"Answers" Menu_ShowItem(hContactMenuItems[7], (m_bLoggedIn && bHasEMailMR && bChatAgent == FALSE)); //"World" Menu_ShowItem(hContactMenuItems[8], (m_bLoggedIn && bHasEMailMR && bChatAgent == FALSE)); //"Send &Nudge" Menu_ShowItem(hContactMenuItems[9], (!m_heNudgeReceived) ? (m_bLoggedIn && bIsContactMRA) : 0); return 0; }
void CMraProto::MraChatSessionDestroy(HANDLE hContact) { if (!bChatExists || hContact == NULL) return; GCDEST gcd = { m_szModuleName, NULL, GC_EVENT_CONTROL }; GCEVENT gce = { sizeof(gce), &gcd }; CMStringW wszEMail; mraGetStringW(hContact, "e-mail", wszEMail); gcd.ptszID = (LPWSTR)wszEMail.c_str(); CallServiceSync(MS_GC_EVENT, SESSION_TERMINATE, (LPARAM)&gce); CallServiceSync(MS_GC_EVENT, WINDOW_CLEARLOG, (LPARAM)&gce); }
int CMraProto::MraRebuildStatusMenu(WPARAM, LPARAM) { CHAR szServiceFunction[MAX_PATH], szValueName[MAX_PATH]; HGENMENU hRoot; { TCHAR szItem[MAX_PATH + 64]; mir_sntprintf(szItem, _countof(szItem), _T("%s Custom Status"), m_tszUserName); CMenuItem mi; mi.root = pcli->pfnGetProtocolMenu(m_szModuleName); mi.name.t = szItem; mi.position = 10001; hRoot = Menu_AddStatusMenuItem(&mi, m_szModuleName); } CMenuItem mi; mi.position = 2000060000; mi.root = hRoot; mi.flags = CMIF_UNICODE; mi.pszService = szServiceFunction; CMStringW szStatusTitle; DWORD dwCount = MRA_XSTATUS_OFF_CLI_COUNT; if (getByte(NULL, "xStatusShowAll", MRA_DEFAULT_SHOW_ALL_XSTATUSES)) dwCount = MRA_XSTATUS_COUNT; for (DWORD i = 0; i < dwCount; i ++) { mir_snprintf(szServiceFunction, _countof(szServiceFunction), "/menuXStatus%ld", i); mi.position ++; if (i) { mir_snprintf(szValueName, _countof(szValueName), "XStatus%ldName", i); if (mraGetStringW(NULL, szValueName, szStatusTitle)) mi.name.t = (TCHAR*)szStatusTitle.c_str(); else mi.name.t = (TCHAR*)lpcszXStatusNameDef[i]; mi.hIcolibItem = hXStatusAdvancedStatusIcons[i]; } else { mi.name.t = (TCHAR*)lpcszXStatusNameDef[i]; mi.hIcolibItem = NULL; } hXStatusMenuItems[i] = Menu_AddStatusMenuItem(&mi, m_szModuleName); } return 0; }
int CMraProto::MraRebuildStatusMenu(WPARAM wParam, LPARAM lParam) { CHAR szServiceFunction[MAX_PATH*2], *pszServiceFunctionName, szValueName[MAX_PATH]; strncpy(szServiceFunction, m_szModuleName, sizeof(szServiceFunction)); pszServiceFunctionName = szServiceFunction + strlen(m_szModuleName); TCHAR szItem[MAX_PATH+64]; mir_sntprintf(szItem, SIZEOF(szItem), _T("%s Custom Status"), m_tszUserName); CLISTMENUITEM mi = { sizeof(mi) }; mi.position = 2000060000; mi.popupPosition = 500085000; mi.ptszPopupName = szItem; mi.flags = CMIF_UNICODE; mi.pszService = szServiceFunction; mi.pszContactOwner = m_szModuleName; CMStringW szStatusTitle; for (size_t i = 0; i < MRA_XSTATUS_COUNT; i++) { mir_snprintf(pszServiceFunctionName, 100, "/menuXStatus%ld", i); mi.position++; if (i) { mir_snprintf(szValueName, SIZEOF(szValueName), "XStatus%ldName", i); if ( mraGetStringW(NULL, szValueName, szStatusTitle)) mi.ptszName = (TCHAR*)szStatusTitle.c_str(); else mi.ptszName = lpcszXStatusNameDef[i]; mi.icolibItem = hXStatusAdvancedStatusIcons[i]; } else { mi.ptszName = lpcszXStatusNameDef[i]; mi.hIcon = NULL; } hXStatusMenuItems[i] = Menu_AddStatusMenuItem(&mi); } return 0; }
INT_PTR CMraProto::MraRequestAuthorization(WPARAM hContact, LPARAM) { if (!hContact || !m_bLoggedIn) return 0; CMStringW wszAuthMessage; if (!mraGetStringW(NULL, "AuthMessage", wszAuthMessage)) wszAuthMessage = TranslateT(MRA_DEFAULT_AUTH_MESSAGE); if (wszAuthMessage.IsEmpty()) return 1; CMStringA szEmail; if (mraGetStringA(hContact, "e-mail", szEmail)) { BOOL bSlowSend = getByte("SlowSend", MRA_DEFAULT_SLOW_SEND); int iRet = MraMessage(bSlowSend, hContact, ACKTYPE_AUTHREQ, MESSAGE_FLAG_AUTHORIZE, szEmail, wszAuthMessage, NULL, 0); if (bSlowSend == FALSE) ProtoBroadcastAck(hContact, ACKTYPE_AUTHREQ, ACKRESULT_SUCCESS, (HANDLE)iRet, 0); return 0; } return 1; }
void CMraProto::SetExtraIcons(MCONTACT hContact) { DWORD dwID, dwGroupID, dwContactSeverFlags; if (GetContactBasicInfoW(hContact, &dwID, &dwGroupID, NULL, &dwContactSeverFlags, NULL, NULL, NULL, NULL)) return; DWORD dwIconID = -1; DWORD dwXStatus = MRA_MIR_XSTATUS_NONE; if (m_bLoggedIn) { dwXStatus = getByte(hContact, DBSETTING_XSTATUSID, MRA_MIR_XSTATUS_NONE); if (dwID == -1) dwIconID = (dwContactSeverFlags == -1) ? ADV_ICON_DELETED : ADV_ICON_NOT_ON_SERVER; else { if (dwGroupID == 103) dwIconID = ADV_ICON_PHONE; else { if (dwContactSeverFlags) if (dwContactSeverFlags == -1) dwIconID = ADV_ICON_DELETED; else dwIconID = ADV_ICON_NOT_AUTHORIZED; } } } if (dwIconID == -1) { CMStringW statusMsg; mraGetStringW(hContact, DBSETTING_BLOGSTATUS, statusMsg); if (statusMsg.GetLength()) dwIconID = ADV_ICON_BLOGSTATUS; } ExtraIcon_SetIcon(hExtraXstatusIcon, hContact, (IsXStatusValid(dwXStatus) || dwXStatus == MRA_MIR_XSTATUS_UNKNOWN) ? hXStatusAdvancedStatusIcons[dwXStatus] : NULL); ExtraIcon_SetIcon(hExtraInfo, hContact, (dwIconID != -1) ? gdiExtraStatusIconsItems[dwIconID].hIcolib : NULL); }
HANDLE CMraProto::GetAwayMsg(MCONTACT hContact) { if (!m_bLoggedIn || !hContact) return 0; TCHAR szStatusDesc[MICBLOG_STATUS_MAX + MICBLOG_STATUS_MAX + MAX_PATH], szTime[64]; DWORD dwTime; int iRet = 0; CMStringW szBlogStatus; if (mraGetStringW(hContact, DBSETTING_BLOGSTATUS, szBlogStatus)) { SYSTEMTIME tt = { 0 }; dwTime = getDword(hContact, DBSETTING_BLOGSTATUSTIME, 0); if (dwTime && MakeLocalSystemTimeFromTime32(dwTime, &tt)) mir_sntprintf(szTime, _countof(szTime), _T("%04ld.%02ld.%02ld %02ld:%02ld: "), tt.wYear, tt.wMonth, tt.wDay, tt.wHour, tt.wMinute); else szTime[0] = 0; mir_sntprintf(szStatusDesc, _countof(szStatusDesc), _T("%s%s"), szTime, szBlogStatus.c_str()); iRet = GetTickCount(); ProtoBroadcastAck(hContact, ACKTYPE_AWAYMSG, ACKRESULT_SUCCESS, (HANDLE)iRet, (LPARAM)szStatusDesc); } return (HANDLE)iRet; }
int CMraProto::MraRebuildContactMenu(WPARAM hContact, LPARAM) { bool bIsContactMRA, bHasEMail, bHasEMailMR, bChatAgent; DWORD dwContactSeverFlags = 0; CMStringW blogStatusMsgSize; // proto own contact bIsContactMRA = IsContactMra(hContact); if (bIsContactMRA) { bHasEMail = true; bHasEMailMR = true; bChatAgent = IsContactChatAgent(hContact); GetContactBasicInfoW(hContact, NULL, NULL, NULL, &dwContactSeverFlags, NULL, NULL, NULL, NULL); mraGetStringW(hContact, DBSETTING_BLOGSTATUS, blogStatusMsgSize); } // non proto contact else { bHasEMail = false; bHasEMailMR = false; bChatAgent = false; if (!getByte(NULL, "HideMenuItemsForNonMRAContacts", MRA_DEFAULT_HIDE_MENU_ITEMS_FOR_NON_MRA)) if (!IsContactMraProto(hContact))// избегаем добавления менюшек в контакты других копий MRA if (GetContactEMailCount(hContact, FALSE)) { bHasEMail = true; if (GetContactEMailCount(hContact, TRUE)) bHasEMailMR = true; } } // menu root; Menu_ShowItem(hContactMenuRoot, bHasEMail); //"Request authorization" Menu_ShowItem(hContactMenuItems[0], (m_bLoggedIn && bIsContactMRA));// && (dwContactSeverFlags&CONTACT_INTFLAG_NOT_AUTHORIZED) //"Grant authorization" Menu_ShowItem(hContactMenuItems[1], (m_bLoggedIn && bIsContactMRA && !bChatAgent)); //"&Send E-Mail" Menu_ShowItem(hContactMenuItems[2], (bHasEMail && !bChatAgent)); //"&Send postcard" Menu_ShowItem(hContactMenuItems[3], (bHasEMail && !bChatAgent)); //"&View Album" Menu_ShowItem(hContactMenuItems[4], (bHasEMailMR && !bChatAgent)); //"Reply Blog Status" Menu_ShowItem(hContactMenuItems[5], (m_bLoggedIn && blogStatusMsgSize.GetLength() && !bChatAgent)); //"View Video" Menu_ShowItem(hContactMenuItems[6], (bHasEMailMR && !bChatAgent)); //"Answers" Menu_ShowItem(hContactMenuItems[7], (bHasEMailMR && !bChatAgent)); //"World" Menu_ShowItem(hContactMenuItems[8], (bHasEMailMR && !bChatAgent)); //"Send &Nudge" Menu_ShowItem(hContactMenuItems[9], (!m_heNudgeReceived) ? (m_bLoggedIn && bIsContactMRA) : 0); return 0; }
int CMraProto::MraDbSettingChanged(WPARAM hContact, LPARAM lParam) { if (!m_bLoggedIn || !lParam || !hContact) return 0; DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING*)lParam; // это наш контакт, он не временный (есть в списке на сервере) и его обновление разрешено if (IsContactMra(hContact) && !db_get_b(hContact, "CList", "NotOnList", 0) && getDword(hContact, "HooksLocked", FALSE) == FALSE) { if (!strcmp(cws->szModule, "CList")) { // MyHandle setting if (!strcmp(cws->szSetting, "MyHandle")) { // always store custom nick CMStringW wszNick; if (cws->value.type == DBVT_DELETED) { wszNick = GetContactNameW(hContact); db_set_ws(hContact, "CList", "MyHandle", wszNick); } else if (cws->value.pszVal) { switch (cws->value.type) { case DBVT_WCHAR: wszNick = cws->value.pwszVal; break; case DBVT_UTF8: wszNick = ptrW(mir_utf8decodeW(cws->value.pszVal)); break; case DBVT_ASCIIZ: wszNick = ptrW(mir_a2u_cp(cws->value.pszVal, MRA_CODE_PAGE)); break; } if (wszNick.GetLength()) MraModifyContact(hContact, 0, 0, 0, 0, &wszNick); } } // Group setting else if (!strcmp(cws->szSetting, "Group")) { CMStringW wszGroup; // manage group on server switch (cws->value.type) { case DBVT_WCHAR: wszGroup = cws->value.pwszVal; break; case DBVT_UTF8: wszGroup = ptrW(mir_utf8decodeW(cws->value.pszVal)); break; case DBVT_ASCIIZ: wszGroup = ptrW(mir_a2u_cp(cws->value.pszVal, MRA_CODE_PAGE)); break; } if (wszGroup.GetLength()) { DWORD dwGroupID = getDword(hContact, "GroupID", -1); if (dwGroupID != -1) MraMoveContactToGroup(hContact, dwGroupID, wszGroup); } } // NotOnList setting. Has a temporary contact just been added permanently? else if (!strcmp(cws->szSetting, "NotOnList")) { if (cws->value.type == DBVT_DELETED || (cws->value.type == DBVT_BYTE && cws->value.bVal == 0)) { CMStringW wszAuthMessage; if (!mraGetStringW(NULL, "AuthMessage", wszAuthMessage)) wszAuthMessage = TranslateT(MRA_DEFAULT_AUTH_MESSAGE); db_unset(hContact, "CList", "Hidden"); CMStringA szEmail, szPhones; CMStringW wszNick; DWORD dwGroupID, dwContactFlag; GetContactBasicInfoW(hContact, NULL, &dwGroupID, &dwContactFlag, NULL, NULL, &szEmail, &wszNick, &szPhones); MraAddContact(hContact, dwContactFlag, dwGroupID, szEmail, wszNick, &szPhones, &wszAuthMessage); } } // Hidden setting else if (!strcmp(cws->szSetting, "Hidden")) { DWORD dwContactFlag = GetContactFlags(hContact); if (cws->value.type == DBVT_DELETED || (cws->value.type == DBVT_BYTE && cws->value.bVal == 0)) dwContactFlag &= ~CONTACT_FLAG_SHADOW; else dwContactFlag |= CONTACT_FLAG_SHADOW; MraModifyContact(hContact, 0, &dwContactFlag); } } // Ignore section else if (!strcmp(cws->szModule, "Ignore")) { if (!strcmp(cws->szSetting, "Mask1")) { DWORD dwContactFlag = GetContactFlags(hContact); if (cws->value.type == DBVT_DELETED || (cws->value.type == DBVT_DWORD && cws->value.dVal&IGNOREEVENT_MESSAGE) == 0) dwContactFlag &= ~CONTACT_FLAG_IGNORE; else dwContactFlag |= CONTACT_FLAG_IGNORE; MraModifyContact(hContact, 0, &dwContactFlag); } } // User info section else if (!strcmp(cws->szModule, "UserInfo")) { if (!strcmp(cws->szSetting, "MyPhone0") || !strcmp(cws->szSetting, "MyPhone1") || !strcmp(cws->szSetting, "MyPhone2")) MraModifyContact(hContact); } } return 0; }