mirror of
https://github.com/ajnart/homarr.git
synced 2026-02-27 00:40:58 +01:00
chore(release): automatic release v1.30.1
This commit is contained in:
1
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
1
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -31,6 +31,7 @@ body:
|
||||
label: Version
|
||||
description: What version of Homarr are you running?
|
||||
options:
|
||||
- 1.30.0
|
||||
- 1.29.0
|
||||
- 1.28.1
|
||||
- 1.28.0
|
||||
|
||||
@@ -50,12 +50,12 @@
|
||||
"@homarr/ui": "workspace:^0.1.0",
|
||||
"@homarr/validation": "workspace:^0.1.0",
|
||||
"@homarr/widgets": "workspace:^0.1.0",
|
||||
"@mantine/colors-generator": "^8.1.3",
|
||||
"@mantine/core": "^8.1.3",
|
||||
"@mantine/dropzone": "^8.1.3",
|
||||
"@mantine/hooks": "^8.1.3",
|
||||
"@mantine/modals": "^8.1.3",
|
||||
"@mantine/tiptap": "^8.1.3",
|
||||
"@mantine/colors-generator": "^8.2.1",
|
||||
"@mantine/core": "^8.2.1",
|
||||
"@mantine/dropzone": "^8.2.1",
|
||||
"@mantine/hooks": "^8.2.1",
|
||||
"@mantine/modals": "^8.2.1",
|
||||
"@mantine/tiptap": "^8.2.1",
|
||||
"@million/lint": "1.0.14",
|
||||
"@tabler/icons-react": "^3.34.1",
|
||||
"@tanstack/react-query": "^5.83.0",
|
||||
@@ -71,12 +71,12 @@
|
||||
"chroma-js": "^3.1.2",
|
||||
"clsx": "^2.1.1",
|
||||
"dayjs": "^1.11.13",
|
||||
"dotenv": "^17.2.0",
|
||||
"dotenv": "^17.2.1",
|
||||
"flag-icons": "^7.5.0",
|
||||
"glob": "^11.0.3",
|
||||
"jotai": "^2.12.5",
|
||||
"mantine-react-table": "2.0.0-beta.9",
|
||||
"next": "15.4.2",
|
||||
"next": "15.4.4",
|
||||
"postcss-preset-mantine": "^1.18.0",
|
||||
"prismjs": "^1.30.0",
|
||||
"react": "19.1.0",
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"@homarr/validation": "workspace:^0.1.0",
|
||||
"@homarr/widgets": "workspace:^0.1.0",
|
||||
"dayjs": "^1.11.13",
|
||||
"dotenv": "^17.2.0",
|
||||
"dotenv": "^17.2.1",
|
||||
"fastify": "^5.4.0",
|
||||
"superjson": "2.2.2",
|
||||
"undici": "7.12.0"
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"@homarr/log": "workspace:^",
|
||||
"@homarr/redis": "workspace:^0.1.0",
|
||||
"@homarr/validation": "workspace:^0.1.0",
|
||||
"dotenv": "^17.2.0",
|
||||
"dotenv": "^17.2.1",
|
||||
"tsx": "4.20.3",
|
||||
"ws": "^8.18.3"
|
||||
},
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"@semantic-release/github": "^11.0.3",
|
||||
"@semantic-release/npm": "^12.0.2",
|
||||
"@semantic-release/release-notes-generator": "^14.0.3",
|
||||
"@testcontainers/redis": "^11.3.1",
|
||||
"@testcontainers/redis": "^11.4.0",
|
||||
"@turbo/gen": "^2.5.5",
|
||||
"@vitejs/plugin-react": "^4.7.0",
|
||||
"@vitest/coverage-v8": "^3.2.4",
|
||||
@@ -48,7 +48,7 @@
|
||||
"jsdom": "^26.1.0",
|
||||
"prettier": "^3.6.2",
|
||||
"semantic-release": "^24.2.7",
|
||||
"testcontainers": "^11.3.1",
|
||||
"testcontainers": "^11.4.0",
|
||||
"turbo": "^2.5.5",
|
||||
"typescript": "^5.8.3",
|
||||
"vite-tsconfig-paths": "^5.1.4",
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
"@trpc/server": "^11.4.3",
|
||||
"@trpc/tanstack-react-query": "^11.4.3",
|
||||
"lodash.clonedeep": "^4.5.0",
|
||||
"next": "15.4.2",
|
||||
"next": "15.4.4",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"superjson": "2.2.2",
|
||||
|
||||
@@ -34,8 +34,8 @@
|
||||
"@homarr/validation": "workspace:^0.1.0",
|
||||
"bcrypt": "^6.0.0",
|
||||
"cookies": "^0.9.1",
|
||||
"ldapts": "8.0.6",
|
||||
"next": "15.4.2",
|
||||
"ldapts": "8.0.8",
|
||||
"next": "15.4.4",
|
||||
"next-auth": "5.0.0-beta.29",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
"@homarr/db": "workspace:^0.1.0",
|
||||
"@homarr/validation": "workspace:^0.1.0",
|
||||
"dotenv": "^17.2.0"
|
||||
"dotenv": "^17.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/eslint-config": "workspace:^0.2.0",
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"@homarr/log": "workspace:^0.1.0",
|
||||
"@paralleldrive/cuid2": "^2.2.2",
|
||||
"dayjs": "^1.11.13",
|
||||
"next": "15.4.2",
|
||||
"next": "15.4.4",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"undici": "7.12.0",
|
||||
|
||||
@@ -44,11 +44,11 @@
|
||||
"@homarr/definitions": "workspace:^0.1.0",
|
||||
"@homarr/log": "workspace:^0.1.0",
|
||||
"@homarr/server-settings": "workspace:^0.1.0",
|
||||
"@mantine/core": "^8.1.3",
|
||||
"@mantine/core": "^8.2.1",
|
||||
"@paralleldrive/cuid2": "^2.2.2",
|
||||
"@testcontainers/mysql": "^11.3.1",
|
||||
"@testcontainers/mysql": "^11.4.0",
|
||||
"better-sqlite3": "^12.2.0",
|
||||
"dotenv": "^17.2.0",
|
||||
"dotenv": "^17.2.1",
|
||||
"drizzle-kit": "^0.31.4",
|
||||
"drizzle-orm": "^0.44.3",
|
||||
"drizzle-zod": "^0.7.1",
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"@homarr/common": "workspace:^0.1.0",
|
||||
"@homarr/translation": "workspace:^0.1.0",
|
||||
"@homarr/validation": "workspace:^0.1.0",
|
||||
"@mantine/form": "^8.1.3",
|
||||
"@mantine/form": "^8.2.1",
|
||||
"zod": "^3.25.76"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"@homarr/notifications": "workspace:^0.1.0",
|
||||
"@homarr/translation": "workspace:^0.1.0",
|
||||
"@homarr/validation": "workspace:^0.1.0",
|
||||
"@mantine/core": "^8.1.3",
|
||||
"@mantine/core": "^8.2.1",
|
||||
"react": "19.1.0",
|
||||
"zod": "^3.25.76"
|
||||
},
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@ctrl/deluge": "^7.1.0",
|
||||
"@ctrl/deluge": "^7.1.1",
|
||||
"@ctrl/qbittorrent": "^9.6.0",
|
||||
"@ctrl/transmission": "^7.2.0",
|
||||
"@gitbeaker/rest": "^43.3.0",
|
||||
|
||||
@@ -79,24 +79,29 @@ export class PlexIntegration extends Integration implements IMediaServerIntegrat
|
||||
},
|
||||
});
|
||||
|
||||
const data = await recentlyAddedSchema.parseAsync(await response.json());
|
||||
const json = await response.json();
|
||||
const data = await recentlyAddedSchema.parseAsync(json);
|
||||
const imageProxy = new ImageProxy();
|
||||
|
||||
const images =
|
||||
data.MediaContainer.Metadata?.flatMap((item) => [
|
||||
{
|
||||
mediaKey: item.key,
|
||||
type: "poster",
|
||||
url: item.Image.find((image) => image?.type === "coverPoster")?.url,
|
||||
},
|
||||
{
|
||||
mediaKey: item.key,
|
||||
type: "backdrop",
|
||||
url: item.Image.find((image) => image?.type === "background")?.url,
|
||||
},
|
||||
]).filter(
|
||||
(image): image is { mediaKey: string; type: "poster" | "backdrop"; url: string } => image.url !== undefined,
|
||||
) ?? [];
|
||||
data.MediaContainer.Metadata?.filter((item) => item.Image)
|
||||
.flatMap((item) => [
|
||||
{
|
||||
mediaKey: item.key,
|
||||
type: "poster",
|
||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||
url: item.Image!.find((image) => image?.type === "coverPoster")?.url,
|
||||
},
|
||||
{
|
||||
mediaKey: item.key,
|
||||
type: "backdrop",
|
||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||
url: item.Image!.find((image) => image?.type === "background")?.url,
|
||||
},
|
||||
])
|
||||
.filter(
|
||||
(image): image is { mediaKey: string; type: "poster" | "backdrop"; url: string } => image.url !== undefined,
|
||||
) ?? [];
|
||||
|
||||
const proxiedImages = await Promise.all(
|
||||
images.map(async (image) => {
|
||||
@@ -117,11 +122,11 @@ export class PlexIntegration extends Integration implements IMediaServerIntegrat
|
||||
}),
|
||||
);
|
||||
|
||||
return (
|
||||
data.MediaContainer.Metadata?.map((item) => {
|
||||
const media =
|
||||
data.MediaContainer.Metadata?.filter((item) => item.Image).map((item) => {
|
||||
return {
|
||||
id: item.Media.at(0)?.id.toString() ?? item.key,
|
||||
type: item.type === "movie" ? "movie" : item.type === "tv" ? "tv" : "unknown",
|
||||
id: item.Media?.at(0)?.id.toString() ?? item.key,
|
||||
type: mapType(item.type),
|
||||
title: item.title,
|
||||
subtitle: item.tagline,
|
||||
description: item.summary,
|
||||
@@ -134,14 +139,15 @@ export class PlexIntegration extends Integration implements IMediaServerIntegrat
|
||||
},
|
||||
producer: item.studio,
|
||||
rating: item.rating?.toFixed(1),
|
||||
tags: item.Genre.map((genre) => genre.tag),
|
||||
tags: item.Genre?.map((genre) => genre.tag) ?? [],
|
||||
href: super
|
||||
.url(`/web/index.html#!/server/${machineIdentifier}/details?key=${encodeURIComponent(item.key)}`)
|
||||
.toString(),
|
||||
length: item.duration ? Math.round(item.duration / 1000) : undefined,
|
||||
};
|
||||
}) ?? []
|
||||
);
|
||||
}) ?? [];
|
||||
|
||||
return media;
|
||||
}
|
||||
|
||||
private async getMachineIdentifierAsync(): Promise<string> {
|
||||
@@ -210,7 +216,7 @@ const recentlyAddedSchema = z.object({
|
||||
z.object({
|
||||
key: z.string(),
|
||||
studio: z.string().optional(),
|
||||
type: z.string(), // For example "movie"
|
||||
type: z.string(), // For example "movie", "album"
|
||||
title: z.string(),
|
||||
summary: z.string().optional(),
|
||||
duration: z.number().optional(),
|
||||
@@ -218,24 +224,30 @@ const recentlyAddedSchema = z.object({
|
||||
rating: z.number().optional(),
|
||||
tagline: z.string().optional(),
|
||||
originallyAvailableAt: z.string().optional(),
|
||||
Media: z.array(
|
||||
z.object({
|
||||
id: z.number(),
|
||||
}),
|
||||
),
|
||||
Image: z.array(
|
||||
z
|
||||
.object({
|
||||
type: z.string(), // for example "coverPoster" or "background"
|
||||
url: z.string(),
|
||||
})
|
||||
.optional(),
|
||||
),
|
||||
Genre: z.array(
|
||||
z.object({
|
||||
tag: z.string(),
|
||||
}),
|
||||
),
|
||||
Media: z
|
||||
.array(
|
||||
z.object({
|
||||
id: z.number(),
|
||||
}),
|
||||
)
|
||||
.optional(),
|
||||
Image: z
|
||||
.array(
|
||||
z
|
||||
.object({
|
||||
type: z.string(), // for example "coverPoster" or "background"
|
||||
url: z.string(),
|
||||
})
|
||||
.optional(),
|
||||
)
|
||||
.optional(),
|
||||
Genre: z
|
||||
.array(
|
||||
z.object({
|
||||
tag: z.string(),
|
||||
}),
|
||||
)
|
||||
.optional(),
|
||||
}),
|
||||
)
|
||||
.optional(),
|
||||
@@ -248,3 +260,14 @@ const identitySchema = z.object({
|
||||
machineIdentifier: z.string(),
|
||||
}),
|
||||
});
|
||||
|
||||
const mapType = (type: string): "movie" | "tv" | "unknown" => {
|
||||
switch (type) {
|
||||
case "movie":
|
||||
return "movie";
|
||||
case "tv":
|
||||
return "tv";
|
||||
default:
|
||||
return "unknown";
|
||||
}
|
||||
};
|
||||
|
||||
@@ -33,10 +33,10 @@
|
||||
"@homarr/translation": "workspace:^0.1.0",
|
||||
"@homarr/ui": "workspace:^0.1.0",
|
||||
"@homarr/validation": "workspace:^0.1.0",
|
||||
"@mantine/core": "^8.1.3",
|
||||
"@mantine/core": "^8.2.1",
|
||||
"@tabler/icons-react": "^3.34.1",
|
||||
"dayjs": "^1.11.13",
|
||||
"next": "15.4.2",
|
||||
"next": "15.4.4",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"zod": "^3.25.76"
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
"dependencies": {
|
||||
"@homarr/translation": "workspace:^0.1.0",
|
||||
"@homarr/ui": "workspace:^0.1.0",
|
||||
"@mantine/core": "^8.1.3",
|
||||
"@mantine/hooks": "^8.1.3",
|
||||
"@mantine/core": "^8.2.1",
|
||||
"@mantine/hooks": "^8.2.1",
|
||||
"react": "19.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@homarr/ui": "workspace:^0.1.0",
|
||||
"@mantine/notifications": "^8.1.3",
|
||||
"@mantine/notifications": "^8.2.1",
|
||||
"@tabler/icons-react": "^3.34.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -37,10 +37,10 @@
|
||||
"@homarr/translation": "workspace:^0.1.0",
|
||||
"@homarr/ui": "workspace:^0.1.0",
|
||||
"@homarr/validation": "workspace:^0.1.0",
|
||||
"@mantine/core": "^8.1.3",
|
||||
"@mantine/hooks": "^8.1.3",
|
||||
"@mantine/core": "^8.2.1",
|
||||
"@mantine/hooks": "^8.2.1",
|
||||
"adm-zip": "0.5.16",
|
||||
"next": "15.4.2",
|
||||
"next": "15.4.4",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"superjson": "2.2.2",
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
"@homarr/api": "workspace:^0.1.0",
|
||||
"@homarr/db": "workspace:^0.1.0",
|
||||
"@homarr/server-settings": "workspace:^0.1.0",
|
||||
"@mantine/dates": "^8.1.3",
|
||||
"next": "15.4.2",
|
||||
"@mantine/dates": "^8.2.1",
|
||||
"next": "15.4.4",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0"
|
||||
},
|
||||
|
||||
@@ -33,12 +33,12 @@
|
||||
"@homarr/settings": "workspace:^0.1.0",
|
||||
"@homarr/translation": "workspace:^0.1.0",
|
||||
"@homarr/ui": "workspace:^0.1.0",
|
||||
"@mantine/core": "^8.1.3",
|
||||
"@mantine/hooks": "^8.1.3",
|
||||
"@mantine/spotlight": "^8.1.3",
|
||||
"@mantine/core": "^8.2.1",
|
||||
"@mantine/hooks": "^8.2.1",
|
||||
"@mantine/spotlight": "^8.2.1",
|
||||
"@tabler/icons-react": "^3.34.1",
|
||||
"jotai": "^2.12.5",
|
||||
"next": "15.4.2",
|
||||
"next": "15.4.4",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"use-deep-compare-effect": "^1.8.1"
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
"dayjs": "^1.11.13",
|
||||
"deepmerge": "4.3.1",
|
||||
"mantine-react-table": "2.0.0-beta.9",
|
||||
"next": "15.4.2",
|
||||
"next": "15.4.4",
|
||||
"next-intl": "4.3.4",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0"
|
||||
|
||||
@@ -30,12 +30,12 @@
|
||||
"@homarr/log": "workspace:^0.1.0",
|
||||
"@homarr/translation": "workspace:^0.1.0",
|
||||
"@homarr/validation": "workspace:^0.1.0",
|
||||
"@mantine/core": "^8.1.3",
|
||||
"@mantine/dates": "^8.1.3",
|
||||
"@mantine/hooks": "^8.1.3",
|
||||
"@mantine/core": "^8.2.1",
|
||||
"@mantine/dates": "^8.2.1",
|
||||
"@mantine/hooks": "^8.2.1",
|
||||
"@tabler/icons-react": "^3.34.1",
|
||||
"mantine-react-table": "2.0.0-beta.9",
|
||||
"next": "15.4.2",
|
||||
"next": "15.4.4",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"svgson": "^5.3.1"
|
||||
|
||||
@@ -48,9 +48,9 @@
|
||||
"@homarr/translation": "workspace:^0.1.0",
|
||||
"@homarr/ui": "workspace:^0.1.0",
|
||||
"@homarr/validation": "workspace:^0.1.0",
|
||||
"@mantine/charts": "^8.1.3",
|
||||
"@mantine/core": "^8.1.3",
|
||||
"@mantine/hooks": "^8.1.3",
|
||||
"@mantine/charts": "^8.2.1",
|
||||
"@mantine/core": "^8.2.1",
|
||||
"@mantine/hooks": "^8.2.1",
|
||||
"@tabler/icons-react": "^3.34.1",
|
||||
"@tiptap/extension-color": "2.26.1",
|
||||
"@tiptap/extension-highlight": "2.26.1",
|
||||
@@ -71,7 +71,7 @@
|
||||
"clsx": "^2.1.1",
|
||||
"dayjs": "^1.11.13",
|
||||
"mantine-react-table": "2.0.0-beta.9",
|
||||
"next": "15.4.2",
|
||||
"next": "15.4.4",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-markdown": "^10.1.0",
|
||||
|
||||
@@ -53,6 +53,7 @@ export const CalendarEventList = ({ events }: CalendarEventListProps) => {
|
||||
pos={"absolute"}
|
||||
bottom={-6}
|
||||
left={"50%"}
|
||||
w={"inherit"}
|
||||
className={classes.badge}
|
||||
>{`S${event.mediaInformation.seasonNumber} / E${event.mediaInformation.episodeNumber}`}</Badge>
|
||||
)}
|
||||
@@ -78,9 +79,11 @@ export const CalendarEventList = ({ events }: CalendarEventListProps) => {
|
||||
</Text>
|
||||
</Group>
|
||||
) : (
|
||||
<Group gap={3} wrap="nowrap">
|
||||
<Group gap={3} wrap="nowrap" align={"center"}>
|
||||
<IconClock opacity={0.7} size={"1rem"} />
|
||||
<Text c={"dimmed"}>{dayjs(event.date).format("HH:mm")}</Text>
|
||||
<Text c={"dimmed"} size={"sm"}>
|
||||
{dayjs(event.date).format("HH:mm")}
|
||||
</Text>
|
||||
</Group>
|
||||
)}
|
||||
</Group>
|
||||
|
||||
683
pnpm-lock.yaml
generated
683
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -17,14 +17,14 @@
|
||||
},
|
||||
"prettier": "@homarr/prettier-config",
|
||||
"dependencies": {
|
||||
"@next/eslint-plugin-next": "15.4.2",
|
||||
"@next/eslint-plugin-next": "15.4.4",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-config-turbo": "^2.5.5",
|
||||
"eslint-plugin-import": "^2.32.0",
|
||||
"eslint-plugin-jsx-a11y": "^6.10.2",
|
||||
"eslint-plugin-react": "^7.37.5",
|
||||
"eslint-plugin-react-hooks": "^5.2.0",
|
||||
"typescript-eslint": "^8.37.0"
|
||||
"typescript-eslint": "^8.38.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@homarr/prettier-config": "workspace:^0.1.0",
|
||||
|
||||
Reference in New Issue
Block a user