From 75fe175886ceca31d4cade1c067de7b0e1e30d87 Mon Sep 17 00:00:00 2001
From: Alexander Lantsev <aunsane@gmail.com>
Date: Sun, 30 Sep 2012 15:10:33 +0000
Subject: - conatcts funcs moved into skype_contacts.cpp - added settings
 functions Set* - first approach to load contact list - start skype runtime on
 startup

git-svn-id: http://svn.miranda-ng.org/main/trunk@1731 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
---
 protocols/Skype/src/skype_contacts.cpp | 112 +++++++++++++++++++++++++++++++++
 1 file changed, 112 insertions(+)
 create mode 100644 protocols/Skype/src/skype_contacts.cpp

(limited to 'protocols/Skype/src/skype_contacts.cpp')

diff --git a/protocols/Skype/src/skype_contacts.cpp b/protocols/Skype/src/skype_contacts.cpp
new file mode 100644
index 0000000000..56c9b61ee1
--- /dev/null
+++ b/protocols/Skype/src/skype_contacts.cpp
@@ -0,0 +1,112 @@
+#include "skype_proto.h"
+
+HANDLE CSkypeProto::GetContactBySkypeLogin(const char* skypeLogin)
+{
+	for (HANDLE hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
+		hContact;
+		hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0))
+	{
+		//if(!IsMyContact(hContact))
+		//	continue;
+
+		DBVARIANT dbv;
+		if( !DBGetContactSettingString(hContact, this->m_szModuleName, SKYPE_SETTINGS_LOGIN, &dbv))
+		{
+			if(strcmp(skypeLogin, dbv.pszVal) == 0)
+			{
+				DBFreeVariant(&dbv);
+				return hContact;
+			}
+			else
+				DBFreeVariant(&dbv);
+		}
+	}
+
+	return 0;
+}
+
+void __cdecl CSkypeProto::LoadContactList(void*)
+{
+	CContactGroup::Ref contacts;
+	g_skype->GetHardwiredContactGroup(CContactGroup::SKYPE_BUDDIES, contacts);
+
+    contacts->GetContacts(contacts->ContactList);
+    fetch(contacts->ContactList);
+
+    for (unsigned int i = 0; i < contacts->ContactList.size(); i++)
+    {
+		SEString name;
+		SEString skypeLogin;
+
+		int status = ID_STATUS_OFFLINE;
+		CContact::AVAILABILITY availability = CContact::OFFLINE;
+
+        contacts->ContactList[i]->GetPropSkypename(skypeLogin);
+        printf("%3d. %s\n", i+1, (const char*)skypeLogin);
+
+		HANDLE hContact = this->GetContactBySkypeLogin(skypeLogin);
+		if (!hContact)
+		{
+			hContact = (HANDLE)CallService(MS_DB_CONTACT_ADD, 0, 0);
+			DBWriteContactSettingString(hContact, this->m_szModuleName, SKYPE_SETTINGS_LOGIN, skypeLogin);
+		}
+
+		if (CallService(MS_PROTO_ADDTOCONTACT, (WPARAM)hContact, (LPARAM)this->m_szModuleName) == 0 )
+		{
+
+			contacts->ContactList[i]->GetPropDisplayname(name);
+			contacts->ContactList[i]->GetPropAvailability(availability);
+
+			switch (availability)
+			{
+			case CContact::ONLINE:
+			case CContact::ONLINE_FROM_MOBILE:
+				status = ID_STATUS_ONLINE;
+				break;
+
+			case CContact::AWAY:
+			case CContact::AWAY_FROM_MOBILE:
+				status = ID_STATUS_AWAY;
+				break;
+
+			case CContact::DO_NOT_DISTURB:
+			case CContact::DO_NOT_DISTURB_FROM_MOBILE:
+				status = ID_STATUS_DND;
+				break;
+			}
+
+			DBDeleteContactSetting(hContact, "CList", "MyHandle");
+
+			/*DBVARIANT dbv;
+			if (!this->GetSettingString(this->m_szModuleName,FACEBOOK_KEY_DEF_GROUP,&dbv))
+			{
+				DBWriteContactSettingTString(hContact,"CList","Group",dbv.ptszVal);
+				DBFreeVariant(&dbv);
+			}*/
+
+			DBWriteContactSettingString(hContact, this->m_szModuleName, SKYPE_SETTINGS_NAME, name);
+			DBWriteContactSettingWord(hContact, this->m_szModuleName, SKYPE_SETTINGS_STATUS, ID_STATUS_ONLINE);
+			DBWriteContactSettingString(hContact, this->m_szModuleName, SKYPE_SETTINGS_LOGIN, skypeLogin);
+		}
+		else
+		{
+			CallService(MS_DB_CONTACT_DELETE, (WPARAM)hContact, 0);
+		}
+
+		//HANDLE hContact = AddToContactList(fbu, FACEBOOK_CONTACT_APPROVE, false, fbu->real_name.c_str());
+		//DBWriteContactSettingByte(hContact, m_szModuleName, FACEBOOK_KEY_CONTACT_TYPE, FACEBOOK_CONTACT_APPROVE);
+	}
+}
+
+void CSkypeProto::SetAllContactStatuses(int status)
+{
+	for (HANDLE hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
+	    hContact;
+	    hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0))
+	{
+		if (DBGetContactSettingWord(hContact, this->m_szModuleName, SKYPE_SETTINGS_STATUS, ID_STATUS_OFFLINE) == status)
+			continue;
+
+		DBWriteContactSettingWord(hContact, this->m_szModuleName, SKYPE_SETTINGS_STATUS, status);
+	}
+}
\ No newline at end of file
-- 
cgit v1.2.3