Offer explicit retry after media preview loading failures

This commit is contained in:
karl committed 2026-10-13 14:29:49 +02:00
1 parent f7f67afff9
commit 6c34962ced
2 files changed
+28 -23

No files matched your search

+27 -22
View File
@@ -208,6 +208,24 @@ function clearMedia() {
mediaLane.clear();
unloadMedia();
}
function showMediaFailure(request: PreviewRequest, message: string): void {
if (!previewRevision.accepts(request.revision)) return;
const status = element("media-preview-status");
status.hidden = false;
status.textContent = message;
const retry = document.createElement("button");
retry.type = "button";
retry.textContent = "Retry preview";
retry.addEventListener("click", () => {
const revision = previewRevision.retry(request.revision);
if (revision === undefined) return;
unloadMedia();
status.hidden = false;
status.textContent = "Preparing media preview…";
mediaLane.submit({ revision, result: request.result });
});
status.append(" ", retry);
}
const mediaLane = new LatestLane<PreviewRequest>(
async (request) => {
const prepared = await invoke<{
@@ -218,10 +236,10 @@ const mediaLane = new LatestLane<PreviewRequest>(
const host = element("media-preview");
const status = element("media-preview-status");
const failed = () => {
if (!previewRevision.accepts(request.revision)) return;
status.hidden = false;
status.textContent =
"This format cannot be previewed here. Use Open file to view it in your default application.";
showMediaFailure(
request,
"This preview could not be loaded. Retry or use Open file to view it in your default application.",
);
};
if (prepared.kind === "image") {
const image = document.createElement("img");
@@ -262,24 +280,11 @@ const mediaLane = new LatestLane<PreviewRequest>(
status.hidden = true;
},
(request) => previewRevision.accepts(request.revision),
(request, error) => {
if (!previewRevision.accepts(request.revision)) return;
const status = element("media-preview-status");
status.hidden = false;
status.textContent = `Preview unavailable: ${String(error)}. Use Open file.`;
const retry = document.createElement("button");
retry.type = "button";
retry.textContent = "Retry preview";
retry.addEventListener("click", () => {
const revision = previewRevision.retry(request.revision);
if (revision === undefined) return;
unloadMedia();
status.hidden = false;
status.textContent = "Preparing media preview…";
mediaLane.submit({ revision, result: request.result });
});
status.append(" ", retry);
},
(request, error) =>
showMediaFailure(
request,
`Preview unavailable: ${String(error)}. Use Open file.`,
),
);
let displayedRequestId: number | null = null;
let expandedError: string | null = null;