コード例 #1
0
static INT_PTR Service_CanCall(WPARAM wParam, LPARAM lParam) 
{
	HANDLE hContact = (HANDLE) wParam;
	if (hContact == NULL)
		return -1;

	hContact = ConvertMetacontact(hContact);

	return CanCall(hContact) ? 1 : 0;
}
コード例 #2
0
ファイル: data.cpp プロジェクト: TonyAlloa/miranda-dev
int Protocol::GetNickMaxLength()
{
	if (CanCall(PS_GETMYNICKNAMEMAXLENGTH))
	{
		int ret = Call(PS_GETMYNICKNAMEMAXLENGTH);
		if (ret <= 0)
			ret = MS_MYDETAILS_GETMYNICKNAME_BUFFER_SIZE;
		return ret;
	}
	else
		return MS_MYDETAILS_GETMYNICKNAME_BUFFER_SIZE;
}
コード例 #3
0
ファイル: data.cpp プロジェクト: TonyAlloa/miranda-dev
void Protocol::UpdateStatus()
{
	status_initialized = true;

	status = Call(PS_GETSTATUS);

	if (status > ID_STATUS_OFFLINE && CanCall(PS_ICQ_GETCUSTOMSTATUS))
	{
		char *name_key = NULL;
		char *message_key = NULL;

		custom_status = Call(PS_ICQ_GETCUSTOMSTATUS, (WPARAM) &name_key, (LPARAM) &message_key);

		// Fix fo jabber, that returns 0xbaadf00d here
		if (custom_status < 0)
			custom_status = 0;

		custom_status_name_key = (name_key ? name_key : "");
		custom_status_message_key = (message_key ? message_key : "");
	}
	else
	{
		custom_status = 0;
		custom_status_name_key = "";
		custom_status_message_key = "";
	}

	if (custom_status == 0)
	{
		status_name = (char *) CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, status, GSMDF_TCHAR);
	}
	else
	{
		status_name = "";

		if (!custom_status_name_key.empty())
			status_name = GetDBSettingString(custom_status_name_key.c_str());

		if (!custom_status_message_key.empty())
		{
			std::string tmp = GetDBSettingString(custom_status_message_key.c_str());
			if (!tmp.empty())
			{
				status_name += ": ";
				status_name += tmp;
			}
		}
	}
	
	if (status_name.empty())
		status_name = TranslateTS("<no status name>");
}
コード例 #4
0
ファイル: data.cpp プロジェクト: TonyAlloa/miranda-dev
bool Protocol::CanGetEmailCount()
{
	return CanCall(PS_GETUNREADEMAILCOUNT) != 0 
		&& GetStatus() > ID_STATUS_OFFLINE;
}
コード例 #5
0
ファイル: data.cpp プロジェクト: TonyAlloa/miranda-dev
bool Protocol::CanGetListeningTo()
{
	return CanCall(PS_SET_LISTENINGTO) != 0;
}
コード例 #6
0
ファイル: data.cpp プロジェクト: TonyAlloa/miranda-dev
bool Protocol::CanSetNick()
{
	return CanCall(PS_SETMYNICKNAME) != 0;
}
コード例 #7
0
ファイル: data.cpp プロジェクト: TonyAlloa/miranda-dev
void Protocol::GetStatusMsg(int aStatus, char *msg, size_t msg_size)
{
	if (!CanGetStatusMsg())
	{
		lstrcpyn(msg, "", msg_size);
		return;
	}

	bool isCurrentStatus = (aStatus == GetStatus());

	if (isCurrentStatus && CanCall(PS_GETMYAWAYMSG))
	{
		char *tmp = (char *) Call(PS_GETMYAWAYMSG);
		lstrcpyn(msg, tmp == NULL ? "" : tmp, msg_size);
	}
	else if (isCurrentStatus && ServiceExists(MS_SA_ISSARUNNING) && CallService(MS_SA_ISSARUNNING, 0, 0)) 
	{
		char *tmp = (char *) CallService(MS_AWAYMSG_GETSTATUSMSG, (WPARAM) ID_STATUS_CURRENT, (LPARAM) name.c_str());

		if (tmp != NULL)
		{
			lstrcpyn(msg, tmp, msg_size);
			mir_free(tmp);
		}
		else lstrcpyn(msg, "", msg_size);
		
	}
	else if (ServiceExists(MS_NAS_GETSTATE))
	{
		NAS_PROTOINFO pi;

		ZeroMemory(&pi, sizeof(pi));
		pi.cbSize = sizeof(NAS_PROTOINFO);
		pi.szProto = (char *) name.c_str();
		pi.status = (isCurrentStatus ? 0 : aStatus);
		pi.szMsg = NULL;

		if (CallService(MS_NAS_GETSTATE, (WPARAM) &pi, 1) == 0)
		{
			if (pi.szMsg == NULL)
			{
				pi.szProto = NULL;

				if (CallService(MS_NAS_GETSTATE, (WPARAM) &pi, 1) == 0)
				{
					if (pi.szMsg != NULL)
					{
						lstrcpyn(msg, pi.szMsg, msg_size);
						mir_free(pi.szMsg);
					}
					else lstrcpyn(msg, "", msg_size);
				}
				else lstrcpyn(msg, "", msg_size);
			}
			else // if (pi.szMsg != NULL)
			{
				lstrcpyn(msg, pi.szMsg, msg_size);
				mir_free(pi.szMsg);
			}
		}
		else lstrcpyn(msg, "", msg_size);

		if (ServiceExists(MS_VARS_FORMATSTRING))
		{
			char *tmp = variables_parse(msg, NULL, NULL);
			lstrcpyn(msg, tmp, msg_size);
			variables_free(tmp);
		}
	}
	// TODO: Remove when removing old NAS services support
	else if (ServiceExists("NewAwaySystem/GetState"))
	{
		NAS_PROTOINFO pi, *pii;

		ZeroMemory(&pi, sizeof(pi));
		pi.cbSize = sizeof(NAS_PROTOINFO);
		pi.szProto = (char *) name.c_str();
		pi.status = (isCurrentStatus ? 0 : aStatus);
		pi.szMsg = NULL;

		pii = &pi;

		if (CallService("NewAwaySystem/GetState", (WPARAM) &pii, 1) == 0)
		{
			if (pi.szMsg == NULL)
			{
				pi.szProto = NULL;

				if (CallService("NewAwaySystem/GetState", (WPARAM) &pii, 1) == 0)
				{
					if (pi.szMsg != NULL)
					{
						lstrcpyn(msg, pi.szMsg, msg_size);
						mir_free(pi.szMsg);
					}
					else lstrcpyn(msg, "", msg_size);
				}
				else lstrcpyn(msg, "", msg_size);
			}
			else // if (pi.szMsg != NULL)
			{
				lstrcpyn(msg, pi.szMsg, msg_size);
				mir_free(pi.szMsg);
			}
		}
		else lstrcpyn(msg, "", msg_size);

		if (ServiceExists(MS_VARS_FORMATSTRING))
		{
			char *tmp = variables_parse(msg, NULL, NULL);
			lstrcpyn(msg, tmp, msg_size);
			variables_free(tmp);
		}
	}
	else if (ServiceExists(MS_AWAYMSG_GETSTATUSMSG))
	{
		char *tmp = (char *) CallService(MS_AWAYMSG_GETSTATUSMSG, (WPARAM)aStatus, 0);

		if (tmp != NULL)
		{
			lstrcpyn(msg, tmp, msg_size);
			mir_free(tmp);
		}
		else lstrcpyn(msg, "", msg_size);
	}
}