did a lot of syle work and started search and detail pages

This commit is contained in:
Chris Kruining 2025-05-19 17:00:18 +02:00
parent 7c5d2a25ff
commit 275fb87eeb
No known key found for this signature in database
GPG key ID: EB894A3560CCCAD2
23 changed files with 301155 additions and 243 deletions

View file

@ -1,5 +1,3 @@
"use server";
import type { paths } from "./jellyfin.generated"; // generated by openapi-typescript
import createClient from "openapi-fetch";
import { query } from "@solidjs/router";
@ -20,42 +18,29 @@ type ItemImageType =
| "BoxRear"
| "Profile";
const baseUrl = process.env.JELLYFIN_BASE_URL;
const client = createClient<paths>({
baseUrl,
headers: {
Authorization: `MediaBrowser DeviceId="Streamarr", Token="${process.env.JELLYFIN_API_KEY}"`,
"Content-Type": 'application/json; profile="CamelCase"',
},
});
const getBaseUrl = () => {
"use server";
export const TEST = query(async () => {
const userId = "a9c51af8-4bf5-4578-a99a-b4dd0ebf0763";
const itemId = "919dfa97-e4da-d275-8a92-5d056e590a28";
const seriesId = "5230ddbcd-9400-733d-c07e-5b8cb7a4f49";
return process.env.JELLYFIN_BASE_URL;
};
const { data: seriesData } = await client.GET(
"/UserItems/{itemId}/UserData",
{
params: {
path: { itemId: seriesId },
query: { userId },
},
const getClient = () => {
"use server";
return createClient<paths>({
baseUrl: getBaseUrl(),
headers: {
Authorization: `MediaBrowser DeviceId="Streamarr", Token="${process.env.JELLYFIN_API_KEY}"`,
"Content-Type": 'application/json; profile="CamelCase"',
},
);
const { data: epData } = await client.GET("/UserItems/{itemId}/UserData", {
params: {
path: { itemId },
query: { userId },
},
});
console.log(seriesData, epData);
}, "jellyfin.TEST");
})
};
export const getCurrentUser = query(async () => {
const { data, error, response } = await client.GET("/Users/Public", {
"use server";
const { data, error, response } = await getClient().GET("/Users/Public", {
params: {},
});
@ -63,7 +48,9 @@ export const getCurrentUser = query(async () => {
}, "jellyfin.getCurrentUser");
export const listUsers = query(async () => {
const { data, error } = await client.GET("/Users", {
"use server";
const { data, error } = await getClient().GET("/Users", {
params: {},
});
@ -72,7 +59,9 @@ export const listUsers = query(async () => {
export const listItems = query(
async (userId: string): Promise<Entry[] | undefined> => {
const { data, error } = await client.GET("/Items", {
"use server";
const { data, error } = await getClient().GET("/Items", {
params: {
query: {
userId,
@ -99,7 +88,7 @@ export const listItems = query(
// id: item.Id!,
id: item.ProviderIds!["Tmdb"]!,
title: item.Name!,
thumbnail: new URL(`/Items/${item.Id!}/Images/Primary`, baseUrl), //await getItemImage(data.Id!, 'Primary'),
thumbnail: new URL(`/Items/${item.Id!}/Images/Primary`, getBaseUrl()), //await getItemImage(data.Id!, 'Primary'),
})) ?? []
);
},
@ -107,14 +96,19 @@ export const listItems = query(
);
export const getRandomItem = query(
async (userId: string): Promise<Entry | undefined> =>
getRandomItems(userId, 1).then((items) => items?.at(0)),
async (userId: string): Promise<Entry | undefined> => {
"use server";
return getRandomItems(userId, 1).then((items) => items?.at(0));
},
"jellyfin.listRandomItem",
);
export const getRandomItems = query(
async (userId: string, limit: number = 10): Promise<Entry[]> => {
const { data, error } = await client.GET("/Items", {
async (userId: string, limit: number = 20): Promise<Entry[]> => {
"use server";
const { data, error } = await getClient().GET("/Items", {
params: {
query: {
userId,
@ -140,8 +134,8 @@ export const getRandomItems = query(
// id: item.Id!,
id: item.ProviderIds!["Tmdb"]!,
title: item.Name!,
thumbnail: new URL(`/Items/${item.Id!}/Images/Primary`, baseUrl), //await getItemImage(data.Id!, 'Primary'),
image: new URL(`/Items/${item.Id!}/Images/Backdrop`, baseUrl), //await getItemImage(data.Id!, 'Primary'),
thumbnail: new URL(`/Items/${item.Id!}/Images/Primary`, getBaseUrl()), //await getItemImage(data.Id!, 'Primary'),
image: new URL(`/Items/${item.Id!}/Images/Backdrop`, getBaseUrl()), //await getItemImage(data.Id!, 'Primary'),
})) ?? []
);
},
@ -150,7 +144,9 @@ export const getRandomItems = query(
export const getItem = query(
async (userId: string, itemId: string): Promise<Entry | undefined> => {
const { data, error } = await client.GET("/Items/{itemId}", {
"use server";
const { data, error } = await getClient().GET("/Items/{itemId}", {
params: {
path: {
itemId,
@ -180,8 +176,8 @@ export const getItem = query(
id: data.ProviderIds!["Tmdb"]!,
title: data.Name!,
overview: data.Overview!,
thumbnail: new URL(`/Items/${itemId}/Images/Primary`, baseUrl), //await getItemImage(data.Id!, 'Primary'),
image: new URL(`/Items/${itemId}/Images/Backdrop`, baseUrl),
thumbnail: new URL(`/Items/${itemId}/Images/Primary`, getBaseUrl()), //await getItemImage(data.Id!, 'Primary'),
image: new URL(`/Items/${itemId}/Images/Backdrop`, getBaseUrl()),
// ...data,
};
},
@ -193,7 +189,9 @@ export const getItemImage = query(
itemId: string,
imageType: ItemImageType,
): Promise<any | undefined> => {
const { data, error } = await client.GET(
"use server";
const { data, error } = await getClient().GET(
"/Items/{itemId}/Images/{imageType}",
{
parseAs: "blob",
@ -214,7 +212,9 @@ export const getItemImage = query(
export const getItemPlaybackInfo = query(
async (userId: string, itemId: string): Promise<any | undefined> => {
const { data, error, response } = await client.GET(
"use server";
const { data, error, response } = await getClient().GET(
"/Items/{itemId}/PlaybackInfo",
{
parseAs: "text",
@ -236,7 +236,9 @@ export const getItemPlaybackInfo = query(
);
export const queryItems = query(async () => {
const { data, error } = await client.GET("/Items", {
"use server";
const { data, error } = await getClient().GET("/Items", {
params: {
query: {
mediaTypes: ["Video"],
@ -254,7 +256,9 @@ export const queryItems = query(async () => {
export const getContinueWatching = query(
async (userId: string): Promise<Entry[]> => {
const { data, error } = await client.GET("/UserItems/Resume", {
"use server";
const { data, error } = await getClient().GET("/UserItems/Resume", {
params: {
query: {
userId,