Detect avatar file type for download. Not fully working yet.
This commit is contained in:
@@ -557,7 +557,7 @@ ClientThread::RetrieveAvatarIfNeeded(unsigned id, const PlayerInfo &info)
|
||||
string avatarServerAddress(GetContext().GetAvatarServerAddr());
|
||||
if (!avatarServerAddress.empty() && m_avatarDownloader)
|
||||
{
|
||||
string serverFileName(info.avatar.ToString() + ".jpg"); // TODO!
|
||||
string serverFileName(info.avatar.ToString() + AvatarManager::GetAvatarFileExtension(info.avatarType));
|
||||
m_avatarDownloader->QueueDownload(
|
||||
id, avatarServerAddress + serverFileName, GetContext().GetCacheDir() + TEMP_AVATAR_FILENAME);
|
||||
}
|
||||
@@ -621,7 +621,7 @@ ClientThread::PassAvatarDataToManager(unsigned playerId, boost::shared_ptr<Avata
|
||||
else
|
||||
{
|
||||
if (avatarData->fileType == AVATAR_FILE_TYPE_UNKNOWN)
|
||||
avatarData->fileType = AVATAR_FILE_TYPE_JPG; // TODO!
|
||||
avatarData->fileType = tmpPlayerInfo.avatarType;
|
||||
if (!GetAvatarManager().StoreAvatarInCache(tmpPlayerInfo.avatar, avatarData->fileType, &avatarData->fileData[0], avatarData->reportedSize, false))
|
||||
LOG_ERROR("Failed to store avatar in cache directory.");
|
||||
|
||||
|
||||
@@ -95,6 +95,7 @@ using namespace std;
|
||||
|
||||
#define NET_PLAYER_FLAG_HUMAN 0x01
|
||||
#define NET_PLAYER_FLAG_HAS_AVATAR 0x02
|
||||
#define NET_PLAYER_FLAG_AVATAR_TYPE_MASK 0x0c
|
||||
|
||||
#define NET_START_FLAG_FILL_WITH_CPU_PLAYERS 0x01
|
||||
|
||||
@@ -2454,6 +2455,7 @@ NetPacketPlayerInfo::SetData(const NetPacketPlayerInfo::Data &inData)
|
||||
if (inData.playerInfo.hasAvatar)
|
||||
{
|
||||
tmpPlayerFlags |= NET_PLAYER_FLAG_HAS_AVATAR;
|
||||
tmpPlayerFlags |= ((inData.playerInfo.avatarType) << 2);
|
||||
char *avatarPtr = (char *)tmpData + sizeof(NetPacketPlayerInfoData);
|
||||
memcpy(avatarPtr, inData.playerInfo.avatar.data, MD5_DATA_SIZE);
|
||||
}
|
||||
@@ -2479,6 +2481,21 @@ NetPacketPlayerInfo::GetData(NetPacketPlayerInfo::Data &outData) const
|
||||
|
||||
if (outData.playerInfo.hasAvatar)
|
||||
{
|
||||
switch ((tmpPlayerFlags & NET_PLAYER_FLAG_AVATAR_TYPE_MASK) >> 2)
|
||||
{
|
||||
case AVATAR_FILE_TYPE_PNG :
|
||||
outData.playerInfo.avatarType = AVATAR_FILE_TYPE_PNG;
|
||||
break;
|
||||
case AVATAR_FILE_TYPE_JPG :
|
||||
outData.playerInfo.avatarType = AVATAR_FILE_TYPE_JPG;
|
||||
break;
|
||||
case AVATAR_FILE_TYPE_GIF :
|
||||
outData.playerInfo.avatarType = AVATAR_FILE_TYPE_GIF;
|
||||
break;
|
||||
default:
|
||||
outData.playerInfo.avatarType = AVATAR_FILE_TYPE_UNKNOWN;
|
||||
break;
|
||||
}
|
||||
char *avatarPtr = (char *)tmpData + sizeof(NetPacketPlayerInfoData);
|
||||
memcpy(outData.playerInfo.avatar.data, avatarPtr, MD5_DATA_SIZE);
|
||||
}
|
||||
|
||||
@@ -523,9 +523,10 @@ ServerLobbyThread::HandleNetPacketInit(SessionWrapper session, const NetPacketIn
|
||||
m_sessionManager.SetSessionPlayerData(session.sessionData->GetId(), tmpPlayerData);
|
||||
session.playerData = tmpPlayerData;
|
||||
|
||||
string avatarFileName;
|
||||
if (initData.showAvatar
|
||||
&& !initData.avatar.IsZero()
|
||||
&& !GetAvatarManager().HasAvatar(initData.avatar))
|
||||
&& !GetAvatarManager().GetAvatarFileName(initData.avatar, avatarFileName))
|
||||
{
|
||||
bool avatarRecentlyRequested = false;
|
||||
{
|
||||
@@ -540,6 +541,8 @@ ServerLobbyThread::HandleNetPacketInit(SessionWrapper session, const NetPacketIn
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!avatarFileName.empty())
|
||||
session.playerData->SetAvatarFile(avatarFileName);
|
||||
EstablishSession(session);
|
||||
}
|
||||
}
|
||||
@@ -619,6 +622,10 @@ ServerLobbyThread::HandleNetPacketAvatarEnd(SessionWrapper session, const NetPac
|
||||
|
||||
// Free memory.
|
||||
session.playerData->SetNetAvatarData(boost::shared_ptr<AvatarData>());
|
||||
// Set avatar file name.
|
||||
string avatarFileName;
|
||||
if (GetAvatarManager().GetAvatarFileName(avatarMD5, avatarFileName))
|
||||
session.playerData->SetAvatarFile(avatarFileName);
|
||||
// Init finished - start session.
|
||||
EstablishSession(session);
|
||||
}
|
||||
@@ -656,7 +663,10 @@ ServerLobbyThread::HandleNetPacketRetrievePlayerInfo(SessionWrapper session, con
|
||||
infoData.playerInfo.playerName = tmpPlayer->GetName();
|
||||
infoData.playerInfo.hasAvatar = !tmpPlayer->GetAvatarMD5().IsZero();
|
||||
if (infoData.playerInfo.hasAvatar)
|
||||
{
|
||||
infoData.playerInfo.avatar = tmpPlayer->GetAvatarMD5();
|
||||
infoData.playerInfo.avatarType = AvatarManager::GetAvatarFileType(tmpPlayer->GetAvatarFile());
|
||||
}
|
||||
static_cast<NetPacketPlayerInfo *>(info.get())->SetData(infoData);
|
||||
session.sessionData->GetSender().Send(session.sessionData, info);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user