diff --git a/src/client/client.cpp b/src/client/client.cpp index d6781a965..789a37c36 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -1795,6 +1795,11 @@ float Client::mediaReceiveProgress() return 1.0; // downloader only exists when not yet done } +void Client::drawLoadScreen(const std::wstring &text, float dtime, int percent) { + m_rendering_engine->run(); + m_rendering_engine->draw_load_screen(text, guienv, m_tsrc, dtime, percent); +} + struct TextureUpdateArgs { gui::IGUIEnvironment *guienv; u64 last_time_ms; diff --git a/src/client/client.h b/src/client/client.h index 42049791f..b2ff9a0da 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -356,6 +356,7 @@ public: float mediaReceiveProgress(); + void drawLoadScreen(const std::wstring &text, float dtime, int percent); void afterContentReceived(); void showUpdateProgressTexture(void *args, u32 progress, u32 max_progress); diff --git a/src/client/clientmedia.cpp b/src/client/clientmedia.cpp index 764fac422..45fb1c6aa 100644 --- a/src/client/clientmedia.cpp +++ b/src/client/clientmedia.cpp @@ -18,6 +18,7 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "clientmedia.h" +#include "gettext.h" #include "httpfetch.h" #include "client.h" #include "filecache.h" @@ -184,6 +185,11 @@ void ClientMediaDownloader::step(Client *client) void ClientMediaDownloader::initialStep(Client *client) { + std::wstring loading_text = wstrgettext("Media..."); + // Tradeoff between responsiveness during media loading and media loading speed + const u64 chunk_time_ms = 33; + u64 last_time = porting::getTimeMs(); + // Check media cache m_uncached_count = m_files.size(); for (auto &file_it : m_files) { @@ -195,6 +201,13 @@ void ClientMediaDownloader::initialStep(Client *client) filestatus->received = true; m_uncached_count--; } + + u64 cur_time = porting::getTimeMs(); + u64 dtime = porting::getDeltaMs(last_time, cur_time); + if (dtime >= chunk_time_ms) { + client->drawLoadScreen(loading_text, dtime / 1000.0f, 30); + last_time = cur_time; + } } assert(m_uncached_received_count == 0);