diff --git a/cmd/worker/main.go b/cmd/worker/main.go index 2db28a0b..879e0b10 100644 --- a/cmd/worker/main.go +++ b/cmd/worker/main.go @@ -84,6 +84,7 @@ func main() { VideoPostProcessWorkers: envConfig.MaxVideoConvertExecutions, ChatDownloadWorkers: envConfig.MaxChatDownloadExecutions, ChatRenderWorkers: envConfig.MaxChatRenderExecutions, + SpriteThumbnailWorkers: envConfig.MaxVideoSpriteThumbnailExecutions, }) if err != nil { log.Panic().Err(err).Msg("Error creating river worker") diff --git a/frontend/app/admin/blocked-videos/page.tsx b/frontend/app/admin/blocked-videos/page.tsx index c7d2648b..a5bc6aa8 100644 --- a/frontend/app/admin/blocked-videos/page.tsx +++ b/frontend/app/admin/blocked-videos/page.tsx @@ -74,6 +74,11 @@ const AdminBlockedVideosPage = () => { openDeleteModal() }; + const handleMultiDeleteModalCallback = () => { + closeMultiDeleteModal() + setActiveBlockedVideos([]) + } + if (isPending) return ( ) @@ -189,7 +194,7 @@ const AdminBlockedVideosPage = () => { {activeBlockedVideos && ( - + )} diff --git a/frontend/app/admin/queue/page.tsx b/frontend/app/admin/queue/page.tsx index c7bfaee7..dbcde84d 100644 --- a/frontend/app/admin/queue/page.tsx +++ b/frontend/app/admin/queue/page.tsx @@ -78,6 +78,11 @@ const AdminQueuePage = () => { openDeleteModal() }; + const handleMultiDeleteModalCallback = () => { + closeMultiDeleteModal() + setActiveQueueItems([]) + } + if (isPending) return ( ) @@ -249,7 +254,7 @@ const AdminQueuePage = () => { {activeQueueItems && ( - + )} diff --git a/frontend/app/admin/settings/page.tsx b/frontend/app/admin/settings/page.tsx index c487d2b8..176e4cd2 100644 --- a/frontend/app/admin/settings/page.tsx +++ b/frontend/app/admin/settings/page.tsx @@ -2,7 +2,7 @@ import GanymedeLoadingText from "@/app/components/utils/GanymedeLoadingText" import { useAxiosPrivate } from "@/app/hooks/useAxios" import { Config, NotificationType, ProxyListItem, useEditConfig, useGetConfig, useTestNotification } from "@/app/hooks/useConfig" -import { ActionIcon, Button, Card, Checkbox, Code, Collapse, Container, Flex, MultiSelect, Text, Textarea, TextInput, Title } from "@mantine/core" +import { ActionIcon, Button, Card, Checkbox, Code, Collapse, Container, Flex, MultiSelect, NumberInput, Text, Textarea, TextInput, Title } from "@mantine/core" import { useForm } from "@mantine/form" import { useDisclosure } from "@mantine/hooks" import Link from "next/link" @@ -35,6 +35,8 @@ const AdminSettingsPage = () => { const form = useForm({ mode: "controlled", initialValues: { + live_check_interval_seconds: data?.live_check_interval_seconds || 300, + video_check_interval_minutes: data?.video_check_interval_minutes || 180, registration_enabled: data?.registration_enabled ?? true, parameters: { twitch_token: data?.parameters.twitch_token || "", @@ -44,6 +46,7 @@ const AdminSettingsPage = () => { }, archive: { save_as_hls: data?.archive.save_as_hls ?? false, + generate_sprite_thumbnails: data?.archive.generate_sprite_thumbnails ?? true }, notifications: { video_success_webhook_url: data?.notifications.video_success_webhook_url || "", @@ -338,14 +341,43 @@ const AdminSettingsPage = () => { Archive - + + + + + + +