1
0
mirror of https://github.com/Radarr/Radarr.git synced 2026-03-20 16:44:37 -04:00

Compare commits

..

1 Commits

Author SHA1 Message Date
Mark McDowall
9367a07db4 New: Return static response to requests while app is starting
(cherry picked from commit 303fc5d786ccf2ad14c8523fc239696c5d37ea53)
2023-02-08 01:35:52 +00:00
12 changed files with 166 additions and 48 deletions

45
.github/workflows/azuresync.yml vendored Normal file
View File

@@ -0,0 +1,45 @@
name: Sync issue to Azure DevOps work item
on:
issues:
types:
[opened, edited, deleted, closed, reopened, labeled, unlabeled, assigned]
concurrency: azuresync-${{ github.event.issue.number }}
permissions: {}
jobs:
alert:
permissions:
issues: write # to update issue body
runs-on: ubuntu-latest
steps:
- uses: danhellem/github-actions-issue-to-work-item@master
if: "${{ contains(github.event.issue.labels.*.name, 'Type: Bug') == true }}"
env:
ado_token: "${{ secrets.ADO_PERSONAL_ACCESS_TOKEN }}"
github_token: "${{ github.token }}"
ado_organization: "Servarr"
ado_project: "Servarr"
ado_area_path: "Servarr\\Radarr"
ado_wit: "Bug"
ado_new_state: "New"
ado_active_state: "Active"
ado_close_state: "Closed"
ado_bypassrules: true
log_level: 100
- uses: danhellem/github-actions-issue-to-work-item@master
if: "${{ contains(github.event.issue.labels.*.name, 'Type: Bug') == false }}"
env:
ado_token: "${{ secrets.ADO_PERSONAL_ACCESS_TOKEN }}"
github_token: "${{ github.token }}"
ado_organization: "Servarr"
ado_project: "Servarr"
ado_area_path: "Servarr\\Radarr"
ado_wit: "User Story"
ado_new_state: "New"
ado_active_state: "Active"
ado_close_state: "Closed"
ado_bypassrules: true
log_level: 100

View File

