From 2d8b55b9bfd482225e5ab80ad76d8373b8677617 Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Fri, 23 Nov 2012 18:22:46 +0000 Subject: little bit better with avatars git-svn-id: http://svn.miranda-ng.org/main/trunk@2452 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/Skype/src/skype_contacts.cpp | 38 ++++++++++++--------------- protocols/Skype/src/skype_dialogs.cpp | 5 ---- protocols/Skype/src/skype_proto.h | 47 +++++++++++++++++----------------- protocols/Skype/src/skype_services.cpp | 4 +-- protocols/Skype/src/skype_utils.cpp | 11 ++++---- 5 files changed, 49 insertions(+), 56 deletions(-) (limited to 'protocols') diff --git a/protocols/Skype/src/skype_contacts.cpp b/protocols/Skype/src/skype_contacts.cpp index 7669615456..0c809f4dfc 100644 --- a/protocols/Skype/src/skype_contacts.cpp +++ b/protocols/Skype/src/skype_contacts.cpp @@ -42,32 +42,28 @@ void CSkypeProto::UpdateContactAvatar(HANDLE hContact, CContact::Ref contact) uint newTS = 0; contact->GetPropAvatarTimestamp(newTS); DWORD oldTS = this->GetSettingDword(hContact, "AvatarTS"); - if (newTS > oldTS) + SEBinary data; + contact->GetPropAvatarImage(data); + if ((newTS > oldTS) || (!newTS && data.size() > 0)) //hack for avatars without timestamp { - SEBinary data; - contact->GetPropAvatarImage(data); - - if (data.size() > 0) + wchar_t *path = this->GetContactAvatarFilePath(this->GetSettingString(hContact, "sid")); + FILE* fp = _wfopen(path, L"wb"); + if (fp) { - wchar_t *path = this->GetContactAvatarFilePath(this->GetSettingString(hContact, "sid")); - FILE* fp = _wfopen(path, L"wb"); - if (fp) - { - fwrite(data.data(), sizeof(char), data.size(), fp); - fclose(fp); + fwrite(data.data(), sizeof(char), data.size(), fp); + fclose(fp); - this->SetSettingDword(hContact, "AvatarTS", newTS); + this->SetSettingDword(hContact, "AvatarTS", newTS); - PROTO_AVATAR_INFORMATIONW pai = {0}; - pai.cbSize = sizeof(pai); - pai.format = PA_FORMAT_JPEG; - pai.hContact = hContact; - wcscpy(pai.filename, path); + PROTO_AVATAR_INFORMATIONW pai = {0}; + pai.cbSize = sizeof(pai); + pai.format = PA_FORMAT_JPEG; + pai.hContact = hContact; + wcscpy(pai.filename, path); - this->SendBroadcast(hContact, ACKTYPE_AVATAR, ACKRESULT_SUCCESS, (HANDLE)&pai, 0); - } - delete path; - } + this->SendBroadcast(hContact, ACKTYPE_AVATAR, ACKRESULT_SUCCESS, (HANDLE)&pai, 0); + } + delete path; } } diff --git a/protocols/Skype/src/skype_dialogs.cpp b/protocols/Skype/src/skype_dialogs.cpp index 092a17f927..fbb960e392 100644 --- a/protocols/Skype/src/skype_dialogs.cpp +++ b/protocols/Skype/src/skype_dialogs.cpp @@ -326,11 +326,6 @@ INT_PTR CALLBACK CSkypeProto::OwnSkypeDlgProc(HWND hwndDlg, UINT msg, WPARAM wPa TranslateDialogDefault(hwndDlg); HWND hwndList = GetDlgItem(hwndDlg, IDC_LIST); ListView_SetExtendedListViewStyle(hwndList, LVS_EX_FULLROWSELECT); - /*LOGFONT lf; - GetObject((HFONT)SendMessage(hwndList, WM_GETFONT, 0, 0), sizeof(lf), &lf); - lf.lfHeight -= 5; - HFONT hFont = CreateFontIndirect(&lf); - SendMessage(hwndList, WM_SETFONT, (WPARAM)hFont, 0);*/ // Prepare ListView Columns LV_COLUMN lvc = {0}; RECT rc; diff --git a/protocols/Skype/src/skype_proto.h b/protocols/Skype/src/skype_proto.h index 19f8d35657..ca1f70a595 100644 --- a/protocols/Skype/src/skype_proto.h +++ b/protocols/Skype/src/skype_proto.h @@ -28,31 +28,32 @@ struct SettingItem { const TCHAR *szDescription; const char *szDbSetting; + int dbType; //DBVT_ constant }; const SettingItem setting[]={ - {LPGENT("Full name"), "Nick"}, - {LPGENT("Mood"), "XStatusMsg"}, - - {LPGENT("Mobile phone"), "Cellular"}, - {LPGENT("Home phone"), "Phone"}, - {LPGENT("Office phone"), "CompanyPhone"}, - {LPGENT("E-mail 1"), "e-mail0"}, - {LPGENT("E-mail 2"), "e-mail1"}, - {LPGENT("E-mail 3"), "e-mail2"}, - - {LPGENT("Country"), "Country"}, - {LPGENT("State"), "State"}, - {LPGENT("City"), "City"}, - {LPGENT("Time zone"), "Timezone"}, - {LPGENT("Homepage"), "Homepage"}, - {LPGENT("Gender"), "Gender"}, - {LPGENT("Birth day"), "BirthDay"}, - {LPGENT("Birth month"), "BirthMonth"}, - {LPGENT("Birth year"), "BirthYear"}, - {LPGENT("Language"), "Language1"}, - - {LPGENT("About"), "About"} + {LPGENT("Full name"), "Nick", DBVT_WCHAR}, + {LPGENT("Mood"), "XStatusMsg", DBVT_WCHAR}, + + {LPGENT("Mobile phone"), "Cellular", DBVT_WCHAR}, + {LPGENT("Home phone"), "Phone", DBVT_WCHAR}, + {LPGENT("Office phone"), "CompanyPhone", DBVT_WCHAR}, + {LPGENT("E-mail 1"), "e-mail0", DBVT_WCHAR}, + {LPGENT("E-mail 2"), "e-mail1", DBVT_WCHAR}, + {LPGENT("E-mail 3"), "e-mail2", DBVT_WCHAR}, + + {LPGENT("Country"), "Country", DBVT_WCHAR}, + {LPGENT("State"), "State", DBVT_WCHAR}, + {LPGENT("City"), "City", DBVT_WCHAR}, + {LPGENT("Time zone"), "Timezone", DBVT_BYTE}, + {LPGENT("Homepage"), "Homepage", DBVT_WCHAR}, + {LPGENT("Gender"), "Gender", DBVT_BYTE}, + {LPGENT("Birth day"), "BirthDay", DBVT_BYTE}, + {LPGENT("Birth month"), "BirthMonth", DBVT_BYTE}, + {LPGENT("Birth year"), "BirthYear", DBVT_WORD}, + {LPGENT("Language"), "Language1", DBVT_WCHAR}, + + {LPGENT("About"), "About", DBVT_WCHAR} }; struct CSkypeProto : public PROTO_INTERFACE, public MZeroedObject @@ -236,7 +237,7 @@ protected: static int DetectAvatarFormatBuffer(const char *pBuffer); static int DetectAvatarFormat(const wchar_t *path); - wchar_t* GetContactAvatarFilePath(HANDLE hContact = 0); + wchar_t* GetContactAvatarFilePath(wchar_t *sid); int SkypeToMirandaLoginError(CAccount::LOGOUTREASON logoutReason); diff --git a/protocols/Skype/src/skype_services.cpp b/protocols/Skype/src/skype_services.cpp index c9b140b4d0..c0a9135443 100644 --- a/protocols/Skype/src/skype_services.cpp +++ b/protocols/Skype/src/skype_services.cpp @@ -80,7 +80,7 @@ int __cdecl CSkypeProto::GetMyAvatar(WPARAM wParam, LPARAM lParam) { if (!wParam) return -2; - wchar_t *path = this->GetContactAvatarFilePath(); + wchar_t *path = this->GetContactAvatarFilePath(NULL); if (path && !_waccess(path, 0)) { ::wcsncpy((wchar_t *)wParam, path, (int)lParam); @@ -107,7 +107,7 @@ int __cdecl CSkypeProto::SetMyAvatar(WPARAM, LPARAM lParam) ::DeleteObject(avt); } - wchar_t *avatarPath = this->GetContactAvatarFilePath(); + wchar_t *avatarPath = this->GetContactAvatarFilePath(NULL); if (::wcscmp(path, avatarPath) && !::CopyFile(path, avatarPath, FALSE)) { this->Log("Failed to copy our avatar to local storage."); diff --git a/protocols/Skype/src/skype_utils.cpp b/protocols/Skype/src/skype_utils.cpp index 5e2573d6f5..2af0a496cf 100644 --- a/protocols/Skype/src/skype_utils.cpp +++ b/protocols/Skype/src/skype_utils.cpp @@ -264,7 +264,7 @@ int CSkypeProto::DetectAvatarFormat(const wchar_t *path) return CSkypeProto::DetectAvatarFormatBuffer(pBuf); } -wchar_t* CSkypeProto::GetContactAvatarFilePath(HANDLE hContact) +wchar_t* CSkypeProto::GetContactAvatarFilePath(wchar_t *sid) { wchar_t* path = new wchar_t[MAX_PATH * 2]; @@ -299,10 +299,11 @@ wchar_t* CSkypeProto::GetContactAvatarFilePath(HANDLE hContact) // make sure the avatar cache directory exists ::CallService(MS_UTILS_CREATEDIRTREET, 0, (LPARAM)path); - wchar_t *sid = this->GetSettingString("sid", ::mir_wstrdup(L"")); - ::wcscat(path, sid); - ::wcscat(path, L".jpg"); - ::mir_free(sid); + if (sid) { + ::wcscat(path, sid); + ::wcscat(path, L".jpg"); + } else + path = NULL; return path; } -- cgit v1.2.3