示例#1
0
CMraProto::CMraProto(const char* _module, const TCHAR* _displayName) :
	PROTO<CMraProto>(_module, _displayName),
	m_bLoggedIn(false),
	m_groups(5, NumericKeySortT)
{
	InitializeCriticalSectionAndSpinCount(&csCriticalSectionSend, 0);
	MraSendQueueInitialize(0, &hSendQueueHandle);
	MraFilesQueueInitialize(0, &hFilesQueueHandle);
	MraMPopSessionQueueInitialize(&hMPopSessionQueue);
	MraAvatarsQueueInitialize(&hAvatarsQueueHandle);

	CreateProtoService(PS_SETCUSTOMSTATUSEX,   &CMraProto::MraSetXStatusEx);
	CreateProtoService(PS_GETCUSTOMSTATUSEX,   &CMraProto::MraGetXStatusEx);
	CreateProtoService(PS_GETCUSTOMSTATUSICON, &CMraProto::MraGetXStatusIcon);

	CreateProtoService(PS_SET_LISTENINGTO,     &CMraProto::MraSetListeningTo);

	CreateProtoService(PS_CREATEACCMGRUI,      &CMraProto::MraCreateAccMgrUI);
	CreateProtoService(PS_GETAVATARCAPS,       &CMraProto::MraGetAvatarCaps);
	CreateProtoService(PS_GETAVATARINFOT,      &CMraProto::MraGetAvatarInfo);
	CreateProtoService(PS_GETMYAVATART,        &CMraProto::MraGetMyAvatar);

	CreateProtoService(MS_ICQ_SENDSMS,         &CMraProto::MraSendSMS);
	CreateProtoService(PS_SEND_NUDGE,          &CMraProto::MraSendNudge);

	if ( ServiceExists(MS_NUDGE_SEND))
		m_heNudgeReceived = CreateProtoEvent(PE_NUDGE);

	TCHAR name[128];
	mir_sntprintf( name, SIZEOF(name), TranslateT("%s connection"), m_tszUserName);

	NETLIBUSER nlu = { sizeof(nlu) };
	nlu.flags = NUF_INCOMING | NUF_OUTGOING | NUF_HTTPCONNS | NUF_UNICODE;
	nlu.szSettingsModule = m_szModuleName;
	nlu.ptszDescriptiveName = name;
	m_hNetlibUser = (HANDLE)CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM)&nlu);

	HookProtoEvent(ME_SYSTEM_PRESHUTDOWN, &CMraProto::OnPreShutdown);

	InitMenus();

	mir_snprintf(szNewMailSound, SIZEOF(szNewMailSound), "%s: %s", m_szModuleName, MRA_SOUND_NEW_EMAIL);
	SkinAddNewSoundEx(szNewMailSound, m_szModuleName, MRA_SOUND_NEW_EMAIL);

	HookProtoEvent(ME_CLIST_PREBUILDSTATUSMENU, &CMraProto::MraRebuildStatusMenu);

	hExtraXstatusIcon = ExtraIcon_Register("MRAXstatus", LPGEN("Mail.ru Xstatus"), "mra_xstatus25");
	hExtraInfo = ExtraIcon_Register("MRAStatus", LPGEN("Mail.ru extra info"), "mra_xstatus49");

	bHideXStatusUI = FALSE;
	m_iXStatus = getByte(DBSETTING_XSTATUSID, MRA_MIR_XSTATUS_NONE);
	if ( !IsXStatusValid(m_iXStatus))
		m_iXStatus = MRA_MIR_XSTATUS_NONE;
}
示例#2
0
CMraProto::CMraProto(const char* _module, const TCHAR* _displayName) :
    PROTO<CMraProto>(_module, _displayName),
    m_bLoggedIn(false),
    m_groups(5, NumericKeySortT)
{
    MraSendQueueInitialize(0, &hSendQueueHandle);
    MraFilesQueueInitialize(0, &hFilesQueueHandle);
    MraMPopSessionQueueInitialize(&hMPopSessionQueue);//getByte("AutoAuthOnWebServices", MRA_DEFAULT_AUTO_AUTH_ON_WEB_SVCS)
    MraAvatarsQueueInitialize(&hAvatarsQueueHandle);

    CreateProtoService(PS_SETCUSTOMSTATUSEX, &CMraProto::MraSetXStatusEx);
    CreateProtoService(PS_GETCUSTOMSTATUSEX, &CMraProto::MraGetXStatusEx);
    CreateProtoService(PS_GETCUSTOMSTATUSICON, &CMraProto::MraGetXStatusIcon);

    CreateProtoService(PS_SET_LISTENINGTO, &CMraProto::MraSetListeningTo);

    CreateProtoService(PS_CREATEACCMGRUI, &CMraProto::MraCreateAccMgrUI);
    CreateProtoService(PS_GETAVATARCAPS, &CMraProto::MraGetAvatarCaps);
    CreateProtoService(PS_GETAVATARINFO, &CMraProto::MraGetAvatarInfo);
    CreateProtoService(PS_GETMYAVATAR, &CMraProto::MraGetMyAvatar);

    CreateProtoService(MS_ICQ_SENDSMS, &CMraProto::MraSendSMS);
    CreateProtoService(PS_SEND_NUDGE, &CMraProto::MraSendNudge);
    CreateProtoService(PS_GETUNREADEMAILCOUNT, &CMraProto::GetUnreadEmailCount);

    if (ServiceExists(MS_NUDGE_SEND))
        m_heNudgeReceived = CreateProtoEvent(PE_NUDGE);

    TCHAR name[MAX_PATH];
    mir_sntprintf(name, _countof(name), TranslateT("%s connection"), m_tszUserName);

    NETLIBUSER nlu = { sizeof(nlu) };
    nlu.flags = NUF_INCOMING | NUF_OUTGOING | NUF_HTTPCONNS | NUF_TCHAR;
    nlu.szSettingsModule = m_szModuleName;
    nlu.ptszDescriptiveName = name;
    m_hNetlibUser = (HANDLE)CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM)&nlu);

    InitMenus();

    mir_snprintf(szNewMailSound, _countof(szNewMailSound), "%s_new_email", m_szModuleName);
    SkinAddNewSoundEx(szNewMailSound, m_szModuleName, MRA_SOUND_NEW_EMAIL);

    HookProtoEvent(ME_CLIST_PREBUILDSTATUSMENU, &CMraProto::MraRebuildStatusMenu);

    hExtraXstatusIcon = ExtraIcon_Register("MRAXstatus", LPGEN("Mail.ru xStatus"), "mra_xstatus25");
    hExtraInfo = ExtraIcon_Register("MRAStatus", LPGEN("Mail.ru extra info"), MRA_XSTATUS_UNKNOWN_STR);

    m_bHideXStatusUI = false;
    m_iXStatus = getByte(DBSETTING_XSTATUSID, MRA_MIR_XSTATUS_NONE);
    if (!IsXStatusValid(m_iXStatus))
        m_iXStatus = MRA_MIR_XSTATUS_NONE;
}
示例#3
0
int CMraProto::SetAwayMsg(int m_iStatus, const TCHAR* msg)
{
    if (!m_bLoggedIn)
        return 1;

    size_t dwStatusDescSize = mir_tstrlen(msg);
    DWORD dwStatus = m_iStatus;
    DWORD dwXStatus = m_iXStatus;

    // не отправл¤ем новый статусный текст дл¤ хстатусов, дл¤ хстатусов только эвей сообщени¤
    if (dwStatus != ID_STATUS_ONLINE || IsXStatusValid(dwXStatus) == FALSE) {
        dwStatusDescSize = min(dwStatusDescSize, STATUS_DESC_MAX);
        MraSendNewStatus(dwStatus, dwXStatus, _T(""), msg);
    }
    return 0;
}
示例#4
0
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);
}
示例#5
0
INT_PTR CMraProto::MraSetXStatusEx(WPARAM, LPARAM lParam)
{
	INT_PTR iRet = 1;
	DWORD dwXStatus;
	CUSTOM_STATUS *pData = (CUSTOM_STATUS*)lParam;

	if (pData->cbSize >= sizeof(CUSTOM_STATUS)) {
		iRet = 0;

		if (pData->flags & CSSF_MASK_STATUS) {
			dwXStatus = *pData->status;
			if (IsXStatusValid(dwXStatus) == FALSE && dwXStatus != MRA_MIR_XSTATUS_NONE)
				iRet = 1;
		}
		else dwXStatus = m_iXStatus;

		if (pData->flags & (CSSF_MASK_NAME | CSSF_MASK_MESSAGE) && iRet == 0) {
			if (IsXStatusValid(dwXStatus) || dwXStatus == MRA_MIR_XSTATUS_NONE) {
				CHAR szValueName[MAX_PATH];

				// set custom status name
				if (pData->flags & CSSF_MASK_NAME) {
					mir_snprintf(szValueName, SIZEOF(szValueName), "XStatus%ldName", dwXStatus);
					if (pData->flags & CSSF_UNICODE) {
						mraSetStringExW(NULL, szValueName, pData->pwszName);
						mraSetStringExW(NULL, DBSETTING_XSTATUSNAME, pData->pwszName);
					}
					else {
						mraSetStringExA(NULL, szValueName, pData->pszName);
						mraSetStringExA(NULL, DBSETTING_XSTATUSNAME, pData->pszName);
					}
				}

				// set custom status message
				if (pData->flags & CSSF_MASK_MESSAGE) {
					mir_snprintf(szValueName, SIZEOF(szValueName), "XStatus%ldMsg", dwXStatus);
					if (pData->flags & CSSF_UNICODE) {
						mraSetStringExW(NULL, szValueName, pData->pwszMessage);
						mraSetStringExW(NULL, DBSETTING_XSTATUSMSG, pData->pwszMessage);
					}
					else {
						mraSetStringExA(NULL, szValueName, pData->pszMessage);
						mraSetStringExA(NULL, DBSETTING_XSTATUSMSG, pData->pszMessage);
					}
				}
			}
			// неудача только если мы не ставили Хстатус и попытались записать сообщения для "нет" статуса
			else if (!(pData->flags & CSSF_MASK_STATUS))
				iRet = 1;
		}

		// set/update xstatus code and/or message
		if (pData->flags & (CSSF_MASK_STATUS | CSSF_MASK_NAME | CSSF_MASK_MESSAGE) && iRet == 0)
			MraSetXStatusInternal(dwXStatus);

		// hide menu items
		if (pData->flags & CSSF_DISABLE_UI) {
			m_bHideXStatusUI = (*pData->wParam) ? false : true;
			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++)
				Menu_ShowItem(hXStatusMenuItems[i], !m_bHideXStatusUI);
		}
	}
	return iRet;
}