示例#1
0
INT_PTR CAimProto::GetAvatarInfo(WPARAM wParam, LPARAM lParam)
{
	PROTO_AVATAR_INFORMATION* AI = (PROTO_AVATAR_INFORMATION*)lParam;
	
	AI->filename[0] = 0;
	AI->format = PA_FORMAT_UNKNOWN;

	if (getByte(AIM_KEY_DA, 0)) return GAIR_NOAVATAR;

	switch (get_avatar_filename(AI->hContact, AI->filename, sizeof(AI->filename), NULL))
	{
	case GAIR_SUCCESS:
		if (!(wParam & GAIF_FORCE) || state != 1 ) 
			return GAIR_SUCCESS;

	case GAIR_WAITFOR:
		AI->format = detect_image_type(AI->filename);
		break;

	default:
		return GAIR_NOAVATAR;
	}

	if (state == 1)
	{
		ForkThread(&CAimProto::avatar_request_thread, AI->hContact);
		return GAIR_WAITFOR;
	}

	return GAIR_NOAVATAR;
}
示例#2
0
void CAimProto::avatar_retrieval_handler(const char* sn, const char* hash, const char* data, int data_len)
{
	bool res = false;
	PROTO_AVATAR_INFORMATIONT AI = {0};
	AI.cbSize = sizeof(AI);

	AI.hContact = contact_from_sn(sn);
	
	if (data_len > 0)
	{
		const TCHAR *type; 
		AI.format = detect_image_type(data, type);
		get_avatar_filename(AI.hContact, AI.filename, SIZEOF(AI.filename), type);

		int fileId = _topen(AI.filename, _O_CREAT | _O_TRUNC | _O_WRONLY | O_BINARY,  _S_IREAD | _S_IWRITE);
		if (fileId >= 0)
		{
			_write(fileId, data, data_len);
			_close(fileId);
			res = true;

			char *my_sn = getSetting(AIM_KEY_SN);
			if (!_strcmps(sn, my_sn))
				CallService(MS_AV_REPORTMYAVATARCHANGED, (WPARAM)m_szModuleName, 0);
			mir_free(my_sn);
		}
//            else
//			    ShowError("Cannot set avatar. File '%s' could not be created/overwritten", file);
	}
	else
		LOG("AIM sent avatar of zero length for %s.(Usually caused by repeated request for the same icon)", sn);

	sendBroadcast(AI.hContact, ACKTYPE_AVATAR, res ? ACKRESULT_SUCCESS : ACKRESULT_FAILED, &AI, 0);
}