summaryrefslogtreecommitdiff
path: root/src/server.cpp
diff options
context:
space:
mode:
authorrubenwardy <rw@rubenwardy.com>2020-09-16 14:51:11 +0100
committerGitHub <noreply@github.com>2020-09-16 14:51:11 +0100
commit9ec75d77651c333eca3c5b46a3a56c8353fed464 (patch)
treefb8d42716279514e8850e53e47973a0f6d0ef7d5 /src/server.cpp
parentc8303f790ccb03857d031ecb73de7f9f59a6ceba (diff)
downloadminetest-9ec75d77651c333eca3c5b46a3a56c8353fed464.tar.gz
minetest-9ec75d77651c333eca3c5b46a3a56c8353fed464.tar.bz2
minetest-9ec75d77651c333eca3c5b46a3a56c8353fed464.zip
Clean up server-side translations, remove global variable (#10075)
Diffstat (limited to 'src/server.cpp')
-rw-r--r--src/server.cpp53
1 files changed, 22 insertions, 31 deletions
diff --git a/src/server.cpp b/src/server.cpp
index 7b3978462..b8a99f6ae 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -2451,31 +2451,14 @@ bool Server::addMediaFile(const std::string &filename,
// Ok, attempt to load the file and add to cache
// Read data
- std::ifstream fis(filepath.c_str(), std::ios_base::binary);
- if (!fis.good()) {
- errorstream << "Server::addMediaFile(): Could not open \""
- << filename << "\" for reading" << std::endl;
- return false;
- }
std::string filedata;
- bool bad = false;
- for (;;) {
- char buf[1024];
- fis.read(buf, sizeof(buf));
- std::streamsize len = fis.gcount();
- filedata.append(buf, len);
- if (fis.eof())
- break;
- if (!fis.good()) {
- bad = true;
- break;
- }
- }
- if (bad) {
- errorstream << "Server::addMediaFile(): Failed to read \""
- << filename << "\"" << std::endl;
+ if (!fs::ReadFile(filepath, filedata)) {
+ errorstream << "Server::addMediaFile(): Failed to open \""
+ << filename << "\" for reading" << std::endl;
return false;
- } else if (filedata.empty()) {
+ }
+
+ if (filedata.empty()) {
errorstream << "Server::addMediaFile(): Empty file \""
<< filepath << "\"" << std::endl;
return false;
@@ -3890,19 +3873,27 @@ void Server::broadcastModChannelMessage(const std::string &channel,
}
}
-void Server::loadTranslationLanguage(const std::string &lang_code)
+Translations *Server::getTranslationLanguage(const std::string &lang_code)
{
- if (g_server_translations->count(lang_code))
- return; // Already loaded
+ if (lang_code.empty())
+ return nullptr;
+
+ auto it = server_translations.find(lang_code);
+ if (it != server_translations.end())
+ return &it->second; // Already loaded
+
+ // [] will create an entry
+ auto *translations = &server_translations[lang_code];
std::string suffix = "." + lang_code + ".tr";
for (const auto &i : m_media) {
if (str_ends_with(i.first, suffix)) {
- std::ifstream t(i.second.path);
- std::string data((std::istreambuf_iterator<char>(t)),
- std::istreambuf_iterator<char>());
-
- (*g_server_translations)[lang_code].loadTranslation(data);
+ std::string data;
+ if (fs::ReadFile(i.second.path, data)) {
+ translations->loadTranslation(data);
+ }
}
}
+
+ return translations;
}