mirror of
https://github.com/morpheus65535/bazarr
synced 2025-02-20 13:07:03 +00:00
Merge remote-tracking branch 'origin/development' into development
This commit is contained in:
commit
1c25d125d3
15 changed files with 105 additions and 82 deletions
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -77,7 +77,7 @@ const ItemEditForm: FunctionComponent<Props> = ({
|
|||
{...profileOptions}
|
||||
{...form.getInputProps("profile")}
|
||||
clearable
|
||||
label="Languages Profiles"
|
||||
label="Languages Profile"
|
||||
></Selector>
|
||||
<Divider></Divider>
|
||||
<Group position="right">
|
||||
|
|
|
@ -64,6 +64,7 @@ function ManualSearchView<T extends SupportType>(props: Props<T>) {
|
|||
},
|
||||
},
|
||||
{
|
||||
Header: "Language",
|
||||
accessor: "language",
|
||||
Cell: ({ row: { original }, value }) => {
|
||||
const lang: Language.Info = {
|
||||
|
@ -137,7 +138,7 @@ function ManualSearchView<T extends SupportType>(props: Props<T>) {
|
|||
},
|
||||
},
|
||||
{
|
||||
Header: "Upload",
|
||||
Header: "Uploader",
|
||||
accessor: "uploader",
|
||||
Cell: ({ value }) => {
|
||||
const { classes } = useTableStyles();
|
||||
|
@ -145,6 +146,7 @@ function ManualSearchView<T extends SupportType>(props: Props<T>) {
|
|||
},
|
||||
},
|
||||
{
|
||||
Header: "Match",
|
||||
accessor: "matches",
|
||||
Cell: (row) => {
|
||||
const { matches, dont_matches: dont } = row.row.original;
|
||||
|
@ -158,6 +160,7 @@ function ManualSearchView<T extends SupportType>(props: Props<T>) {
|
|||
},
|
||||
},
|
||||
{
|
||||
Header: "Get",
|
||||
accessor: "subtitle",
|
||||
Cell: ({ row }) => {
|
||||
const result = row.original;
|
||||
|
|
|
@ -221,10 +221,10 @@ const Table: FunctionComponent<Props> = ({
|
|||
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);
|
||||
|
|
|
@ -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 (
|
||||
<TextPopover text="This Subtitles File Is Eligible For An Upgrade.">
|
||||
<TextPopover text="This Subtitle File Is Eligible For An Upgrade.">
|
||||
<FontAwesomeIcon size="sm" icon={faRecycle}></FontAwesomeIcon>
|
||||
</TextPopover>
|
||||
);
|
||||
|
@ -114,6 +117,7 @@ const MoviesHistoryView: FunctionComponent = () => {
|
|||
},
|
||||
},
|
||||
{
|
||||
Header: "Blacklist",
|
||||
accessor: "blacklisted",
|
||||
Cell: ({ row, value }) => {
|
||||
const add = useMovieAddBlacklist();
|
||||
|
|
|
@ -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 (
|
||||
<TextPopover text="This Subtitles File Is Eligible For An Upgrade.">
|
||||
<TextPopover text="This Subtitle File Is Eligible For An Upgrade.">
|
||||
<FontAwesomeIcon size="sm" icon={faRecycle}></FontAwesomeIcon>
|
||||
</TextPopover>
|
||||
);
|
||||
|
@ -130,6 +133,7 @@ const SeriesHistoryView: FunctionComponent = () => {
|
|||
},
|
||||
},
|
||||
{
|
||||
Header: "Blacklist",
|
||||
accessor: "blacklisted",
|
||||
Cell: ({ row, value }) => {
|
||||
const {
|
||||
|
|
|
@ -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 <AudioList audios={value}></AudioList>;
|
||||
},
|
||||
},
|
||||
{
|
||||
Header: "Languages Profile",
|
||||
accessor: "profileId",
|
||||
|
|
|
@ -102,7 +102,7 @@ const SettingsLanguagesView: FunctionComponent = () => {
|
|||
<Selector
|
||||
clearable
|
||||
settingKey={defaultUndEmbeddedSubtitlesLang}
|
||||
label="Treat unknown language embedded subtitles track as (changing this will trigger full subtitles indexation using cache)"
|
||||
label="Treat unknown language embedded subtitles track as (changing this will trigger full subtitles indexing using cache)"
|
||||
placeholder="Select languages"
|
||||
options={undEmbeddedSubtitlesLanguages.map((v) => {
|
||||
return { label: v.name, value: v.code2 };
|
||||
|
@ -112,7 +112,7 @@ const SettingsLanguagesView: FunctionComponent = () => {
|
|||
}}
|
||||
></Selector>
|
||||
</Section>
|
||||
<Section header="Languages Profiles">
|
||||
<Section header="Languages Profile">
|
||||
<Table></Table>
|
||||
</Section>
|
||||
<Section header="Default Settings">
|
||||
|
@ -121,7 +121,7 @@ const SettingsLanguagesView: FunctionComponent = () => {
|
|||
settingKey="settings-general-serie_default_enabled"
|
||||
></Check>
|
||||
<Message>
|
||||
Apply only to Series added to Bazarr after enabling this option.
|
||||
Will apply only to Series added to Bazarr after enabling this option.
|
||||
</Message>
|
||||
|
||||
<CollapseBox indent settingKey="settings-general-serie_default_enabled">
|
||||
|
@ -137,7 +137,7 @@ const SettingsLanguagesView: FunctionComponent = () => {
|
|||
settingKey="settings-general-movie_default_enabled"
|
||||
></Check>
|
||||
<Message>
|
||||
Apply only to Movies added to Bazarr after enabling this option.
|
||||
Will apply only to Movies added to Bazarr after enabling this option.
|
||||
</Message>
|
||||
|
||||
<CollapseBox indent settingKey="settings-general-movie_default_enabled">
|
||||
|
|
|
@ -33,12 +33,13 @@ export const folderOptions: SelectorOption<string>[] = [
|
|||
|
||||
export const embeddedSubtitlesParserOption: SelectorOption<string>[] = [
|
||||
{
|
||||
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",
|
||||
},
|
||||
];
|
||||
|
|
|
@ -33,7 +33,7 @@ const Table: FunctionComponent<Props> = ({ announcements }) => {
|
|||
},
|
||||
},
|
||||
{
|
||||
Header: "More info",
|
||||
Header: "More Info",
|
||||
accessor: "link",
|
||||
Cell: ({ value }) => {
|
||||
if (value) {
|
||||
|
|
|
@ -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<Props> = ({ backups }) => {
|
||||
const columns: Column<System.Backups>[] = useMemo<Column<System.Backups>[]>(
|
||||
() => [
|
||||
{
|
||||
accessor: "type",
|
||||
Cell: <FontAwesomeIcon icon={faClock}></FontAwesomeIcon>,
|
||||
},
|
||||
{
|
||||
Header: "Name",
|
||||
accessor: "filename",
|
||||
|
@ -50,52 +45,61 @@ const Table: FunctionComponent<Props> = ({ backups }) => {
|
|||
},
|
||||
},
|
||||
{
|
||||
id: "actions",
|
||||
id: "restore",
|
||||
Header: "Restore",
|
||||
accessor: "filename",
|
||||
Cell: ({ value }) => {
|
||||
const modals = useModals();
|
||||
const restore = useRestoreBackups();
|
||||
return (
|
||||
<Action
|
||||
label="Restore"
|
||||
onClick={() =>
|
||||
modals.openConfirmModal({
|
||||
title: "Restore Backup",
|
||||
children: (
|
||||
<Text size="sm">
|
||||
Are you sure you want to restore the backup ({value})?
|
||||
Bazarr will automatically restart and reload the UI during
|
||||
the restore process.
|
||||
</Text>
|
||||
),
|
||||
labels: { confirm: "Restore", cancel: "Cancel" },
|
||||
confirmProps: { color: "red" },
|
||||
onConfirm: () => restore.mutate(value),
|
||||
})
|
||||
}
|
||||
icon={faHistory}
|
||||
></Action>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "delet4",
|
||||
Header: "Delete",
|
||||
accessor: "filename",
|
||||
Cell: ({ value }) => {
|
||||
const modals = useModals();
|
||||
const remove = useDeleteBackups();
|
||||
return (
|
||||
<Group spacing="xs" noWrap>
|
||||
<Action
|
||||
label="Restore"
|
||||
onClick={() =>
|
||||
modals.openConfirmModal({
|
||||
title: "Restore Backup",
|
||||
children: (
|
||||
<Text size="sm">
|
||||
Are you sure you want to restore the backup ({value})?
|
||||
Bazarr will automatically restart and reload the UI
|
||||
during the restore process.
|
||||
</Text>
|
||||
),
|
||||
labels: { confirm: "Restore", cancel: "Cancel" },
|
||||
confirmProps: { color: "red" },
|
||||
onConfirm: () => restore.mutate(value),
|
||||
})
|
||||
}
|
||||
icon={faHistory}
|
||||
></Action>
|
||||
<Action
|
||||
label="Delete"
|
||||
color="red"
|
||||
onClick={() =>
|
||||
modals.openConfirmModal({
|
||||
title: "Delete Backup",
|
||||
children: (
|
||||
<Text size="sm">
|
||||
Are you sure you want to delete the backup ({value})?
|
||||
</Text>
|
||||
),
|
||||
labels: { confirm: "Delete", cancel: "Cancel" },
|
||||
confirmProps: { color: "red" },
|
||||
onConfirm: () => remove.mutate(value),
|
||||
})
|
||||
}
|
||||
icon={faTrash}
|
||||
></Action>
|
||||
</Group>
|
||||
<Action
|
||||
label="Delete"
|
||||
color="red"
|
||||
onClick={() =>
|
||||
modals.openConfirmModal({
|
||||
title: "Delete Backup",
|
||||
children: (
|
||||
<Text size="sm">
|
||||
Are you sure you want to delete the backup ({value})?
|
||||
</Text>
|
||||
),
|
||||
labels: { confirm: "Delete", cancel: "Cancel" },
|
||||
confirmProps: { color: "red" },
|
||||
onConfirm: () => remove.mutate(value),
|
||||
})
|
||||
}
|
||||
icon={faTrash}
|
||||
></Action>
|
||||
);
|
||||
},
|
||||
},
|
||||
|
|
|
@ -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 (
|
||||
<Grid>
|
||||
<Grid.Col span={5}>
|
||||
<Text weight="bold">{title}</Text>
|
||||
<Grid columns={10}>
|
||||
<Grid.Col span={2}>
|
||||
<Text size="sm" align="right" weight="bold">
|
||||
{title}
|
||||
</Text>
|
||||
</Grid.Col>
|
||||
<Grid.Col span={12 - 5}>
|
||||
<Text>{children}</Text>
|
||||
<Grid.Col span={3}>
|
||||
<Text size="sm"> {children}</Text>
|
||||
</Grid.Col>
|
||||
</Grid>
|
||||
);
|
||||
|
@ -68,9 +78,13 @@ const InfoContainer: FunctionComponent<
|
|||
> = ({ title, children }) => {
|
||||
return (
|
||||
<Stack>
|
||||
<h4>{title}</h4>
|
||||
<Divider></Divider>
|
||||
<Divider
|
||||
labelProps={{ size: "medium", weight: "bold" }}
|
||||
labelPosition="left"
|
||||
label={title}
|
||||
></Divider>
|
||||
{children}
|
||||
<Space />
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -35,6 +35,7 @@ const Table: FunctionComponent<Props> = ({ 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<Props> = ({ tasks }) => {
|
|||
|
||||
return (
|
||||
<MutateAction
|
||||
label="Run"
|
||||
label="Run Job"
|
||||
icon={faPlay}
|
||||
iconProps={{ spin: value }}
|
||||
mutation={runTask}
|
||||
|
|
Loading…
Reference in a new issue