Add asset file download indicator to the loading screen.

This provides visual feedback to the user while loading large models.

PiperOrigin-RevId: 918708877
Change-Id: I77ea475cce6d9718e6cf8b33cb72b3f524a6ee63
This commit is contained in:
Saran Tunyasuvunakool
2026-05-20 16:25:53 -07:00
committed by Copybara-Service
parent 7174d33f08
commit 7c47a89cd0
3 changed files with 32 additions and 1 deletions
+17 -1
View File
@@ -71,8 +71,17 @@ class AssetRegistry {
// The caller is responsible for freeing the buffer. Returns 0 on failure.
EM_ASYNC_JS(int, FetchUrl,
(const char* url, char** out_data, std::int32_t* out_size), {
const urlStr = UTF8ToString(url);
const filename = urlStr.split('/').pop() || urlStr;
const dlEl = document.getElementById('loadingDownload');
const dlFileEl = document.getElementById('loadingDownloadFile');
if (dlEl) {
dlEl.style.display = 'block';
}
if (dlFileEl) {
dlFileEl.textContent = filename + '\u2026';
}
try {
const urlStr = UTF8ToString(url);
const response = await fetch(urlStr);
if (!response.ok) {
console.error('Fetch failed: ' + response.status + ' ' +
@@ -89,6 +98,13 @@ EM_ASYNC_JS(int, FetchUrl,
} catch (e) {
console.error('Fetch error:', e);
return 0;
} finally {
if (dlEl) {
dlEl.style.display = 'none';
}
if (dlFileEl) {
dlFileEl.textContent = "";
}
}
});
+11
View File
@@ -23,6 +23,17 @@
font-size: 14px;
opacity: 0.7;
}
.loading-download {
display: none;
margin-top: 24px;
opacity: 0.6;
}
.loading-download-label {
font-size: 13px;
}
.loading-download-file {
font-size: 13px;
}
#dropOverlay {
position: fixed;
top: 0;
+4
View File
@@ -10,6 +10,10 @@
<div class="loading-container">
<div class="loading-title">Loading model&hellip;</div>
<div class="loading-subtitle">This may take a moment for large models.</div>
<div id="loadingDownload" class="loading-download">
<div class="loading-download-label">Downloading asset file</div>
<div id="loadingDownloadFile" class="loading-download-file"></div>
</div>
</div>
</div>
<div id="dropOverlay">