feat: fallback to unsplash cover when article contains no image

This commit is contained in:
Max Richter
2025-11-09 23:52:53 +01:00
parent 6c6b69a46a
commit 655fc648e6
27 changed files with 687 additions and 224 deletions

View File

@@ -31,42 +31,55 @@ export const createNewSeries: MenuEntry = {
let currentQuery: string;
const search = debounce(async function search(query: string) {
currentQuery = query;
if (query.length < 2) {
return;
try {
currentQuery = query;
if (query.length < 2) {
return;
}
const response = await fetch(
"/api/tmdb/query?q=" + query + "&type=series",
);
if (!response.ok) {
throw new Error(await response.text());
}
const series = await response.json() as TMDBSeries[];
if (query !== currentQuery) return;
state.menus["input_link"] = {
title: "Search",
entries: series.map((r) => {
return {
title: `${r.name} - ${r.first_air_date}`,
cb: async () => {
try {
state.activeState.value = "loading";
const response = await fetch("/api/series/" + r.id, {
method: "POST",
});
if (!response.ok) {
throw new Error(await response.text());
}
const series = await response.json() as ReviewResource;
unsub();
globalThis.location.href = "/series/" + series.name;
} catch (e) {
state.activeState.value = "error";
state.loadingText.value = e.message;
}
},
};
}),
};
state.commandInput.value = "";
state.activeMenu.value = "input_link";
} catch (e) {
state.activeState.value = "error";
state.loadingText.value = e.message;
}
const response = await fetch(
"/api/tmdb/query?q=" + query + "&type=series",
);
const series = await response.json() as TMDBSeries[];
if (query !== currentQuery) return;
state.menus["input_link"] = {
title: "Search",
entries: series.map((r) => {
return {
title: `${r.name} - ${r.first_air_date}`,
cb: async () => {
try {
state.activeState.value = "loading";
const response = await fetch("/api/series/" + r.id, {
method: "POST",
});
const series = await response.json() as ReviewResource;
unsub();
globalThis.location.href = "/series/" + series.name;
} catch (_e) {
state.activeState.value = "normal";
}
},
};
}),
};
state.commandInput.value = "";
state.activeMenu.value = "input_link";
}, 500);
const unsub = state.commandInput.subscribe((value) => {