fix(ui): correct language usage re: "sync" vs. "scan" (#1079)

pull/1105/head
TheCatLady 4 years ago committed by GitHub
parent 92508b3f42
commit e98f2b9605
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1716,13 +1716,13 @@ paths:
$ref: '#/components/schemas/PlexLibrary' $ref: '#/components/schemas/PlexLibrary'
/settings/plex/sync: /settings/plex/sync:
get: get:
summary: Get status of full Plex library sync summary: Get status of full Plex library scan
description: Returns sync progress in a JSON array. description: Returns scan progress in a JSON array.
tags: tags:
- settings - settings
responses: responses:
'200': '200':
description: Status of Plex sync description: Status of Plex scan
content: content:
application/json: application/json:
schema: schema:
@ -1744,8 +1744,8 @@ paths:
items: items:
$ref: '#/components/schemas/PlexLibrary' $ref: '#/components/schemas/PlexLibrary'
post: post:
summary: Start full Plex library sync summary: Start full Plex library scan
description: Runs a full Plex library sync and returns the progress in a JSON array. description: Runs a full Plex library scan and returns the progress in a JSON array.
tags: tags:
- settings - settings
requestBody: requestBody:
@ -1762,7 +1762,7 @@ paths:
example: false example: false
responses: responses:
'200': '200':
description: Status of Plex sync description: Status of Plex scan
content: content:
application/json: application/json:
schema: schema:

@ -77,7 +77,7 @@ class JobPlexSync {
if (!metadata.Guid) { if (!metadata.Guid) {
logger.debug('No Guid metadata for this title. Skipping', { logger.debug('No Guid metadata for this title. Skipping', {
label: 'Plex Sync', label: 'Plex Scan',
ratingKey: plexitem.ratingKey, ratingKey: plexitem.ratingKey,
}); });
return; return;
@ -794,7 +794,7 @@ class JobPlexSync {
level: 'info' | 'error' | 'debug' | 'warn' = 'debug', level: 'info' | 'error' | 'debug' | 'warn' = 'debug',
optional?: Record<string, unknown> optional?: Record<string, unknown>
): void { ): void {
logger[level](message, { label: 'Plex Sync', ...optional }); logger[level](message, { label: 'Plex Scan', ...optional });
} }
// checks if any of this.libraries has Hama agent set in Plex // checks if any of this.libraries has Hama agent set in Plex
@ -812,7 +812,7 @@ class JobPlexSync {
const settings = getSettings(); const settings = getSettings();
const sessionId = uuid(); const sessionId = uuid();
this.sessionId = sessionId; this.sessionId = sessionId;
logger.info('Plex Sync Starting', { sessionId, label: 'Plex Sync' }); logger.info('Plex scan starting', { sessionId, label: 'Plex Scan' });
try { try {
this.running = true; this.running = true;
const userRepository = getRepository(User); const userRepository = getRepository(User);
@ -822,7 +822,7 @@ class JobPlexSync {
}); });
if (!admin) { if (!admin) {
return this.log('No admin configured. Plex sync skipped.', 'warn'); return this.log('No admin configured. Plex scan skipped.', 'warn');
} }
this.plexClient = new PlexAPI({ plexToken: admin.plexToken }); this.plexClient = new PlexAPI({ plexToken: admin.plexToken });
@ -896,7 +896,7 @@ class JobPlexSync {
); );
} catch (e) { } catch (e) {
logger.error('Sync interrupted', { logger.error('Sync interrupted', {
label: 'Plex Sync', label: 'Plex Scan',
errorMessage: e.message, errorMessage: e.message,
}); });
} finally { } finally {

@ -32,7 +32,7 @@ class JobRadarrSync {
const settings = getSettings(); const settings = getSettings();
const sessionId = uuid(); const sessionId = uuid();
this.sessionId = sessionId; this.sessionId = sessionId;
this.log('Radarr sync starting', 'info', { sessionId }); this.log('Radarr scan starting', 'info', { sessionId });
try { try {
this.running = true; this.running = true;
@ -75,7 +75,7 @@ class JobRadarrSync {
} }
} }
this.log('Radarr sync complete', 'info'); this.log('Radarr scan complete', 'info');
} catch (e) { } catch (e) {
this.log('Something went wrong.', 'error', { errorMessage: e.message }); this.log('Something went wrong.', 'error', { errorMessage: e.message });
} finally { } finally {
@ -241,7 +241,7 @@ class JobRadarrSync {
level: 'info' | 'error' | 'debug' | 'warn' = 'debug', level: 'info' | 'error' | 'debug' | 'warn' = 'debug',
optional?: Record<string, unknown> optional?: Record<string, unknown>
): void { ): void {
logger[level](message, { label: 'Radarr Sync', ...optional }); logger[level](message, { label: 'Radarr Scan', ...optional });
} }
} }

