summaryrefslogtreecommitdiff
path: root/protocols/Icq10/src/utils.cpp
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2018-12-24 19:48:28 +0300
committerGeorge Hazan <ghazan@miranda.im>2018-12-24 19:48:28 +0300
commit7f5b936071e3a02fee7f7156157f2d0f776bb395 (patch)
tree39ea508e39ebced43095885a67a747eba2eff8a3 /protocols/Icq10/src/utils.cpp
parent53aaf4d4c34318d5953ca55d879e7153a7a30098 (diff)
Icq10: more avatar processing services
Diffstat (limited to 'protocols/Icq10/src/utils.cpp')
-rw-r--r--protocols/Icq10/src/utils.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/protocols/Icq10/src/utils.cpp b/protocols/Icq10/src/utils.cpp
index 2dec6c800c..0ed21af36c 100644
--- a/protocols/Icq10/src/utils.cpp
+++ b/protocols/Icq10/src/utils.cpp
@@ -34,6 +34,9 @@ MCONTACT CIcqProto::FindContactByUIN(DWORD dwUin)
return (p) ? p->m_hContact : 0;
}
+/////////////////////////////////////////////////////////////////////////////////////////
+// Avatars
+
void CIcqProto::GetAvatarFileName(MCONTACT hContact, wchar_t* pszDest, size_t cbLen)
{
int tPathLen = mir_snwprintf(pszDest, cbLen, L"%s\\%S", VARSW(L"%miranda_avatarcache%"), m_szModuleName);
@@ -49,6 +52,75 @@ void CIcqProto::GetAvatarFileName(MCONTACT hContact, wchar_t* pszDest, size_t cb
mir_snwprintf(pszDest + tPathLen, MAX_PATH - tPathLen, L"%s%s", wszFileName.c_str(), szFileType);
}
+INT_PTR __cdecl CIcqProto::GetAvatar(WPARAM wParam, LPARAM lParam)
+{
+ wchar_t *buf = (wchar_t*)wParam;
+ int size = (int)lParam;
+ if (buf == nullptr || size <= 0)
+ return -1;
+
+ GetAvatarFileName(0, buf, size);
+ return 0;
+}
+
+INT_PTR __cdecl CIcqProto::GetAvatarCaps(WPARAM wParam, LPARAM lParam)
+{
+ switch (wParam) {
+ case AF_MAXSIZE:
+ ((POINT*)lParam)->x = -1;
+ ((POINT*)lParam)->y = -1;
+ return 0;
+
+ case AF_MAXFILESIZE:
+ return 0;
+
+ case AF_PROPORTION:
+ return PIP_NONE;
+
+ case AF_FORMATSUPPORTED: // nobody
+ return 1;
+
+ case AF_DELAYAFTERFAIL:
+ return 10 * 60 * 1000;
+
+ case AF_DONTNEEDDELAYS: // We need delays because of larger friend lists
+ return 0;
+
+ case AF_ENABLED:
+ case AF_FETCHIFPROTONOTVISIBLE:
+ case AF_FETCHIFCONTACTOFFLINE:
+ return 1;
+ }
+ return 0;
+}
+
+INT_PTR __cdecl CIcqProto::GetAvatarInfo(WPARAM, LPARAM lParam)
+{
+ PROTO_AVATAR_INFORMATION* pai = (PROTO_AVATAR_INFORMATION*)lParam;
+
+ ptrW szIconId(getWStringA(pai->hContact, "IconId"));
+ if (szIconId == nullptr) {
+ debugLogA("No avatar");
+ return GAIR_NOAVATAR;
+ }
+
+ GetAvatarFileName(pai->hContact, pai->filename, _countof(pai->filename));
+ pai->format = getByte(pai->hContact, "AvatarType", 0);
+
+ if (::_waccess(pai->filename, 0) == 0)
+ return GAIR_SUCCESS;
+
+ debugLogA("No avatar");
+ return GAIR_NOAVATAR;
+}
+
+INT_PTR __cdecl CIcqProto::SetAvatar(WPARAM, LPARAM)
+{
+ return 1; // TODO
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
int StatusFromString(const CMStringW &wszStatus)
{
if (wszStatus == "online")