diff --git a/src/opds_dumper.cpp b/src/opds_dumper.cpp index 361eaa204..f16ee5693 100644 --- a/src/opds_dumper.cpp +++ b/src/opds_dumper.cpp @@ -126,13 +126,62 @@ BooksData getBooksData(const Library* library, const std::vector& b return booksData; } +std::map iso639_3 = { + {"atj","atikamekw"}, + {"azb","آذربایجان دیلی"}, + {"bcl","central bikol"}, + {"bgs","tagabawa"}, + {"bxr","буряад хэлэн"}, + {"cbk","chavacano"}, + {"cdo","閩東語"}, + {"diq","dimli"}, + {"dty","डोटेली"}, + {"eml","emiliân-rumagnōl"}, + {"fbs","српскохрватски"}, + {"kbp","kabɩyɛ"}, + {"kld","Gamilaraay"}, + {"lbe","лакку маз"}, + {"lbj","ལ་དྭགས་སྐད་"}, + {"map","Austronesian"}, + {"mhr","марий йылме"}, + {"mnw","ဘာသာမန်"}, + {"myn","mayan"}, + {"nah","nahuatl"}, + {"nai","north American Indian"}, + {"nds","plattdütsch"}, + {"nrm","bhasa narom"}, + {"olo","livvi"}, + {"pih","Pitcairn-Norfolk"}, + {"pnb","Western Panjabi"}, + {"rmr","Caló"}, + {"rmy","romani shib"}, + {"roa","romance languages"}, + {"twi","twi"}, + {"ido","ido"} +}; + +std::once_flag fillLanguagesFlag; + +void fillLanguagesMap() +{ + for (auto icuLangPtr = icu::Locale::getISOLanguages(); *icuLangPtr != NULL; ++icuLangPtr) { + auto lang = *icuLangPtr; + const icu::Locale locale(lang); + icu::UnicodeString ustring; + locale.getDisplayLanguage(locale, ustring); + std::string displayLanguage; + ustring.toUTF8String(displayLanguage); + std::string iso3LangCode = locale.getISO3Language(); + iso639_3.insert({iso3LangCode, displayLanguage}); + } +} + std::string getLanguageSelfName(const std::string& lang) { - const icu::Locale locale(lang.c_str()); - icu::UnicodeString ustring; - locale.getDisplayLanguage(locale, ustring); - std::string result; - ustring.toUTF8String(result); - return result; + const auto itr = iso639_3.find(lang); + if (itr != iso639_3.end()) { + return itr->second; + } + return lang; }; } // unnamed namespace @@ -210,6 +259,7 @@ std::string OPDSDumper::languagesOPDSFeed() const { const auto now = gen_date_str(); kainjow::mustache::list languageData; + std::call_once(fillLanguagesFlag, fillLanguagesMap); for ( const auto& langAndBookCount : library->getBooksLanguagesWithCounts() ) { const std::string languageCode = langAndBookCount.first; const int bookCount = langAndBookCount.second; diff --git a/src/server/internalServer.cpp b/src/server/internalServer.cpp index af26bcc98..df17033c1 100644 --- a/src/server/internalServer.cpp +++ b/src/server/internalServer.cpp @@ -146,7 +146,6 @@ bool InternalServer::start() { if (m_verbose.load()) flags |= MHD_USE_DEBUG; - struct sockaddr_in sockAddr; memset(&sockAddr, 0, sizeof(sockAddr)); sockAddr.sin_family = AF_INET;