void CSkinInfo::SettingOptionsSkinSoundFiller(const CSetting *setting, std::vector< std::pair<std::string, std::string> > &list, std::string ¤t) { //find skins... CFileItemList items; CDirectory::GetDirectory("special://xbmc/sounds/", items); CDirectory::GetDirectory("special://home/sounds/", items); vector<string> vecSoundSkins; for (int i = 0; i < items.Size(); i++) { CFileItemPtr pItem = items[i]; if (pItem->m_bIsFolder) { if (StringUtils::EqualsNoCase(pItem->GetLabel(), ".svn") || StringUtils::EqualsNoCase(pItem->GetLabel(), "fonts") || StringUtils::EqualsNoCase(pItem->GetLabel(), "media")) continue; vecSoundSkins.push_back(pItem->GetLabel()); } } list.push_back(make_pair(g_localizeStrings.Get(474), "OFF")); list.push_back(make_pair(g_localizeStrings.Get(15109), "SKINDEFAULT")); sort(vecSoundSkins.begin(), vecSoundSkins.end(), sortstringbyname()); for (unsigned int i = 0; i < vecSoundSkins.size(); i++) list.push_back(make_pair(vecSoundSkins[i], vecSoundSkins[i])); }
TEST(TestStringUtils, sortstringbyname) { std::vector<std::string> strarray; strarray.push_back("B"); strarray.push_back("c"); strarray.push_back("a"); std::sort(strarray.begin(), strarray.end(), sortstringbyname()); EXPECT_STREQ("a", strarray[0].c_str()); EXPECT_STREQ("B", strarray[1].c_str()); EXPECT_STREQ("c", strarray[2].c_str()); }
void CSkinInfo::SettingOptionsSkinColorsFiller(const CSetting *setting, std::vector< std::pair<std::string, std::string> > &list, std::string ¤t, void *data) { std::string settingValue = ((const CSettingString*)setting)->GetValue(); // Remove the .xml extension from the Themes if (URIUtils::HasExtension(settingValue, ".xml")) URIUtils::RemoveExtension(settingValue); current = "SKINDEFAULT"; // There is a default theme (just defaults.xml) // any other *.xml files are additional color themes on top of this one. // add the default label list.push_back(make_pair(g_localizeStrings.Get(15109), "SKINDEFAULT")); // the standard defaults.xml will be used! // Search for colors in the Current skin! vector<string> vecColors; string strPath = URIUtils::AddFileToFolder(g_SkinInfo->Path(), "colors"); CFileItemList items; CDirectory::GetDirectory(CSpecialProtocol::TranslatePathConvertCase(strPath), items, ".xml"); // Search for Themes in the Current skin! for (int i = 0; i < items.Size(); ++i) { CFileItemPtr pItem = items[i]; if (!pItem->m_bIsFolder && !StringUtils::EqualsNoCase(pItem->GetLabel(), "defaults.xml")) { // not the default one vecColors.push_back(pItem->GetLabel().substr(0, pItem->GetLabel().size() - 4)); } } sort(vecColors.begin(), vecColors.end(), sortstringbyname()); for (int i = 0; i < (int) vecColors.size(); ++i) list.push_back(make_pair(vecColors[i], vecColors[i])); // try to find the best matching value for (vector< pair<string, string> >::const_iterator it = list.begin(); it != list.end(); ++it) { if (StringUtils::EqualsNoCase(it->second, settingValue)) current = settingValue; } }
void CSkinInfo::SettingOptionsSkinSoundFiller(const CSetting *setting, std::vector< std::pair<std::string, std::string> > &list, std::string ¤t, void *data) { std::string settingValue = ((const CSettingString*)setting)->GetValue(); current = "SKINDEFAULT"; //find skins... CFileItemList items; CDirectory::GetDirectory("special://xbmc/sounds/", items); CDirectory::GetDirectory("special://home/sounds/", items); vector<string> vecSoundSkins; for (int i = 0; i < items.Size(); i++) { CFileItemPtr pItem = items[i]; if (pItem->m_bIsFolder) { if (StringUtils::EqualsNoCase(pItem->GetLabel(), ".svn") || StringUtils::EqualsNoCase(pItem->GetLabel(), "fonts") || StringUtils::EqualsNoCase(pItem->GetLabel(), "media")) continue; vecSoundSkins.push_back(pItem->GetLabel()); } } list.push_back(make_pair(g_localizeStrings.Get(474), "OFF")); list.push_back(make_pair(g_localizeStrings.Get(15109), "SKINDEFAULT")); sort(vecSoundSkins.begin(), vecSoundSkins.end(), sortstringbyname()); for (unsigned int i = 0; i < vecSoundSkins.size(); i++) list.push_back(make_pair(vecSoundSkins[i], vecSoundSkins[i])); // try to find the best matching value for (vector< pair<string, string> >::const_iterator it = list.begin(); it != list.end(); ++it) { if (StringUtils::EqualsNoCase(it->second, settingValue)) current = settingValue; } }
CLinuxTimezone::CLinuxTimezone() : m_IsDST(0) { char* line = NULL; size_t linelen = 0; int nameonfourthfield = 0; std::string s; std::vector<std::string> tokens; // Load timezones FILE* fp = fopen("/usr/share/zoneinfo/zone.tab", "r"); if (fp) { std::string countryCode; std::string timezoneName; while (getdelim(&line, &linelen, '\n', fp) > 0) { tokens.clear(); s = line; StringUtils::Trim(s); if (s.length() == 0) continue; if (s[0] == '#') continue; StringUtils::Tokenize(s, tokens, " \t"); if (tokens.size() < 3) continue; countryCode = tokens[0]; timezoneName = tokens[2]; if (m_timezonesByCountryCode.count(countryCode) == 0) { std::vector<std::string> timezones; timezones.push_back(timezoneName); m_timezonesByCountryCode[countryCode] = timezones; } else { std::vector<std::string>& timezones = m_timezonesByCountryCode[countryCode]; timezones.push_back(timezoneName); } m_countriesByTimezoneName[timezoneName] = countryCode; } fclose(fp); } if (line) { free(line); line = NULL; linelen = 0; } // Load countries fp = fopen("/usr/share/zoneinfo/iso3166.tab", "r"); if (!fp) { fp = fopen("/usr/share/misc/iso3166", "r"); nameonfourthfield = 1; } if (fp) { std::string countryCode; std::string countryName; while (getdelim(&line, &linelen, '\n', fp) > 0) { s = line; StringUtils::Trim(s); /* TODO:STRING_CLEANUP */ if (s.length() == 0) continue; if (s[0] == '#') continue; // Search for the first non space from the 2nd character and on int i = 2; while (s[i] == ' ' || s[i] == '\t') i++; if (nameonfourthfield) { // skip three letter while (s[i] != ' ' && s[i] != '\t') i++; while (s[i] == ' ' || s[i] == '\t') i++; // skip number while (s[i] != ' ' && s[i] != '\t') i++; while (s[i] == ' ' || s[i] == '\t') i++; } countryCode = s.substr(0, 2); countryName = s.substr(i); m_counties.push_back(countryName); m_countryByCode[countryCode] = countryName; m_countryByName[countryName] = countryCode; } sort(m_counties.begin(), m_counties.end(), sortstringbyname()); fclose(fp); } free(line); }