Аватары: убрать инициалы при наличии txId и усилить загрузку старых файлов

This commit is contained in:
AidarKC
2026-04-26 02:39:21 +03:00
parent 4c1aeeeac8
commit df7f38bd0a
4 changed files with 84 additions and 18 deletions
+40 -9
View File
@@ -1,5 +1,5 @@
import { state } from '../state.js';
import { validateArweaveTxId } from '../services/arweave-file-service.js';
import { buildArweaveDataUrl, validateArweaveTxId } from '../services/arweave-file-service.js';
import { getCachedAvatarObjectUrl } from '../services/arweave-avatar-cache-service.js';
function normalizeLogin(value) {
@@ -52,6 +52,7 @@ export function renderUserAvatar({
if (!validateArweaveTxId(txId)) {
return wrap;
}
fallback.hidden = true;
const img = document.createElement('img');
img.alt = 'Аватар';
@@ -63,25 +64,55 @@ export function renderUserAvatar({
const gateway = state?.entrySettings?.arweaveServer;
void getCachedAvatarObjectUrl({ gateway, txId })
.then((objectUrl) => {
img.onload = () => {
fallback.hidden = true;
img.hidden = false;
const directUrl = buildArweaveDataUrl({ gateway, txId });
let triedDirectUrl = false;
let objectUrlReleased = false;
const releaseObjectUrl = () => {
if (objectUrlReleased) return;
objectUrlReleased = true;
if (objectUrl.startsWith('blob:')) {
URL.revokeObjectURL(objectUrl);
}
};
img.onload = () => {
fallback.hidden = true;
img.hidden = false;
releaseObjectUrl();
};
img.onerror = () => {
if (!triedDirectUrl) {
triedDirectUrl = true;
releaseObjectUrl();
img.src = directUrl;
return;
}
releaseObjectUrl();
img.hidden = true;
fallback.hidden = false;
if (objectUrl.startsWith('blob:')) {
URL.revokeObjectURL(objectUrl);
}
};
img.src = objectUrl;
})
.catch(() => {
img.hidden = true;
fallback.hidden = false;
let directUrl = '';
try {
directUrl = buildArweaveDataUrl({ gateway, txId });
} catch {
directUrl = '';
}
if (!directUrl) {
img.hidden = true;
fallback.hidden = false;
return;
}
img.onload = () => {
fallback.hidden = true;
img.hidden = false;
};
img.onerror = () => {
img.hidden = true;
fallback.hidden = false;
};
img.src = directUrl;
});
return wrap;