From bcf348d1f7e3ba5e9f939c997de1f34d836346e5 Mon Sep 17 00:00:00 2001 From: "george.hazan" Date: Wed, 21 Mar 2012 18:41:38 +0000 Subject: fix for avatars git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@280 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- IEView/TemplateHTMLBuilder.cpp | 51 +++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 23 deletions(-) (limited to 'IEView/TemplateHTMLBuilder.cpp') diff --git a/IEView/TemplateHTMLBuilder.cpp b/IEView/TemplateHTMLBuilder.cpp index 54803b0..f5c49bc 100644 --- a/IEView/TemplateHTMLBuilder.cpp +++ b/IEView/TemplateHTMLBuilder.cpp @@ -48,8 +48,8 @@ TemplateHTMLBuilder::~TemplateHTMLBuilder() { char *TemplateHTMLBuilder::getAvatar(HANDLE hContact, const char * szProto) { DBVARIANT dbv; - char tmpPath[MAX_PATH]; - char *result = NULL; + TCHAR tmpPath[MAX_PATH]; + TCHAR *result = NULL; if (Options::getAvatarServiceFlags() == Options::AVATARSERVICE_PRESENT) { struct avatarCacheEntry *ace = NULL; @@ -59,40 +59,47 @@ char *TemplateHTMLBuilder::getAvatar(HANDLE hContact, const char * szProto) { ace = (struct avatarCacheEntry *)CallService(MS_AV_GETAVATARBITMAP, (WPARAM)hContact, (LPARAM)0); } if (ace!=NULL) { - result = ace->szFilename; + if ( ace->cbSize == sizeof(avatarCacheEntry)) + result = ace->szFilename; + else { + // compatibility: in M0.9 it will always be char* + #if defined( _UNICODE ) + MultiByteToWideChar( CP_ACP, 0, (char*)ace->szFilename, -1, tmpPath, SIZEOF(tmpPath)); + #endif + } } } - if (!DBGetContactSetting(hContact, "ContactPhoto", "File",&dbv)) { - if (strlen(dbv.pszVal) > 0) { - char* ext = strrchr(dbv.pszVal, '.'); - if (ext && strcmpi(ext, ".xml") == 0) { - result = (char *)getFlashAvatar(dbv.pszVal, (hContact == NULL) ? 1 : 0); + if (!DBGetContactSettingTString(hContact, "ContactPhoto", "File", &dbv)) { + if (_tcslen(dbv.ptszVal) > 0) { + TCHAR* ext = _tcsrchr(dbv.ptszVal, '.'); + if (ext && lstrcmpi(ext, _T(".xml")) == 0) { + result = ( TCHAR* )getFlashAvatar(dbv.ptszVal, (hContact == NULL) ? 1 : 0); } else { if (result == NULL) { /* relative -> absolute */ - strcpy (tmpPath, dbv.pszVal); - if (ServiceExists(MS_UTILS_PATHTOABSOLUTE)&& strncmp(tmpPath, "http://", 7)) { - CallService(MS_UTILS_PATHTOABSOLUTE, (WPARAM)dbv.pszVal, (LPARAM)tmpPath); - } + _tcscpy (tmpPath, dbv.ptszVal); + if (ServiceExists(MS_UTILS_PATHTOABSOLUTET) && _tcsncmp(tmpPath, _T("http://"), 7)) + CallService(MS_UTILS_PATHTOABSOLUTET, (WPARAM)dbv.ptszVal, (LPARAM)tmpPath); + result = tmpPath; } } } DBFreeVariant(&dbv); } - result = Utils::UTF8Encode(result); - Utils::convertPath(result); - return result; + char* res = Utils::UTF8Encode(result); + Utils::convertPath(res); + return res; } -const char *TemplateHTMLBuilder::getFlashAvatar(const char *file, int index) { +const char *TemplateHTMLBuilder::getFlashAvatar(const TCHAR *file, int index) { if (time(NULL) - flashAvatarsTime[index] > 600 || flashAvatars[index] == NULL) { if (flashAvatars[index] != NULL) { delete flashAvatars[index]; flashAvatars[index] = NULL; } flashAvatarsTime[index] = time(NULL); - int src = _open(file, _O_BINARY | _O_RDONLY); + int src = _topen(file, _O_BINARY | _O_RDONLY); if (src != -1) { char pBuf[2048]; char *urlBuf; @@ -160,10 +167,10 @@ void TemplateHTMLBuilder::buildHeadTemplate(IEView *view, IEVIEWEVENT *event, Pr char *szProto = NULL; char *szNameIn = NULL; char *szNameOut = NULL; - char *szUINIn = NULL; - char *szUINOut = NULL; char *szAvatarIn = NULL; char *szAvatarOut = NULL; + char *szUINIn = NULL; + char *szUINOut = NULL; char *szNickIn = NULL; char *szNickOut = NULL; char *szStatusMsg = NULL; @@ -175,14 +182,12 @@ void TemplateHTMLBuilder::buildHeadTemplate(IEView *view, IEVIEWEVENT *event, Pr szRealProto = getProto(hRealContact); szProto = getProto(event->pszProto, event->hContact); tempBase[0]='\0'; - if (protoSettings == NULL) { + if (protoSettings == NULL) return; - } TemplateMap *tmpm = getTemplateMap(protoSettings); - if (tmpm==NULL) { + if (tmpm==NULL) return; - } strcpy(tempBase, "file://"); strcat(tempBase, tmpm->getFilename()); -- cgit v1.2.3