@@ -18,7 +18,6 @@ export const certificationCountryOptions = [
{ key: 'fr', value: 'France' },
{ key: 'de', value: 'Germany' },
{ key: 'gb', value: 'Great Britain' },
{ key: 'ie', value: 'Ireland' },
{ key: 'it', value: 'Italy' },
{ key: 'es', value: 'Spain' },
{ key: 'us', value: 'United States' },

View File

@@ -9,6 +9,7 @@ namespace NzbDrone.Common.EnvironmentInfo
bool IsAdmin { get; }
bool IsWindowsService { get; }
bool IsWindowsTray { get; }
bool IsStarting { get; set; }
bool IsExiting { get; set; }
bool IsTray { get; }
RuntimeMode Mode { get; }

View File

@@ -19,6 +19,7 @@ namespace NzbDrone.Common.EnvironmentInfo
_logger = logger;
IsWindowsService = hostLifetime is WindowsServiceLifetime;
IsStarting = true;
// net6.0 will return Radarr.dll for entry assembly, we need the actual
// executable name (Radarr on linux). On mono this will return the location of
@@ -82,6 +83,7 @@ namespace NzbDrone.Common.EnvironmentInfo
public bool IsWindowsService { get; private set; }
public bool IsStarting { get; set; }
public bool IsExiting { get; set; }
public bool IsTray
{

View File

@@ -71,7 +71,7 @@
"UnselectAll": "Tout déselectionner",
"Unmonitored": "Non surveillé",
"UISettingsSummary": "Calendrier, date et les options d'altération des couleurs",
"TagsSettingsSummary": "Voir tous les tags et leur utilisation. Les tags inutilisés peuvent être supprimés",
"TagsSettingsSummary": "Voir toutes les tags et leur utilisation. Les tags inutilisées peuvent être supprimées",
"Style": "Style",
"Studio": "Studio",
"Status": "Statut",
@@ -318,11 +318,11 @@
"ChangeHasNotBeenSavedYet": "Les changements n'ont pas encore été sauvegardés",
"ChangeFileDate": "Changer la date du fichier",
"CertificationCountryHelpText": "Choisir un pays pour les classifications de films",
"CertificateValidationHelpText": "Modifier le degré de rigueur de la validation de la certification HTTPS. Ne changez rien si vous ne comprenez pas les risques.",
"CertificateValidationHelpText": "Modifier le degré de rigueur de la validation de la certification HTTPS. Ne pas changer à moins que vous ne compreniez les risques.",
"CertificateValidation": "Validation du certificat",
"BypassProxyForLocalAddresses": "Contourner le proxy pour les adresses locales",
"Branch": "Branche",
"BindAddressHelpText": "Adresse IPv4 valide, localhost ou '*' pour toutes les interfaces",
"BindAddressHelpText": "Adresse IPv4 valide ou '*' pour toutes les interfaces",
"BindAddress": "Adresse d'attache",
"Backups": "Sauvegardes",
"BackupRetentionHelpText": "Les sauvegardes automatiques plus anciennes que la période de conservation seront automatiquement effacées",
@@ -671,13 +671,13 @@
"ShowCutoffUnmetIconHelpText": "Afficher l'icône des fichiers lorsque la limite n'a pas été atteinte",
"ShowCertification": "Afficher la certification",
"ShowAsAllDayEvents": "Afficher comme événements d'une journée entière",
"ShouldMonitorHelpText": "Les films ou les collections ajoutés par cette liste doivent-ils être ajoutés en tant que surveillés",
"ShouldMonitorHelpText": "Si activé, les films ajoutés par cette liste sont ajoutés et surveillés",
"SettingsRuntimeFormat": "Format de durée",
"SetPermissionsLinuxHelpTextWarning": "Si vous ne savez pas ce que font ces paramètres, ne les modifiez pas.",
"SetPermissionsLinuxHelpText": "Chmod doit-il être exécuté lorsque les fichiers sont importés/renommés ?",
"SetPermissions": "Définir les autorisations",
"SendAnonymousUsageData": "Envoyer des données d'utilisation anonymes",
"SearchOnAddHelpText": "Rechercher les films de cette liste lorsqu'ils sont ajoutés à la bibliothèque",
"SearchOnAddHelpText": "Rechercher des films dans cette liste lorsqu'ils sont ajoutés à Radarr",
"SearchForMovie": "Rechercher un film",
"ScriptPath": "Chemin du script",
"SaveSettings": "Enregistrer les paramètres",
@@ -897,8 +897,8 @@
"NoAltTitle": "Pas de titres alternatifs.",
"NoLinks": "Aucun liens",
"NoMoviesExist": "Aucun film trouvé, pour commencer, vous voudrez ajouter un nouveau film ou importer des films existants.",
"QualitiesHelpText": "Les qualités placées en haut de la liste sont privilégiées même si elles ne sont pas cochées. Les qualités d'un même groupe sont égales. Seules les qualités cochées sont recherchées",
"QualityProfileInUse": "Impossible de supprimer un profil de qualité associé à un film, une liste ou une collection",
"QualitiesHelpText": "Les qualités plus élevées dans la liste sont plus préférées. Les qualités au sein d'un même groupe sont égales. Seules les qualités vérifiées sont recherchées",
"QualityProfileInUse": "Impossible de supprimer un profil de qualité associé à un film",
"RadarrCalendarFeed": "Flux de calendrier Radarr",
"RadarrUpdated": "Radarr mis à jour",
"UnableToLoadAltTitle": "Impossible de charger des titres alternatifs.",
@@ -1065,7 +1065,7 @@
"Blocklisted": "Liste noire",
"AreYouSureYouWantToRemoveSelectedItemFromQueue": "Êtes-vous sûr de vouloir désinstaller {0} objet{1} de la file d'attente ?",
"BlocklistReleases": "Mettre cette release sur la liste noire",
"RemotePathMappingCheckGenericPermissions": "Le client de téléchargement {0} met les téléchargements dans {1} mais Radarr ne peut voir ce répertoire. Il est possible que vous ayez besoin d'ajuster les permissions de ce dossier.",
"RemotePathMappingCheckGenericPermissions": "Le client de téléchargement {0} met les téléchargements dans {1} mais Radarr ne peut voir ce répertoire. Il est possible que vous ayez besoin d'ajuster les permissions de ce dossier.",
"RemotePathMappingCheckLocalWrongOSPath": "Le client de téléchargement {0} met les téléchargements dans {1} mais il ne s'agit pas d'un chemin {2} valide. Vérifiez les paramètres de votre client de téléchargement.",
"RemotePathMappingCheckFilesGenericPermissions": "Le client de téléchargement {0} met les téléchargements dans {1} mais Radarr ne peut voir ce répertoire. Il est possible que vous ayez besoin d'ajuster les permissions de ce dossier.",
"RemotePathMappingCheckFilesLocalWrongOSPath": "Le client de téléchargement {0} met les téléchargements dans {1} mais il ne s'agit pas d'un chemin {2} valide. Vérifiez les paramètres de votre client de téléchargement.",
@@ -1116,8 +1116,8 @@
"AllCollectionsHiddenDueToFilter": "Toutes les collections sont masquées en raison du filtre appliqué.",
"Collections": "Collections",
"MonitorMovies": "Surveiller les films",
"NoCollections": "Aucune collection n'a été trouvée. Pour commencer, vous devez ajouter un nouveau film ou importer des films existants",
"RssSyncHelpText": "Intervalle en minutes. Mettez la valeur zéro pour désactiver (cela arrêtera tous les téléchargements automatiques de version)",
"NoCollections": "Aucun film trouvé, pour commencer, vous voudrez ajouter un nouveau film ou importer des films existants.",
"RssSyncHelpText": "Intervalle en minutes. Mettre à zéro pour désactiver (cela arrêtera tous les téléchargements automatiques)",
"CollectionsSelectedInterp": "{0} Collections(s) Sélectionnée(s)",
"ChooseImportMode": "Mode d'importation",
"CollectionOptions": "Options de collection",
@@ -1130,7 +1130,7 @@
"OnMovieAdded": "À l'ajout d'un film",
"MonitorCollection": "Surveiller la collection",
"MonitoredCollectionHelpText": "Surveiller pour ajouter automatiquement les films de cette collection à la bibliothèque",
"MovieCollectionMultipleMissingRoots": "Plusieurs dossiers racine manquent pour les collections de films : {0}",
"MovieCollectionMultipleMissingRoots": "Plusieurs dossiers racine manquent pour les collections de films: {0}",
"MovieOnly": "Film seulement",
"RefreshCollections": "Actualiser les collections",
"SearchOnAddCollectionHelpText": "Rechercher des films dans cette collection lorsqu'ils sont ajoutés à Radarr",
@@ -1143,17 +1143,5 @@
"InstanceName": "Nom de l'instance",
"InstanceNameHelpText": "Nom de l'instance dans l'onglet du navigateur et pour le nom d'application dans Syslog",
"CollectionShowPostersHelpText": "Afficher les affiches des éléments de la collection",
"PreferredProtocol": "Protocole préféré",
"TotalMovies": "Total des films",
"ScrollMovies": "Parcourir les films",
"AreYouSureYouWantToResetQualityDefinitions": "Êtes-vous sûr de vouloir réinitialiser les définitions de qualité ?",
"SettingsTheme": "Thème",
"RSSHelpText": "Sera utilisé lorsque Radarr recherche périodiquement des sorties via la synchronisation RSS",
"DownloadClientSortingCheckMessage": "Le client de téléchargement {0} a activé le tri {1} pour la catégorie de Radarr. Vous devez désactiver le tri dans votre client de téléchargement pour éviter les problèmes d'importation.",
"ResetDefinitions": "Réinitialiser les définitions",
"ResetQualityDefinitions": "Réinitialiser les définitions de qualité",
"ResetTitles": "Réinitialiser les titres",
"ResetTitlesHelpText": "Réinitialiser les titres des définitions ainsi que les valeurs",
"SettingsThemeHelpText": "Changez le thème de l'interface de l'application. Le thème \"Auto\" utilisera celui de votre système d'exploitation pour définir le mode clair ou foncé. Inspiré par Theme.Park",
"ShowPosters": "Montre les affiches"
"PreferredProtocol": "Protocole préféré"
}

View File

@@ -267,12 +267,12 @@
"CustomFormatUnknownCondition": "Condição de formato personalizado \"{0}\" desconhecida",
"CustomFormatsSettingsSummary": "Configurações e formatos personalizados",
"CustomFormatsSettings": "Configurações de formatos personalizados",
"CustomFormatScore": "Pontuação de formato personalizado",
"CustomFormatScore": "Pontuação do Formato Personalizado",
"CustomFormats": "Formatos personalizados",
"CustomFormatJSON": "JSON de formato personalizado",
"CustomFormatHelpText": "O Radarr pontua cada versão usando a soma das pontuações para formatos personalizados encontrados. Se uma nova versão tiver melhor pontuação, com a mesma qualidade ou melhor, o Radarr o capturará.",
"CustomFormat": "Formato personalizado",
"CustomFilters": "Filtros Personalizados",
"CustomFilters": "Filtros personalizados",
"Custom": "Personalizado",
"CurrentlyInstalled": "Atualmente instalado",
"Crew": "Equipe técnica",
@@ -402,7 +402,7 @@
"MinimumLimits": "Limites mínimos",
"MinimumFreeSpaceWhenImportingHelpText": "Impedir a importação se deixar menos do que esta quantidade de espaço em disco disponível",
"MinimumFreeSpace": "Mínimo de espaço livre",
"MinimumCustomFormatScore": "Pontuação mínima de formato personalizado",
"MinimumCustomFormatScore": "Pontuação Mínima do Formato Personalizado",
"MinimumAgeHelpText": "Somente Usenet: tempo de vida mínimo, em minutos, dos NZBs, para que sejam capturados. Use isto para dar às novas versões tempo de propagar-se em seu fornecedor de Usenet.",
"MinimumAge": "Tempo de vida mínimo",
"MinimumAvailability": "Disponibilidade mínima",

View File

@@ -8,7 +8,6 @@ namespace NzbDrone.Core.MetadataSource.SkyHook.Resource
FR, // France
DE, // Germany
GB, // Great Britain
IE, // Ireland
IT, // Italy
ES, // Spain
US, // United States

View File

@@ -56,6 +56,7 @@ namespace NzbDrone.Host
private void OnAppStarted()
{
_runtimeInfo.IsStarting = false;
_runtimeInfo.IsExiting = false;
if (!_startupContext.Flags.Contains(StartupContext.NO_BROWSER)

View File

@@ -264,6 +264,7 @@ namespace NzbDrone.Host
app.UseMiddleware<VersionMiddleware>();
app.UseMiddleware<UrlBaseMiddleware>(configFileProvider.UrlBase);
app.UseMiddleware<StartingUpMiddleware>();
app.UseMiddleware<CacheHeaderMiddleware>();
app.UseMiddleware<IfModifiedMiddleware>();
app.UseMiddleware<BufferingMiddleware>(new List<string> { "/api/v3/command" });

View File

@@ -42,10 +42,8 @@ namespace Radarr.Api.V3.Config
SharedValidator.RuleFor(c => c.UrlBase).ValidUrlBase();
SharedValidator.RuleFor(c => c.InstanceName).ContainsRadarr().When(c => c.InstanceName.IsNotNullOrWhiteSpace());
SharedValidator.RuleFor(c => c.Username).NotEmpty().When(c => c.AuthenticationMethod == AuthenticationType.Basic ||
c.AuthenticationMethod == AuthenticationType.Forms);
SharedValidator.RuleFor(c => c.Password).NotEmpty().When(c => c.AuthenticationMethod == AuthenticationType.Basic ||
c.AuthenticationMethod == AuthenticationType.Forms);
SharedValidator.RuleFor(c => c.Username).NotEmpty().When(c => c.AuthenticationMethod != AuthenticationType.None);
SharedValidator.RuleFor(c => c.Password).NotEmpty().When(c => c.AuthenticationMethod != AuthenticationType.None);
SharedValidator.RuleFor(c => c.SslPort).ValidPort().When(c => c.EnableSsl);
SharedValidator.RuleFor(c => c.SslPort).NotEqual(c => c.Port).When(c => c.EnableSsl);

View File

@@ -321,10 +321,20 @@
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/BlocklistResourcePagingResource"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/BlocklistResourcePagingResource"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/BlocklistResourcePagingResource"
}
}
}
}
@@ -1211,6 +1221,16 @@
"schema": {
"$ref": "#/components/schemas/CustomFormatResource"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CustomFormatResource"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CustomFormatResource"
}
}
}
},
@@ -1245,6 +1265,14 @@
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CustomFormatResource"
}
}
},
"application/json": {
"schema": {
"type": "array",
@@ -1252,6 +1280,14 @@
"$ref": "#/components/schemas/CustomFormatResource"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CustomFormatResource"
}
}
}
}
}
@@ -1279,6 +1315,16 @@
"schema": {
"$ref": "#/components/schemas/CustomFormatResource"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CustomFormatResource"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CustomFormatResource"
}
}
}
},
@@ -8953,8 +8999,7 @@
"nullable": true
},
"includeCustomFormatWhenRenaming": {
"type": "boolean",
"nullable": true
"type": "boolean"
},
"specifications": {
"type": "array",
@@ -9366,10 +9411,6 @@
},
"nullable": true
},
"customFormatScore": {
"type": "integer",
"format": "int32"
},
"qualityCutoffNotMet": {
"type": "boolean"
},
@@ -10173,13 +10214,6 @@
"type": "string",
"nullable": true
},
"customFormats": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CustomFormatResource"
},
"nullable": true
},
"rejections": {
"type": "array",
"items": {
@@ -11342,8 +11376,11 @@
"type": "integer",
"format": "int32"
},
"hardcodedSubs": {
"type": "string",
"extraInfo": {
"type": "object",
"additionalProperties": {
"nullable": true
},
"nullable": true
},
"movieTitle": {
@@ -11496,6 +11533,10 @@
},
"revision": {
"$ref": "#/components/schemas/Revision"
},
"hardcodedSubs": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false

View File

@@ -0,0 +1,43 @@
using System.Buffers;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Common.Serializer;
using NzbDrone.Core.Lifecycle;
using NzbDrone.Core.Messaging.Events;
using Sonarr.Http.Extensions;
namespace Sonarr.Http.Middleware
{
public class StartingUpMiddleware
{
private readonly RequestDelegate _next;
private readonly IRuntimeInfo _runtimeInfo;
private static readonly string MESSAGE = "Sonarr is starting up, please try again later";
public StartingUpMiddleware(RequestDelegate next, IRuntimeInfo runtimeInfo)
{
_next = next;
_runtimeInfo = runtimeInfo;
}
public async Task InvokeAsync(HttpContext context)
{
if (_runtimeInfo.IsStarting)
{
var isJson = context.Request.IsApiRequest();
var message = isJson ? STJson.ToJson(new { ErrorMessage = MESSAGE }) : MESSAGE;
var bytes = Encoding.UTF8.GetBytes(message);
context.Response.StatusCode = 503;
context.Response.ContentType = isJson ? "application/json" : "text/plain";
await context.Response.Body.WriteAsync(bytes, 0, bytes.Length);
return;
}
await _next(context);
}
}
}