From 09f6f49390580c80a4caf234844de6d206ba8618 Mon Sep 17 00:00:00 2001 From: lucalise Date: Tue, 20 Jan 2026 20:11:27 -0800 Subject: [PATCH] feat: add thumbnail spec --- api/src/endpoints/get_repos.rs | 1 - api/src/endpoints/proxy_file.rs | 4 +++- api/src/error.rs | 4 +++- src/lib/Image.svelte | 16 +++++++++++++--- src/lib/Projects.svelte | 3 ++- src/lib/Repos.svelte | 1 - src/routes/p/[id]/+page.svelte | 2 +- 7 files changed, 22 insertions(+), 9 deletions(-) diff --git a/api/src/endpoints/get_repos.rs b/api/src/endpoints/get_repos.rs index 79baec5..1bb3c7f 100644 --- a/api/src/endpoints/get_repos.rs +++ b/api/src/endpoints/get_repos.rs @@ -42,7 +42,6 @@ pub async fn get_repos( .into_iter() .map(|r| r.id) .collect::>(); - println!("{added_ids:?}"); let data = response .json::>() .await? diff --git a/api/src/endpoints/proxy_file.rs b/api/src/endpoints/proxy_file.rs index 7398fc1..5516410 100644 --- a/api/src/endpoints/proxy_file.rs +++ b/api/src/endpoints/proxy_file.rs @@ -33,7 +33,9 @@ pub async fn proxy_file( .bearer_auth(token) .send() .await?; - response.error_for_status_ref()?; + response + .error_for_status_ref() + .map_err(|_| crate::error::Error::NotFound)?; let bytes = response.bytes().await?; let mime = mime_guess::from_path(&path.file) diff --git a/api/src/error.rs b/api/src/error.rs index de239dd..b9725d8 100644 --- a/api/src/error.rs +++ b/api/src/error.rs @@ -54,7 +54,9 @@ impl ResponseError for Error { Error::ValidationFailed(msg) => { HttpResponse::BadRequest().json(ErrorResponse { error: msg.clone() }) } - Error::NotFound => HttpResponse::NotFound().finish(), + Error::NotFound => HttpResponse::NotFound().json(ErrorResponse { + error: "not found".to_string(), + }), _ => HttpResponse::InternalServerError().finish(), } } diff --git a/src/lib/Image.svelte b/src/lib/Image.svelte index 1faabd2..a80ce9f 100644 --- a/src/lib/Image.svelte +++ b/src/lib/Image.svelte @@ -2,8 +2,11 @@ type ImageStatus = 'loading' | 'loaded' | 'error'; import type { HTMLImgAttributes } from 'svelte/elements'; - let { src, ...props }: HTMLImgAttributes = $props(); + let { src, fallback, ...props }: HTMLImgAttributes & { fallback?: string } = $props(); let status: ImageStatus = $state('loading'); + let useFallback = $state(false); + + const currentSrc = $derived(useFallback && fallback ? fallback : src); {#if status === 'loading'} @@ -11,11 +14,18 @@ {/if} { status = 'loaded'; }} - onerror={() => (status = 'error')} + onerror={() => { + if (!useFallback && fallback) { + useFallback = true; + status = 'loading'; + } else { + status = 'error'; + } + }} {...props} /> diff --git a/src/lib/Projects.svelte b/src/lib/Projects.svelte index 880a795..12baa52 100644 --- a/src/lib/Projects.svelte +++ b/src/lib/Projects.svelte @@ -44,7 +44,8 @@ >
{project.full_name} diff --git a/src/lib/Repos.svelte b/src/lib/Repos.svelte index b909fae..4d13b95 100644 --- a/src/lib/Repos.svelte +++ b/src/lib/Repos.svelte @@ -115,7 +115,6 @@

Import Git Repository

- repo must be public