summaryrefslogtreecommitdiff
path: root/protocols
diff options
context:
space:
mode:
authorAlexander Lantsev <aunsane@gmail.com>2013-04-27 11:50:44 +0000
committerAlexander Lantsev <aunsane@gmail.com>2013-04-27 11:50:44 +0000
commit699c680eb0adee413e74417dece429553c633733 (patch)
tree87aa4f1f160c40b61a4956caa8c2b389834c2976 /protocols
parentf3d22ea361554a090112ccaeb4290d14964a283d (diff)
- fixed avatar and profile info updating
- code reorganizing git-svn-id: http://svn.miranda-ng.org/main/trunk@4552 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols')
-rw-r--r--protocols/Skype/src/skype.cpp2
-rw-r--r--protocols/Skype/src/skype_database.cpp6
-rw-r--r--protocols/Skype/src/skype_dialogs.cpp29
-rw-r--r--protocols/Skype/src/skype_events.cpp29
-rw-r--r--protocols/Skype/src/skype_profile.cpp89
-rw-r--r--protocols/Skype/src/skype_proto.h15
-rw-r--r--protocols/Skype/src/skype_utils.cpp225
7 files changed, 307 insertions, 88 deletions
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<std::wstring, std::wstring> 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<PasswordRequestBoxParam*>(::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 <sstream>
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<wchar_t>(::mir_utf8decodeW(firstName)));
+ ::db_set_ws(hContact, this->m_szModuleName, "LastName", mir_ptr<wchar_t>(::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 <map>
+#include <string>
+
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<std::wstring, std::wstring> languages;
+ static std::map<std::wstring, std::wstring> 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<std::wstring, std::wstring> CSkypeProto::FillLanguages()
+{
+ std::map<std::wstring, std::wstring> 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()
{