summaryrefslogtreecommitdiff
path: root/protocols/Skype/src/skype_own_info.cpp
blob: f56178229a7fddcc7b4c887dad8a3e17390b1d16 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include "skype.h"

void __cdecl CSkypeProto::LoadOwnInfo(void *)
{
	/*ptrW nick( ::db_get_wsa(NULL, this->m_szModuleName, "Nick"));
	if ( !nick)
	{
		SEString data;
		this->account->GetPropFullname(data);

		if (data.length() == 0)
		{
			this->account->GetPropSkypename(data);
		}

		nick = ::mir_utf8decodeW(data);
		::db_set_ws(NULL, this->m_szModuleName, "Nick", nick);
	}*/

	this->UpdateProfile(this->account.fetch());
}

INT_PTR __cdecl CSkypeProto::SetMyNickName(WPARAM wParam, LPARAM lParam)
{
	wchar_t *nick = (wParam & SMNN_UNICODE) ? ::mir_wstrdup((wchar_t *)lParam) : ::mir_a2t((char*) lParam);

	//::db_set_ws(NULL, this->m_szModuleName, "Nick", nick);
	
	if ( !this->IsOnline())
		return 0;

	this->account->SetStrProperty(Account::P_FULLNAME, (char *)ptrA(::mir_utf8encodeW(nick)));
	
	return 0;
}

void CSkypeProto::SaveOwnInfoToServer(HWND hwndPage, int iPage)
{
	wchar_t text[2048];

	switch (iPage) 
	{
	// Page 0: Personal
	case 0:
		{
			::GetDlgItemText(hwndPage, IDC_FULLNAME, text, SIZEOF(text));
			if (this->account->SetStrProperty(Account::P_FULLNAME, (char *)ptrA(::mir_utf8encodeW(text))))
				this->setTString("Nick", text);

			::GetDlgItemText(hwndPage, IDC_MOOD, text, SIZEOF(text));
			this->account->SetStrProperty(Account::P_MOOD_TEXT, (char *)ptrA(::mir_utf8encodeW(text)));

			::GetDlgItemText(hwndPage, IDC_ABOUT, text, SIZEOF(text));
			this->account->SetStrProperty(Account::P_ABOUT, (char *)ptrA(::mir_utf8encodeW(text)));

			::GetDlgItemText(hwndPage, IDC_HOMEPAGE, text, SIZEOF(text));
			this->account->SetStrProperty(Account::P_HOMEPAGE, (char *)ptrA(::mir_utf8encodeW(text)));

			this->account->SetIntProperty(
				Account::P_GENDER, 
				::SendMessage(::GetDlgItem(hwndPage, IDC_GENDER), CB_GETCURSEL, 0, 0));

			char day[3], month[3], year[5], date[9];
			::GetDlgItemTextA(hwndPage, IDC_BIRTH_DAY, day, 3);
			::GetDlgItemTextA(hwndPage, IDC_BIRTH_MONTH, month, 3);
			::GetDlgItemTextA(hwndPage, IDC_BIRTH_YEAR, year, 5);
			::mir_snprintf(date, 9, "%s%s%s", year, month, day);
			int value = atoi(date);
			this->account->SetIntProperty(Account::P_BIRTHDAY, value);

			int lang = ::SendMessage(GetDlgItem(hwndPage, IDC_LANGUAGE), CB_GETCURSEL, 0, 0);
			if (lang != -1) {
				std::wstring key = *(std::wstring *)SendMessage(GetDlgItem(hwndPage, IDC_LANGUAGE), CB_GETITEMDATA, lang, 0);
				this->account->SetStrProperty(
					Account::P_LANGUAGES, 
					(char *)ptrA(::mir_utf8encodeW(key.c_str())));
			}
		}
		break;

	// Page 1: Contacts
	case 1:
		wchar_t emails[2048];
		::GetDlgItemText(hwndPage, IDC_EMAIL1, emails, SIZEOF(emails));
		::GetDlgItemText(hwndPage, IDC_EMAIL2, text, SIZEOF(text));
		if (::wcslen(text) > 0)
		{
			::wcscat(emails, L" ");
			::wcscat(emails, text);
		}
		::GetDlgItemText(hwndPage, IDC_EMAIL3, text, SIZEOF(text));
		if (::wcslen(text) > 0)
		{
			::wcscat(emails, L" ");
			::wcscat(emails, text);
		}
		this->account->SetStrProperty(Account::P_EMAILS, (char *)ptrA(::mir_utf8encodeW(emails)));

		::GetDlgItemText(hwndPage, IDC_MOBPHONE, text, SIZEOF(text));
		this->account->SetStrProperty(Account::P_PHONE_MOBILE, (char *)ptrA(::mir_utf8encodeW(text)));

		::GetDlgItemText(hwndPage, IDC_HOMEPHONE, text, SIZEOF(text));
		this->account->SetStrProperty(Account::P_PHONE_HOME, (char *)ptrA(::mir_utf8encodeW(text)));

		::GetDlgItemText(hwndPage, IDC_OFFICEPHONE, text, SIZEOF(text));
		this->account->SetStrProperty(Account::P_PHONE_OFFICE, (char *)ptrA(::mir_utf8encodeW(text)));

		break;

	// Page 2: Home
	case 2:
		::GetDlgItemText(hwndPage, IDC_CITY, text, SIZEOF(text));
		this->account->SetStrProperty(Account::P_CITY, (char *)ptrA(::mir_utf8encodeW(text)));

		::GetDlgItemText(hwndPage, IDC_STATE, text, SIZEOF(text));
		this->account->SetStrProperty(Account::P_PROVINCE, (char *)ptrA(::mir_utf8encodeW(text)));

		int i = ::SendMessage(::GetDlgItem(hwndPage, IDC_COUNTRY), CB_GETCURSEL, 0, 0);
		char *iso = (char *)::SendMessage(::GetDlgItem(hwndPage, IDC_COUNTRY), CB_GETITEMDATA, i, 0);
		this->account->SetStrProperty(Account::P_COUNTRY, iso);

		HWND ctrl = ::GetDlgItem(hwndPage, IDC_TIMEZONE);
		i = ::SendMessage(ctrl, CB_GETCURSEL, 0, 0);
		HANDLE hTimeZone = (HANDLE)::SendMessage(ctrl, CB_GETITEMDATA, i, 0);

		SYSTEMTIME my_st, utc_ts;
		tmi.getTimeZoneTime(hTimeZone, &my_st);
		tmi.getTimeZoneTime(UTC_TIME_HANDLE, &utc_ts);

		uint diff_to_UTC_in_seconds = (my_st.wHour - utc_ts.wHour) * 3600 + (my_st.wMinute - utc_ts.wMinute) * 60;
		uint timezone = 24*3600 + diff_to_UTC_in_seconds;
		this->account->SetIntProperty(Account::P_TIMEZONE, timezone);

		break;
	}
}