@ -17,13 +17,13 @@ interface ScheduledJob {
export const scheduledJobs: ScheduledJob[] = []; export const scheduledJobs: ScheduledJob[] = [];
export const startJobs = (): void => { export const startJobs = (): void => {
// Run recently added plex sync every 5 minutes // Run recently added plex scan every 5 minutes
scheduledJobs.push({ scheduledJobs.push({
id: 'plex-recently-added-sync', id: 'plex-recently-added-scan',
name: 'Plex Recently Added Sync', name: 'Plex Recently Added Scan',
type: 'process', type: 'process',
job: schedule.scheduleJob('0 */5 * * * *', () => { job: schedule.scheduleJob('0 */5 * * * *', () => {
logger.info('Starting scheduled job: Plex Recently Added Sync', { logger.info('Starting scheduled job: Plex Recently Added Scan', {
label: 'Jobs', label: 'Jobs',
}); });
jobPlexRecentSync.run(); jobPlexRecentSync.run();
@ -32,39 +32,41 @@ export const startJobs = (): void => {
cancelFn: () => jobPlexRecentSync.cancel(), cancelFn: () => jobPlexRecentSync.cancel(),
}); });
// Run full plex sync every 24 hours // Run full plex scan every 24 hours
scheduledJobs.push({ scheduledJobs.push({
id: 'plex-full-sync', id: 'plex-full-scan',
name: 'Plex Full Library Sync', name: 'Plex Full Library Scan',
type: 'process', type: 'process',
job: schedule.scheduleJob('0 0 3 * * *', () => { job: schedule.scheduleJob('0 0 3 * * *', () => {
logger.info('Starting scheduled job: Plex Full Sync', { label: 'Jobs' }); logger.info('Starting scheduled job: Plex Full Library Scan', {
label: 'Jobs',
});
jobPlexFullSync.run(); jobPlexFullSync.run();
}), }),
running: () => jobPlexFullSync.status().running, running: () => jobPlexFullSync.status().running,
cancelFn: () => jobPlexFullSync.cancel(), cancelFn: () => jobPlexFullSync.cancel(),
}); });
// Run full radarr sync every 24 hours // Run full radarr scan every 24 hours
scheduledJobs.push({ scheduledJobs.push({
id: 'radarr-sync', id: 'radarr-scan',
name: 'Radarr Sync', name: 'Radarr Scan',
type: 'process', type: 'process',
job: schedule.scheduleJob('0 0 4 * * *', () => { job: schedule.scheduleJob('0 0 4 * * *', () => {
logger.info('Starting scheduled job: Radarr Sync', { label: 'Jobs' }); logger.info('Starting scheduled job: Radarr Scan', { label: 'Jobs' });
jobRadarrSync.run(); jobRadarrSync.run();
}), }),
running: () => jobRadarrSync.status().running, running: () => jobRadarrSync.status().running,
cancelFn: () => jobRadarrSync.cancel(), cancelFn: () => jobRadarrSync.cancel(),
}); });
// Run full sonarr sync every 24 hours // Run full sonarr scan every 24 hours
scheduledJobs.push({ scheduledJobs.push({
id: 'sonarr-sync', id: 'sonarr-scan',
name: 'Sonarr Sync', name: 'Sonarr Scan',
type: 'process', type: 'process',
job: schedule.scheduleJob('0 30 4 * * *', () => { job: schedule.scheduleJob('0 30 4 * * *', () => {
logger.info('Starting scheduled job: Sonarr Sync', { label: 'Jobs' }); logger.info('Starting scheduled job: Sonarr Scan', { label: 'Jobs' });
jobSonarrSync.run(); jobSonarrSync.run();
}), }),
running: () => jobSonarrSync.status().running, running: () => jobSonarrSync.status().running,

@ -35,7 +35,7 @@ class JobSonarrSync {
const settings = getSettings(); const settings = getSettings();
const sessionId = uuid(); const sessionId = uuid();
this.sessionId = sessionId; this.sessionId = sessionId;
this.log('Sonarr sync starting', 'info', { sessionId }); this.log('Sonarr scan starting', 'info', { sessionId });
try { try {
this.running = true; this.running = true;
@ -78,7 +78,7 @@ class JobSonarrSync {
} }
} }
this.log('Sonarr sync complete', 'info'); this.log('Sonarr scan complete', 'info');
} catch (e) { } catch (e) {
this.log('Something went wrong.', 'error', { errorMessage: e.message }); this.log('Something went wrong.', 'error', { errorMessage: e.message });
} finally { } finally {
@ -374,7 +374,7 @@ class JobSonarrSync {
level: 'info' | 'error' | 'debug' | 'warn' = 'debug', level: 'info' | 'error' | 'debug' | 'warn' = 'debug',
optional?: Record<string, unknown> optional?: Record<string, unknown>
): void { ): void {
logger[level](message, { label: 'Sonarr Sync', ...optional }); logger[level](message, { label: 'Sonarr Scan', ...optional });
} }
} }

@ -60,7 +60,8 @@ const messages = defineMessages({
manageModalNoRequests: 'No Requests', manageModalNoRequests: 'No Requests',
manageModalClearMedia: 'Clear All Media Data', manageModalClearMedia: 'Clear All Media Data',
manageModalClearMediaWarning: manageModalClearMediaWarning:
'This will irreversibly remove all data for this movie, including any requests. If this item exists in your Plex library, the media information will be recreated during the next sync.', 'This will irreversibly remove all data for this movie, including any requests.\
If this item exists in your Plex library, the media information will be recreated during the next scan.',
approve: 'Approve', approve: 'Approve',
decline: 'Decline', decline: 'Decline',
studio: 'Studio', studio: 'Studio',

@ -35,7 +35,7 @@ const messages = defineMessages({
apiKeyPlaceholder: 'Your Radarr API key', apiKeyPlaceholder: 'Your Radarr API key',
baseUrl: 'Base URL', baseUrl: 'Base URL',
baseUrlPlaceholder: 'Example: /radarr', baseUrlPlaceholder: 'Example: /radarr',
syncEnabled: 'Enable Sync', syncEnabled: 'Enable Scan',
externalUrl: 'External URL', externalUrl: 'External URL',
externalUrlPlaceholder: 'External URL pointing to your Radarr server', externalUrlPlaceholder: 'External URL pointing to your Radarr server',
qualityprofile: 'Quality Profile', qualityprofile: 'Quality Profile',

@ -19,7 +19,9 @@ import { formatBytes } from '../../../utils/numberHelpers';
const messages: { [messageName: string]: MessageDescriptor } = defineMessages({ const messages: { [messageName: string]: MessageDescriptor } = defineMessages({
jobs: 'Jobs', jobs: 'Jobs',
jobsDescription: jobsDescription:
'Overseerr performs certain maintenance tasks as regularly-scheduled jobs, but they can also be manually triggered below. Manually running a job will not alter its schedule.', 'Overseerr performs certain maintenance tasks as regularly-scheduled jobs,\
but they can also be manually triggered below.\
Manually running a job will not alter its schedule.',
jobname: 'Job Name', jobname: 'Job Name',
jobtype: 'Type', jobtype: 'Type',
nextexecution: 'Next Execution', nextexecution: 'Next Execution',
@ -41,10 +43,10 @@ const messages: { [messageName: string]: MessageDescriptor } = defineMessages({
cachevsize: 'Value Size', cachevsize: 'Value Size',
flushcache: 'Flush Cache', flushcache: 'Flush Cache',
unknownJob: 'Unknown Job', unknownJob: 'Unknown Job',
'plex-recently-added-sync': 'Plex Recently Added Sync', 'plex-recently-added-scan': 'Plex Recently Added Scan',
'plex-full-sync': 'Plex Full Library Sync', 'plex-full-scan': 'Plex Full Library Scan',
'radarr-sync': 'Radarr Sync', 'radarr-scan': 'Radarr Scan',
'sonarr-sync': 'Sonarr Sync', 'sonarr-scan': 'Sonarr Scan',
'download-sync': 'Download Sync', 'download-sync': 'Download Sync',
'download-sync-reset': 'Download Sync Reset', 'download-sync-reset': 'Download Sync Reset',
}); });

@ -49,8 +49,8 @@ const messages = defineMessages({
plexlibraries: 'Plex Libraries', plexlibraries: 'Plex Libraries',
plexlibrariesDescription: plexlibrariesDescription:
'The libraries Overseerr scans for titles. Set up and save your Plex connection settings, then click the button below if no libraries are listed.', 'The libraries Overseerr scans for titles. Set up and save your Plex connection settings, then click the button below if no libraries are listed.',
syncing: 'Syncing', scanning: 'Scanning…',
sync: 'Sync Plex Libraries', scan: 'Scan Plex Libraries',
manualscan: 'Manual Library Scan', manualscan: 'Manual Library Scan',
manualscanDescription: manualscanDescription:
"Normally, this will only be run once every 24 hours. Overseerr will check your Plex server's recently added more aggressively. If this is your first time configuring Plex, a one-time full manual library scan is recommended!", "Normally, this will only be run once every 24 hours. Overseerr will check your Plex server's recently added more aggressively. If this is your first time configuring Plex, a one-time full manual library scan is recommended!",
@ -563,8 +563,8 @@ const SettingsPlex: React.FC<SettingsPlexProps> = ({ onComplete }) => {
/> />
</svg> </svg>
{isSyncing {isSyncing
? intl.formatMessage(messages.syncing) ? intl.formatMessage(messages.scanning)
: intl.formatMessage(messages.sync)} : intl.formatMessage(messages.scan)}
</Button> </Button>
<ul className="grid grid-cols-1 gap-5 mt-6 sm:gap-6 sm:grid-cols-2 lg:grid-cols-4"> <ul className="grid grid-cols-1 gap-5 mt-6 sm:gap-6 sm:grid-cols-2 lg:grid-cols-4">
{data?.libraries.map((library) => ( {data?.libraries.map((library) => (

@ -52,7 +52,7 @@ const messages = defineMessages({
testFirstRootFolders: 'Test connection to load root folders', testFirstRootFolders: 'Test connection to load root folders',
loadinglanguageprofiles: 'Loading language profiles…', loadinglanguageprofiles: 'Loading language profiles…',
testFirstLanguageProfiles: 'Test connection to load language profiles', testFirstLanguageProfiles: 'Test connection to load language profiles',
syncEnabled: 'Enable Sync', syncEnabled: 'Enable Scan',
externalUrl: 'External URL', externalUrl: 'External URL',
externalUrlPlaceholder: 'External URL pointing to your Sonarr server', externalUrlPlaceholder: 'External URL pointing to your Sonarr server',
preventSearch: 'Disable Auto-Search', preventSearch: 'Disable Auto-Search',

@ -22,8 +22,9 @@ const messages = defineMessages({
configureplex: 'Configure Plex', configureplex: 'Configure Plex',
configureservices: 'Configure Services', configureservices: 'Configure Services',
tip: 'Tip', tip: 'Tip',
syncingbackground: scanbackground:
'Syncing will run in the background. You can continue the setup process in the meantime.', 'Scanning will run in the background.\
You can continue the setup process in the meantime.',
}); });
const Setup: React.FC = () => { const Setup: React.FC = () => {
@ -104,7 +105,7 @@ const Setup: React.FC = () => {
<span className="mr-2"> <span className="mr-2">
<Badge>{intl.formatMessage(messages.tip)}</Badge> <Badge>{intl.formatMessage(messages.tip)}</Badge>
</span> </span>
{intl.formatMessage(messages.syncingbackground)} {intl.formatMessage(messages.scanbackground)}
</div> </div>
<div className="actions"> <div className="actions">
<div className="flex justify-end"> <div className="flex justify-end">

@ -56,7 +56,8 @@ const messages = defineMessages({
manageModalNoRequests: 'No Requests', manageModalNoRequests: 'No Requests',
manageModalClearMedia: 'Clear All Media Data', manageModalClearMedia: 'Clear All Media Data',
manageModalClearMediaWarning: manageModalClearMediaWarning:
'This will irreversibly remove all data for this TV series, including any requests. If this item exists in your Plex library, the media information will be recreated during the next sync.', 'This will irreversibly remove all data for this TV series, including any requests.\
If this item exists in your Plex library, the media information will be recreated during the next scan.',
approve: 'Approve', approve: 'Approve',
decline: 'Decline', decline: 'Decline',
showtype: 'Show Type', showtype: 'Show Type',

@ -63,7 +63,7 @@
"components.MovieDetails.decline": "Decline", "components.MovieDetails.decline": "Decline",
"components.MovieDetails.downloadstatus": "Download Status", "components.MovieDetails.downloadstatus": "Download Status",
"components.MovieDetails.manageModalClearMedia": "Clear All Media Data", "components.MovieDetails.manageModalClearMedia": "Clear All Media Data",
"components.MovieDetails.manageModalClearMediaWarning": "* This will irreversibly remove all data for this movie, including any requests. If this item exists in your Plex library, the media information will be recreated during the next sync.", "components.MovieDetails.manageModalClearMediaWarning": "* This will irreversibly remove all data for this movie, including any requests. If this item exists in your Plex library, the media information will be recreated during the next scan.",
"components.MovieDetails.manageModalNoRequests": "No Requests", "components.MovieDetails.manageModalNoRequests": "No Requests",
"components.MovieDetails.manageModalRequests": "Requests", "components.MovieDetails.manageModalRequests": "Requests",
"components.MovieDetails.manageModalTitle": "Manage Movie", "components.MovieDetails.manageModalTitle": "Manage Movie",
@ -366,7 +366,7 @@
"components.Settings.RadarrModal.servername": "Server Name", "components.Settings.RadarrModal.servername": "Server Name",
"components.Settings.RadarrModal.servernamePlaceholder": "A Radarr Server", "components.Settings.RadarrModal.servernamePlaceholder": "A Radarr Server",
"components.Settings.RadarrModal.ssl": "SSL", "components.Settings.RadarrModal.ssl": "SSL",
"components.Settings.RadarrModal.syncEnabled": "Enable Sync", "components.Settings.RadarrModal.syncEnabled": "Enable Scan",
"components.Settings.RadarrModal.test": "Test", "components.Settings.RadarrModal.test": "Test",
"components.Settings.RadarrModal.testFirstQualityProfiles": "Test connection to load quality profiles", "components.Settings.RadarrModal.testFirstQualityProfiles": "Test connection to load quality profiles",
"components.Settings.RadarrModal.testFirstRootFolders": "Test connection to load root folders", "components.Settings.RadarrModal.testFirstRootFolders": "Test connection to load root folders",
@ -426,12 +426,12 @@
"components.Settings.SettingsJobsCache.jobstarted": "{jobname} started.", "components.Settings.SettingsJobsCache.jobstarted": "{jobname} started.",
"components.Settings.SettingsJobsCache.jobtype": "Type", "components.Settings.SettingsJobsCache.jobtype": "Type",
"components.Settings.SettingsJobsCache.nextexecution": "Next Execution", "components.Settings.SettingsJobsCache.nextexecution": "Next Execution",
"components.Settings.SettingsJobsCache.plex-full-sync": "Plex Full Library Sync", "components.Settings.SettingsJobsCache.plex-full-scan": "Plex Full Library Scan",
"components.Settings.SettingsJobsCache.plex-recently-added-sync": "Plex Recently Added Sync", "components.Settings.SettingsJobsCache.plex-recently-added-scan": "Plex Recently Added Scan",
"components.Settings.SettingsJobsCache.process": "Process", "components.Settings.SettingsJobsCache.process": "Process",
"components.Settings.SettingsJobsCache.radarr-sync": "Radarr Sync", "components.Settings.SettingsJobsCache.radarr-scan": "Radarr Scan",
"components.Settings.SettingsJobsCache.runnow": "Run Now", "components.Settings.SettingsJobsCache.runnow": "Run Now",
"components.Settings.SettingsJobsCache.sonarr-sync": "Sonarr Sync", "components.Settings.SettingsJobsCache.sonarr-scan": "Sonarr Scan",
"components.Settings.SettingsJobsCache.unknownJob": "Unknown Job", "components.Settings.SettingsJobsCache.unknownJob": "Unknown Job",
"components.Settings.SonarrModal.add": "Add Server", "components.Settings.SonarrModal.add": "Add Server",
"components.Settings.SonarrModal.animelanguageprofile": "Anime Language Profile", "components.Settings.SonarrModal.animelanguageprofile": "Anime Language Profile",
@ -465,7 +465,7 @@
"components.Settings.SonarrModal.servername": "Server Name", "components.Settings.SonarrModal.servername": "Server Name",
"components.Settings.SonarrModal.servernamePlaceholder": "A Sonarr Server", "components.Settings.SonarrModal.servernamePlaceholder": "A Sonarr Server",
"components.Settings.SonarrModal.ssl": "SSL", "components.Settings.SonarrModal.ssl": "SSL",
"components.Settings.SonarrModal.syncEnabled": "Enable Sync", "components.Settings.SonarrModal.syncEnabled": "Enable Scan",
"components.Settings.SonarrModal.test": "Test", "components.Settings.SonarrModal.test": "Test",
"components.Settings.SonarrModal.testFirstLanguageProfiles": "Test connection to load language profiles", "components.Settings.SonarrModal.testFirstLanguageProfiles": "Test connection to load language profiles",
"components.Settings.SonarrModal.testFirstQualityProfiles": "Test connection to load quality profiles", "components.Settings.SonarrModal.testFirstQualityProfiles": "Test connection to load quality profiles",
@ -544,6 +544,8 @@
"components.Settings.regionTip": "Filter content by region (only applies to the \"Popular\" and \"Upcoming\" categories)", "components.Settings.regionTip": "Filter content by region (only applies to the \"Popular\" and \"Upcoming\" categories)",
"components.Settings.save": "Save Changes", "components.Settings.save": "Save Changes",
"components.Settings.saving": "Saving…", "components.Settings.saving": "Saving…",
"components.Settings.scan": "Scan Plex Libraries",
"components.Settings.scanning": "Scanning…",
"components.Settings.serverConnected": "connected", "components.Settings.serverConnected": "connected",
"components.Settings.serverLocal": "local", "components.Settings.serverLocal": "local",
"components.Settings.serverRemote": "remote", "components.Settings.serverRemote": "remote",
@ -562,8 +564,6 @@
"components.Settings.sonarrsettings": "Sonarr Settings", "components.Settings.sonarrsettings": "Sonarr Settings",
"components.Settings.ssl": "SSL", "components.Settings.ssl": "SSL",
"components.Settings.startscan": "Start Scan", "components.Settings.startscan": "Start Scan",
"components.Settings.sync": "Sync Plex Libraries",
"components.Settings.syncing": "Syncing…",
"components.Settings.timeout": "Timeout", "components.Settings.timeout": "Timeout",
"components.Settings.toastApiKeyFailure": "Something went wrong while generating a new API key.", "components.Settings.toastApiKeyFailure": "Something went wrong while generating a new API key.",
"components.Settings.toastApiKeySuccess": "New API key generated!", "components.Settings.toastApiKeySuccess": "New API key generated!",
@ -589,9 +589,9 @@
"components.Setup.finish": "Finish Setup", "components.Setup.finish": "Finish Setup",
"components.Setup.finishing": "Finishing…", "components.Setup.finishing": "Finishing…",
"components.Setup.loginwithplex": "Sign in with Plex", "components.Setup.loginwithplex": "Sign in with Plex",
"components.Setup.scanbackground": "Scanning will run in the background. You can continue the setup process in the meantime.",
"components.Setup.setup": "Setup", "components.Setup.setup": "Setup",
"components.Setup.signinMessage": "Get started by signing in with your Plex account", "components.Setup.signinMessage": "Get started by signing in with your Plex account",
"components.Setup.syncingbackground": "Syncing will run in the background. You can continue the setup process in the meantime.",
"components.Setup.tip": "Tip", "components.Setup.tip": "Tip",
"components.Setup.welcome": "Welcome to Overseerr", "components.Setup.welcome": "Welcome to Overseerr",
"components.Slider.noresults": "No results.", "components.Slider.noresults": "No results.",
@ -614,7 +614,7 @@
"components.TvDetails.downloadstatus": "Download Status", "components.TvDetails.downloadstatus": "Download Status",
"components.TvDetails.firstAirDate": "First Air Date", "components.TvDetails.firstAirDate": "First Air Date",
"components.TvDetails.manageModalClearMedia": "Clear All Media Data", "components.TvDetails.manageModalClearMedia": "Clear All Media Data",
"components.TvDetails.manageModalClearMediaWarning": "* This will irreversibly remove all data for this TV series, including any requests. If this item exists in your Plex library, the media information will be recreated during the next sync.", "components.TvDetails.manageModalClearMediaWarning": "* This will irreversibly remove all data for this TV series, including any requests. If this item exists in your Plex library, the media information will be recreated during the next scan.",
"components.TvDetails.manageModalNoRequests": "No Requests", "components.TvDetails.manageModalNoRequests": "No Requests",
"components.TvDetails.manageModalRequests": "Requests", "components.TvDetails.manageModalRequests": "Requests",
"components.TvDetails.manageModalTitle": "Manage Series", "components.TvDetails.manageModalTitle": "Manage Series",

Loading…
Cancel
Save