returnnewHealthCheck(GetType(),HealthCheckResult.Error,"All download clients are unavailable due to failures","#download-clients-are-unavailable-due-to-failures");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,string.Format("Download clients unavailable due to failures: {0}",string.Join(", ",backOffProviders.Select(v=>v.Provider.Definition.Name))),"#download-clients-are-unavailable-due-to-failures");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,"All import lists are unavailable due to failures","#import-lists-are-unavailable-due-to-failures");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,string.Format("Import lists unavailable due to failures: {0}",string.Join(", ",backOffProviders.Select(v=>v.ImportList.Definition.Name))),"#import-lists-are-unavailable-due-to-failures");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,"No indexers available with RSS sync enabled, Readarr will not grab new releases automatically");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,"No indexers available with Automatic Search enabled, Readarr will not provide any automatic search results");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,"No indexers available with Interactive Search enabled, Readarr will not provide any interactive search results");
returnnewHealthCheck(GetType(),HealthCheckResult.Warning,string.Format("Indexers unavailable due to failures: {0}",string.Join(", ",backOffProviders.Select(v=>v.Provider.Definition.Name))),"#indexers-are-unavailable-due-to-failures");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,"Mount containing a author path is mounted read-only: "+string.Join(",",mounts.Select(m=>m.Name)),"#author-mount-ro");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,string.Format("Failed to resolve the IP Address for the Configured Proxy Host {0}",_configService.ProxyHostname));
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"Remote download client {client.Definition.Name} places downloads in {folder.FullPath} but this is not a valid {_osInfo.Name} path. Review your remote path mappings and download client settings.","#bad-remote-path-mapping");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"You are using docker; download client {client.Definition.Name} places downloads in {folder.FullPath} but this is not a valid {_osInfo.Name} path. Review your remote path mappings and download client settings.","#docker-bad-remote-path-mapping");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"Local download client {client.Definition.Name} places downloads in {folder.FullPath} but this is not a valid {_osInfo.Name} path. Review your download client settings.","#bad-download-client-settings");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"You are using docker; download client {client.Definition.Name} places downloads in {folder.FullPath} but this directory does not appear to exist inside the container. Review your remote path mappings and container volume settings.","#docker-bad-remote-path-mapping");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"Remote download client {client.Definition.Name} places downloads in {folder.FullPath} but this directory does not appear to exist. Likely missing or incorrect remote path mapping.","#bad-remote-path-mapping");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"Download client {client.Definition.Name} places downloads in {folder.FullPath} but Readarr cannot see this directory. You may need to adjust the folder's permissions.","#permissions-error");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"Readarr can see but not access downloaded track {trackPath}. Likely permissions error.","#permissions-error");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"Remote download client {client.Definition.Name} reported files in {dlpath} but this is not a valid {_osInfo.Name} path. Review your remote path mappings and download client settings.","#bad-remote-path-mapping");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"You are using docker; download client {client.Definition.Name} reported files in {dlpath} but this is not a valid {_osInfo.Name} path. Review your remote path mappings and download client settings.","#docker-bad-remote-path-mapping");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"Local download client {client.Definition.Name} reported files in {dlpath} but this is not a valid {_osInfo.Name} path. Review your download client settings.","#bad-download-client-settings");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"Readarr can see but not access download directory {dlpath}. Likely permissions error.","#permissions-error");
// if it's a remote client/docker, likely missing path mappings
// if it's a remote client/docker, likely missing path mappings
if(_osInfo.IsDocker)
if(_osInfo.IsDocker)
{
{
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"You are using docker; download client {client.Definition.Name} reported files in {dlpath} but this directory does not appear to exist inside the container. Review your remote path mappings and container volume settings.","#docker-bad-remote-path-mapping");
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"Remote download client {client.Definition.Name} reported files in {dlpath} but this directory does not appear to exist. Likely missing remote path mapping.","#bad-remote-path-mapping");
// path mappings shouldn't be needed locally so probably a permissions issue
// path mappings shouldn't be needed locally so probably a permissions issue
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"Download client {client.Definition.Name} reported files in {dlpath} but Readarr cannot see this directory. You may need to adjust the folder's permissions.","#permissions-error");
_logger.Error("System time mismatch. SystemTime: {0} Expected Time: {1}. Update system time",systemTime,result.DateTimeUtc);
_logger.Error("System time mismatch. SystemTime: {0} Expected Time: {1}. Update system time",systemTime,result.DateTimeUtc);
returnnewHealthCheck(GetType(),HealthCheckResult.Error,$"System time is off by more than 1 day. Scheduled tasks may not run correctly until the time is corrected");
"IncludeHealthWarningsHelpText":"Include Health Warnings",
"IncludeHealthWarningsHelpText":"Include Health Warnings",
"IncludePreferredWhenRenaming":"Include Preferred when Renaming",
"IncludePreferredWhenRenaming":"Include Preferred when Renaming",
"IncludeUnknownAuthorItemsHelpText":"Show items without a author in the queue, this could include removed authors, movies or anything else in Readarr's category",
"IncludeUnknownAuthorItemsHelpText":"Show items without a author in the queue, this could include removed authors, movies or anything else in Readarr's category",
@ -306,10 +311,14 @@
"IndexerIdHelpTextWarning":"Using a specific indexer with preferred words can lead to duplicate releases being grabbed",
"IndexerIdHelpTextWarning":"Using a specific indexer with preferred words can lead to duplicate releases being grabbed",
"IndexerIdvalue0IncludeInPreferredWordsRenamingFormat":"Include in {Preferred Words} renaming format",
"IndexerIdvalue0IncludeInPreferredWordsRenamingFormat":"Include in {Preferred Words} renaming format",
"IndexerIdvalue0OnlySupportedWhenIndexerIsSetToAll":"Only supported when Indexer is set to (All)",
"IndexerIdvalue0OnlySupportedWhenIndexerIsSetToAll":"Only supported when Indexer is set to (All)",
"IndexerLongTermStatusCheckAllClientMessage":"All indexers are unavailable due to failures for more than 6 hours",
"IndexerPriority":"Indexer Priority",
"IndexerPriority":"Indexer Priority",
"IndexerRssHealthCheckNoIndexers":"No indexers available with RSS sync enabled, Readarr will not grab new releases automatically",
"Indexers":"Indexers",
"Indexers":"Indexers",
"IndexerSearchCheckNoAutomaticMessage":"No indexers available with Automatic Search enabled, Readarr will not provide any automatic search results",
"IndexerSettings":"Indexer Settings",
"IndexerSettings":"Indexer Settings",
"IndexersSettingsSummary":"Download clients, download handling and remote path mappings",
"IndexersSettingsSummary":"Download clients, download handling and remote path mappings",
"IndexerStatusCheckAllClientMessage":"All indexers are unavailable due to failures",
"Interval":"Interval",
"Interval":"Interval",
"ISBN":"ISBN",
"ISBN":"ISBN",
"IsCalibreLibraryHelpText":"Use Calibre Content Server to manipulate library",
"IsCalibreLibraryHelpText":"Use Calibre Content Server to manipulate library",
@ -402,6 +411,7 @@
"MonitorNewItemsHelpText":"Which new books should be monitored",
"MonitorNewItemsHelpText":"Which new books should be monitored",
"MonoVersion":"Mono Version",
"MonoVersion":"Mono Version",
"MoreInfo":"More Info",
"MoreInfo":"More Info",
"MountCheckMessage":"Mount containing an author path is mounted read-only: ",
"MusicBrainzAuthorID":"MusicBrainz Author ID",
"MusicBrainzAuthorID":"MusicBrainz Author ID",
"MusicBrainzBookID":"MusicBrainz Book ID",
"MusicBrainzBookID":"MusicBrainz Book ID",
"MusicbrainzId":"Musicbrainz Id",
"MusicbrainzId":"Musicbrainz Id",
@ -495,6 +505,7 @@
"ProtocolHelpText":"Choose which protocol(s) to use and which one is preferred when choosing between otherwise equal releases",
"ProtocolHelpText":"Choose which protocol(s) to use and which one is preferred when choosing between otherwise equal releases",
"Proxy":"Proxy",
"Proxy":"Proxy",
"ProxyBypassFilterHelpText":"Use ',' as a separator, and '*.' as a wildcard for subdomains",
"ProxyBypassFilterHelpText":"Use ',' as a separator, and '*.' as a wildcard for subdomains",
"ProxyCheckResolveIpMessage":"Failed to resolve the IP Address for the Configured Proxy Host {0}",
"ProxyPasswordHelpText":"You only need to enter a username and password if one is required. Leave them blank otherwise.",
"ProxyPasswordHelpText":"You only need to enter a username and password if one is required. Leave them blank otherwise.",
"ProxyType":"Proxy Type",
"ProxyType":"Proxy Type",
"ProxyUsernameHelpText":"You only need to enter a username and password if one is required. Leave them blank otherwise.",
"ProxyUsernameHelpText":"You only need to enter a username and password if one is required. Leave them blank otherwise.",
@ -538,6 +549,7 @@
"Reload":"Reload",
"Reload":"Reload",
"RemotePath":"Remote Path",
"RemotePath":"Remote Path",
"RemotePathHelpText":"Root path to the directory that the Download Client accesses",
"RemotePathHelpText":"Root path to the directory that the Download Client accesses",
"RemotePathMappingCheckWrongOSPath":"Remote download client {0} places downloads in {1} but this is not a valid {2} path. Review your remote path mappings and download client settings.",
"RemotePathMappings":"Remote Path Mappings",
"RemotePathMappings":"Remote Path Mappings",
"Remove":"Remove",
"Remove":"Remove",
"RemoveCompletedDownloadsHelpText":"Remove imported downloads from download client history",
"RemoveCompletedDownloadsHelpText":"Remove imported downloads from download client history",
@ -575,6 +587,7 @@
"RetentionHelpText":"Usenet only: Set to zero to set for unlimited retention",
"RetentionHelpText":"Usenet only: Set to zero to set for unlimited retention",
"RetryingDownloadInterp":"Retrying download {0} at {1}",
"RetryingDownloadInterp":"Retrying download {0} at {1}",
"RootFolderPathHelpText":"Root Folder list items will be added to",
"RootFolderPathHelpText":"Root Folder list items will be added to",
"RootFolders":"Root Folders",
"RootFolders":"Root Folders",
"RSSSync":"RSS Sync",
"RSSSync":"RSS Sync",
@ -672,6 +685,7 @@
"SupportsSearchvalueSearchIsNotSupportedWithThisIndexer":"Search is not supported with this indexer",
"SupportsSearchvalueSearchIsNotSupportedWithThisIndexer":"Search is not supported with this indexer",
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr":"Will be used when automatic searches are performed via the UI or by Readarr",
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr":"Will be used when automatic searches are performed via the UI or by Readarr",
"SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed":"Will be used when interactive search is used",
"SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed":"Will be used when interactive search is used",
"SystemTimeCheckMessage":"System time is off by more than 1 day. Scheduled tasks may not run correctly until the time is corrected",
"TagIsNotUsedAndCanBeDeleted":"Tag is not used and can be deleted",
"TagIsNotUsedAndCanBeDeleted":"Tag is not used and can be deleted",
"Tags":"Tags",
"Tags":"Tags",
"TagsHelpText":"Applies to authors with at least one matching tag. Leave blank to apply to all authors",
"TagsHelpText":"Applies to authors with at least one matching tag. Leave blank to apply to all authors",
@ -749,6 +763,7 @@
"UnselectAll":"Unselect All",
"UnselectAll":"Unselect All",
"UpdateAll":"Update all",
"UpdateAll":"Update all",
"UpdateAutomaticallyHelpText":"Automatically download and install updates. You will still be able to install from System: Updates",
"UpdateAutomaticallyHelpText":"Automatically download and install updates. You will still be able to install from System: Updates",
"UpdateCheckStartupTranslocationMessage":"Cannot install update because startup folder '{0}' is in an App Translocation folder.",
"UpdateCovers":"Update Covers",
"UpdateCovers":"Update Covers",
"UpdateCoversHelpText":"Set book covers in Calibre to match those in Readarr",
"UpdateCoversHelpText":"Set book covers in Calibre to match those in Readarr",
"UpdateMechanismHelpText":"Use Readarr's built-in updater or a script",
"UpdateMechanismHelpText":"Use Readarr's built-in updater or a script",