mirror of
https://github.com/lidarr/lidarr.git
synced 2025-07-14 00:53:57 -07:00
parent
651a4358fc
commit
000ccf78ad
75 changed files with 665 additions and 461 deletions
|
@ -108,14 +108,14 @@ class EditAlbumModalContent extends Component {
|
|||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerButton
|
||||
isSpinning={isSaving}
|
||||
onPress={this.onSavePress}
|
||||
>
|
||||
Save
|
||||
{translate('Save')}
|
||||
</SpinnerButton>
|
||||
</ModalFooter>
|
||||
|
||||
|
|
|
@ -32,13 +32,13 @@ const columns = [
|
|||
},
|
||||
{
|
||||
name: 'sortName',
|
||||
label: 'Name',
|
||||
label: translate('Name'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'albumCount',
|
||||
label: 'Albums',
|
||||
label: translate('Albums'),
|
||||
isSortable: false,
|
||||
isVisible: true
|
||||
}
|
||||
|
|
|
@ -211,14 +211,14 @@ class EditArtistModalContent extends Component {
|
|||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerButton
|
||||
isSpinning={isSaving}
|
||||
onPress={this.onSavePress}
|
||||
>
|
||||
Save
|
||||
{translate('Save')}
|
||||
</SpinnerButton>
|
||||
</ModalFooter>
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ import ModalContent from 'Components/Modal/ModalContent';
|
|||
import ModalFooter from 'Components/Modal/ModalFooter';
|
||||
import ModalHeader from 'Components/Modal/ModalHeader';
|
||||
import { icons, kinds } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import styles from './RetagArtistModalContent.css';
|
||||
|
||||
function RetagArtistModalContent(props) {
|
||||
|
@ -50,14 +51,14 @@ function RetagArtistModalContent(props) {
|
|||
|
||||
<ModalFooter>
|
||||
<Button onPress={onModalClose}>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
kind={kinds.DANGER}
|
||||
onPress={onRetagArtistPress}
|
||||
>
|
||||
Retag
|
||||
{translate('Retag')}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -9,6 +9,7 @@ import ModalContent from 'Components/Modal/ModalContent';
|
|||
import ModalFooter from 'Components/Modal/ModalFooter';
|
||||
import ModalHeader from 'Components/Modal/ModalHeader';
|
||||
import { inputTypes, kinds } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import styles from './DeleteArtistModalContent.css';
|
||||
|
||||
class DeleteArtistModalContent extends Component {
|
||||
|
@ -51,7 +52,7 @@ class DeleteArtistModalContent extends Component {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Delete Selected Artist
|
||||
{translate('DeleteArtist')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
@ -99,14 +100,14 @@ class DeleteArtistModalContent extends Component {
|
|||
|
||||
<ModalFooter>
|
||||
<Button onPress={onModalClose}>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
kind={kinds.DANGER}
|
||||
onPress={this.onDeleteArtistConfirmed}
|
||||
>
|
||||
Delete
|
||||
{translate('Delete')}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -8,6 +8,7 @@ import ModalContent from 'Components/Modal/ModalContent';
|
|||
import ModalFooter from 'Components/Modal/ModalFooter';
|
||||
import ModalHeader from 'Components/Modal/ModalHeader';
|
||||
import { icons, kinds } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import styles from './OrganizeArtistModalContent.css';
|
||||
|
||||
function OrganizeArtistModalContent(props) {
|
||||
|
@ -20,7 +21,7 @@ function OrganizeArtistModalContent(props) {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Organize Selected Artist
|
||||
{translate('OrganizeArtist')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
@ -51,14 +52,14 @@ function OrganizeArtistModalContent(props) {
|
|||
|
||||
<ModalFooter>
|
||||
<Button onPress={onModalClose}>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
kind={kinds.DANGER}
|
||||
onPress={onOrganizeArtistPress}
|
||||
>
|
||||
Organize
|
||||
{translate('Organize')}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -61,9 +61,9 @@ class TagsModalContent extends Component {
|
|||
} = this.state;
|
||||
|
||||
const applyTagsOptions = [
|
||||
{ key: 'add', value: 'Add' },
|
||||
{ key: 'remove', value: 'Remove' },
|
||||
{ key: 'replace', value: 'Replace' }
|
||||
{ key: 'add', value: translate('Add') },
|
||||
{ key: 'remove', value: translate('Remove') },
|
||||
{ key: 'replace', value: translate('Replace') }
|
||||
];
|
||||
|
||||
return (
|
||||
|
@ -169,14 +169,14 @@ class TagsModalContent extends Component {
|
|||
|
||||
<ModalFooter>
|
||||
<Button onPress={onModalClose}>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
kind={kinds.PRIMARY}
|
||||
onPress={this.onApplyTagsPress}
|
||||
>
|
||||
Apply
|
||||
{translate('Apply')}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -18,32 +18,32 @@ const columns = [
|
|||
},
|
||||
{
|
||||
name: 'album',
|
||||
label: 'Album',
|
||||
label: translate('Album'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'sourceTitle',
|
||||
label: 'Source Title',
|
||||
label: translate('SourceTitle'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'quality',
|
||||
label: 'Quality',
|
||||
label: translate('Quality'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'date',
|
||||
label: 'Date',
|
||||
label: translate('Date'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'details',
|
||||
label: 'Details',
|
||||
label: translate('Details'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'actions',
|
||||
label: 'Actions',
|
||||
label: translate('Actions'),
|
||||
isVisible: true
|
||||
}
|
||||
];
|
||||
|
|
|
@ -21,12 +21,12 @@ import styles from './FileBrowserModalContent.css';
|
|||
const columns = [
|
||||
{
|
||||
name: 'type',
|
||||
label: 'Type',
|
||||
label: translate('Type'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'name',
|
||||
label: 'Name',
|
||||
label: translate('Name'),
|
||||
isVisible: true
|
||||
}
|
||||
];
|
||||
|
@ -226,13 +226,13 @@ class FileBrowserModalContent extends Component {
|
|||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
onPress={this.onOkPress}
|
||||
>
|
||||
Ok
|
||||
{translate('Ok')}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -8,6 +8,7 @@ import ModalContent from 'Components/Modal/ModalContent';
|
|||
import ModalFooter from 'Components/Modal/ModalFooter';
|
||||
import ModalHeader from 'Components/Modal/ModalHeader';
|
||||
import { inputTypes } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import FilterBuilderRow from './FilterBuilderRow';
|
||||
import styles from './FilterBuilderModalContent.css';
|
||||
|
||||
|
@ -151,7 +152,7 @@ class FilterBuilderModalContent extends Component {
|
|||
<ModalBody>
|
||||
<div className={styles.labelContainer}>
|
||||
<div className={styles.label}>
|
||||
Label
|
||||
{translate('Label')}
|
||||
</div>
|
||||
|
||||
<div className={styles.labelInputContainer}>
|
||||
|
@ -165,7 +166,7 @@ class FilterBuilderModalContent extends Component {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div className={styles.label}>Filters</div>
|
||||
<div className={styles.label}>{translate('Filters')}</div>
|
||||
|
||||
<div className={styles.rows}>
|
||||
{
|
||||
|
@ -192,7 +193,7 @@ class FilterBuilderModalContent extends Component {
|
|||
|
||||
<ModalFooter>
|
||||
<Button onPress={onCancelPress}>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerErrorButton
|
||||
|
@ -200,7 +201,7 @@ class FilterBuilderModalContent extends Component {
|
|||
error={saveError}
|
||||
onPress={this.onSaveFilterPress}
|
||||
>
|
||||
Save
|
||||
{translate('Save')}
|
||||
</SpinnerErrorButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -5,6 +5,7 @@ import ModalBody from 'Components/Modal/ModalBody';
|
|||
import ModalContent from 'Components/Modal/ModalContent';
|
||||
import ModalFooter from 'Components/Modal/ModalFooter';
|
||||
import ModalHeader from 'Components/Modal/ModalHeader';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import CustomFilter from './CustomFilter';
|
||||
import styles from './CustomFiltersModalContent.css';
|
||||
|
||||
|
@ -24,7 +25,7 @@ function CustomFiltersModalContent(props) {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Custom Filters
|
||||
{translate('CustomFilters')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
|
|
@ -2,6 +2,7 @@ import PropTypes from 'prop-types';
|
|||
import React from 'react';
|
||||
import Link from 'Components/Link/Link';
|
||||
import { inputTypes } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import AlbumReleaseSelectInputConnector from './AlbumReleaseSelectInputConnector';
|
||||
import AutoCompleteInput from './AutoCompleteInput';
|
||||
import CaptchaInputConnector from './CaptchaInputConnector';
|
||||
|
@ -227,7 +228,7 @@ function FormInputGroup(props) {
|
|||
<Link
|
||||
to={helpLink}
|
||||
>
|
||||
More Info
|
||||
{translate('MoreInfo')}
|
||||
</Link>
|
||||
}
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ import Table from 'Components/Table/Table';
|
|||
import TableBody from 'Components/Table/TableBody';
|
||||
import TableRow from 'Components/Table/TableRow';
|
||||
import tagShape from 'Helpers/Props/Shapes/tagShape';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import getSelectedIds from 'Utilities/Table/getSelectedIds';
|
||||
import selectAll from 'Utilities/Table/selectAll';
|
||||
import toggleSelected from 'Utilities/Table/toggleSelected';
|
||||
|
@ -16,7 +17,7 @@ import styles from './PlaylistInput.css';
|
|||
const columns = [
|
||||
{
|
||||
name: 'name',
|
||||
label: 'Playlist',
|
||||
label: translate('Playlist'),
|
||||
isSortable: false,
|
||||
isVisible: true
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import FilterMenuItem from './FilterMenuItem';
|
||||
import MenuContent from './MenuContent';
|
||||
import MenuItem from './MenuItem';
|
||||
|
@ -61,7 +62,7 @@ class FilterMenuContent extends Component {
|
|||
{
|
||||
showCustomFilters &&
|
||||
<MenuItem onPress={onCustomFiltersPress}>
|
||||
Custom Filters
|
||||
{translate('CustomFilters')}
|
||||
</MenuItem>
|
||||
}
|
||||
</MenuContent>
|
||||
|
|
|
@ -10,6 +10,7 @@ import { icons } from 'Helpers/Props';
|
|||
import locationShape from 'Helpers/Props/Shapes/locationShape';
|
||||
import dimensions from 'Styles/Variables/dimensions';
|
||||
import HealthStatusConnector from 'System/Status/Health/HealthStatusConnector';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import MessagesConnector from './Messages/MessagesConnector';
|
||||
import PageSidebarItem from './PageSidebarItem';
|
||||
import styles from './PageSidebar.css';
|
||||
|
@ -20,24 +21,24 @@ const SIDEBAR_WIDTH = parseInt(dimensions.sidebarWidth);
|
|||
const links = [
|
||||
{
|
||||
iconName: icons.ARTIST_CONTINUING,
|
||||
title: 'Library',
|
||||
title: translate('Library'),
|
||||
to: '/',
|
||||
alias: '/artist',
|
||||
children: [
|
||||
{
|
||||
title: 'Add New',
|
||||
title: translate('AddNew'),
|
||||
to: '/add/search'
|
||||
},
|
||||
{
|
||||
title: 'Mass Editor',
|
||||
title: translate('MassEditor'),
|
||||
to: '/artisteditor'
|
||||
},
|
||||
{
|
||||
title: 'Album Studio',
|
||||
title: translate('AlbumStudio'),
|
||||
to: '/albumstudio'
|
||||
},
|
||||
{
|
||||
title: 'Unmapped Files',
|
||||
title: translate('UnmappedFiles'),
|
||||
to: '/unmapped'
|
||||
}
|
||||
]
|
||||
|
@ -45,26 +46,26 @@ const links = [
|
|||
|
||||
{
|
||||
iconName: icons.CALENDAR,
|
||||
title: 'Calendar',
|
||||
title: translate('Calendar'),
|
||||
to: '/calendar'
|
||||
},
|
||||
|
||||
{
|
||||
iconName: icons.ACTIVITY,
|
||||
title: 'Activity',
|
||||
title: translate('Activity'),
|
||||
to: '/activity/queue',
|
||||
children: [
|
||||
{
|
||||
title: 'Queue',
|
||||
title: translate('Queue'),
|
||||
to: '/activity/queue',
|
||||
statusComponent: QueueStatusConnector
|
||||
},
|
||||
{
|
||||
title: 'History',
|
||||
title: translate('History'),
|
||||
to: '/activity/history'
|
||||
},
|
||||
{
|
||||
title: 'Blocklist',
|
||||
title: translate('Blocklist'),
|
||||
to: '/activity/blocklist'
|
||||
}
|
||||
]
|
||||
|
@ -72,15 +73,15 @@ const links = [
|
|||
|
||||
{
|
||||
iconName: icons.WARNING,
|
||||
title: 'Wanted',
|
||||
title: translate('Wanted'),
|
||||
to: '/wanted/missing',
|
||||
children: [
|
||||
{
|
||||
title: 'Missing',
|
||||
title: translate('Missing'),
|
||||
to: '/wanted/missing'
|
||||
},
|
||||
{
|
||||
title: 'Cutoff Unmet',
|
||||
title: translate('CutoffUnmet'),
|
||||
to: '/wanted/cutoffunmet'
|
||||
}
|
||||
]
|
||||
|
@ -88,51 +89,51 @@ const links = [
|
|||
|
||||
{
|
||||
iconName: icons.SETTINGS,
|
||||
title: 'Settings',
|
||||
title: translate('Settings'),
|
||||
to: '/settings',
|
||||
children: [
|
||||
{
|
||||
title: 'Media Management',
|
||||
title: translate('MediaManagement'),
|
||||
to: '/settings/mediamanagement'
|
||||
},
|
||||
{
|
||||
title: 'Profiles',
|
||||
title: translate('Profiles'),
|
||||
to: '/settings/profiles'
|
||||
},
|
||||
{
|
||||
title: 'Quality',
|
||||
title: translate('Quality'),
|
||||
to: '/settings/quality'
|
||||
},
|
||||
{
|
||||
title: 'Indexers',
|
||||
title: translate('Indexers'),
|
||||
to: '/settings/indexers'
|
||||
},
|
||||
{
|
||||
title: 'Download Clients',
|
||||
title: translate('DownloadClients'),
|
||||
to: '/settings/downloadclients'
|
||||
},
|
||||
{
|
||||
title: 'Import Lists',
|
||||
title: translate('ImportLists'),
|
||||
to: '/settings/importlists'
|
||||
},
|
||||
{
|
||||
title: 'Connect',
|
||||
title: translate('Connect'),
|
||||
to: '/settings/connect'
|
||||
},
|
||||
{
|
||||
title: 'Metadata',
|
||||
title: translate('Metadata'),
|
||||
to: '/settings/metadata'
|
||||
},
|
||||
{
|
||||
title: 'Tags',
|
||||
title: translate('Tags'),
|
||||
to: '/settings/tags'
|
||||
},
|
||||
{
|
||||
title: 'General',
|
||||
title: translate('General'),
|
||||
to: '/settings/general'
|
||||
},
|
||||
{
|
||||
title: 'UI',
|
||||
title: translate('UI'),
|
||||
to: '/settings/ui'
|
||||
}
|
||||
]
|
||||
|
@ -140,32 +141,32 @@ const links = [
|
|||
|
||||
{
|
||||
iconName: icons.SYSTEM,
|
||||
title: 'System',
|
||||
title: translate('System'),
|
||||
to: '/system/status',
|
||||
children: [
|
||||
{
|
||||
title: 'Status',
|
||||
title: translate('Status'),
|
||||
to: '/system/status',
|
||||
statusComponent: HealthStatusConnector
|
||||
},
|
||||
{
|
||||
title: 'Tasks',
|
||||
title: translate('Tasks'),
|
||||
to: '/system/tasks'
|
||||
},
|
||||
{
|
||||
title: 'Backup',
|
||||
title: translate('Backup'),
|
||||
to: '/system/backup'
|
||||
},
|
||||
{
|
||||
title: 'Updates',
|
||||
title: translate('Updates'),
|
||||
to: '/system/updates'
|
||||
},
|
||||
{
|
||||
title: 'Events',
|
||||
title: translate('Events'),
|
||||
to: '/system/events'
|
||||
},
|
||||
{
|
||||
title: 'Log Files',
|
||||
title: translate('LogFiles'),
|
||||
to: '/system/logs/files'
|
||||
}
|
||||
]
|
||||
|
|
|
@ -18,22 +18,22 @@ import styles from './SelectAlbumModalContent.css';
|
|||
const columns = [
|
||||
{
|
||||
name: 'title',
|
||||
label: 'Album Title',
|
||||
label: translate('AlbumTitle'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'albumType',
|
||||
label: 'Album Type',
|
||||
label: translate('AlbumType'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'releaseDate',
|
||||
label: 'Release Date',
|
||||
label: translate('ReleaseDate'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'status',
|
||||
label: 'Album Status',
|
||||
label: translate('AlbumStatus'),
|
||||
isVisible: true
|
||||
}
|
||||
];
|
||||
|
@ -124,7 +124,7 @@ class SelectAlbumModalContent extends Component {
|
|||
|
||||
<ModalFooter>
|
||||
<Button onPress={onModalClose}>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -10,18 +10,19 @@ import Scroller from 'Components/Scroller/Scroller';
|
|||
import Table from 'Components/Table/Table';
|
||||
import TableBody from 'Components/Table/TableBody';
|
||||
import { scrollDirections } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import SelectAlbumReleaseRow from './SelectAlbumReleaseRow';
|
||||
import styles from './SelectAlbumReleaseModalContent.css';
|
||||
|
||||
const columns = [
|
||||
{
|
||||
name: 'album',
|
||||
label: 'Album',
|
||||
label: translate('Album'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'release',
|
||||
label: 'Album Release',
|
||||
label: translate('AlbumRelease'),
|
||||
isVisible: true
|
||||
}
|
||||
];
|
||||
|
@ -42,7 +43,7 @@ class SelectAlbumReleaseModalContent extends Component {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Manual Import - Select Album Release
|
||||
{translate('ManualImport')} - {translate('SelectAlbumRelease')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody
|
||||
|
@ -81,7 +82,7 @@ class SelectAlbumReleaseModalContent extends Component {
|
|||
|
||||
<ModalFooter>
|
||||
<Button onPress={onModalClose}>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -47,7 +47,7 @@ class SelectArtistModalContent extends Component {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Manual Import - Select Artist
|
||||
{translate('ManualImport')} - {translate('SelectArtist')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody
|
||||
|
@ -83,7 +83,7 @@ class SelectArtistModalContent extends Component {
|
|||
|
||||
<ModalFooter>
|
||||
<Button onPress={onModalClose}>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -9,6 +9,7 @@ import ModalContent from 'Components/Modal/ModalContent';
|
|||
import ModalFooter from 'Components/Modal/ModalFooter';
|
||||
import ModalHeader from 'Components/Modal/ModalHeader';
|
||||
import { kinds } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
|
||||
function formatAlbumFiles(items, album) {
|
||||
|
||||
|
@ -73,7 +74,7 @@ class ConfirmImportModalContent extends Component {
|
|||
{
|
||||
!isFetching && isPopulated &&
|
||||
<ModalHeader>
|
||||
Are you sure?
|
||||
{translate('AreYouSure')}
|
||||
</ModalHeader>
|
||||
}
|
||||
|
||||
|
@ -105,14 +106,14 @@ class ConfirmImportModalContent extends Component {
|
|||
!isFetching && isPopulated &&
|
||||
<ModalFooter>
|
||||
<Button onPress={onModalClose}>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
kind={kinds.DANGER}
|
||||
onPress={onConfirmImportPress}
|
||||
>
|
||||
Proceed
|
||||
{translate('Proceed')}
|
||||
</Button>
|
||||
|
||||
</ModalFooter>
|
||||
|
|
|
@ -10,17 +10,18 @@ import ModalHeader from 'Components/Modal/ModalHeader';
|
|||
import Table from 'Components/Table/Table';
|
||||
import TableBody from 'Components/Table/TableBody';
|
||||
import { icons, kinds, sizes } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import RecentFolderRow from './RecentFolderRow';
|
||||
import styles from './InteractiveImportSelectFolderModalContent.css';
|
||||
|
||||
const recentFoldersColumns = [
|
||||
{
|
||||
name: 'folder',
|
||||
label: 'Folder'
|
||||
label: translate('Folder')
|
||||
},
|
||||
{
|
||||
name: 'lastUsed',
|
||||
label: 'Last Used'
|
||||
label: translate('LastUsed')
|
||||
},
|
||||
{
|
||||
name: 'actions',
|
||||
|
@ -75,7 +76,7 @@ class InteractiveImportSelectFolderModalContent extends Component {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Manual Import - Select Folder
|
||||
{translate('ManualImport')} - {translate('SelectFolder')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
@ -124,7 +125,7 @@ class InteractiveImportSelectFolderModalContent extends Component {
|
|||
name={icons.QUICK}
|
||||
/>
|
||||
|
||||
Move Automatically
|
||||
{translate('MoveAutomatically')}
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
|
@ -141,7 +142,7 @@ class InteractiveImportSelectFolderModalContent extends Component {
|
|||
name={icons.INTERACTIVE}
|
||||
/>
|
||||
|
||||
Interactive Import
|
||||
{translate('InteractiveImport')}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -149,7 +150,7 @@ class InteractiveImportSelectFolderModalContent extends Component {
|
|||
|
||||
<ModalFooter>
|
||||
<Button onPress={onModalClose}>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -22,6 +22,7 @@ import SelectArtistModal from 'InteractiveImport/Artist/SelectArtistModal';
|
|||
import ConfirmImportModal from 'InteractiveImport/Confirmation/ConfirmImportModal';
|
||||
import SelectQualityModal from 'InteractiveImport/Quality/SelectQualityModal';
|
||||
import getErrorMessage from 'Utilities/Object/getErrorMessage';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import getSelectedIds from 'Utilities/Table/getSelectedIds';
|
||||
import selectAll from 'Utilities/Table/selectAll';
|
||||
import toggleSelected from 'Utilities/Table/toggleSelected';
|
||||
|
@ -31,35 +32,35 @@ import styles from './InteractiveImportModalContent.css';
|
|||
const columns = [
|
||||
{
|
||||
name: 'path',
|
||||
label: 'Path',
|
||||
label: translate('Path'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'artist',
|
||||
label: 'Artist',
|
||||
label: translate('Artist'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'album',
|
||||
label: 'Album',
|
||||
label: translate('Album'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'tracks',
|
||||
label: 'Track(s)',
|
||||
label: translate('Tracks'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'quality',
|
||||
label: 'Quality',
|
||||
label: translate('Quality'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'size',
|
||||
label: 'Size',
|
||||
label: translate('Size'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
|
@ -80,8 +81,8 @@ const filterExistingFilesOptions = {
|
|||
};
|
||||
|
||||
const importModeOptions = [
|
||||
{ key: 'move', value: 'Move Files' },
|
||||
{ key: 'copy', value: 'Hardlink/Copy Files' }
|
||||
{ key: 'move', value: translate('MoveFiles') },
|
||||
{ key: 'copy', value: translate('HardlinkCopyFiles') }
|
||||
];
|
||||
|
||||
const SELECT = 'select';
|
||||
|
@ -288,23 +289,23 @@ class InteractiveImportModalContent extends Component {
|
|||
const errorMessage = getErrorMessage(error, 'Unable to load manual import items');
|
||||
|
||||
const bulkSelectOptions = [
|
||||
{ key: SELECT, value: 'Select...', disabled: true },
|
||||
{ key: ALBUM, value: 'Select Album' },
|
||||
{ key: ALBUM_RELEASE, value: 'Select Album Release' },
|
||||
{ key: QUALITY, value: 'Select Quality' }
|
||||
{ key: SELECT, value: translate('Select...'), disabled: true },
|
||||
{ key: ALBUM, value: translate('SelectAlbum') },
|
||||
{ key: ALBUM_RELEASE, value: translate('SelectAlbumRelease') },
|
||||
{ key: QUALITY, value: translate('SelectQuality') }
|
||||
];
|
||||
|
||||
if (allowArtistChange) {
|
||||
bulkSelectOptions.splice(1, 0, {
|
||||
key: ARTIST,
|
||||
value: 'Select Artist'
|
||||
value: translate('SelectArtist')
|
||||
});
|
||||
}
|
||||
|
||||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Manual Import - {title || folder}
|
||||
{translate('ManualImport')} - {title || folder}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody scrollDirection={scrollDirections.BOTH}>
|
||||
|
@ -320,7 +321,7 @@ class InteractiveImportModalContent extends Component {
|
|||
|
||||
<div className={styles.filterText}>
|
||||
{
|
||||
filterExistingFiles ? 'Unmapped Files Only' : 'All Files'
|
||||
filterExistingFiles ? translate('UnmappedFilesOnly') : translate('AllFiles')
|
||||
}
|
||||
</div>
|
||||
</MenuButton>
|
||||
|
@ -331,7 +332,7 @@ class InteractiveImportModalContent extends Component {
|
|||
isSelected={!filterExistingFiles}
|
||||
onPress={this.onFilterExistingFilesChange}
|
||||
>
|
||||
All Files
|
||||
{translate('AllFiles')}
|
||||
</SelectedMenuItem>
|
||||
|
||||
<SelectedMenuItem
|
||||
|
@ -339,7 +340,7 @@ class InteractiveImportModalContent extends Component {
|
|||
isSelected={filterExistingFiles}
|
||||
onPress={this.onFilterExistingFilesChange}
|
||||
>
|
||||
Unmapped Files Only
|
||||
{translate('UnmappedFilesOnly')}
|
||||
</SelectedMenuItem>
|
||||
</MenuContent>
|
||||
</Menu>
|
||||
|
@ -366,7 +367,7 @@ class InteractiveImportModalContent extends Component {
|
|||
isSelected={!replaceExistingFiles}
|
||||
onPress={this.onReplaceExistingFilesChange}
|
||||
>
|
||||
Combine With Existing Files
|
||||
{translate('CombineWithExistingFiles')}
|
||||
</SelectedMenuItem>
|
||||
|
||||
<SelectedMenuItem
|
||||
|
@ -374,7 +375,7 @@ class InteractiveImportModalContent extends Component {
|
|||
isSelected={replaceExistingFiles}
|
||||
onPress={this.onReplaceExistingFilesChange}
|
||||
>
|
||||
Replace Existing Files
|
||||
{translate('ReplaceExistingFiles')}
|
||||
</SelectedMenuItem>
|
||||
</MenuContent>
|
||||
</Menu>
|
||||
|
@ -474,7 +475,7 @@ class InteractiveImportModalContent extends Component {
|
|||
|
||||
<div className={styles.rightButtons}>
|
||||
<Button onPress={onModalClose}>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
{
|
||||
|
@ -487,7 +488,7 @@ class InteractiveImportModalContent extends Component {
|
|||
isDisabled={!selectedIds.length || !!invalidRowsSelected.length || inconsistentAlbumReleases}
|
||||
onPress={this.onImportSelectedPress}
|
||||
>
|
||||
Import
|
||||
{translate('Import')}
|
||||
</Button>
|
||||
</div>
|
||||
</ModalFooter>
|
||||
|
|
|
@ -81,7 +81,7 @@ class SelectQualityModalContent extends Component {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Manual Import - Select Quality
|
||||
{translate('ManualImport')} - {translate('SelectQuality')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
@ -145,14 +145,14 @@ class SelectQualityModalContent extends Component {
|
|||
|
||||
<ModalFooter>
|
||||
<Button onPress={onModalClose}>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
kind={kinds.SUCCESS}
|
||||
onPress={this.onQualitySelect}
|
||||
>
|
||||
Select Quality
|
||||
{translate('SelectQuality')}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -12,6 +12,7 @@ import TableBody from 'Components/Table/TableBody';
|
|||
import { kinds } from 'Helpers/Props';
|
||||
import ExpandingFileDetails from 'TrackFile/ExpandingFileDetails';
|
||||
import getErrorMessage from 'Utilities/Object/getErrorMessage';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import getSelectedIds from 'Utilities/Table/getSelectedIds';
|
||||
import selectAll from 'Utilities/Table/selectAll';
|
||||
import toggleSelected from 'Utilities/Table/toggleSelected';
|
||||
|
@ -20,7 +21,7 @@ import SelectTrackRow from './SelectTrackRow';
|
|||
const columns = [
|
||||
{
|
||||
name: 'mediumNumber',
|
||||
label: 'Medium',
|
||||
label: translate('Medium'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
|
@ -32,12 +33,12 @@ const columns = [
|
|||
},
|
||||
{
|
||||
name: 'title',
|
||||
label: 'Title',
|
||||
label: translate('Title'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'trackStatus',
|
||||
label: 'Status',
|
||||
label: translate('Status'),
|
||||
isVisible: true
|
||||
}
|
||||
];
|
||||
|
@ -137,7 +138,7 @@ class SelectTrackModalContent extends Component {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Manual Import - Select Track(s):
|
||||
{translate('ManualImport')} - {translate('SelectTracks')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
@ -201,14 +202,14 @@ class SelectTrackModalContent extends Component {
|
|||
|
||||
<ModalFooter>
|
||||
<Button onPress={onModalClose}>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
kind={kinds.SUCCESS}
|
||||
onPress={this.onTracksSelect}
|
||||
>
|
||||
Select Tracks
|
||||
{translate('SelectTracks')}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -7,6 +7,7 @@ import PageMenuButton from 'Components/Menu/PageMenuButton';
|
|||
import Table from 'Components/Table/Table';
|
||||
import TableBody from 'Components/Table/TableBody';
|
||||
import { align, icons, sortDirections } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import InteractiveSearchFilterModalConnector from './InteractiveSearchFilterModalConnector';
|
||||
import InteractiveSearchRow from './InteractiveSearchRow';
|
||||
import styles from './InteractiveSearch.css';
|
||||
|
@ -14,43 +15,43 @@ import styles from './InteractiveSearch.css';
|
|||
const columns = [
|
||||
{
|
||||
name: 'protocol',
|
||||
label: 'Source',
|
||||
label: translate('Source'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'age',
|
||||
label: 'Age',
|
||||
label: translate('Age'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'title',
|
||||
label: 'Title',
|
||||
label: translate('Title'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'indexer',
|
||||
label: 'Indexer',
|
||||
label: translate('Indexer'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'size',
|
||||
label: 'Size',
|
||||
label: translate('Size'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'peers',
|
||||
label: 'Peers',
|
||||
label: translate('Peers'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'qualityWeight',
|
||||
label: 'Quality',
|
||||
label: translate('Quality'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
|
@ -58,7 +59,7 @@ const columns = [
|
|||
name: 'preferredWordScore',
|
||||
label: React.createElement(Icon, {
|
||||
name: icons.SCORE,
|
||||
title: 'Preferred word score'
|
||||
title: translate('PreferredWordScore')
|
||||
}),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
|
@ -67,7 +68,7 @@ const columns = [
|
|||
name: 'rejections',
|
||||
label: React.createElement(Icon, {
|
||||
name: icons.DANGER,
|
||||
title: 'Rejections'
|
||||
title: translate('rejections')
|
||||
}),
|
||||
isSortable: true,
|
||||
fixedSortDirection: sortDirections.ASCENDING,
|
||||
|
@ -125,7 +126,7 @@ function InteractiveSearch(props) {
|
|||
{
|
||||
!isFetching && error ?
|
||||
<div>
|
||||
Unable to load results for this album search. Try again later
|
||||
{translate('UnableToLoadInteractiveSearch')}
|
||||
</div> :
|
||||
null
|
||||
}
|
||||
|
@ -133,7 +134,7 @@ function InteractiveSearch(props) {
|
|||
{
|
||||
!isFetching && isPopulated && !totalReleasesCount ?
|
||||
<div>
|
||||
No results found
|
||||
{translate('NoResults')}
|
||||
</div> :
|
||||
null
|
||||
}
|
||||
|
@ -141,7 +142,7 @@ function InteractiveSearch(props) {
|
|||
{
|
||||
!!totalReleasesCount && isPopulated && !items.length ?
|
||||
<div>
|
||||
All results are hidden by the applied filter
|
||||
{translate('AllResultsFiltered')}
|
||||
</div> :
|
||||
null
|
||||
}
|
||||
|
@ -177,7 +178,7 @@ function InteractiveSearch(props) {
|
|||
{
|
||||
totalReleasesCount !== items.length && !!items.length ?
|
||||
<div className={styles.filteredMessage}>
|
||||
Some results are hidden by the applied filter
|
||||
{translate('SomeResultsFiltered')}
|
||||
</div> :
|
||||
null
|
||||
}
|
||||
|
|
|
@ -160,14 +160,14 @@ class OrganizePreviewModalContent extends Component {
|
|||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
kind={kinds.PRIMARY}
|
||||
onPress={this.onOrganizePress}
|
||||
>
|
||||
Organize
|
||||
{translate('Organize')}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -89,7 +89,7 @@ class RetagPreviewModalContent extends Component {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Write Metadata Tags
|
||||
{translate('WriteMetadataTags')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
@ -156,14 +156,14 @@ class RetagPreviewModalContent extends Component {
|
|||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
kind={kinds.PRIMARY}
|
||||
onPress={this.onRetagPress}
|
||||
>
|
||||
Retag
|
||||
{translate('Retag')}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -45,7 +45,7 @@ function AdvancedSettingsButton(props) {
|
|||
|
||||
<div className={styles.labelContainer}>
|
||||
<div className={styles.label}>
|
||||
{advancedSettings ? 'Hide Advanced' : 'Show Advanced'}
|
||||
{advancedSettings ? translate('HideAdvanced') : translate('ShowAdvanced')}
|
||||
</div>
|
||||
</div>
|
||||
</Link>
|
||||
|
|
|
@ -5,6 +5,7 @@ import Link from 'Components/Link/Link';
|
|||
import Menu from 'Components/Menu/Menu';
|
||||
import MenuContent from 'Components/Menu/MenuContent';
|
||||
import { sizes } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import AddDownloadClientPresetMenuItem from './AddDownloadClientPresetMenuItem';
|
||||
import styles from './AddDownloadClientItem.css';
|
||||
|
||||
|
@ -57,7 +58,7 @@ class AddDownloadClientItem extends Component {
|
|||
size={sizes.SMALL}
|
||||
onPress={this.onDownloadClientSelect}
|
||||
>
|
||||
Custom
|
||||
{translate('Custom')}
|
||||
</Button>
|
||||
|
||||
<Menu className={styles.presetsMenu}>
|
||||
|
@ -65,7 +66,7 @@ class AddDownloadClientItem extends Component {
|
|||
className={styles.presetsMenuButton}
|
||||
size={sizes.SMALL}
|
||||
>
|
||||
Presets
|
||||
{translate('Presets')}
|
||||
</Button>
|
||||
|
||||
<MenuContent>
|
||||
|
@ -90,7 +91,7 @@ class AddDownloadClientItem extends Component {
|
|||
to={infoLink}
|
||||
size={sizes.SMALL}
|
||||
>
|
||||
More info
|
||||
{translate('MoreInfo')}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -189,7 +189,7 @@ class EditDownloadClientModalContent extends Component {
|
|||
kind={kinds.DANGER}
|
||||
onPress={onDeleteDownloadClientPress}
|
||||
>
|
||||
Delete
|
||||
{translate('Delete')}
|
||||
</Button>
|
||||
}
|
||||
|
||||
|
@ -198,13 +198,13 @@ class EditDownloadClientModalContent extends Component {
|
|||
error={saveError}
|
||||
onPress={onTestPress}
|
||||
>
|
||||
Test
|
||||
{translate('Test')}
|
||||
</SpinnerErrorButton>
|
||||
|
||||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerErrorButton
|
||||
|
@ -212,7 +212,7 @@ class EditDownloadClientModalContent extends Component {
|
|||
error={saveError}
|
||||
onPress={onSavePress}
|
||||
>
|
||||
Save
|
||||
{translate('Save')}
|
||||
</SpinnerErrorButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -41,7 +41,7 @@ function EditRemotePathMappingModalContent(props) {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
{id ? 'Edit Remote Path Mapping' : 'Add Remote Path Mapping'}
|
||||
{id ? translate('EditRemotePathMapping') : translate('AddRemotePathMapping')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody className={styles.body}>
|
||||
|
@ -114,14 +114,14 @@ function EditRemotePathMappingModalContent(props) {
|
|||
kind={kinds.DANGER}
|
||||
onPress={onDeleteRemotePathMappingPress}
|
||||
>
|
||||
Delete
|
||||
{translate('Delete')}
|
||||
</Button>
|
||||
}
|
||||
|
||||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerErrorButton
|
||||
|
@ -129,7 +129,7 @@ function EditRemotePathMappingModalContent(props) {
|
|||
error={saveError}
|
||||
onPress={onSavePress}
|
||||
>
|
||||
Save
|
||||
{translate('Save')}
|
||||
</SpinnerErrorButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -51,9 +51,15 @@ class RemotePathMappings extends Component {
|
|||
{...otherProps}
|
||||
>
|
||||
<div className={styles.remotePathMappingsHeader}>
|
||||
<div className={styles.host}>Host</div>
|
||||
<div className={styles.path}>Remote Path</div>
|
||||
<div className={styles.path}>Local Path</div>
|
||||
<div className={styles.host}>
|
||||
{translate('Host')}
|
||||
</div>
|
||||
<div className={styles.path}>
|
||||
{translate('RemotePath')}
|
||||
</div>
|
||||
<div className={styles.path}>
|
||||
{translate('LocalPath')}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
|
|
@ -39,7 +39,7 @@ function EditImportListExclusionModalContent(props) {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
{id ? 'Edit Import List Exclusion' : 'Add Import List Exclusion'}
|
||||
{id ? translate('EditImportListExclusion') : translate('AddImportListExclusion')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody className={styles.body}>
|
||||
|
@ -99,14 +99,14 @@ function EditImportListExclusionModalContent(props) {
|
|||
kind={kinds.DANGER}
|
||||
onPress={onDeleteImportListExclusionPress}
|
||||
>
|
||||
Delete
|
||||
{translate('Delete')}
|
||||
</Button>
|
||||
}
|
||||
|
||||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerErrorButton
|
||||
|
@ -114,7 +114,7 @@ function EditImportListExclusionModalContent(props) {
|
|||
error={saveError}
|
||||
onPress={onSavePress}
|
||||
>
|
||||
Save
|
||||
{translate('Save')}
|
||||
</SpinnerErrorButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -5,6 +5,7 @@ import Link from 'Components/Link/Link';
|
|||
import Menu from 'Components/Menu/Menu';
|
||||
import MenuContent from 'Components/Menu/MenuContent';
|
||||
import { sizes } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import AddImportListPresetMenuItem from './AddImportListPresetMenuItem';
|
||||
import styles from './AddImportListItem.css';
|
||||
|
||||
|
@ -57,7 +58,7 @@ class AddImportListItem extends Component {
|
|||
size={sizes.SMALL}
|
||||
onPress={this.onListSelect}
|
||||
>
|
||||
Custom
|
||||
{translate('Custom')}
|
||||
</Button>
|
||||
|
||||
<Menu className={styles.presetsMenu}>
|
||||
|
@ -65,7 +66,7 @@ class AddImportListItem extends Component {
|
|||
className={styles.presetsMenuButton}
|
||||
size={sizes.SMALL}
|
||||
>
|
||||
Presets
|
||||
{translate('Presets')}
|
||||
</Button>
|
||||
|
||||
<MenuContent>
|
||||
|
@ -90,7 +91,7 @@ class AddImportListItem extends Component {
|
|||
to={infoLink}
|
||||
size={sizes.SMALL}
|
||||
>
|
||||
More info
|
||||
{translate('MoreInfo')}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -28,17 +28,17 @@ function ImportListMonitoringOptionsPopoverContent() {
|
|||
<DescriptionList>
|
||||
<DescriptionListItem
|
||||
title={translate('None')}
|
||||
data="Do not monitor artists or albums"
|
||||
data={translate('NoneMonitoringOptionHelpText')}
|
||||
/>
|
||||
|
||||
<DescriptionListItem
|
||||
title={translate('SpecificAlbum')}
|
||||
data="Monitor artists but only monitor albums explicitly included in the list"
|
||||
data={translate('SecificMonitoringOptionHelpText')}
|
||||
/>
|
||||
|
||||
<DescriptionListItem
|
||||
title={translate('AllArtistAlbums')}
|
||||
data="Monitor artists and all albums for each artist included on the import list"
|
||||
data={translate('AllMonitoringOptionHelpText')}
|
||||
/>
|
||||
</DescriptionList>
|
||||
);
|
||||
|
@ -47,9 +47,9 @@ function ImportListMonitoringOptionsPopoverContent() {
|
|||
function EditImportListModalContent(props) {
|
||||
|
||||
const monitorOptions = [
|
||||
{ key: 'none', value: 'None' },
|
||||
{ key: 'specificAlbum', value: 'Specific Album' },
|
||||
{ key: 'entireArtist', value: 'All Artist Albums' }
|
||||
{ key: 'none', value: translate('None') },
|
||||
{ key: 'specificAlbum', value: translate('SpecificAlbum') },
|
||||
{ key: 'entireArtist', value: translate('All Artist Albums') }
|
||||
];
|
||||
|
||||
const {
|
||||
|
@ -89,7 +89,7 @@ function EditImportListModalContent(props) {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
{id ? 'Edit List' : 'Add List'}
|
||||
{id ? translate('EditList') : translate('AddList')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
@ -318,7 +318,7 @@ function EditImportListModalContent(props) {
|
|||
kind={kinds.DANGER}
|
||||
onPress={onDeleteImportListPress}
|
||||
>
|
||||
Delete
|
||||
{translate('Delete')}
|
||||
</Button>
|
||||
}
|
||||
|
||||
|
@ -327,13 +327,13 @@ function EditImportListModalContent(props) {
|
|||
error={saveError}
|
||||
onPress={onTestPress}
|
||||
>
|
||||
Test
|
||||
{translate('Test')}
|
||||
</SpinnerErrorButton>
|
||||
|
||||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerErrorButton
|
||||
|
@ -341,7 +341,7 @@ function EditImportListModalContent(props) {
|
|||
error={saveError}
|
||||
onPress={onSavePress}
|
||||
>
|
||||
Save
|
||||
{translate('Save')}
|
||||
</SpinnerErrorButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -5,6 +5,7 @@ import Link from 'Components/Link/Link';
|
|||
import Menu from 'Components/Menu/Menu';
|
||||
import MenuContent from 'Components/Menu/MenuContent';
|
||||
import { sizes } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import AddIndexerPresetMenuItem from './AddIndexerPresetMenuItem';
|
||||
import styles from './AddIndexerItem.css';
|
||||
|
||||
|
@ -57,7 +58,7 @@ class AddIndexerItem extends Component {
|
|||
size={sizes.SMALL}
|
||||
onPress={this.onIndexerSelect}
|
||||
>
|
||||
Custom
|
||||
{translate('Custom')}
|
||||
</Button>
|
||||
|
||||
<Menu className={styles.presetsMenu}>
|
||||
|
@ -65,7 +66,7 @@ class AddIndexerItem extends Component {
|
|||
className={styles.presetsMenuButton}
|
||||
size={sizes.SMALL}
|
||||
>
|
||||
Presets
|
||||
{translate('Presets')}
|
||||
</Button>
|
||||
|
||||
<MenuContent>
|
||||
|
@ -90,7 +91,7 @@ class AddIndexerItem extends Component {
|
|||
to={infoLink}
|
||||
size={sizes.SMALL}
|
||||
>
|
||||
More info
|
||||
{translate('MoreInfo')}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -53,7 +53,7 @@ function EditIndexerModalContent(props) {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
{`${id ? 'Edit' : 'Add'} Indexer - ${implementationName}`}
|
||||
{`${id ? translate('EditIndexer') : translate('AddIndexer')} - ${implementationName}`}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
@ -204,7 +204,7 @@ function EditIndexerModalContent(props) {
|
|||
kind={kinds.DANGER}
|
||||
onPress={onDeleteIndexerPress}
|
||||
>
|
||||
Delete
|
||||
{translate('Delete')}
|
||||
</Button>
|
||||
}
|
||||
|
||||
|
@ -213,13 +213,13 @@ function EditIndexerModalContent(props) {
|
|||
error={saveError}
|
||||
onPress={onTestPress}
|
||||
>
|
||||
Test
|
||||
{translate('Test')}
|
||||
</SpinnerErrorButton>
|
||||
|
||||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerErrorButton
|
||||
|
@ -227,7 +227,7 @@ function EditIndexerModalContent(props) {
|
|||
error={saveError}
|
||||
onPress={onSavePress}
|
||||
>
|
||||
Save
|
||||
{translate('Save')}
|
||||
</SpinnerErrorButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -15,26 +15,26 @@ import NamingConnector from './Naming/NamingConnector';
|
|||
import RootFoldersConnector from './RootFolder/RootFoldersConnector';
|
||||
|
||||
const rescanAfterRefreshOptions = [
|
||||
{ key: 'always', value: 'Always' },
|
||||
{ key: 'afterManual', value: 'After Manual Refresh' },
|
||||
{ key: 'never', value: 'Never' }
|
||||
{ key: 'always', value: translate('Always') },
|
||||
{ key: 'afterManual', value: translate('AfterManualRefresh') },
|
||||
{ key: 'never', value: translate('Never') }
|
||||
];
|
||||
|
||||
const allowFingerprintingOptions = [
|
||||
{ key: 'allFiles', value: 'Always' },
|
||||
{ key: 'newFiles', value: 'For new imports only' },
|
||||
{ key: 'never', value: 'Never' }
|
||||
{ key: 'allFiles', value: translate('Always') },
|
||||
{ key: 'newFiles', value: translate('ForNewImportsOnly') },
|
||||
{ key: 'never', value: translate('Never') }
|
||||
];
|
||||
|
||||
const downloadPropersAndRepacksOptions = [
|
||||
{ key: 'preferAndUpgrade', value: 'Prefer and Upgrade' },
|
||||
{ key: 'doNotUpgrade', value: 'Do not Upgrade Automatically' },
|
||||
{ key: 'doNotPrefer', value: 'Do not Prefer' }
|
||||
{ key: 'preferAndUpgrade', value: translate('PreferAndUpgrade') },
|
||||
{ key: 'doNotUpgrade', value: translate('DoNotUpgradeAutomatically') },
|
||||
{ key: 'doNotPrefer', value: translate('DoNotPrefer') }
|
||||
];
|
||||
|
||||
const fileDateOptions = [
|
||||
{ key: 'none', value: 'None' },
|
||||
{ key: 'albumReleaseDate', value: 'Album Release Date' }
|
||||
{ key: 'none', value: translate('None') },
|
||||
{ key: 'albumReleaseDate', value: translate('AlbumReleaseDate') }
|
||||
];
|
||||
|
||||
class MediaManagement extends Component {
|
||||
|
|
|
@ -51,7 +51,7 @@ function EditRootFolderModalContent(props) {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
{id ? 'Edit Root Folder' : 'Add Root Folder'}
|
||||
{id ? translate('EditRootFolder') : translate('AddRootFolder')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
@ -216,14 +216,14 @@ function EditRootFolderModalContent(props) {
|
|||
kind={kinds.DANGER}
|
||||
onPress={onDeleteRootFolderPress}
|
||||
>
|
||||
Delete
|
||||
{translate('Delete')}
|
||||
</Button>
|
||||
}
|
||||
|
||||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerErrorButton
|
||||
|
@ -231,7 +231,7 @@ function EditRootFolderModalContent(props) {
|
|||
error={saveError}
|
||||
onPress={onSavePress}
|
||||
>
|
||||
Save
|
||||
{translate('Save')}
|
||||
</SpinnerErrorButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -35,7 +35,7 @@ function EditMetadataModalContent(props) {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Edit {name.value} Metadata
|
||||
{translate('EditMetadata')} - {name.value}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
@ -75,7 +75,7 @@ function EditMetadataModalContent(props) {
|
|||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerErrorButton
|
||||
|
@ -83,7 +83,7 @@ function EditMetadataModalContent(props) {
|
|||
error={saveError}
|
||||
onPress={onSavePress}
|
||||
>
|
||||
Save
|
||||
{translate('Save')}
|
||||
</SpinnerErrorButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -5,6 +5,7 @@ import Link from 'Components/Link/Link';
|
|||
import Menu from 'Components/Menu/Menu';
|
||||
import MenuContent from 'Components/Menu/MenuContent';
|
||||
import { sizes } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import AddNotificationPresetMenuItem from './AddNotificationPresetMenuItem';
|
||||
import styles from './AddNotificationItem.css';
|
||||
|
||||
|
@ -57,7 +58,7 @@ class AddNotificationItem extends Component {
|
|||
size={sizes.SMALL}
|
||||
onPress={this.onNotificationSelect}
|
||||
>
|
||||
Custom
|
||||
{translate('Custom')}
|
||||
</Button>
|
||||
|
||||
<Menu className={styles.presetsMenu}>
|
||||
|
@ -65,7 +66,7 @@ class AddNotificationItem extends Component {
|
|||
className={styles.presetsMenuButton}
|
||||
size={sizes.SMALL}
|
||||
>
|
||||
Presets
|
||||
{translate('Presets')}
|
||||
</Button>
|
||||
|
||||
<MenuContent>
|
||||
|
@ -90,7 +91,7 @@ class AddNotificationItem extends Component {
|
|||
to={infoLink}
|
||||
size={sizes.SMALL}
|
||||
>
|
||||
More info
|
||||
{translate('MoreInfo')}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -48,7 +48,7 @@ function EditNotificationModalContent(props) {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
{`${id ? 'Edit' : 'Add'} Connection - ${implementationName}`}
|
||||
{`${id ? translate('EditConnection') : translate('AddConnection')} - ${implementationName}`}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
@ -136,7 +136,7 @@ function EditNotificationModalContent(props) {
|
|||
kind={kinds.DANGER}
|
||||
onPress={onDeleteNotificationPress}
|
||||
>
|
||||
Delete
|
||||
{translate('Delete')}
|
||||
</Button>
|
||||
}
|
||||
|
||||
|
@ -145,13 +145,13 @@ function EditNotificationModalContent(props) {
|
|||
error={saveError}
|
||||
onPress={onTestPress}
|
||||
>
|
||||
Test
|
||||
{translate('Test')}
|
||||
</SpinnerErrorButton>
|
||||
|
||||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerErrorButton
|
||||
|
@ -159,7 +159,7 @@ function EditNotificationModalContent(props) {
|
|||
error={saveError}
|
||||
onPress={onSavePress}
|
||||
>
|
||||
Save
|
||||
{translate('Save')}
|
||||
</SpinnerErrorButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -88,9 +88,9 @@ class DelayProfile extends Component {
|
|||
let preferred = titleCase(preferredProtocol);
|
||||
|
||||
if (!enableUsenet) {
|
||||
preferred = 'Only Torrent';
|
||||
preferred = translate('OnlyTorrent');
|
||||
} else if (!enableTorrent) {
|
||||
preferred = 'Only Usenet';
|
||||
preferred = translate('OnlyUsenet');
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
@ -82,10 +82,18 @@ class DelayProfiles extends Component {
|
|||
>
|
||||
<div>
|
||||
<div className={styles.delayProfilesHeader}>
|
||||
<div className={styles.column}>Protocol</div>
|
||||
<div className={styles.column}>Usenet Delay</div>
|
||||
<div className={styles.column}>Torrent Delay</div>
|
||||
<div className={styles.tags}>Tags</div>
|
||||
<div className={styles.column}>
|
||||
{translate('PreferredProtocol')}
|
||||
</div>
|
||||
<div className={styles.column}>
|
||||
{translate('UsenetDelay')}
|
||||
</div>
|
||||
<div className={styles.column}>
|
||||
{translate('TorrentDelay')}
|
||||
</div>
|
||||
<div className={styles.tags}>
|
||||
{translate('Tags')}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={styles.delayProfiles}>
|
||||
|
|
|
@ -17,6 +17,13 @@ import { boolSettingShape, numberSettingShape, tagSettingShape } from 'Helpers/P
|
|||
import translate from 'Utilities/String/translate';
|
||||
import styles from './EditDelayProfileModalContent.css';
|
||||
|
||||
const protocolOptions = [
|
||||
{ key: 'preferUsenet', value: translate('PreferUsenet') },
|
||||
{ key: 'preferTorrent', value: translate('PreferTorrent') },
|
||||
{ key: 'onlyUsenet', value: translate('OnlyUsenet') },
|
||||
{ key: 'onlyTorrent', value: translate('OnlyTorrent') }
|
||||
];
|
||||
|
||||
function EditDelayProfileModalContent(props) {
|
||||
const {
|
||||
id,
|
||||
|
@ -26,7 +33,6 @@ function EditDelayProfileModalContent(props) {
|
|||
saveError,
|
||||
item,
|
||||
protocol,
|
||||
protocolOptions,
|
||||
onInputChange,
|
||||
onProtocolChange,
|
||||
onSavePress,
|
||||
|
@ -46,29 +52,29 @@ function EditDelayProfileModalContent(props) {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
{id ? 'Edit Delay Profile' : 'Add Delay Profile'}
|
||||
{id ? translate('EditDelayProfile') : translate('AddDelayProfile')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
{
|
||||
isFetching &&
|
||||
<LoadingIndicator />
|
||||
isFetching ?
|
||||
<LoadingIndicator /> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
!isFetching && !!error &&
|
||||
!isFetching && !!error ?
|
||||
<div>
|
||||
{translate('UnableToAddANewQualityProfilePleaseTryAgain')}
|
||||
</div>
|
||||
</div> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
!isFetching && !error &&
|
||||
!isFetching && !error ?
|
||||
<Form {...otherProps}>
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('Protocol')}
|
||||
</FormLabel>
|
||||
<FormLabel>{translate('PreferredProtocol')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.SELECT}
|
||||
|
@ -83,9 +89,7 @@ function EditDelayProfileModalContent(props) {
|
|||
{
|
||||
enableUsenet.value &&
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('UsenetDelay')}
|
||||
</FormLabel>
|
||||
<FormLabel>{translate('UsenetDelay')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.NUMBER}
|
||||
|
@ -101,9 +105,7 @@ function EditDelayProfileModalContent(props) {
|
|||
{
|
||||
enableTorrent.value &&
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('TorrentDelay')}
|
||||
</FormLabel>
|
||||
<FormLabel>{translate('TorrentDelay')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.NUMBER}
|
||||
|
@ -119,13 +121,11 @@ function EditDelayProfileModalContent(props) {
|
|||
{
|
||||
id === 1 ?
|
||||
<Alert>
|
||||
This is the default profile. It applies to all artist that don't have an explicit profile.
|
||||
{translate('DefaultDelayProfileHelpText')}
|
||||
</Alert> :
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('Tags')}
|
||||
</FormLabel>
|
||||
<FormLabel>{translate('Tags')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.TAG}
|
||||
|
@ -136,25 +136,27 @@ function EditDelayProfileModalContent(props) {
|
|||
/>
|
||||
</FormGroup>
|
||||
}
|
||||
</Form>
|
||||
</Form> :
|
||||
null
|
||||
}
|
||||
</ModalBody>
|
||||
<ModalFooter>
|
||||
{
|
||||
id && id > 1 &&
|
||||
id && id > 1 ?
|
||||
<Button
|
||||
className={styles.deleteButton}
|
||||
kind={kinds.DANGER}
|
||||
onPress={onDeleteDelayProfilePress}
|
||||
>
|
||||
Delete
|
||||
</Button>
|
||||
{translate('Delete')}
|
||||
</Button> :
|
||||
null
|
||||
}
|
||||
|
||||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerErrorButton
|
||||
|
@ -162,7 +164,7 @@ function EditDelayProfileModalContent(props) {
|
|||
error={saveError}
|
||||
onPress={onSavePress}
|
||||
>
|
||||
Save
|
||||
{translate('Save')}
|
||||
</SpinnerErrorButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
@ -186,7 +188,6 @@ EditDelayProfileModalContent.propTypes = {
|
|||
saveError: PropTypes.object,
|
||||
item: PropTypes.shape(delayProfileShape).isRequired,
|
||||
protocol: PropTypes.string.isRequired,
|
||||
protocolOptions: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
onInputChange: PropTypes.func.isRequired,
|
||||
onProtocolChange: PropTypes.func.isRequired,
|
||||
onSavePress: PropTypes.func.isRequired,
|
||||
|
|
|
@ -16,13 +16,6 @@ const newDelayProfile = {
|
|||
tags: []
|
||||
};
|
||||
|
||||
const protocolOptions = [
|
||||
{ key: 'preferUsenet', value: 'Prefer Usenet' },
|
||||
{ key: 'preferTorrent', value: 'Prefer Torrent' },
|
||||
{ key: 'onlyUsenet', value: 'Only Usenet' },
|
||||
{ key: 'onlyTorrent', value: 'Only Torrent' }
|
||||
];
|
||||
|
||||
function createDelayProfileSelector() {
|
||||
return createSelector(
|
||||
(state, { id }) => id,
|
||||
|
@ -78,7 +71,6 @@ function createMapStateToProps() {
|
|||
|
||||
return {
|
||||
protocol,
|
||||
protocolOptions,
|
||||
...delayProfile
|
||||
};
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ function EditMetadataProfileModalContent(props) {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
{id ? 'Edit Metadata Profile' : 'Add Metadata Profile'}
|
||||
{id ? translate('EditMetadataProfile') : translate('AddMetadataProfile')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
@ -117,7 +117,7 @@ function EditMetadataProfileModalContent(props) {
|
|||
isDisabled={isInUse}
|
||||
onPress={onDeleteMetadataProfilePress}
|
||||
>
|
||||
Delete
|
||||
{translate('Delete')}
|
||||
</Button>
|
||||
</div>
|
||||
}
|
||||
|
@ -125,7 +125,7 @@ function EditMetadataProfileModalContent(props) {
|
|||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerErrorButton
|
||||
|
@ -133,7 +133,7 @@ function EditMetadataProfileModalContent(props) {
|
|||
error={saveError}
|
||||
onPress={onSavePress}
|
||||
>
|
||||
Save
|
||||
{translate('Save')}
|
||||
</SpinnerErrorButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -119,7 +119,7 @@ class EditQualityProfileModalContent extends Component {
|
|||
onMeasure={this.onHeaderMeasure}
|
||||
>
|
||||
<ModalHeader>
|
||||
{id ? 'Edit Quality Profile' : 'Add Quality Profile'}
|
||||
{id ? translate('EditQualityProfile') : translate('AddQualityProfile')}
|
||||
</ModalHeader>
|
||||
</Measure>
|
||||
|
||||
|
@ -161,7 +161,7 @@ class EditQualityProfileModalContent extends Component {
|
|||
|
||||
<FormGroup size={sizes.EXTRA_SMALL}>
|
||||
<FormLabel size={sizes.SMALL}>
|
||||
Upgrades Allowed
|
||||
{translate('UpgradesAllowed')}
|
||||
</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
|
@ -226,7 +226,7 @@ class EditQualityProfileModalContent extends Component {
|
|||
isDisabled={isInUse}
|
||||
onPress={onDeleteQualityProfilePress}
|
||||
>
|
||||
Delete
|
||||
{translate('Delete')}
|
||||
</Button>
|
||||
</div>
|
||||
}
|
||||
|
@ -234,7 +234,7 @@ class EditQualityProfileModalContent extends Component {
|
|||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerErrorButton
|
||||
|
@ -242,7 +242,7 @@ class EditQualityProfileModalContent extends Component {
|
|||
error={saveError}
|
||||
onPress={onSavePress}
|
||||
>
|
||||
Save
|
||||
{translate('Save')}
|
||||
</SpinnerErrorButton>
|
||||
</ModalFooter>
|
||||
</Measure>
|
||||
|
|
|
@ -43,7 +43,7 @@ function EditReleaseProfileModalContent(props) {
|
|||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
{id ? 'Edit Release Profile' : 'Add Release Profile'}
|
||||
{id ? translate('EditReleaseProfile') : translate('AddReleaseProfile')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
@ -170,14 +170,14 @@ function EditReleaseProfileModalContent(props) {
|
|||
kind={kinds.DANGER}
|
||||
onPress={onDeleteReleaseProfilePress}
|
||||
>
|
||||
Delete
|
||||
{translate('Delete')}
|
||||
</Button>
|
||||
}
|
||||
|
||||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerErrorButton
|
||||
|
@ -185,7 +185,7 @@ function EditReleaseProfileModalContent(props) {
|
|||
error={saveError}
|
||||
onPress={onSavePress}
|
||||
>
|
||||
Save
|
||||
{translate('Save')}
|
||||
</SpinnerErrorButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -25,9 +25,16 @@ class QualityDefinitions extends Component {
|
|||
{...otherProps}
|
||||
>
|
||||
<div className={styles.header}>
|
||||
<div className={styles.quality}>Quality</div>
|
||||
<div className={styles.title}>Title</div>
|
||||
<div className={styles.sizeLimit}>Size Limit</div>
|
||||
<div className={styles.quality}>
|
||||
{translate('Quality')}
|
||||
</div>
|
||||
<div className={styles.title}>
|
||||
{translate('Title')}
|
||||
</div>
|
||||
<div className={styles.sizeLimit}>
|
||||
{translate('SizeLimit')}
|
||||
</div>
|
||||
|
||||
{
|
||||
advancedSettings ?
|
||||
<div className={styles.kilobitsPerSecond}>
|
||||
|
@ -53,7 +60,7 @@ class QualityDefinitions extends Component {
|
|||
|
||||
<div className={styles.sizeLimitHelpTextContainer}>
|
||||
<div className={styles.sizeLimitHelpText}>
|
||||
Limits are automatically adjusted for the album duration.
|
||||
{translate('QualityLimitsHelpText')}
|
||||
</div>
|
||||
</div>
|
||||
</PageSectionContent>
|
||||
|
|
|
@ -187,23 +187,19 @@ class UISettings extends Component {
|
|||
legend={translate('Style')}
|
||||
>
|
||||
<FormGroup>
|
||||
<FormLabel>Theme</FormLabel>
|
||||
<FormLabel>{translate('Theme')}</FormLabel>
|
||||
<FormInputGroup
|
||||
type={inputTypes.SELECT}
|
||||
name="theme"
|
||||
helpText="Change Application UI Theme, Inspired by Theme.Park"
|
||||
helpText={translate('ThemeHelpText')}
|
||||
values={themeOptions}
|
||||
onChange={onInputChange}
|
||||
{...settings.theme}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormLabel>
|
||||
{translate('EnableColorImpairedMode')}
|
||||
</FormLabel>
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>Enable Color-Impaired Mode</FormLabel>
|
||||
<FormLabel>{translate('EnableColorImpairedMode')}</FormLabel>
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="enableColorImpairedMode"
|
||||
|
|
|
@ -5,6 +5,7 @@ import albumEntities from 'Album/albumEntities';
|
|||
import { sortDirections } from 'Helpers/Props';
|
||||
import { createThunk, handleThunks } from 'Store/thunks';
|
||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import { updateItem } from './baseActions';
|
||||
import createFetchHandler from './Creators/createFetchHandler';
|
||||
import createHandleActions from './Creators/createHandleActions';
|
||||
|
@ -41,58 +42,58 @@ export const defaultState = {
|
|||
columns: [
|
||||
{
|
||||
name: 'monitored',
|
||||
columnLabel: 'Monitored',
|
||||
columnLabel: translate('Monitored'),
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
},
|
||||
{
|
||||
name: 'title',
|
||||
label: 'Title',
|
||||
label: translate('Title'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'releaseDate',
|
||||
label: 'Release Date',
|
||||
label: translate('ReleaseDate'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'secondaryTypes',
|
||||
label: 'Secondary Types',
|
||||
label: translate('SecondaryTypes'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'mediumCount',
|
||||
label: 'Media Count',
|
||||
label: translate('MediaCount'),
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'trackCount',
|
||||
label: 'Track Count',
|
||||
label: translate('TrackCount'),
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'duration',
|
||||
label: 'Duration',
|
||||
label: translate('Duration'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'rating',
|
||||
label: 'Rating',
|
||||
label: translate('Rating'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'status',
|
||||
label: 'Status',
|
||||
label: translate('Status'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'actions',
|
||||
columnLabel: 'Actions',
|
||||
columnLabel: translate('Actions'),
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ import { createAction } from 'redux-actions';
|
|||
import { filterBuilderTypes, filterBuilderValueTypes, sortDirections } from 'Helpers/Props';
|
||||
import { createThunk, handleThunks } from 'Store/thunks';
|
||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import { fetchAlbums } from './albumActions';
|
||||
import { filterPredicates, filters } from './artistActions';
|
||||
import { set } from './baseActions';
|
||||
|
@ -31,41 +32,41 @@ export const defaultState = {
|
|||
filterBuilderProps: [
|
||||
{
|
||||
name: 'monitored',
|
||||
label: 'Monitored',
|
||||
label: translate('Monitored'),
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.BOOL
|
||||
},
|
||||
{
|
||||
name: 'status',
|
||||
label: 'Status',
|
||||
label: translate('Status'),
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.ARTIST_STATUS
|
||||
},
|
||||
{
|
||||
name: 'artistType',
|
||||
label: 'Artist Type',
|
||||
label: translate('ArtistType'),
|
||||
type: filterBuilderTypes.EXACT
|
||||
},
|
||||
{
|
||||
name: 'qualityProfileId',
|
||||
label: 'Quality Profile',
|
||||
label: translate('QualityProfile'),
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.QUALITY_PROFILE
|
||||
},
|
||||
{
|
||||
name: 'metadataProfileId',
|
||||
label: 'Metadata Profile',
|
||||
label: translate('MetadataProfile'),
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.METADATA_PROFILE
|
||||
},
|
||||
{
|
||||
name: 'rootFolderPath',
|
||||
label: 'Root Folder Path',
|
||||
label: translate('Root Folder Path'),
|
||||
type: filterBuilderTypes.EXACT
|
||||
},
|
||||
{
|
||||
name: 'tags',
|
||||
label: 'Tags',
|
||||
label: translate('Tags'),
|
||||
type: filterBuilderTypes.ARRAY,
|
||||
valueType: filterBuilderValueTypes.TAG
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import { filterTypePredicates, filterTypes, sortDirections } from 'Helpers/Props
|
|||
import { createThunk, handleThunks } from 'Store/thunks';
|
||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
||||
import dateFilterPredicate from 'Utilities/Date/dateFilterPredicate';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import { updateItem } from './baseActions';
|
||||
import createFetchHandler from './Creators/createFetchHandler';
|
||||
import createHandleActions from './Creators/createHandleActions';
|
||||
|
@ -20,12 +21,12 @@ export const section = 'artist';
|
|||
export const filters = [
|
||||
{
|
||||
key: 'all',
|
||||
label: 'All',
|
||||
label: translate('All'),
|
||||
filters: []
|
||||
},
|
||||
{
|
||||
key: 'monitored',
|
||||
label: 'Monitored Only',
|
||||
label: translate('MonitoredOnly'),
|
||||
filters: [
|
||||
{
|
||||
key: 'monitored',
|
||||
|
@ -36,7 +37,7 @@ export const filters = [
|
|||
},
|
||||
{
|
||||
key: 'unmonitored',
|
||||
label: 'Unmonitored Only',
|
||||
label: translate('UnmonitoredOnly'),
|
||||
filters: [
|
||||
{
|
||||
key: 'monitored',
|
||||
|
@ -47,7 +48,7 @@ export const filters = [
|
|||
},
|
||||
{
|
||||
key: 'continuing',
|
||||
label: 'Continuing Only',
|
||||
label: translate('ContinuingOnly'),
|
||||
filters: [
|
||||
{
|
||||
key: 'status',
|
||||
|
@ -58,7 +59,7 @@ export const filters = [
|
|||
},
|
||||
{
|
||||
key: 'ended',
|
||||
label: 'Ended Only',
|
||||
label: translate('EndedOnly'),
|
||||
filters: [
|
||||
{
|
||||
key: 'status',
|
||||
|
@ -69,7 +70,7 @@ export const filters = [
|
|||
},
|
||||
{
|
||||
key: 'missing',
|
||||
label: 'Missing Tracks',
|
||||
label: translate('MissingTracks'),
|
||||
filters: [
|
||||
{
|
||||
key: 'missing',
|
||||
|
|
|
@ -3,6 +3,7 @@ import { batchActions } from 'redux-batched-actions';
|
|||
import { filterBuilderTypes, filterBuilderValueTypes, sortDirections } from 'Helpers/Props';
|
||||
import { createThunk, handleThunks } from 'Store/thunks';
|
||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import { filterPredicates, filters, sortPredicates } from './artistActions';
|
||||
import { set, updateItem } from './baseActions';
|
||||
import createHandleActions from './Creators/createHandleActions';
|
||||
|
@ -34,44 +35,44 @@ export const defaultState = {
|
|||
columns: [
|
||||
{
|
||||
name: 'status',
|
||||
columnLabel: 'Status',
|
||||
columnLabel: translate('Status'),
|
||||
isSortable: true,
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
},
|
||||
{
|
||||
name: 'sortName',
|
||||
label: 'Name',
|
||||
label: translate('Name'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'qualityProfileId',
|
||||
label: 'Quality Profile',
|
||||
label: translate('QualityProfile'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'metadataProfileId',
|
||||
label: 'Metadata Profile',
|
||||
label: translate('MetadataProfile'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'path',
|
||||
label: 'Path',
|
||||
label: translate('Path'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'sizeOnDisk',
|
||||
label: 'Size on Disk',
|
||||
label: translate('SizeOnDisk'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'tags',
|
||||
label: 'Tags',
|
||||
label: translate('Tags'),
|
||||
isSortable: false,
|
||||
isVisible: true
|
||||
}
|
||||
|
@ -80,47 +81,47 @@ export const defaultState = {
|
|||
filterBuilderProps: [
|
||||
{
|
||||
name: 'monitored',
|
||||
label: 'Monitored',
|
||||
label: translate('Monitored'),
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.BOOL
|
||||
},
|
||||
{
|
||||
name: 'status',
|
||||
label: 'Status',
|
||||
label: translate('Status'),
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.ARTIST_STATUS
|
||||
},
|
||||
{
|
||||
name: 'qualityProfileId',
|
||||
label: 'Quality Profile',
|
||||
label: translate('QualityProfile'),
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.QUALITY_PROFILE
|
||||
},
|
||||
{
|
||||
name: 'metadataProfileId',
|
||||
label: 'Metadata Profile',
|
||||
label: translate('MetadataProfile'),
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.METADATA_PROFILE
|
||||
},
|
||||
{
|
||||
name: 'path',
|
||||
label: 'Path',
|
||||
label: translate('Path'),
|
||||
type: filterBuilderTypes.STRING
|
||||
},
|
||||
{
|
||||
name: 'rootFolderPath',
|
||||
label: 'Root Folder Path',
|
||||
label: translate('RootFolderPath'),
|
||||
type: filterBuilderTypes.EXACT
|
||||
},
|
||||
{
|
||||
name: 'sizeOnDisk',
|
||||
label: 'Size on Disk',
|
||||
label: translate('SizeOnDisk'),
|
||||
type: filterBuilderTypes.NUMBER,
|
||||
valueType: filterBuilderValueTypes.BYTES
|
||||
},
|
||||
{
|
||||
name: 'tags',
|
||||
label: 'Tags',
|
||||
label: translate('Tags'),
|
||||
type: filterBuilderTypes.ARRAY,
|
||||
valueType: filterBuilderValueTypes.TAG
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import { createAction } from 'redux-actions';
|
||||
import { filterBuilderTypes, filterBuilderValueTypes, filterTypePredicates, sortDirections } from 'Helpers/Props';
|
||||
import sortByName from 'Utilities/Array/sortByName';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import { filterPredicates, filters, sortPredicates } from './artistActions';
|
||||
import createHandleActions from './Creators/createHandleActions';
|
||||
import createSetClientSideCollectionFilterReducer from './Creators/Reducers/createSetClientSideCollectionFilterReducer';
|
||||
|
@ -61,105 +62,105 @@ export const defaultState = {
|
|||
columns: [
|
||||
{
|
||||
name: 'status',
|
||||
columnLabel: 'Status',
|
||||
columnLabel: translate('Status'),
|
||||
isSortable: true,
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
},
|
||||
{
|
||||
name: 'sortName',
|
||||
label: 'Artist Name',
|
||||
label: translate('ArtistName'),
|
||||
isSortable: true,
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
},
|
||||
{
|
||||
name: 'artistType',
|
||||
label: 'Type',
|
||||
label: translate('Type'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'qualityProfileId',
|
||||
label: 'Quality Profile',
|
||||
label: translate('QualityProfile'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'metadataProfileId',
|
||||
label: 'Metadata Profile',
|
||||
label: translate('MetadataProfile'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'nextAlbum',
|
||||
label: 'Next Album',
|
||||
label: translate('NextAlbum'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'lastAlbum',
|
||||
label: 'Last Album',
|
||||
label: translate('LastAlbum'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'added',
|
||||
label: 'Added',
|
||||
label: translate('Added'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'albumCount',
|
||||
label: 'Albums',
|
||||
label: translate('Albums'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'trackProgress',
|
||||
label: 'Tracks',
|
||||
label: translate('Tracks'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'trackCount',
|
||||
label: 'Track Count',
|
||||
label: translate('TrackCount'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'path',
|
||||
label: 'Path',
|
||||
label: translate('Path'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'sizeOnDisk',
|
||||
label: 'Size on Disk',
|
||||
label: translate('SizeOnDisk'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'genres',
|
||||
label: 'Genres',
|
||||
label: translate('Genres'),
|
||||
isSortable: false,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'ratings',
|
||||
label: 'Rating',
|
||||
label: translate('Rating'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'tags',
|
||||
label: 'Tags',
|
||||
label: translate('Tags'),
|
||||
isSortable: false,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'actions',
|
||||
columnLabel: 'Actions',
|
||||
columnLabel: translate('Actions'),
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
}
|
||||
|
@ -242,70 +243,70 @@ export const defaultState = {
|
|||
filterBuilderProps: [
|
||||
{
|
||||
name: 'monitored',
|
||||
label: 'Monitored',
|
||||
label: translate('Monitored'),
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.BOOL
|
||||
},
|
||||
{
|
||||
name: 'status',
|
||||
label: 'Status',
|
||||
label: translate('Status'),
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.ARTIST_STATUS
|
||||
},
|
||||
{
|
||||
name: 'qualityProfileId',
|
||||
label: 'Quality Profile',
|
||||
label: translate('QualityProfile'),
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.QUALITY_PROFILE
|
||||
},
|
||||
{
|
||||
name: 'metadataProfileId',
|
||||
label: 'Metadata Profile',
|
||||
label: translate('MetadataProfile'),
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.METADATA_PROFILE
|
||||
},
|
||||
{
|
||||
name: 'nextAlbum',
|
||||
label: 'Next Album',
|
||||
label: translate('NextAlbum'),
|
||||
type: filterBuilderTypes.DATE,
|
||||
valueType: filterBuilderValueTypes.DATE
|
||||
},
|
||||
{
|
||||
name: 'lastAlbum',
|
||||
label: 'Last Album',
|
||||
label: translate('LastAlbum'),
|
||||
type: filterBuilderTypes.DATE,
|
||||
valueType: filterBuilderValueTypes.DATE
|
||||
},
|
||||
{
|
||||
name: 'added',
|
||||
label: 'Added',
|
||||
label: translate('Added'),
|
||||
type: filterBuilderTypes.DATE,
|
||||
valueType: filterBuilderValueTypes.DATE
|
||||
},
|
||||
{
|
||||
name: 'albumCount',
|
||||
label: 'Album Count',
|
||||
label: translate('AlbumCount'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
name: 'trackProgress',
|
||||
label: 'Track Progress',
|
||||
label: translate('TrackProgress'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
name: 'path',
|
||||
label: 'Path',
|
||||
label: translate('Path'),
|
||||
type: filterBuilderTypes.STRING
|
||||
},
|
||||
{
|
||||
name: 'sizeOnDisk',
|
||||
label: 'Size on Disk',
|
||||
label: translate('SizeOnDisk'),
|
||||
type: filterBuilderTypes.NUMBER,
|
||||
valueType: filterBuilderValueTypes.BYTES
|
||||
},
|
||||
{
|
||||
name: 'genres',
|
||||
label: 'Genres',
|
||||
label: translate('Genres'),
|
||||
type: filterBuilderTypes.ARRAY,
|
||||
optionsSelector: function(items) {
|
||||
const tagList = items.reduce((acc, artist) => {
|
||||
|
@ -324,12 +325,12 @@ export const defaultState = {
|
|||
},
|
||||
{
|
||||
name: 'ratings',
|
||||
label: 'Rating',
|
||||
label: translate('Rating'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
name: 'tags',
|
||||
label: 'Tags',
|
||||
label: translate('Tags'),
|
||||
type: filterBuilderTypes.ARRAY,
|
||||
valueType: filterBuilderValueTypes.TAG
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import { sortDirections } from 'Helpers/Props';
|
|||
import { createThunk, handleThunks } from 'Store/thunks';
|
||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
||||
import serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import { set, updateItem } from './baseActions';
|
||||
import createHandleActions from './Creators/createHandleActions';
|
||||
import createRemoveItemHandler from './Creators/createRemoveItemHandler';
|
||||
|
@ -32,36 +33,36 @@ export const defaultState = {
|
|||
columns: [
|
||||
{
|
||||
name: 'artists.sortName',
|
||||
label: 'Artist Name',
|
||||
label: translate('ArtistName'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'sourceTitle',
|
||||
label: 'Source Title',
|
||||
label: translate('SourceTitle'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'quality',
|
||||
label: 'Quality',
|
||||
label: translate('Quality'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'date',
|
||||
label: 'Date',
|
||||
label: translate('Date'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'indexer',
|
||||
label: 'Indexer',
|
||||
label: translate('Indexer'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'actions',
|
||||
columnLabel: 'Actions',
|
||||
columnLabel: translate('Actions'),
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import * as commandNames from 'Commands/commandNames';
|
|||
import { filterTypes } from 'Helpers/Props';
|
||||
import { createThunk, handleThunks } from 'Store/thunks';
|
||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import { set, update } from './baseActions';
|
||||
import { executeCommandHelper } from './commandActions';
|
||||
import createHandleActions from './Creators/createHandleActions';
|
||||
|
@ -50,7 +51,7 @@ export const defaultState = {
|
|||
filters: [
|
||||
{
|
||||
key: 'all',
|
||||
label: 'All',
|
||||
label: translate('All'),
|
||||
filters: [
|
||||
{
|
||||
key: 'monitored',
|
||||
|
@ -61,7 +62,7 @@ export const defaultState = {
|
|||
},
|
||||
{
|
||||
key: 'monitored',
|
||||
label: 'Monitored Only',
|
||||
label: translate('MonitoredOnly'),
|
||||
filters: [
|
||||
{
|
||||
key: 'monitored',
|
||||
|
|
|
@ -3,6 +3,7 @@ import { filterTypes, sortDirections } from 'Helpers/Props';
|
|||
import { createThunk, handleThunks } from 'Store/thunks';
|
||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
||||
import serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import { updateItem } from './baseActions';
|
||||
import createHandleActions from './Creators/createHandleActions';
|
||||
import createServerSideCollectionHandlers from './Creators/createServerSideCollectionHandlers';
|
||||
|
@ -29,61 +30,61 @@ export const defaultState = {
|
|||
columns: [
|
||||
{
|
||||
name: 'eventType',
|
||||
columnLabel: 'Event Type',
|
||||
columnLabel: translate('EventType'),
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
},
|
||||
{
|
||||
name: 'artists.sortName',
|
||||
label: 'Artist',
|
||||
label: translate('Artist'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'albums.title',
|
||||
label: 'Album Title',
|
||||
label: translate('AlbumTitle'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'trackTitle',
|
||||
label: 'Track Title',
|
||||
label: translate('TrackTitle'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'quality',
|
||||
label: 'Quality',
|
||||
label: translate('Quality'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'date',
|
||||
label: 'Date',
|
||||
label: translate('Date'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'downloadClient',
|
||||
label: 'Download Client',
|
||||
label: translate('DownloadClient'),
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'indexer',
|
||||
label: 'Indexer',
|
||||
label: translate('Indexer'),
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'releaseGroup',
|
||||
label: 'Release Group',
|
||||
label: translate('ReleaseGroup'),
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'sourceTitle',
|
||||
label: 'Source Title',
|
||||
label: translate('SourceTitle'),
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'details',
|
||||
columnLabel: 'Details',
|
||||
columnLabel: translate('Details'),
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
}
|
||||
|
@ -94,12 +95,12 @@ export const defaultState = {
|
|||
filters: [
|
||||
{
|
||||
key: 'all',
|
||||
label: 'All',
|
||||
label: translate('All'),
|
||||
filters: []
|
||||
},
|
||||
{
|
||||
key: 'grabbed',
|
||||
label: 'Grabbed',
|
||||
label: translate('Grabbed'),
|
||||
filters: [
|
||||
{
|
||||
key: 'eventType',
|
||||
|
@ -110,7 +111,7 @@ export const defaultState = {
|
|||
},
|
||||
{
|
||||
key: 'trackFileImported',
|
||||
label: 'Track Imported',
|
||||
label: translate('TrackImported'),
|
||||
filters: [
|
||||
{
|
||||
key: 'eventType',
|
||||
|
@ -121,7 +122,7 @@ export const defaultState = {
|
|||
},
|
||||
{
|
||||
key: 'failed',
|
||||
label: 'Download Failed',
|
||||
label: translate('DownloadFailed'),
|
||||
filters: [
|
||||
{
|
||||
key: 'eventType',
|
||||
|
@ -132,7 +133,7 @@ export const defaultState = {
|
|||
},
|
||||
{
|
||||
key: 'importFailed',
|
||||
label: 'Import Failed',
|
||||
label: translate('ImportFailed'),
|
||||
filters: [
|
||||
{
|
||||
key: 'eventType',
|
||||
|
@ -143,7 +144,7 @@ export const defaultState = {
|
|||
},
|
||||
{
|
||||
key: 'downloadImported',
|
||||
label: 'Download Imported',
|
||||
label: translate('DownloadImported'),
|
||||
filters: [
|
||||
{
|
||||
key: 'eventType',
|
||||
|
@ -154,7 +155,7 @@ export const defaultState = {
|
|||
},
|
||||
{
|
||||
key: 'deleted',
|
||||
label: 'Deleted',
|
||||
label: translate('Deleted'),
|
||||
filters: [
|
||||
{
|
||||
key: 'eventType',
|
||||
|
@ -165,7 +166,7 @@ export const defaultState = {
|
|||
},
|
||||
{
|
||||
key: 'renamed',
|
||||
label: 'Renamed',
|
||||
label: translate('Renamed'),
|
||||
filters: [
|
||||
{
|
||||
key: 'eventType',
|
||||
|
@ -176,7 +177,7 @@ export const defaultState = {
|
|||
},
|
||||
{
|
||||
key: 'retagged',
|
||||
label: 'Retagged',
|
||||
label: translate('Retagged'),
|
||||
filters: [
|
||||
{
|
||||
key: 'eventType',
|
||||
|
@ -187,7 +188,7 @@ export const defaultState = {
|
|||
},
|
||||
{
|
||||
key: 'ignored',
|
||||
label: 'Ignored',
|
||||
label: translate('Ignored'),
|
||||
filters: [
|
||||
{
|
||||
key: 'eventType',
|
||||
|
|
|
@ -5,6 +5,7 @@ import { sortDirections } from 'Helpers/Props';
|
|||
import { createThunk, handleThunks } from 'Store/thunks';
|
||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
||||
import serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import { set, updateItem } from './baseActions';
|
||||
import createFetchHandler from './Creators/createFetchHandler';
|
||||
import createHandleActions from './Creators/createHandleActions';
|
||||
|
@ -57,86 +58,86 @@ export const defaultState = {
|
|||
columns: [
|
||||
{
|
||||
name: 'status',
|
||||
columnLabel: 'Status',
|
||||
columnLabel: translate('Status'),
|
||||
isSortable: true,
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
},
|
||||
{
|
||||
name: 'artists.sortName',
|
||||
label: 'Artist',
|
||||
label: translate('Artist'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'albums.title',
|
||||
label: 'Album Title',
|
||||
label: translate('AlbumTitle'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'albums.releaseDate',
|
||||
label: 'Album Release Date',
|
||||
label: translate('AlbumReleaseDate'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'quality',
|
||||
label: 'Quality',
|
||||
label: translate('Quality'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'protocol',
|
||||
label: 'Protocol',
|
||||
label: translate('Protocol'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'indexer',
|
||||
label: 'Indexer',
|
||||
label: translate('Indexer'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'downloadClient',
|
||||
label: 'Download Client',
|
||||
label: translate('DownloadClient'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'title',
|
||||
label: 'Release Title',
|
||||
label: translate('ReleaseTitle'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'size',
|
||||
label: 'Size',
|
||||
label: translate('Size'),
|
||||
isSortable: true,
|
||||
isVisibile: false
|
||||
},
|
||||
{
|
||||
name: 'outputPath',
|
||||
label: 'Output Path',
|
||||
label: translate('OutputPath'),
|
||||
isSortable: false,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'estimatedCompletionTime',
|
||||
label: 'Time Left',
|
||||
label: translate('TimeLeft'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'progress',
|
||||
label: 'Progress',
|
||||
label: translate('Progress'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'actions',
|
||||
columnLabel: 'Actions',
|
||||
columnLabel: translate('Actions'),
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ import { createAction } from 'redux-actions';
|
|||
import { filterBuilderTypes, filterBuilderValueTypes, filterTypes, sortDirections } from 'Helpers/Props';
|
||||
import { createThunk, handleThunks } from 'Store/thunks';
|
||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import createFetchHandler from './Creators/createFetchHandler';
|
||||
import createHandleActions from './Creators/createHandleActions';
|
||||
import createSetClientSideCollectionFilterReducer from './Creators/Reducers/createSetClientSideCollectionFilterReducer';
|
||||
|
@ -51,12 +52,12 @@ export const defaultState = {
|
|||
filters: [
|
||||
{
|
||||
key: 'all',
|
||||
label: 'All',
|
||||
label: translate('All'),
|
||||
filters: []
|
||||
},
|
||||
{
|
||||
key: 'discography-pack',
|
||||
label: 'Discography',
|
||||
label: translate('Discography'),
|
||||
filters: [
|
||||
{
|
||||
key: 'discography',
|
||||
|
@ -67,7 +68,7 @@ export const defaultState = {
|
|||
},
|
||||
{
|
||||
key: 'not-discography-pack',
|
||||
label: 'Not Discography',
|
||||
label: translate('NotDiscography'),
|
||||
filters: [
|
||||
{
|
||||
key: 'discography',
|
||||
|
@ -154,51 +155,51 @@ export const defaultState = {
|
|||
filterBuilderProps: [
|
||||
{
|
||||
name: 'title',
|
||||
label: 'Title',
|
||||
label: translate('Title'),
|
||||
type: filterBuilderTypes.STRING
|
||||
},
|
||||
{
|
||||
name: 'age',
|
||||
label: 'Age',
|
||||
label: translate('Age'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
name: 'protocol',
|
||||
label: 'Protocol',
|
||||
label: translate('Protocol'),
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.PROTOCOL
|
||||
},
|
||||
{
|
||||
name: 'indexerId',
|
||||
label: 'Indexer',
|
||||
label: translate('Indexer'),
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.INDEXER
|
||||
},
|
||||
{
|
||||
name: 'size',
|
||||
label: 'Size',
|
||||
label: translate('Size'),
|
||||
type: filterBuilderTypes.NUMBER,
|
||||
valueType: filterBuilderValueTypes.BYTES
|
||||
},
|
||||
{
|
||||
name: 'seeders',
|
||||
label: 'Seeders',
|
||||
label: translate('Seeders'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
name: 'leechers',
|
||||
label: 'Peers',
|
||||
label: translate('Peers'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
name: 'quality',
|
||||
label: 'Quality',
|
||||
label: translate('Quality'),
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.QUALITY
|
||||
},
|
||||
{
|
||||
name: 'rejectionCount',
|
||||
label: 'Rejection Count',
|
||||
label: translate('RejectionCount'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
}
|
||||
],
|
||||
|
|
|
@ -121,12 +121,12 @@ export const defaultState = {
|
|||
filters: [
|
||||
{
|
||||
key: 'all',
|
||||
label: 'All',
|
||||
label: translate('All'),
|
||||
filters: []
|
||||
},
|
||||
{
|
||||
key: 'info',
|
||||
label: 'Info',
|
||||
label: translate('Info'),
|
||||
filters: [
|
||||
{
|
||||
key: 'level',
|
||||
|
@ -137,7 +137,7 @@ export const defaultState = {
|
|||
},
|
||||
{
|
||||
key: 'warn',
|
||||
label: 'Warn',
|
||||
label: translate('Warn'),
|
||||
filters: [
|
||||
{
|
||||
key: 'level',
|
||||
|
@ -148,7 +148,7 @@ export const defaultState = {
|
|||
},
|
||||
{
|
||||
key: 'error',
|
||||
label: 'Error',
|
||||
label: translate('Error'),
|
||||
filters: [
|
||||
{
|
||||
key: 'level',
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import { createAction } from 'redux-actions';
|
||||
import { sortDirections } from 'Helpers/Props';
|
||||
import { createThunk, handleThunks } from 'Store/thunks';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import createFetchHandler from './Creators/createFetchHandler';
|
||||
import createHandleActions from './Creators/createHandleActions';
|
||||
import createSetClientSideCollectionSortReducer from './Creators/Reducers/createSetClientSideCollectionSortReducer';
|
||||
|
@ -27,42 +28,42 @@ export const defaultState = {
|
|||
columns: [
|
||||
{
|
||||
name: 'medium',
|
||||
label: 'Medium',
|
||||
label: translate('Medium'),
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'absoluteTrackNumber',
|
||||
label: 'Track',
|
||||
label: translate('Track'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'title',
|
||||
label: 'Title',
|
||||
label: translate('Title'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'path',
|
||||
label: 'Path',
|
||||
label: translate('Path'),
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'duration',
|
||||
label: 'Duration',
|
||||
label: translate('Duration'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'audioInfo',
|
||||
label: 'Audio Info',
|
||||
label: translate('AudioInfo'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'status',
|
||||
label: 'Status',
|
||||
label: translate('Status'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'actions',
|
||||
columnLabel: 'Actions',
|
||||
columnLabel: translate('Actions'),
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import albumEntities from 'Album/albumEntities';
|
|||
import { sortDirections } from 'Helpers/Props';
|
||||
import { createThunk, handleThunks } from 'Store/thunks';
|
||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import { removeItem, set, updateItem } from './baseActions';
|
||||
import createFetchHandler from './Creators/createFetchHandler';
|
||||
import createHandleActions from './Creators/createHandleActions';
|
||||
|
@ -43,32 +44,32 @@ export const defaultState = {
|
|||
columns: [
|
||||
{
|
||||
name: 'path',
|
||||
label: 'Path',
|
||||
label: translate('Path'),
|
||||
isSortable: true,
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
},
|
||||
{
|
||||
name: 'size',
|
||||
label: 'Size',
|
||||
label: translate('Size'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'dateAdded',
|
||||
label: 'Date Added',
|
||||
label: translate('DateAdded'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'quality',
|
||||
label: 'Quality',
|
||||
label: translate('Quality'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'actions',
|
||||
columnLabel: 'Actions',
|
||||
columnLabel: translate('Actions'),
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ import { createAction } from 'redux-actions';
|
|||
import { filterTypes, sortDirections } from 'Helpers/Props';
|
||||
import { createThunk, handleThunks } from 'Store/thunks';
|
||||
import serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import createBatchToggleAlbumMonitoredHandler from './Creators/createBatchToggleAlbumMonitoredHandler';
|
||||
import createHandleActions from './Creators/createHandleActions';
|
||||
import createServerSideCollectionHandlers from './Creators/createServerSideCollectionHandlers';
|
||||
|
@ -29,25 +30,25 @@ export const defaultState = {
|
|||
columns: [
|
||||
{
|
||||
name: 'artists.sortName',
|
||||
label: 'Artist Name',
|
||||
label: translate('ArtistName'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'albums.title',
|
||||
label: 'Album Title',
|
||||
label: translate('AlbumTitle'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'albumType',
|
||||
label: 'Album Type',
|
||||
label: translate('AlbumType'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'releaseDate',
|
||||
label: 'Release Date',
|
||||
label: translate('ReleaseDate'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
|
@ -58,7 +59,7 @@ export const defaultState = {
|
|||
// },
|
||||
{
|
||||
name: 'actions',
|
||||
columnLabel: 'Actions',
|
||||
columnLabel: translate('Actions'),
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
}
|
||||
|
@ -69,7 +70,7 @@ export const defaultState = {
|
|||
filters: [
|
||||
{
|
||||
key: 'monitored',
|
||||
label: 'Monitored',
|
||||
label: translate('Monitored'),
|
||||
filters: [
|
||||
{
|
||||
key: 'monitored',
|
||||
|
@ -80,7 +81,7 @@ export const defaultState = {
|
|||
},
|
||||
{
|
||||
key: 'unmonitored',
|
||||
label: 'Unmonitored',
|
||||
label: translate('Unmonitored'),
|
||||
filters: [
|
||||
{
|
||||
key: 'monitored',
|
||||
|
@ -103,25 +104,25 @@ export const defaultState = {
|
|||
columns: [
|
||||
{
|
||||
name: 'artists.sortName',
|
||||
label: 'Artist Name',
|
||||
label: translate('ArtistName'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'albums.title',
|
||||
label: 'Album Title',
|
||||
label: translate('AlbumTitle'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'albumType',
|
||||
label: 'Album Type',
|
||||
label: translate('AlbumType'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'releaseDate',
|
||||
label: 'Release Date',
|
||||
label: translate('ReleaseDate'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
|
@ -132,7 +133,7 @@ export const defaultState = {
|
|||
// },
|
||||
{
|
||||
name: 'actions',
|
||||
columnLabel: 'Actions',
|
||||
columnLabel: translate('Actions'),
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
}
|
||||
|
@ -143,7 +144,7 @@ export const defaultState = {
|
|||
filters: [
|
||||
{
|
||||
key: 'monitored',
|
||||
label: 'Monitored',
|
||||
label: translate('Monitored'),
|
||||
filters: [
|
||||
{
|
||||
key: 'monitored',
|
||||
|
@ -154,7 +155,7 @@ export const defaultState = {
|
|||
},
|
||||
{
|
||||
key: 'unmonitored',
|
||||
label: 'Unmonitored',
|
||||
label: translate('Unmonitored'),
|
||||
filters: [
|
||||
{
|
||||
key: 'monitored',
|
||||
|
|
|
@ -76,14 +76,14 @@ class BackupRow extends Component {
|
|||
} = this.state;
|
||||
|
||||
let iconClassName = icons.SCHEDULED;
|
||||
let iconTooltip = translate('IconTooltip');
|
||||
let iconTooltip = translate('Scheduled');
|
||||
|
||||
if (type === 'manual') {
|
||||
iconClassName = icons.INTERACTIVE;
|
||||
iconTooltip = 'Manual';
|
||||
iconTooltip = translate('Manual');
|
||||
} else if (type === 'update') {
|
||||
iconClassName = icons.UPDATE;
|
||||
iconTooltip = 'Before update';
|
||||
iconTooltip = translate('BeforeUpdate');
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
@ -20,17 +20,17 @@ const columns = [
|
|||
},
|
||||
{
|
||||
name: 'name',
|
||||
label: 'Name',
|
||||
label: translate('Name'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'size',
|
||||
label: 'Size',
|
||||
label: translate('Size'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'time',
|
||||
label: 'Time',
|
||||
label: translate('Time'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
|
|
|
@ -14,7 +14,7 @@ import styles from './RestoreBackupModalContent.css';
|
|||
|
||||
function getErrorMessage(error) {
|
||||
if (!error || !error.responseJSON || !error.responseJSON.message) {
|
||||
return 'Error restoring backup';
|
||||
return translate('ErrorRestoringBackup');
|
||||
}
|
||||
|
||||
return error.responseJSON.message;
|
||||
|
@ -146,7 +146,7 @@ class RestoreBackupModalContent extends Component {
|
|||
|
||||
<ModalBody>
|
||||
{
|
||||
!!id && `Would you like to restore the backup '${name}'?`
|
||||
!!id && translate('WouldYouLikeToRestoreBackup', [name])
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -203,11 +203,11 @@ class RestoreBackupModalContent extends Component {
|
|||
|
||||
<ModalFooter>
|
||||
<div className={styles.additionalInfo}>
|
||||
Note: Lidarr will automatically restart and reload the UI during the restore process.
|
||||
{translate('RestoreBackupAdditionalInfo')}
|
||||
</div>
|
||||
|
||||
<Button onPress={onModalClose}>
|
||||
Cancel
|
||||
{translate('Cancel')}
|
||||
</Button>
|
||||
|
||||
<SpinnerButton
|
||||
|
@ -216,7 +216,7 @@ class RestoreBackupModalContent extends Component {
|
|||
isSpinning={isRestoring}
|
||||
onPress={this.onRestorePress}
|
||||
>
|
||||
Restore
|
||||
{translate('Restore')}
|
||||
</SpinnerButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
|
|
@ -19,12 +19,12 @@ import LogFilesTableRow from './LogFilesTableRow';
|
|||
const columns = [
|
||||
{
|
||||
name: 'filename',
|
||||
label: 'Filename',
|
||||
label: translate('Filename'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'lastWriteTime',
|
||||
label: 'Last Write Time',
|
||||
label: translate('LastWriteTime'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
|
|
|
@ -15,17 +15,17 @@ import styles from './DiskSpace.css';
|
|||
const columns = [
|
||||
{
|
||||
name: 'path',
|
||||
label: 'Location',
|
||||
label: translate('Location'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'freeSpace',
|
||||
label: 'Free Space',
|
||||
label: translate('FreeSpace'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'totalSpace',
|
||||
label: 'Total Space',
|
||||
label: translate('TotalSpace'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import React, { Component } from 'react';
|
||||
import FieldSet from 'Components/FieldSet';
|
||||
import Link from 'Components/Link/Link';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import styles from '../styles.css';
|
||||
|
||||
class Donations extends Component {
|
||||
|
@ -10,7 +11,7 @@ class Donations extends Component {
|
|||
|
||||
render() {
|
||||
return (
|
||||
<FieldSet legend='Donations'>
|
||||
<FieldSet legend={translate('Donations')}>
|
||||
<div className={styles.logoContainer} title="Radarr">
|
||||
<Link to="https://radarr.video/donate">
|
||||
<img
|
||||
|
|
|
@ -95,12 +95,12 @@ const columns = [
|
|||
},
|
||||
{
|
||||
name: 'message',
|
||||
label: 'Message',
|
||||
label: translate('Message'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'actions',
|
||||
label: 'Actions',
|
||||
label: translate('Actions'),
|
||||
isVisible: true
|
||||
}
|
||||
];
|
||||
|
|
|
@ -15,27 +15,27 @@ const columns = [
|
|||
},
|
||||
{
|
||||
name: 'commandName',
|
||||
label: 'Name',
|
||||
label: translate('Name'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'queued',
|
||||
label: 'Queued',
|
||||
label: translate('Queued'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'started',
|
||||
label: 'Started',
|
||||
label: translate('Started'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'ended',
|
||||
label: 'Ended',
|
||||
label: translate('Ended'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'duration',
|
||||
label: 'Duration',
|
||||
label: translate('Duration'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
|
|
|
@ -10,27 +10,27 @@ import ScheduledTaskRowConnector from './ScheduledTaskRowConnector';
|
|||
const columns = [
|
||||
{
|
||||
name: 'name',
|
||||
label: 'Name',
|
||||
label: translate('Name'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'interval',
|
||||
label: 'Interval',
|
||||
label: translate('Interval'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'lastExecution',
|
||||
label: 'Last Execution',
|
||||
label: translate('Last Execution'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'lastDuration',
|
||||
label: 'Last Duration',
|
||||
label: translate('Last Duration'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'nextExecution',
|
||||
label: 'Next Execution',
|
||||
label: translate('Next Execution'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
|
|
|
@ -25,17 +25,17 @@ import styles from './TrackFileEditorModalContent.css';
|
|||
const columns = [
|
||||
{
|
||||
name: 'trackNumber',
|
||||
label: 'Track',
|
||||
label: translate('Track'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'path',
|
||||
label: 'Path',
|
||||
label: translate('Path'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'quality',
|
||||
label: 'Quality',
|
||||
label: translate('Quality'),
|
||||
isVisible: true
|
||||
}
|
||||
];
|
||||
|
@ -230,7 +230,7 @@ class TrackFileEditorModalContent extends Component {
|
|||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Close
|
||||
{translate('Close')}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue