From b2e29d4d5ad48ccfd9071f96eb84572145a1fce1 Mon Sep 17 00:00:00 2001 From: Alexander Lantsev Date: Thu, 25 Oct 2012 16:23:47 +0000 Subject: - fixed auth menus git-svn-id: http://svn.miranda-ng.org/main/trunk@2069 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/Skype/src/skype_contacts.cpp | 72 ++++++---------------------------- protocols/Skype/src/skype_events.cpp | 4 +- protocols/Skype/src/skype_menus.cpp | 58 +++++++++++++-------------- protocols/Skype/src/skype_proto.cpp | 13 +++++- protocols/Skype/src/skype_proto.h | 2 +- 5 files changed, 54 insertions(+), 95 deletions(-) (limited to 'protocols') diff --git a/protocols/Skype/src/skype_contacts.cpp b/protocols/Skype/src/skype_contacts.cpp index e1d21ef8f8..60d062f9cd 100644 --- a/protocols/Skype/src/skype_contacts.cpp +++ b/protocols/Skype/src/skype_contacts.cpp @@ -19,14 +19,19 @@ void CSkypeProto::UpdateContactAuthState(HANDLE hContact, CContact::Ref contact) DWORD oldTS = this->GetSettingDword(hContact, "AuthTS"); if (newTS > oldTS) { - CContact::AVAILABILITY data; - contact->GetPropAvailability(data); - this->SetSettingWord(hContact, SKYPE_SETTINGS_STATUS, this->SkypeToMirandaStatus(data)); - - if (data == CContact::PENDINGAUTH) - this->SetSettingWord(hContact, "Auth", 1); + bool result; + if (contact->HasAuthorizedMe(result) && !result) + { + this->SetSettingByte(hContact, "Auth", !result); + } else + { this->DeleteSetting(hContact, "Auth"); + if (contact->IsMemberOfHardwiredGroup(CContactGroup::ALL_BUDDIES, result) && !result) + this->SetSettingByte(hContact, "Grant", !result); + else + this->DeleteSetting(hContact, "Grant"); + } this->SetSettingDword(hContact, "AuthTS", newTS); } @@ -681,47 +686,6 @@ void CSkypeProto::OnContactChanged(CContact::Ref contact, int prop) break; } } - else - { - } - //else - //{ - // switch(prop) - // { - // case CContact::P_RECEIVED_AUTHREQUEST: - // contact->GetPropDisplayname(data); - // wchar_t* displayName = ::mir_a2u((const char*)data); - - // CCSDATA ccs = {0}; - // ccs.szProtoService = PSR_AUTH; - // ccs.hContact = this->AddContactBySkypeName(skypeName, displayName, PALF_TEMPORARY); - // //pre.szMessage = (LPSTR)btBuff; - // //CreateBlobFromContact(ccs.hContact, lpwszMessage, dwMessageSize, btBuff, SIZEOF(btBuff), (size_t*)&pre.lParam); - // CallService(MS_PROTO_CHAINRECV, 0, (LPARAM)&ccs); - // break; - // } - //} - - //if (prop == CContact::P_AVAILABILITY) - //{ - // SEString data; - - // contact->GetPropSkypename(data); - // wchar_t* skypeName = ::mir_a2u((const char*)data); - - // HANDLE hContact = this->GetContactBySkypeName(skypeName); - // if (hContact) - // { - // CContact::AVAILABILITY availability; - // contact->GetPropAvailability(availability); - // this->SetSettingWord(hContact, SKYPE_SETTINGS_STATUS, this->SkypeToMirandaStatus(availability)); - - // if (availability == CContact::PENDINGAUTH) - // this->SetSettingWord(hContact, "Auth", 1); - // else - // this->DeleteSetting(hContact, "Auth"); - // } - //} } void CSkypeProto::OnContactListChanged(const ContactRef& contact) @@ -867,20 +831,6 @@ int CSkypeProto::SkypeToMirandaStatus(CContact::AVAILABILITY availability) return status; } -void CSkypeProto::RemoveContact(HANDLE hContact) -{ - if (this->IsOnline() && hContact) - { - CContact::Ref contact; - SEString sid(::mir_u2a(this->GetSettingString(hContact, "sid"))); - if (g_skype->GetContact(sid, contact)) - { - contact->SetBuddyStatus(false); - this->contactList.remove_val(contact); - } - } -} - CContact::AVAILABILITY CSkypeProto::MirandaToSkypeStatus(int status) { CContact::AVAILABILITY availability = CContact::UNKNOWN; diff --git a/protocols/Skype/src/skype_events.cpp b/protocols/Skype/src/skype_events.cpp index 99d5c6bb6e..aa08a532e7 100644 --- a/protocols/Skype/src/skype_events.cpp +++ b/protocols/Skype/src/skype_events.cpp @@ -17,9 +17,9 @@ int CSkypeProto::OnPreShutdown(WPARAM, LPARAM) return 0; } -int CSkypeProto::OnContactDeleted(WPARAM wParam, LPARAM) +int CSkypeProto::OnContactDeleted(WPARAM wParam, LPARAM lParam) { - this->RemoveContact((HANDLE)wParam); + this->RevokeAuth(wParam, lParam); return 0; } diff --git a/protocols/Skype/src/skype_menus.cpp b/protocols/Skype/src/skype_menus.cpp index 8cd8fa3bf3..7887bf9054 100644 --- a/protocols/Skype/src/skype_menus.cpp +++ b/protocols/Skype/src/skype_menus.cpp @@ -31,15 +31,16 @@ int CSkypeProto::OnPrebuildContactMenu(WPARAM wParam, LPARAM) if (hContact == NULL) return 0; - if (this->IsOnline() && !DBGetContactSettingByte(hContact, m_szModuleName, "ChatRoom", 0)) + if (this->IsOnline() && !::DBGetContactSettingByte(hContact, m_szModuleName, "ChatRoom", 0)) { bool ctrlPressed = (GetKeyState(VK_CONTROL) & 0x8000) != 0; - //BYTE type = DBGetContactSettingByte(hContact, m_szModuleName, FACEBOOK_KEY_CONTACT_TYPE, 0); + bool authNeed = this->GetSettingByte(hContact, "Auth"); + bool grantNeed = this->GetSettingByte(hContact, "Grant"); - sttEnableMenuItem( g_hContactMenuItems[CMI_AUTH_REQUEST], ctrlPressed /*|| type == FACEBOOK_CONTACT_NONE || !type */); - sttEnableMenuItem( g_hContactMenuItems[CMI_AUTH_GRANT], ctrlPressed /*|| type == FACEBOOK_CONTACT_APPROVE */); - sttEnableMenuItem( g_hContactMenuItems[CMI_AUTH_REVOKE], ctrlPressed /*|| type == FACEBOOK_CONTACT_FRIEND */); + sttEnableMenuItem( g_hContactMenuItems[CMI_AUTH_REQUEST], ctrlPressed || authNeed); + sttEnableMenuItem( g_hContactMenuItems[CMI_AUTH_GRANT], ctrlPressed || grantNeed); + sttEnableMenuItem( g_hContactMenuItems[CMI_AUTH_REVOKE], ctrlPressed || (!grantNeed && !authNeed)); } return 0; @@ -67,21 +68,8 @@ INT_PTR GlobalService(WPARAM wParam, LPARAM lParam) int CSkypeProto::RequestAuth(WPARAM wParam, LPARAM lParam) { - if (this->IsOnline() && wParam) - { - HANDLE hContact = (HANDLE)wParam; - TCHAR* szMessage = (TCHAR*)lParam; - CContact::Ref contact; - SEString sid(::mir_u2a(this->GetSettingString(hContact, "sid"))); - g_skype->GetContact(sid, contact); - - contact->SendAuthRequest(::mir_u2a(szMessage)); - this->DeleteSetting(hContact, "Grant"); - - return 0; - } - - return 1; + // todo: set default auth request + this->AuthRequest((HANDLE)wParam, LPGENT("")); } int CSkypeProto::GrantAuth(WPARAM wParam, LPARAM lParam) @@ -89,8 +77,11 @@ int CSkypeProto::GrantAuth(WPARAM wParam, LPARAM lParam) CContact::Ref contact; HANDLE hContact = (HANDLE)wParam; SEString sid(::mir_u2a(this->GetSettingString(hContact, "sid"))); - g_skype->GetContact(sid, contact); - contact->SetBuddyStatus(true/*Contact::AUTHORIZED_BY_ME*/); + if (g_skype->GetContact(sid, contact)) + { + if (contact->SetBuddyStatus(true)) + this->DeleteSetting(hContact, "Grant"); + } return 0; } @@ -100,8 +91,15 @@ int CSkypeProto::RevokeAuth(WPARAM wParam, LPARAM lParam) CContact::Ref contact; HANDLE hContact = (HANDLE)wParam; SEString sid(::mir_u2a(this->GetSettingString(hContact, "sid"))); - g_skype->GetContact(sid, contact); - contact->SetBuddyStatus(false/*CContact::BLOCKED_BY_ME*/); + if (g_skype->GetContact(sid, contact)) + { + if (contact->SetBuddyStatus(false)) + { + //this->DeleteSetting(hContact, "Auth"); + this->SetSettingByte(hContact, "Grant", 1); + } + this->contactList.remove_val(contact); + } return 0; } @@ -141,24 +139,24 @@ void CSkypeProto::InitMenus() mi.position = -2000001000; mi.icolibItem = CSkypeProto::GetIconHandle("authRequest"); mi.pszService = "Skype/ReqAuth"; - g_hContactMenuItems[CMI_AUTH_REQUEST] = Menu_AddContactMenuItem(&mi); - g_hContactMenuSvc[CMI_AUTH_REQUEST] = CreateServiceFunction(mi.pszService, GlobalService<&CSkypeProto::RequestAuth>); + g_hContactMenuItems[CMI_AUTH_REQUEST] = ::Menu_AddContactMenuItem(&mi); + g_hContactMenuSvc[CMI_AUTH_REQUEST] = ::CreateServiceFunction(mi.pszService, GlobalService<&CSkypeProto::RequestAuth>); // "Grant authorization" mi.pszService = "Skype/GrantAuth"; mi.ptszName = LPGENT("Grant authorization"); mi.position = -2000001001; mi.icolibItem = CSkypeProto::GetIconHandle("authGrant"); - g_hContactMenuItems[CMI_AUTH_GRANT] = Menu_AddContactMenuItem(&mi); - g_hContactMenuSvc[CMI_AUTH_GRANT] = CreateServiceFunction(mi.pszService, GlobalService<&CSkypeProto::GrantAuth>); + g_hContactMenuItems[CMI_AUTH_GRANT] = ::Menu_AddContactMenuItem(&mi); + g_hContactMenuSvc[CMI_AUTH_GRANT] = ::CreateServiceFunction(mi.pszService, GlobalService<&CSkypeProto::GrantAuth>); // Revoke auth mi.pszService = "Skype/RevokeAuth"; mi.ptszName = LPGENT("Revoke authorization"); mi.position = -2000001002; mi.icolibItem = CSkypeProto::GetIconHandle("authRevoke"); - g_hContactMenuItems[CMI_AUTH_REVOKE] = Menu_AddContactMenuItem(&mi); - g_hContactMenuSvc[CMI_AUTH_REVOKE] = CreateServiceFunction(mi.pszService, GlobalService<&CSkypeProto::RevokeAuth>); + g_hContactMenuItems[CMI_AUTH_REVOKE] = ::Menu_AddContactMenuItem(&mi); + g_hContactMenuSvc[CMI_AUTH_REVOKE] = ::CreateServiceFunction(mi.pszService, GlobalService<&CSkypeProto::RevokeAuth>); } void CSkypeProto::UninitMenus() diff --git a/protocols/Skype/src/skype_proto.cpp b/protocols/Skype/src/skype_proto.cpp index 750ea27a12..a72ce2a76b 100644 --- a/protocols/Skype/src/skype_proto.cpp +++ b/protocols/Skype/src/skype_proto.cpp @@ -117,7 +117,18 @@ int __cdecl CSkypeProto::AuthRecv(HANDLE hContact, PROTORECVEVENT* pre) int __cdecl CSkypeProto::AuthRequest(HANDLE hContact, const TCHAR* szMessage) { - return CSkypeProto::RequestAuth((WPARAM)hContact, (LPARAM)szMessage); + if (this->IsOnline() && hContact) + { + HANDLE hContact = (HANDLE)hContact; + CContact::Ref contact; + SEString sid(::mir_u2a(this->GetSettingString(hContact, "sid"))); + if (g_skype->GetContact(sid, contact)) + contact->SendAuthRequest(::mir_u2a(szMessage)); + + return 0; + } + + return 1; } HANDLE __cdecl CSkypeProto::ChangeInfo( int iInfoType, void* pInfoData ) { return 0; } diff --git a/protocols/Skype/src/skype_proto.h b/protocols/Skype/src/skype_proto.h index 6337a39b05..8529496b2c 100644 --- a/protocols/Skype/src/skype_proto.h +++ b/protocols/Skype/src/skype_proto.h @@ -162,7 +162,7 @@ protected: HANDLE GetContactBySid(const wchar_t* sid); HANDLE GetContactFromAuthEvent(HANDLE hEvent); HANDLE AddContactBySid(const wchar_t* skypeName, const wchar_t* nick, DWORD flags = 0); - void RemoveContact(HANDLE hContact); + int SkypeToMirandaStatus(CContact::AVAILABILITY availability); CContact::AVAILABILITY MirandaToSkypeStatus(int status); void SetAllContactStatus(int status); -- cgit v1.2.3