From 699c680eb0adee413e74417dece429553c633733 Mon Sep 17 00:00:00 2001 From: Alexander Lantsev Date: Sat, 27 Apr 2013 11:50:44 +0000 Subject: - fixed avatar and profile info updating - code reorganizing git-svn-id: http://svn.miranda-ng.org/main/trunk@4552 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/Skype/src/skype.cpp | 2 + protocols/Skype/src/skype_database.cpp | 6 +- protocols/Skype/src/skype_dialogs.cpp | 29 ----- protocols/Skype/src/skype_events.cpp | 29 +++++ protocols/Skype/src/skype_profile.cpp | 89 ++++++------- protocols/Skype/src/skype_proto.h | 15 ++- protocols/Skype/src/skype_utils.cpp | 225 ++++++++++++++++++++++++++++++++- 7 files changed, 307 insertions(+), 88 deletions(-) (limited to 'protocols') diff --git a/protocols/Skype/src/skype.cpp b/protocols/Skype/src/skype.cpp index 1da39c88ab..ce8e999aa1 100644 --- a/protocols/Skype/src/skype.cpp +++ b/protocols/Skype/src/skype.cpp @@ -13,6 +13,8 @@ HINSTANCE g_hInstance; TIME_API tmi = {0}; +std::map CSkypeProto::languages = CSkypeProto::FillLanguages(); + PLUGININFOEX pluginInfo = { sizeof(PLUGININFOEX), diff --git a/protocols/Skype/src/skype_database.cpp b/protocols/Skype/src/skype_database.cpp index 86bd7a49ac..3edf766ed0 100644 --- a/protocols/Skype/src/skype_database.cpp +++ b/protocols/Skype/src/skype_database.cpp @@ -113,10 +113,10 @@ void CSkypeProto::RaiseMessageSendedEvent(HANDLE hContact, DWORD timestamp, cons int guidLen = ::strlen(guid); - char *msg = ::mir_strdup(message); - int msgLen = ::strlen(msg) + 1; + int msgLen = ::strlen(message) + 1; + char *msg = (char *)::mir_alloc(msgLen + guidLen); - msg = (char *)::mir_realloc(msg, msgLen + 32); + ::strcpy(msg, message); msg[msgLen - 1] = 0; ::memcpy((char *)&msg[msgLen], guid, 32); DWORD flags = DBEF_UTF | DBEF_SENT; diff --git a/protocols/Skype/src/skype_dialogs.cpp b/protocols/Skype/src/skype_dialogs.cpp index 597c21a0ca..7a02cebe69 100644 --- a/protocols/Skype/src/skype_dialogs.cpp +++ b/protocols/Skype/src/skype_dialogs.cpp @@ -195,35 +195,6 @@ INT_PTR CALLBACK CSkypeProto::SkypeMainOptionsProc(HWND hwnd, UINT message, WPAR return FALSE; } -INT_PTR __cdecl CSkypeProto::OnAccountManagerInit(WPARAM wParam, LPARAM lParam) -{ - return (int)::CreateDialogParam( - g_hInstance, - MAKEINTRESOURCE(IDD_ACCMGR), - (HWND)lParam, - &CSkypeProto::SkypeMainOptionsProc, - (LPARAM)this); -} - -int __cdecl CSkypeProto::OnOptionsInit(WPARAM wParam, LPARAM lParam) -{ - OPTIONSDIALOGPAGE odp = {0}; - odp.cbSize = sizeof(odp); - odp.hInstance = g_hInstance; - odp.ptszTitle = m_tszUserName; - odp.dwInitParam = LPARAM(this); - odp.flags = ODPF_BOLDGROUPS | ODPF_TCHAR | ODPF_DONTTRANSLATE; - - odp.position = 271828; - odp.ptszGroup = LPGENT("Network"); - odp.ptszTab = LPGENT("Account"); - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_MAIN); - odp.pfnDlgProc = SkypeMainOptionsProc; - ::Options_AddPage(wParam, &odp); - - return 0; -} - INT_PTR CALLBACK CSkypeProto::SkypePasswordRequestProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { PasswordRequestBoxParam *param = reinterpret_cast(::GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); diff --git a/protocols/Skype/src/skype_events.cpp b/protocols/Skype/src/skype_events.cpp index c41ff0975c..cc814d52e7 100644 --- a/protocols/Skype/src/skype_events.cpp +++ b/protocols/Skype/src/skype_events.cpp @@ -46,6 +46,35 @@ int CSkypeProto::OnContactDeleted(WPARAM wParam, LPARAM lParam) return 0; } +INT_PTR __cdecl CSkypeProto::OnAccountManagerInit(WPARAM wParam, LPARAM lParam) +{ + return (int)::CreateDialogParam( + g_hInstance, + MAKEINTRESOURCE(IDD_ACCMGR), + (HWND)lParam, + &CSkypeProto::SkypeMainOptionsProc, + (LPARAM)this); +} + +int __cdecl CSkypeProto::OnOptionsInit(WPARAM wParam, LPARAM lParam) +{ + OPTIONSDIALOGPAGE odp = {0}; + odp.cbSize = sizeof(odp); + odp.hInstance = g_hInstance; + odp.ptszTitle = m_tszUserName; + odp.dwInitParam = LPARAM(this); + odp.flags = ODPF_BOLDGROUPS | ODPF_TCHAR | ODPF_DONTTRANSLATE; + + odp.position = 271828; + odp.ptszGroup = LPGENT("Network"); + odp.ptszTab = LPGENT("Account"); + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_MAIN); + odp.pfnDlgProc = SkypeMainOptionsProc; + ::Options_AddPage(wParam, &odp); + + return 0; +} + int CSkypeProto::OnMessagePreCreate(WPARAM, LPARAM lParam) { MessageWindowEvent *evt = (MessageWindowEvent *)lParam; diff --git a/protocols/Skype/src/skype_profile.cpp b/protocols/Skype/src/skype_profile.cpp index bbe9eb4a87..a20d93eae0 100644 --- a/protocols/Skype/src/skype_profile.cpp +++ b/protocols/Skype/src/skype_profile.cpp @@ -1,28 +1,37 @@ #include "skype_proto.h" +#include SettingItem CSkypeProto::setting[] = { {LPGENT("Nick"), "Nick", DBVT_WCHAR, LI_STRING}, + {LPGENT("First name"), "FirstName", DBVT_WCHAR, LI_STRING}, + {LPGENT("Last name"), "LastName", DBVT_WCHAR, LI_STRING}, + {LPGENT("Gender"), "Gender", DBVT_BYTE, LI_LIST}, + {LPGENT("Mood"), "XStatusMsg", DBVT_WCHAR, LI_STRING}, {LPGENT("Mobile phone"), "Cellular", DBVT_WCHAR, LI_NUMBER}, {LPGENT("Home phone"), "Phone", DBVT_WCHAR, LI_NUMBER}, {LPGENT("Office phone"), "CompanyPhone", DBVT_WCHAR, LI_NUMBER}, + {LPGENT("E-mail 1"), "e-mail0", DBVT_WCHAR, LI_STRING}, {LPGENT("E-mail 2"), "e-mail1", DBVT_WCHAR, LI_STRING}, {LPGENT("E-mail 3"), "e-mail2", DBVT_WCHAR, LI_STRING}, + {LPGENT("Time zone"), "Timezone", DBVT_BYTE, LI_LIST}, {LPGENT("Country"), "Country", DBVT_WCHAR, LI_LIST}, {LPGENT("State"), "State", DBVT_WCHAR, LI_STRING}, - {LPGENT("City"), "City", DBVT_WCHAR, LI_STRING}, - {LPGENT("Time zone"), "Timezone", DBVT_BYTE, LI_LIST}, - {LPGENT("Homepage"), "Homepage", DBVT_WCHAR, LI_STRING}, - {LPGENT("Gender"), "Gender", DBVT_BYTE, LI_LIST}, + {LPGENT("City"), "City", DBVT_WCHAR, LI_STRING}, + {LPGENT("Birth day"), "BirthDay", DBVT_BYTE, LI_NUMBER}, {LPGENT("Birth month"), "BirthMonth", DBVT_BYTE, LI_NUMBER}, {LPGENT("Birth year"), "BirthYear", DBVT_WORD, LI_NUMBER}, - {LPGENT("Language"), "Language1", DBVT_WCHAR, LI_LIST}, - {LPGENT("About"), "About", DBVT_WCHAR, LI_STRING} + {LPGENT("Language 1"), "Language1", DBVT_WCHAR, LI_LIST}, + {LPGENT("Language 2"), "Language2", DBVT_WCHAR, LI_LIST}, + {LPGENT("Language 3"), "Language3", DBVT_WCHAR, LI_LIST}, + + {LPGENT("About"), "About", DBVT_WCHAR, LI_STRING}, + {LPGENT("Homepage"), "Homepage", DBVT_WCHAR, LI_STRING} }; void CSkypeProto::UpdateProfileAvatar(SEObject *obj, HANDLE hContact) @@ -46,7 +55,7 @@ void CSkypeProto::UpdateProfileAvatar(SEObject *obj, HANDLE hContact) ::fwrite(data.data(), sizeof(char), data.size(), fp); ::fclose(fp); - ::db_set_dw(NULL, this->m_szModuleName, "AvatarTS", newTS); + ::db_set_dw(hContact, this->m_szModuleName, "AvatarTS", newTS); if (hContact) { @@ -150,7 +159,7 @@ void CSkypeProto::UpdateProfileCountry(SEObject *obj, HANDLE hContact) void CSkypeProto::UpdateProfileEmails(SEObject *obj, HANDLE hContact) { wchar_t* emails = ::mir_a2u(obj->GetStrProp(/* *::P_EMAILS */ 16)); - if (wcscmp(emails, L"") == 0) + if (::wcscmp(emails, L"") == 0) { ::db_unset(hContact, this->m_szModuleName, "e-mail0"); ::db_unset(hContact, this->m_szModuleName, "e-mail1"); @@ -158,20 +167,15 @@ void CSkypeProto::UpdateProfileEmails(SEObject *obj, HANDLE hContact) } else { - wchar_t* p = wcstok(emails, L" "); - if (p == NULL) - { - ::db_set_ws(hContact, this->m_szModuleName, "e-mail0", emails); - } - else + StringList emls = emails; + for (int i = 0; i < emls.getCount(); i++) { - ::db_set_ws(hContact, this->m_szModuleName, "e-mail0", p); - p = wcstok(NULL, L" "); - if (p) ::db_set_ws(hContact, this->m_szModuleName, "e-mail1", p); - p = wcstok(NULL, L" "); - if (p) ::db_set_ws(hContact, this->m_szModuleName, "e-mail2", p); + std::stringstream ss; + ss << "e-mail" << i; + std::string key = ss.str(); + + ::db_set_ws(hContact, this->m_szModuleName, key.c_str(), emls[i]); } - ::mir_free(p); } ::mir_free(emails); } @@ -186,14 +190,12 @@ void CSkypeProto::UpdateProfileFullName(SEObject *obj, HANDLE hContact) } else { - wchar_t *firstName = ::wcstok(fullname, L" "); - wchar_t *lastName = ::wcstok(NULL, L" "); - if (lastName == NULL) - { - lastName = L""; - } - ::db_set_ws(hContact, this->m_szModuleName, "FirstName", firstName); - ::db_set_ws(hContact, this->m_szModuleName, "LastName", lastName); + SEString firstName, lastName; + CContact *contact = (CContact *)obj; + contact->GetFullname(firstName, lastName); + + ::db_set_ws(hContact, this->m_szModuleName, "FirstName", mir_ptr(::mir_utf8decodeW(firstName))); + ::db_set_ws(hContact, this->m_szModuleName, "LastName", mir_ptr(::mir_utf8decodeW(lastName))); } ::mir_free(fullname); } @@ -228,27 +230,18 @@ void CSkypeProto::UpdateProfileLanguages(SEObject *obj, HANDLE hContact) } else { - wchar_t* p = wcstok(isocodes, L" "); - if (p == NULL) - { - ::db_set_ws(hContact, this->m_szModuleName, "Language1", isocodes); - } - else + StringList langs = isocodes; + for (int i = 0; i < langs.getCount(); i++) { - ::db_set_ws(hContact, this->m_szModuleName, "Language1", p); - p = wcstok(NULL, L" "); - if (p) ::db_set_ws(hContact, this->m_szModuleName, "Language2", p); - p = wcstok(NULL, L" "); - if (p) ::db_set_ws(hContact, this->m_szModuleName, "Language3", p); - } - - // todo: fix - /*for (int i = 0; i < SIZEOF(CSkypeProto::languages); i++) - if ( ::stricmp((char*)isocode, CSkypeProto::languages[i].ISOcode) == 0) + if (CSkypeProto::languages.count(langs[i])) { - this->SetSettingString(hContact, "Language1", ::mir_a2u(CSkypeProto::languages[i].szName)); - break; - }*/ + std::stringstream ss; + ss << "Language" << i + 1; + std::string key = ss.str(); + std::wstring val = CSkypeProto::languages[langs[i]]; + ::db_set_ws(hContact, this->m_szModuleName, key.c_str(), val.c_str()); + } + } } ::mir_free(isocodes); } @@ -365,7 +358,7 @@ void CSkypeProto::UpdateProfile(SEObject *obj, HANDLE hContact) ::db_set_ws(hContact, this->m_szModuleName, "MirVer", L"Skype"); } - ::db_set_dw(NULL, this->m_szModuleName, "ProfileTS", newTS); + ::db_set_dw(hContact, this->m_szModuleName, "ProfileTS", newTS); } } diff --git a/protocols/Skype/src/skype_proto.h b/protocols/Skype/src/skype_proto.h index 031bcfb1ea..0b8e41e2f5 100644 --- a/protocols/Skype/src/skype_proto.h +++ b/protocols/Skype/src/skype_proto.h @@ -3,6 +3,9 @@ #include "skype.h" #include "skypekit\skypekit.h" +#include +#include + typedef void (__cdecl CSkypeProto::* SkypeThreadFunc) (void*); typedef int (__cdecl CSkypeProto::* SkypeEventFunc)(WPARAM, LPARAM); typedef INT_PTR (__cdecl CSkypeProto::* SkypeServiceFunc)(WPARAM, LPARAM); @@ -69,11 +72,6 @@ struct _tag_iconList HANDLE Handle; }; -struct LanguagesListEntry { - const char *szName; - char ISOcode[3]; -}; - #define LI_STRING 0 #define LI_LIST 1 #define LI_NUMBER 2 @@ -367,7 +365,10 @@ protected: void __cdecl SearchByEmailAsync(void*); // profile - static SettingItem setting[19]; + static std::map languages; + static std::map FillLanguages(); + + static SettingItem setting[23]; void UpdateProfileAvatar(SEObject *obj, HANDLE hContact = NULL); void UpdateProfileAboutText(SEObject *obj, HANDLE hContact = NULL); @@ -407,7 +408,7 @@ protected: static char *RemoveHtml(const char *data); - void SetServerStatus(int iStatus); + void SetServerStatus(int iStatus); int SkypeToMirandaStatus(CContact::AVAILABILITY availability); CContact::AVAILABILITY MirandaToSkypeStatus(int status); diff --git a/protocols/Skype/src/skype_utils.cpp b/protocols/Skype/src/skype_utils.cpp index 55cbcb6149..7201041afe 100644 --- a/protocols/Skype/src/skype_utils.cpp +++ b/protocols/Skype/src/skype_utils.cpp @@ -15,7 +15,230 @@ wchar_t *CSkypeProto::ValidationReasons[] = LPGENW("Value starts with an invalid character") /* STARTS_WITH_INVALID_CHAR */, }; -// --- +std::map CSkypeProto::FillLanguages() +{ + std::map result; + result[L"ab"] = L"Abkhazian"; + result[L"aa"] = L"Afar"; + result[L"af"] = L"Afrikaans"; + result[L"ak"] = L"Akan"; + result[L"sq"] = L"Albanian"; + result[L"am"] = L"Amharic"; + result[L"ar"] = L"Arabic"; + result[L"an"] = L"Aragonese"; + result[L"hy"] = L"Armenian"; + result[L"as"] = L"Assamese"; + result[L"av"] = L"Avaric"; + result[L"ae"] = L"Avestan"; + result[L"ay"] = L"Aymara"; + result[L"az"] = L"Azerbaijani"; + result[L"bm"] = L"Bambara"; + result[L"ba"] = L"Bashkir"; + result[L"eu"] = L"Basque"; + result[L"be"] = L"Belarusian"; + result[L"bn"] = L"Bengali"; + result[L"bh"] = L"Bihari languages"; + result[L"bi"] = L"Bislama"; + result[L"nb"] = L"Bokmal, Norwegian"; + result[L"bs"] = L"Bosnian"; + result[L"br"] = L"Breton"; + result[L"bg"] = L"Bulgarian"; + result[L"my"] = L"Burmese"; + result[L"es"] = L"Castilian"; + result[L"ca"] = L"Catalan"; + result[L"km"] = L"Central Khmer"; + result[L"ch"] = L"Chamorro"; + result[L"ce"] = L"Chechen"; + result[L"ny"] = L"Chewa"; + result[L"ny"] = L"Chichewa"; + result[L"zh"] = L"Chinese"; + result[L"za"] = L"Chuang"; + result[L"cu"] = L"Church Slavic"; + result[L"cu"] = L"Church Slavonic"; + result[L"cv"] = L"Chuvash"; + result[L"kw"] = L"Cornish"; + result[L"co"] = L"Corsican"; + result[L"cr"] = L"Cree"; + result[L"hr"] = L"Croatian"; + result[L"cs"] = L"Czech"; + result[L"da"] = L"Danish"; + result[L"dv"] = L"Dhivehi"; + result[L"dv"] = L"Divehi"; + result[L"nl"] = L"Dutch"; + result[L"dz"] = L"Dzongkha"; + result[L"en"] = L"English"; + result[L"eo"] = L"Esperanto"; + result[L"et"] = L"Estonian"; + result[L"ee"] = L"Ewe"; + result[L"fo"] = L"Faroese"; + result[L"fj"] = L"Fijian"; + result[L"fi"] = L"Finnish"; + result[L"nl"] = L"Flemish"; + result[L"fr"] = L"French"; + result[L"ff"] = L"Fulah"; + result[L"gd"] = L"Gaelic"; + result[L"gl"] = L"Galician"; + result[L"lg"] = L"Ganda"; + result[L"ka"] = L"Georgian"; + result[L"de"] = L"German"; + result[L"ki"] = L"Gikuyu"; + result[L"el"] = L"Greek, Modern (1453-)"; + result[L"kl"] = L"Greenlandic"; + result[L"gn"] = L"Guarani"; + result[L"gu"] = L"Gujarati"; + result[L"ht"] = L"Haitian"; + result[L"ht"] = L"Haitian Creole"; + result[L"ha"] = L"Hausa"; + result[L"he"] = L"Hebrew"; + result[L"hz"] = L"Herero"; + result[L"hi"] = L"Hindi"; + result[L"ho"] = L"Hiri Motu"; + result[L"hu"] = L"Hungarian"; + result[L"is"] = L"Icelandic"; + result[L"io"] = L"Ido"; + result[L"ig"] = L"Igbo"; + result[L"id"] = L"Indonesian"; + result[L"ia"] = L"Interlingua (International Auxiliary Language Association)"; + result[L"ie"] = L"Interlingue"; + result[L"iu"] = L"Inuktitut"; + result[L"ik"] = L"Inupiaq"; + result[L"ga"] = L"Irish"; + result[L"it"] = L"Italian"; + result[L"ja"] = L"Japanese"; + result[L"jv"] = L"Javanese"; + result[L"kl"] = L"Kalaallisut"; + result[L"kn"] = L"Kannada"; + result[L"kr"] = L"Kanuri"; + result[L"ks"] = L"Kashmiri"; + result[L"kk"] = L"Kazakh"; + result[L"ki"] = L"Kikuyu"; + result[L"rw"] = L"Kinyarwanda"; + result[L"ky"] = L"Kirghiz"; + result[L"kv"] = L"Komi"; + result[L"kg"] = L"Kongo"; + result[L"ko"] = L"Korean"; + result[L"kj"] = L"Kuanyama"; + result[L"ku"] = L"Kurdish"; + result[L"kj"] = L"Kwanyama"; + result[L"ky"] = L"Kyrgyz"; + result[L"lo"] = L"Lao"; + result[L"la"] = L"Latin"; + result[L"lv"] = L"Latvian"; + result[L"lb"] = L"Letzeburgesch"; + result[L"li"] = L"Limburgan"; + result[L"li"] = L"Limburger"; + result[L"li"] = L"Limburgish"; + result[L"ln"] = L"Lingala"; + result[L"lt"] = L"Lithuanian"; + result[L"lu"] = L"Luba-Katanga"; + result[L"lb"] = L"Luxembourgish"; + result[L"mk"] = L"Macedonian"; + result[L"mg"] = L"Malagasy"; + result[L"ms"] = L"Malay"; + result[L"ml"] = L"Malayalam"; + result[L"dv"] = L"Maldivian"; + result[L"mt"] = L"Maltese"; + result[L"gv"] = L"Manx"; + result[L"mi"] = L"Maori"; + result[L"mr"] = L"Marathi"; + result[L"mh"] = L"Marshallese"; + result[L"ro"] = L"Moldavian"; + result[L"ro"] = L"Moldovan"; + result[L"mn"] = L"Mongolian"; + result[L"na"] = L"Nauru"; + result[L"nv"] = L"Navaho"; + result[L"nv"] = L"Navajo"; + result[L"nd"] = L"Ndebele, North"; + result[L"nr"] = L"Ndebele, South"; + result[L"ng"] = L"Ndonga"; + result[L"ne"] = L"Nepali"; + result[L"nd"] = L"North Ndebele"; + result[L"se"] = L"Northern Sami"; + result[L"no"] = L"Norwegian"; + result[L"nb"] = L"Norwegian Bokmal"; + result[L"nn"] = L"Norwegian Nynorsk"; + result[L"ii"] = L"Nuosu"; + result[L"ny"] = L"Nyanja"; + result[L"nn"] = L"Nynorsk, Norwegian"; + result[L"ie"] = L"Occidental"; + result[L"oc"] = L"Occitan (post 1500)"; + result[L"oj"] = L"Ojibwa"; + result[L"cu"] = L"Old Bulgarian"; + result[L"cu"] = L"Old Church Slavonic"; + result[L"cu"] = L"Old Slavonic"; + result[L"or"] = L"Oriya"; + result[L"om"] = L"Oromo"; + result[L"os"] = L"Ossetian"; + result[L"os"] = L"Ossetic"; + result[L"pi"] = L"Pali"; + result[L"pa"] = L"Panjabi"; + result[L"ps"] = L"Pashto"; + result[L"fa"] = L"Persian"; + result[L"pl"] = L"Polish"; + result[L"pt"] = L"Portuguese"; + result[L"pa"] = L"Punjabi"; + result[L"ps"] = L"Pushto"; + result[L"qu"] = L"Quechua"; + result[L"ro"] = L"Romanian"; + result[L"rm"] = L"Romansh"; + result[L"rn"] = L"Rundi"; + result[L"ru"] = L"Russian"; + result[L"sm"] = L"Samoan"; + result[L"sg"] = L"Sango"; + result[L"sa"] = L"Sanskrit"; + result[L"sc"] = L"Sardinian"; + result[L"gd"] = L"Scottish Gaelic"; + result[L"sr"] = L"Serbian"; + result[L"sn"] = L"Shona"; + result[L"ii"] = L"Sichuan Yi"; + result[L"sd"] = L"Sindhi"; + result[L"si"] = L"Sinhala"; + result[L"si"] = L"Sinhalese"; + result[L"sk"] = L"Slovak"; + result[L"sl"] = L"Slovenian"; + result[L"so"] = L"Somali"; + result[L"st"] = L"Sotho, Southern"; + result[L"nr"] = L"South Ndebele"; + result[L"es"] = L"Spanish"; + result[L"su"] = L"Sundanese"; + result[L"sw"] = L"Swahili"; + result[L"ss"] = L"Swati"; + result[L"sv"] = L"Swedish"; + result[L"tl"] = L"Tagalog"; + result[L"ty"] = L"Tahitian"; + result[L"tg"] = L"Tajik"; + result[L"ta"] = L"Tamil"; + result[L"tt"] = L"Tatar"; + result[L"te"] = L"Telugu"; + result[L"th"] = L"Thai"; + result[L"bo"] = L"Tibetan"; + result[L"ti"] = L"Tigrinya"; + result[L"to"] = L"Tonga (Tonga Islands)"; + result[L"ts"] = L"Tsonga"; + result[L"tn"] = L"Tswana"; + result[L"tr"] = L"Turkish"; + result[L"tk"] = L"Turkmen"; + result[L"tw"] = L"Twi"; + result[L"ug"] = L"Uighur"; + result[L"uk"] = L"Ukrainian"; + result[L"ur"] = L"Urdu"; + result[L"ug"] = L"Uyghur"; + result[L"uz"] = L"Uzbek"; + result[L"ca"] = L"Valencian"; + result[L"ve"] = L"Venda"; + result[L"vi"] = L"Vietnamese"; + result[L"vo"] = L"Volapuk"; + result[L"wa"] = L"Walloon"; + result[L"cy"] = L"Welsh"; + result[L"fy"] = L"Western Frisian"; + result[L"wo"] = L"Wolof"; + result[L"xh"] = L"Xhosa"; + result[L"yi"] = L"Yiddish"; + result[L"yo"] = L"Yoruba"; + result[L"za"] = L"Zhuang"; + result[L"zu"] = L"Zulu"; + return result; +} void CSkypeProto::InitCustomFolders() { -- cgit v1.2.3