fix(web): баннер сервера из снапшота, приглашение, встроенные звуки
- READY-снапшот больше не теряет banner/splash/accent: шапка сервера показывает баннер сразу после подключения (AGENT.md 7.4) - GUILD_UPDATE несёт всё оформление, клиент применяет его без перезагрузки - кнопка приглашения в шапке сервера со ссылкой и копированием - встроенные звуки интерфейса на Web Audio с разблокировкой по жесту - object URL превью через безопасные обёртки (jsdom и урезанные webview)
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
/**
|
||||
* Ссылки на локальные файлы (превью до ответа сервера). `URL.createObjectURL`
|
||||
* есть не во всех окружениях (jsdom, урезанные webview) и может бросить
|
||||
* исключение, поэтому все вызовы идут через эти обёртки.
|
||||
*/
|
||||
export function safeObjectUrl(source: Blob): string | null {
|
||||
if (typeof URL.createObjectURL !== 'function') {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
return URL.createObjectURL(source);
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export function revokeObjectUrl(url: string | null | undefined): void {
|
||||
if (url === null || url === undefined || typeof URL.revokeObjectURL !== 'function') {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
URL.revokeObjectURL(url);
|
||||
} catch {
|
||||
// Ссылка уже недействительна — освобождать нечего.
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user