diff --git a/bazarr/radarr/rootfolder.py b/bazarr/radarr/rootfolder.py index 477c32845..e0dabc55f 100644 --- a/bazarr/radarr/rootfolder.py +++ b/bazarr/radarr/rootfolder.py @@ -75,8 +75,8 @@ def check_radarr_rootfolder(): if not os.path.isdir(path_mappings.path_replace_movie(root_path)): database.execute( update(TableMoviesRootfolder) - .values(accessible=0, error='This Radarr root directory does not seems to be accessible by Please ' - 'check path mapping.') + .values(accessible=0, error='This Radarr root directory does not seem to be accessible by Bazarr. ' + 'Please check path mapping or if directory/drive is online.') .where(TableMoviesRootfolder.id == item.id)) elif not os.access(path_mappings.path_replace_movie(root_path), os.W_OK): database.execute( diff --git a/bazarr/sonarr/rootfolder.py b/bazarr/sonarr/rootfolder.py index aa4c8f88d..75afda9b7 100644 --- a/bazarr/sonarr/rootfolder.py +++ b/bazarr/sonarr/rootfolder.py @@ -75,8 +75,8 @@ def check_sonarr_rootfolder(): if not os.path.isdir(path_mappings.path_replace(root_path)): database.execute( update(TableShowsRootfolder) - .values(accessible=0, error='This Sonarr root directory does not seems to be accessible by Bazarr. ' - 'Please check path mapping.') + .values(accessible=0, error='This Sonarr root directory does not seem to be accessible by Bazarr. ' + 'Please check path mapping or if directory/drive is online.') .where(TableShowsRootfolder.id == item.id)) elif not os.access(path_mappings.path_replace(root_path), os.W_OK): database.execute( diff --git a/custom_libs/subliminal_patch/providers/whisperai.py b/custom_libs/subliminal_patch/providers/whisperai.py index 1d47057e6..dfd733da3 100644 --- a/custom_libs/subliminal_patch/providers/whisperai.py +++ b/custom_libs/subliminal_patch/providers/whisperai.py @@ -227,7 +227,7 @@ class WhisperAIProvider(Provider): if not ffmpeg_path: raise ConfigurationError("ffmpeg path must be provided") - self.endpoint = endpoint + self.endpoint = endpoint.rstrip("/") self.response = int(response) self.timeout = int(timeout) self.session = None diff --git a/frontend/src/components/forms/ItemEditForm.tsx b/frontend/src/components/forms/ItemEditForm.tsx index a51d63f54..9f3856d54 100644 --- a/frontend/src/components/forms/ItemEditForm.tsx +++ b/frontend/src/components/forms/ItemEditForm.tsx @@ -77,7 +77,7 @@ const ItemEditForm: FunctionComponent = ({ {...profileOptions} {...form.getInputProps("profile")} clearable - label="Languages Profiles" + label="Languages Profile" > diff --git a/frontend/src/components/modals/ManualSearchModal.tsx b/frontend/src/components/modals/ManualSearchModal.tsx index 0dc0f1347..24799130d 100644 --- a/frontend/src/components/modals/ManualSearchModal.tsx +++ b/frontend/src/components/modals/ManualSearchModal.tsx @@ -64,6 +64,7 @@ function ManualSearchView(props: Props) { }, }, { + Header: "Language", accessor: "language", Cell: ({ row: { original }, value }) => { const lang: Language.Info = { @@ -137,7 +138,7 @@ function ManualSearchView(props: Props) { }, }, { - Header: "Upload", + Header: "Uploader", accessor: "uploader", Cell: ({ value }) => { const { classes } = useTableStyles(); @@ -145,6 +146,7 @@ function ManualSearchView(props: Props) { }, }, { + Header: "Match", accessor: "matches", Cell: (row) => { const { matches, dont_matches: dont } = row.row.original; @@ -158,6 +160,7 @@ function ManualSearchView(props: Props) { }, }, { + Header: "Get", accessor: "subtitle", Cell: ({ row }) => { const result = row.original; diff --git a/frontend/src/pages/Episodes/table.tsx b/frontend/src/pages/Episodes/table.tsx index 8cf02672e..5a310c359 100644 --- a/frontend/src/pages/Episodes/table.tsx +++ b/frontend/src/pages/Episodes/table.tsx @@ -221,10 +221,10 @@ const Table: FunctionComponent = ({ useEffect(() => { if (instance.current) { if (initial) { + // start with all rows collapsed + instance.current.toggleAllRowsExpanded(false); // expand the last/current season on initial display instance.current.toggleRowExpanded([`season:${maxSeason}`], true); - // make sure season 0 is collapsed - instance.current.toggleRowExpanded([`season:0`], false); } else { if (expand !== undefined) { instance.current.toggleAllRowsExpanded(expand); diff --git a/frontend/src/pages/History/Movies/index.tsx b/frontend/src/pages/History/Movies/index.tsx index f82863cfc..ee4e98df0 100644 --- a/frontend/src/pages/History/Movies/index.tsx +++ b/frontend/src/pages/History/Movies/index.tsx @@ -58,6 +58,7 @@ const MoviesHistoryView: FunctionComponent = () => { accessor: "score", }, { + Header: "Match", accessor: "matches", Cell: (row) => { const { matches, dont_matches: dont } = row.row.original; @@ -90,6 +91,7 @@ const MoviesHistoryView: FunctionComponent = () => { }, }, { + Header: "Info", accessor: "description", Cell: ({ value }) => { return ( @@ -100,11 +102,12 @@ const MoviesHistoryView: FunctionComponent = () => { }, }, { + Header: "Upgrade", accessor: "upgradable", Cell: (row) => { if (row.value) { return ( - + ); @@ -114,6 +117,7 @@ const MoviesHistoryView: FunctionComponent = () => { }, }, { + Header: "Blacklist", accessor: "blacklisted", Cell: ({ row, value }) => { const add = useMovieAddBlacklist(); diff --git a/frontend/src/pages/History/Series/index.tsx b/frontend/src/pages/History/Series/index.tsx index ceea28299..d6b1469bf 100644 --- a/frontend/src/pages/History/Series/index.tsx +++ b/frontend/src/pages/History/Series/index.tsx @@ -74,6 +74,7 @@ const SeriesHistoryView: FunctionComponent = () => { accessor: "score", }, { + Header: "Match", accessor: "matches", Cell: (row) => { const { matches, dont_matches: dont } = row.row.original; @@ -106,6 +107,7 @@ const SeriesHistoryView: FunctionComponent = () => { }, }, { + Header: "Info", accessor: "description", Cell: ({ row, value }) => { return ( @@ -116,11 +118,12 @@ const SeriesHistoryView: FunctionComponent = () => { }, }, { + Header: "Upgrade", accessor: "upgradable", Cell: (row) => { if (row.value) { return ( - + ); @@ -130,6 +133,7 @@ const SeriesHistoryView: FunctionComponent = () => { }, }, { + Header: "Blacklist", accessor: "blacklisted", Cell: ({ row, value }) => { const { diff --git a/frontend/src/pages/Series/index.tsx b/frontend/src/pages/Series/index.tsx index 139ad3a46..66921347c 100644 --- a/frontend/src/pages/Series/index.tsx +++ b/frontend/src/pages/Series/index.tsx @@ -1,6 +1,5 @@ import { useSeriesModification, useSeriesPagination } from "@/apis/hooks"; import { Action } from "@/components"; -import { AudioList } from "@/components/bazarr"; import LanguageProfileName from "@/components/bazarr/LanguageProfile"; import { ItemEditModal } from "@/components/forms/ItemEditForm"; import { useModals } from "@/modules/modals"; @@ -44,13 +43,6 @@ const SeriesView: FunctionComponent = () => { ); }, }, - { - Header: "Audio", - accessor: "audio_language", - Cell: ({ value }) => { - return ; - }, - }, { Header: "Languages Profile", accessor: "profileId", diff --git a/frontend/src/pages/Settings/Languages/index.tsx b/frontend/src/pages/Settings/Languages/index.tsx index 762174133..61733c992 100644 --- a/frontend/src/pages/Settings/Languages/index.tsx +++ b/frontend/src/pages/Settings/Languages/index.tsx @@ -102,7 +102,7 @@ const SettingsLanguagesView: FunctionComponent = () => { { return { label: v.name, value: v.code2 }; @@ -112,7 +112,7 @@ const SettingsLanguagesView: FunctionComponent = () => { }} > -
+
@@ -121,7 +121,7 @@ const SettingsLanguagesView: FunctionComponent = () => { settingKey="settings-general-serie_default_enabled" > - Apply only to Series added to Bazarr after enabling this option. + Will apply only to Series added to Bazarr after enabling this option. @@ -137,7 +137,7 @@ const SettingsLanguagesView: FunctionComponent = () => { settingKey="settings-general-movie_default_enabled" > - Apply only to Movies added to Bazarr after enabling this option. + Will apply only to Movies added to Bazarr after enabling this option. diff --git a/frontend/src/pages/Settings/Subtitles/options.ts b/frontend/src/pages/Settings/Subtitles/options.ts index d38133133..75fc4b027 100644 --- a/frontend/src/pages/Settings/Subtitles/options.ts +++ b/frontend/src/pages/Settings/Subtitles/options.ts @@ -33,12 +33,13 @@ export const folderOptions: SelectorOption[] = [ export const embeddedSubtitlesParserOption: SelectorOption[] = [ { - label: "ffprobe (faster)", + label: + "ffprobe (faster than mediainfo. Part of Bazarr installation already)", value: "ffprobe", }, { label: - "mediainfo (slower but may give better results. Must be already installed)", + "mediainfo (slower but may give better results. User must install the mediainfo executable first)", value: "mediainfo", }, ]; diff --git a/frontend/src/pages/System/Announcements/table.tsx b/frontend/src/pages/System/Announcements/table.tsx index 2d9037b20..74a160190 100644 --- a/frontend/src/pages/System/Announcements/table.tsx +++ b/frontend/src/pages/System/Announcements/table.tsx @@ -33,7 +33,7 @@ const Table: FunctionComponent = ({ announcements }) => { }, }, { - Header: "More info", + Header: "More Info", accessor: "link", Cell: ({ value }) => { if (value) { diff --git a/frontend/src/pages/System/Backups/table.tsx b/frontend/src/pages/System/Backups/table.tsx index d0570da40..4f9eeae44 100644 --- a/frontend/src/pages/System/Backups/table.tsx +++ b/frontend/src/pages/System/Backups/table.tsx @@ -3,9 +3,8 @@ import { Action, PageTable } from "@/components"; import { useModals } from "@/modules/modals"; import { useTableStyles } from "@/styles"; import { Environment } from "@/utilities"; -import { faClock, faHistory, faTrash } from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { Anchor, Group, Text } from "@mantine/core"; +import { faHistory, faTrash } from "@fortawesome/free-solid-svg-icons"; +import { Anchor, Text } from "@mantine/core"; import { FunctionComponent, useMemo } from "react"; import { Column } from "react-table"; @@ -16,10 +15,6 @@ interface Props { const Table: FunctionComponent = ({ backups }) => { const columns: Column[] = useMemo[]>( () => [ - { - accessor: "type", - Cell: , - }, { Header: "Name", accessor: "filename", @@ -50,52 +45,61 @@ const Table: FunctionComponent = ({ backups }) => { }, }, { - id: "actions", + id: "restore", + Header: "Restore", accessor: "filename", Cell: ({ value }) => { const modals = useModals(); const restore = useRestoreBackups(); + return ( + + modals.openConfirmModal({ + title: "Restore Backup", + children: ( + + Are you sure you want to restore the backup ({value})? + Bazarr will automatically restart and reload the UI during + the restore process. + + ), + labels: { confirm: "Restore", cancel: "Cancel" }, + confirmProps: { color: "red" }, + onConfirm: () => restore.mutate(value), + }) + } + icon={faHistory} + > + ); + }, + }, + { + id: "delet4", + Header: "Delete", + accessor: "filename", + Cell: ({ value }) => { + const modals = useModals(); const remove = useDeleteBackups(); return ( - - - modals.openConfirmModal({ - title: "Restore Backup", - children: ( - - Are you sure you want to restore the backup ({value})? - Bazarr will automatically restart and reload the UI - during the restore process. - - ), - labels: { confirm: "Restore", cancel: "Cancel" }, - confirmProps: { color: "red" }, - onConfirm: () => restore.mutate(value), - }) - } - icon={faHistory} - > - - modals.openConfirmModal({ - title: "Delete Backup", - children: ( - - Are you sure you want to delete the backup ({value})? - - ), - labels: { confirm: "Delete", cancel: "Cancel" }, - confirmProps: { color: "red" }, - onConfirm: () => remove.mutate(value), - }) - } - icon={faTrash} - > - + + modals.openConfirmModal({ + title: "Delete Backup", + children: ( + + Are you sure you want to delete the backup ({value})? + + ), + labels: { confirm: "Delete", cancel: "Cancel" }, + confirmProps: { color: "red" }, + onConfirm: () => remove.mutate(value), + }) + } + icon={faTrash} + > ); }, }, diff --git a/frontend/src/pages/System/Status/index.tsx b/frontend/src/pages/System/Status/index.tsx index ebb5d03d8..80757c4c7 100644 --- a/frontend/src/pages/System/Status/index.tsx +++ b/frontend/src/pages/System/Status/index.tsx @@ -10,7 +10,15 @@ import { } from "@fortawesome/free-brands-svg-icons"; import { faCode, faPaperPlane } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { Anchor, Container, Divider, Grid, Stack, Text } from "@mantine/core"; +import { + Anchor, + Container, + Divider, + Grid, + Space, + Stack, + Text, +} from "@mantine/core"; import { useDocumentTitle } from "@mantine/hooks"; import moment from "moment"; import { @@ -30,12 +38,14 @@ interface InfoProps { function Row(props: InfoProps): JSX.Element { const { title, children } = props; return ( - - - {title} + + + + {title} + - - {children} + + {children} ); @@ -68,9 +78,13 @@ const InfoContainer: FunctionComponent< > = ({ title, children }) => { return ( -

{title}

- + {children} +
); }; diff --git a/frontend/src/pages/System/Tasks/table.tsx b/frontend/src/pages/System/Tasks/table.tsx index 38ea5b5e0..ea45af49d 100644 --- a/frontend/src/pages/System/Tasks/table.tsx +++ b/frontend/src/pages/System/Tasks/table.tsx @@ -35,6 +35,7 @@ const Table: FunctionComponent = ({ tasks }) => { accessor: "next_run_in", }, { + Header: "Run", accessor: "job_running", Cell: ({ row, value }) => { const { job_id: jobId } = row.original; @@ -42,7 +43,7 @@ const Table: FunctionComponent = ({ tasks }) => { return (