mirror of
https://github.com/Sonarr/Sonarr.git
synced 2026-04-17 21:26:13 -04:00
Compare commits
6 Commits
v4.0.5.171
...
v4.0.5.171
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d9b771ab0b | ||
|
|
6b08e849b8 | ||
|
|
9c1f48ebc9 | ||
|
|
fd3dd1ab7d | ||
|
|
11e5c5a11b | ||
|
|
48f0291884 |
@@ -608,5 +608,47 @@ namespace NzbDrone.Core.Test.IndexerSearchTests
|
||||
allCriteria.Last().As<SingleEpisodeSearchCriteria>().SeasonNumber.Should().Be(2);
|
||||
allCriteria.Last().As<SingleEpisodeSearchCriteria>().EpisodeNumber.Should().Be(3);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task episode_search_should_include_series_title_when_not_a_direct_title_match()
|
||||
{
|
||||
_xemSeries.Title = "Sonarr's Title";
|
||||
_xemSeries.CleanTitle = "sonarrstitle";
|
||||
|
||||
WithEpisode(1, 12, 2, 3);
|
||||
|
||||
Mocker.GetMock<ISceneMappingService>()
|
||||
.Setup(s => s.FindByTvdbId(It.IsAny<int>()))
|
||||
.Returns(new List<SceneMapping>
|
||||
{
|
||||
new SceneMapping
|
||||
{
|
||||
TvdbId = _xemSeries.TvdbId,
|
||||
SearchTerm = "Sonarrs Title",
|
||||
ParseTerm = _xemSeries.CleanTitle,
|
||||
SeasonNumber = 1,
|
||||
SceneSeasonNumber = 1,
|
||||
SceneOrigin = "tvdb",
|
||||
Type = "ServicesProvider"
|
||||
}
|
||||
});
|
||||
|
||||
var allCriteria = WatchForSearchCriteria();
|
||||
|
||||
await Subject.EpisodeSearch(_xemEpisodes.First(), false, false);
|
||||
|
||||
Mocker.GetMock<ISceneMappingService>()
|
||||
.Verify(v => v.FindByTvdbId(_xemSeries.Id), Times.Once());
|
||||
|
||||
allCriteria.Should().HaveCount(2);
|
||||
|
||||
allCriteria.First().Should().BeOfType<SingleEpisodeSearchCriteria>();
|
||||
allCriteria.First().As<SingleEpisodeSearchCriteria>().SeasonNumber.Should().Be(1);
|
||||
allCriteria.First().As<SingleEpisodeSearchCriteria>().EpisodeNumber.Should().Be(12);
|
||||
|
||||
allCriteria.Last().Should().BeOfType<SingleEpisodeSearchCriteria>();
|
||||
allCriteria.Last().As<SingleEpisodeSearchCriteria>().SeasonNumber.Should().Be(2);
|
||||
allCriteria.Last().As<SingleEpisodeSearchCriteria>().EpisodeNumber.Should().Be(3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaInfo
|
||||
[TestCase(10, "", "", "", null, HdrFormat.None)]
|
||||
[TestCase(10, "bt709", "bt709", "", null, HdrFormat.None)]
|
||||
[TestCase(8, "bt2020", "smpte2084", "", null, HdrFormat.None)]
|
||||
[TestCase(10, "bt2020", "bt2020-10", "", null, HdrFormat.Hlg10)]
|
||||
[TestCase(10, "bt2020", "bt2020-10", "", null, HdrFormat.None)]
|
||||
[TestCase(10, "bt2020", "arib-std-b67", "", null, HdrFormat.Hlg10)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "", null, HdrFormat.Pq10)]
|
||||
[TestCase(10, "bt2020", "smpte2084", "FFMpegCore.SideData", null, HdrFormat.Pq10)]
|
||||
|
||||
@@ -22,6 +22,7 @@ namespace NzbDrone.Core.IndexerSearch.Definitions
|
||||
public virtual bool UserInvokedSearch { get; set; }
|
||||
public virtual bool InteractiveSearch { get; set; }
|
||||
|
||||
public List<string> AllSceneTitles => SceneTitles.Concat(CleanSceneTitles).Distinct().ToList();
|
||||
public List<string> CleanSceneTitles => SceneTitles.Select(GetCleanSceneTitle).Distinct().ToList();
|
||||
|
||||
public static string GetCleanSceneTitle(string title)
|
||||
|
||||
@@ -265,7 +265,7 @@ namespace NzbDrone.Core.IndexerSearch
|
||||
}
|
||||
}
|
||||
|
||||
if (sceneMapping.ParseTerm == series.CleanTitle && sceneMapping.FilterRegex.IsNullOrWhiteSpace())
|
||||
if (sceneMapping.SearchTerm == series.Title && sceneMapping.FilterRegex.IsNullOrWhiteSpace())
|
||||
{
|
||||
// Disable the implied mapping if we have an explicit mapping by the same name
|
||||
includeGlobal = false;
|
||||
|
||||
@@ -410,7 +410,7 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
$"&season={NewznabifySeasonNumber(searchCriteria.SeasonNumber)}&ep={searchCriteria.EpisodeNumber}");
|
||||
}
|
||||
|
||||
var queryTitles = TextSearchEngine == "raw" ? searchCriteria.SceneTitles : searchCriteria.CleanSceneTitles;
|
||||
var queryTitles = TextSearchEngine == "raw" ? searchCriteria.AllSceneTitles : searchCriteria.CleanSceneTitles;
|
||||
|
||||
foreach (var queryTitle in queryTitles)
|
||||
{
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
"AddConnectionImplementation": "Verbindung hinzufügen - {implementationName}",
|
||||
"AddDownloadClientImplementation": "Download-Client hinzufügen - {implementationName}",
|
||||
"AddIndexerImplementation": "Indexer hinzufügen - {implementationName}",
|
||||
"AddNotificationError": "Neue Benachrichtigung konnte nicht hinzugefügt werden, bitte versuchen Sie es erneut.",
|
||||
"AddNotificationError": "Die neue Benachrichtigung konnte nicht hinzugefügt werden, bitte erneut probieren.",
|
||||
"AddQualityProfileError": "Qualitätsprofil konnte nicht hinzugefügt werden. Bitte versuchen Sie es erneut.",
|
||||
"AddNewSeriesRootFolderHelpText": "Unterordner '{folder}' wird automatisch erstellt",
|
||||
"AddNewSeriesSearchForMissingEpisodes": "Suche für fehlende Episoden starten",
|
||||
@@ -144,7 +144,7 @@
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Gib ein neues Passwort ein",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Gib einen neuen Benutzernamen ein",
|
||||
"AuthenticationRequiredHelpText": "Ändern, welche anfragen Authentifizierung benötigen. Ändere nichts wenn du dir nicht des Risikos bewusst bist.",
|
||||
"AnalyseVideoFilesHelpText": "Videoinformationen wie Auflösung, Laufzeit und Codec-Informationen aus Dateien extrahieren. Dies erfordert, dass {appName} Teile der Datei liest, was bei Scans zu hoher Festplatten- oder Netzwerkaktivität führen kann.",
|
||||
"AnalyseVideoFilesHelpText": "Videoinformationen wie Auflösung, Laufzeit und Codec aus Datien erkennen. Dazu ist es erforderlich, dass {appName} Teile der Datei liest, was zu hoher Festplatten- oder Netzwerkaktivität während der Scans führen kann.",
|
||||
"AnalyticsEnabledHelpText": "Senden Sie anonyme Nutzungs- und Fehlerinformationen an die Server von {appName}. Dazu gehören Informationen zu Ihrem Browser, welche {appName}-WebUI-Seiten Sie verwenden, Fehlerberichte sowie Betriebssystem- und Laufzeitversion. Wir werden diese Informationen verwenden, um Funktionen und Fehlerbehebungen zu priorisieren.",
|
||||
"AutoTaggingNegateHelpText": "Falls aktiviert wird die Auto Tagging Regel nicht angewendet, solange diese Bedingung {implementationName} zutrifft.",
|
||||
"CopyUsingHardlinksSeriesHelpText": "Mithilfe von Hardlinks kann {appName} Seeding-Torrents in den Serienordner importieren, ohne zusätzlichen Speicherplatz zu beanspruchen oder den gesamten Inhalt der Datei zu kopieren. Hardlinks funktionieren nur, wenn sich Quelle und Ziel auf demselben Volume befinden",
|
||||
@@ -164,7 +164,7 @@
|
||||
"RestartReloadNote": "Hinweis: {appName} startet während des Wiederherstellungsvorgangs automatisch neu und lädt die Benutzeroberfläche neu.",
|
||||
"AutoRedownloadFailedHelpText": "Suchen Sie automatisch nach einer anderen Version und versuchen Sie, sie herunterzuladen",
|
||||
"AirDate": "Ausstrahlungsdatum",
|
||||
"AgeWhenGrabbed": "Alter (zum Zeitpunkt der Entführung)",
|
||||
"AgeWhenGrabbed": "Alter (bei Erfassung)",
|
||||
"ApplyTagsHelpTextHowToApplySeries": "So wenden Sie Tags auf die ausgewählte Serie an",
|
||||
"ApiKey": "API-Schlüssel",
|
||||
"AutoTaggingLoadError": "Automatisches Tagging konnte nicht geladen werden",
|
||||
@@ -272,7 +272,7 @@
|
||||
"ContinuingOnly": "Nur fortlaufend",
|
||||
"ContinuingSeriesDescription": "Weitere Episoden/eine weitere Staffel werden erwartet",
|
||||
"CopyToClipboard": "In die Zwischenablage kopieren",
|
||||
"CouldNotFindResults": "Es konnten keine Ergebnisse für „{term}“ gefunden werden.",
|
||||
"CouldNotFindResults": "Es konnten keine Ergebnisse für „{term}“ gefunden werden",
|
||||
"CountSeriesSelected": "{count} Serie ausgewählt",
|
||||
"CreateEmptySeriesFoldersHelpText": "Erstellen Sie beim Festplatten-Scan Ordner für fehlende Serien",
|
||||
"CreateGroup": "Gruppe erstellen",
|
||||
@@ -416,7 +416,7 @@
|
||||
"DownloadClientSabnzbdValidationEnableDisableDateSorting": "Deaktivieren Sie die Datumssortierung",
|
||||
"DownloadClientSabnzbdValidationEnableDisableDateSortingDetail": "Sie müssen die Datumssortierung für die von {appName} verwendete Kategorie deaktivieren, um Importprobleme zu vermeiden. Gehen Sie zu Sabnzbd, um das Problem zu beheben.",
|
||||
"DownloadClientSabnzbdValidationEnableDisableMovieSorting": "Deaktivieren Sie die Filmsortierung",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Alle Resultate werden wegen des angewandten Filters nicht angezeigt",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Alle Ergebnisse werden durch den angewendeten Filter ausgeblendet",
|
||||
"RegularExpressionsCanBeTested": "Reguläre Ausdrücke können [hier] getestet werden ({url}).",
|
||||
"ReleaseSceneIndicatorUnknownSeries": "Unbekannte Folge oder Serie.",
|
||||
"RemoveFilter": "Filter entfernen",
|
||||
@@ -549,7 +549,7 @@
|
||||
"CountImportListsSelected": "{count} Importliste(n) ausgewählt",
|
||||
"CountIndexersSelected": "{count} Indexer ausgewählt",
|
||||
"CountSelectedFiles": "{selectedCount} ausgewählte Dateien",
|
||||
"CustomFormatUnknownConditionOption": "Unbekannte Option „{key}“ für Bedingung „{implementation}“",
|
||||
"CustomFormatUnknownConditionOption": "Unbekannte Option '{key}' für die Bedingung '{implementation}'",
|
||||
"CustomFormatsSettings": "Einstellungen für eigene Formate",
|
||||
"Daily": "Täglich",
|
||||
"Dash": "Bindestrich",
|
||||
@@ -580,7 +580,7 @@
|
||||
"SslCertPassword": "SSL-Zertifikatskennwort",
|
||||
"SpecialsFolderFormat": "Specials-Ordnerformat",
|
||||
"SourceTitle": "Quellentitel",
|
||||
"Agenda": "Tagesordnung",
|
||||
"Agenda": "Agenda",
|
||||
"AnEpisodeIsDownloading": "Eine Episode wird heruntergeladen",
|
||||
"CollapseMultipleEpisodesHelpText": "Reduzieren Sie mehrere Episoden, die am selben Tag ausgestrahlt werden",
|
||||
"Connect": "Verbinden",
|
||||
@@ -792,5 +792,86 @@
|
||||
"MediaManagement": "Medienverwaltung",
|
||||
"StartupDirectory": "Start-Verzeichnis",
|
||||
"OnRename": "Bei Umbenennung",
|
||||
"MaintenanceRelease": "Maintenance Release: Fehlerbehebungen und andere Verbesserungen. Siehe Github Commit Verlauf für weitere Details"
|
||||
"MaintenanceRelease": "Maintenance Release: Fehlerbehebungen und andere Verbesserungen. Siehe Github Commit Verlauf für weitere Details",
|
||||
"BlocklistRelease": "Release sperren",
|
||||
"BranchUpdateMechanism": "Git-Branch für den externen Updateablauf",
|
||||
"AutoTaggingSpecificationGenre": "Genre(s)",
|
||||
"AutoTaggingSpecificationOriginalLanguage": "Sprache",
|
||||
"AutoTaggingSpecificationQualityProfile": "Qualitätsprofil",
|
||||
"AutoTaggingSpecificationRootFolder": "Stammverzeichnis",
|
||||
"AutoTaggingSpecificationStatus": "Status",
|
||||
"ConnectionSettingsUrlBaseHelpText": "Fügt ein Präfix zur {connectionName} URL hinzu, z. B. {url}",
|
||||
"DeleteImportListExclusion": "Importlisten Ausschluss löschen",
|
||||
"DeleteTag": "Tag löschen",
|
||||
"DoNotBlocklistHint": "Entfernen ohne Sperren",
|
||||
"DownloadClientPriorityHelpText": "Download-Client-Priorität von 1 (Höchste) bis 50 (Niedrigste). Standard: 1. Round-Robin wird für Clients mit der gleichen Priorität verwendet.",
|
||||
"DownloadClientSettingsRecentPriority": "Neueste Priorität",
|
||||
"DownloadClientValidationApiKeyIncorrect": "API-Key fehlerhaft",
|
||||
"ClientPriority": "Priorität",
|
||||
"Cutoff": "Schwelle",
|
||||
"DownloadClient": "Downloader",
|
||||
"DownloadClientSabnzbdValidationUnknownVersion": "Unbekannte Version: {rawVersion}",
|
||||
"CutoffUnmet": "Schwelle nicht erreicht",
|
||||
"DownloadClientSettingsInitialState": "Ausgangszustand",
|
||||
"DownloadClientValidationApiKeyRequired": "API-Key benötigt",
|
||||
"CustomFormatsSpecificationRegularExpressionHelpText": "Benutzerdefiniertes Format RegEx ist nicht groß-/kleinschreibungssensitiv",
|
||||
"CustomFormatsSpecificationMinimumSize": "Mindestgröße",
|
||||
"CustomFormatsSpecificationRegularExpression": "Regulären Ausdruck",
|
||||
"CustomFormatsSpecificationReleaseGroup": "Release-Gruppe",
|
||||
"CustomFormatsSpecificationResolution": "Auflösung",
|
||||
"DeleteImportListExclusionMessageText": "Bist du sicher, dass du diesen Importlisten Ausschluss löschen willst?",
|
||||
"DownloadClientSabnzbdValidationEnableDisableTvSorting": "TV-Sortierung deaktivieren",
|
||||
"CustomFormatUnknownCondition": "Unbekannte Eigene Formatbedingung '{implementation}'",
|
||||
"ReleaseGroups": "Release Gruppen",
|
||||
"DownloadClientSettingsUseSslHelpText": "Sichere Verbindung verwenden, wenn Verbindung zu {clientName} hergestellt wird",
|
||||
"ReleaseRejected": "Release abgelehnt",
|
||||
"Clear": "Leeren",
|
||||
"DownloadClientValidationCategoryMissing": "Kategorie existiert nicht",
|
||||
"DownloadClientValidationAuthenticationFailure": "Authentifizierung fehlgeschlagen",
|
||||
"DownloadClientValidationErrorVersion": "{clientName} Version sollte mindestens {requiredVersion} sein. Die gemeldete Version ist {reportedVersion}",
|
||||
"DownloadClientValidationGroupMissing": "Gruppe existiert nicht",
|
||||
"DownloadClientValidationSslConnectFailure": "Verbindung über SSL nicht möglich",
|
||||
"ReleaseProfilesLoadError": "Release-Profile können nicht geladen werden",
|
||||
"DownloadClientDelugeSettingsDirectory": "Download Verzeichnis",
|
||||
"DownloadClientDelugeSettingsDirectoryCompleted": "Verschieben, wenn Verzeichnis abgeschlossen",
|
||||
"DownloadClientSettings": "Downloader Einstellungen",
|
||||
"IgnoreDownloadHint": "Hält {appName} von der weiteren Verarbeitung dieses Downloads ab",
|
||||
"ClearBlocklist": "Sperrliste leeren",
|
||||
"CleanLibraryLevel": "Mediathek aufräumen",
|
||||
"CloneAutoTag": "Automatische Tags kopieren",
|
||||
"DownloadClientSettingsOlderPriorityEpisodeHelpText": "Priorität beim Abrufen von Episoden, die vor mehr als 14 Tagen ausgestrahlt wurden",
|
||||
"DownloadClientSettingsInitialStateHelpText": "Anfangszustand für zu {clientName} hinzugefügte Torrents",
|
||||
"DownloadClientSettingsOlderPriority": "Ältere Priorität",
|
||||
"IgnoreDownload": "Download ignorieren",
|
||||
"CustomFormatsSettingsTriggerInfo": "Ein Eigenes Format wird auf eine Veröffentlichung oder Datei angewandt, wenn sie mindestens einer der verschiedenen ausgewählten Bedingungen entspricht.",
|
||||
"DatabaseMigration": "DB Migration",
|
||||
"DownloadClientSettingsDestinationHelpText": "Legt das Ziel für den Download manuell fest; lassen Sie es leer, um die Standardeinstellung zu verwenden",
|
||||
"DownloadClientSettingsCategorySubFolderHelpText": "Das Hinzufügen einer spezifischen Kategorie für {appName} vermeidet Konflikte mit nicht verwandten Downloads, die nicht {appName} sind. Die Verwendung einer Kategorie ist optional, wird aber dringend empfohlen. Erzeugt ein Unterverzeichnis [category] im Ausgabeverzeichnis.",
|
||||
"BlocklistReleases": "Release sperren",
|
||||
"DownloadClientQbittorrentTorrentStateMissingFiles": "qBittorrent meldet fehlende Dateien",
|
||||
"ChangeCategoryHint": "Änderung des Downloads in die 'Post-Import-Kategorie' vom Download-Client",
|
||||
"ChangeCategoryMultipleHint": "Änderung der Downloads in die 'Post-Import-Kategorie' vom Download-Client",
|
||||
"CustomFormatsSpecificationSource": "Quelle",
|
||||
"BlocklistFilterHasNoItems": "Ausgewählter Blocklistenfilter enthält keine Elemente",
|
||||
"CustomFilter": "Benutzerdefinierter Filter",
|
||||
"CustomFormatsSpecificationFlag": "Markierung",
|
||||
"CustomFormatScore": "Eigenes Format Bewertungspunkte",
|
||||
"CustomFormatsSpecificationLanguage": "Sprache",
|
||||
"CustomFormatsSpecificationMaximumSize": "Maximale Größe",
|
||||
"AutoTaggingSpecificationTag": "Tag",
|
||||
"BindAddress": "Adresse binden",
|
||||
"DownloadClientSettingsRecentPriorityEpisodeHelpText": "Priorität beim Abrufen von Episoden, die innerhalb der letzten 14 Tage ausgestrahlt wurden",
|
||||
"DownloadClientSettingsUrlBaseHelpText": "Fügt ein Präfix zur {clientName} Url hinzu, z.B. {url}",
|
||||
"DownloadClientTransmissionSettingsDirectoryHelpText": "Optionaler Speicherort für Downloads; leer lassen, um den Standardspeicherort für Übertragungen zu verwenden",
|
||||
"DownloadClientUTorrentTorrentStateError": "uTorrent meldet einen Fehler",
|
||||
"DoNotBlocklist": "Nicht Sperren",
|
||||
"ReleaseHash": "Release Hash",
|
||||
"DownloadClientAriaSettingsDirectoryHelpText": "Optionaler Speicherort für Downloads. Lassen Sie das Feld leer, um den standardmäßigen rTorrent-Speicherort zu verwenden",
|
||||
"DownloadClientSeriesTagHelpText": "Verwenden Sie diesen Downloader nur für Serien mit mindestens einem passenden Tag. Lassen Sie ihn leer, um ihn für alle Serien zu verwenden.",
|
||||
"DownloadClientSettingsCategoryHelpText": "Das Hinzufügen einer spezifischen Kategorie für {appName} vermeidet Konflikte mit nicht verwandten Downloads, die nicht {appName} sind. Die Verwendung einer Kategorie ist optional, wird aber dringend empfohlen.",
|
||||
"DownloadClientSettingsPostImportCategoryHelpText": "Kategorie für {appName}, die nach dem Importieren des Downloads festgelegt wird. {appName} wird Torrents in dieser Kategorie nicht entfernen, auch wenn das Seeding beendet ist. Leer lassen, um dieselbe Kategorie beizubehalten.",
|
||||
"DownloadClientValidationCategoryMissingDetail": "Die von Ihnen eingegebene Kategorie existiert nicht in {clientName}. Erstellen Sie sie zuerst in {clientName}.",
|
||||
"DownloadClientValidationGroupMissingDetail": "Die von Ihnen eingegebene Gruppe existiert nicht in {clientName}. Erstellen Sie sie zuerst in {clientName}.",
|
||||
"IgnoreDownloads": "Downloads ignorieren",
|
||||
"IgnoreDownloadsHint": "Hindert {appName}, diese Downloads weiter zu verarbeiten"
|
||||
}
|
||||
|
||||
@@ -616,7 +616,7 @@
|
||||
"OnSeriesDelete": "Lors de la suppression de la série",
|
||||
"OnlyTorrent": "Uniquement Torrent",
|
||||
"OpenBrowserOnStart": "Ouvrir le navigateur au démarrage",
|
||||
"OpenSeries": "Série ouverte",
|
||||
"OpenSeries": "Ouvrir la série",
|
||||
"Options": "Options",
|
||||
"Organize": "Organiser",
|
||||
"OrganizeLoadError": "Erreur lors du chargement des aperçus",
|
||||
@@ -1344,7 +1344,7 @@
|
||||
"DeleteDelayProfile": "Supprimer le profil de retard",
|
||||
"DeleteDelayProfileMessageText": "Êtes-vous sûr de vouloir supprimer ce profil de retard ?",
|
||||
"DeleteEpisodeFile": "Supprimer le fichier de l'épisode",
|
||||
"DeleteEpisodeFileMessage": "Supprimer le fichier de l'épisode '{path}'?",
|
||||
"DeleteEpisodeFileMessage": "Êtes-vous sûr de vouloir supprimer « {path} » ?",
|
||||
"DeleteEpisodeFromDisk": "Supprimer l'épisode du disque",
|
||||
"DeleteImportListMessageText": "Êtes-vous sûr de vouloir supprimer la liste « {name} » ?",
|
||||
"DeleteSelectedEpisodeFiles": "Supprimer les fichiers d'épisode sélectionnés",
|
||||
|
||||
@@ -22,10 +22,10 @@ namespace NzbDrone.Core.MediaFiles.MediaInfo
|
||||
private readonly List<FFProbePixelFormat> _pixelFormats;
|
||||
|
||||
public const int MINIMUM_MEDIA_INFO_SCHEMA_REVISION = 8;
|
||||
public const int CURRENT_MEDIA_INFO_SCHEMA_REVISION = 10;
|
||||
public const int CURRENT_MEDIA_INFO_SCHEMA_REVISION = 11;
|
||||
|
||||
private static readonly string[] ValidHdrColourPrimaries = { "bt2020" };
|
||||
private static readonly string[] HlgTransferFunctions = { "bt2020-10", "arib-std-b67" };
|
||||
private static readonly string[] HlgTransferFunctions = { "arib-std-b67" };
|
||||
private static readonly string[] PqTransferFunctions = { "smpte2084" };
|
||||
private static readonly string[] ValidHdrTransferFunctions = HlgTransferFunctions.Concat(PqTransferFunctions).ToArray();
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ using FluentValidation.Results;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.MediaCover;
|
||||
using NzbDrone.Core.MediaFiles;
|
||||
using NzbDrone.Core.Notifications.Webhook;
|
||||
using NzbDrone.Core.Tags;
|
||||
@@ -15,8 +16,8 @@ namespace NzbDrone.Core.Notifications.Notifiarr
|
||||
{
|
||||
private readonly INotifiarrProxy _proxy;
|
||||
|
||||
public Notifiarr(INotifiarrProxy proxy, IConfigFileProvider configFileProvider, IConfigService configService, ILocalizationService localizationService, ITagRepository tagRepository)
|
||||
: base(configFileProvider, configService, localizationService, tagRepository)
|
||||
public Notifiarr(INotifiarrProxy proxy, IConfigFileProvider configFileProvider, IConfigService configService, ILocalizationService localizationService, ITagRepository tagRepository, IMapCoversToLocal mediaCoverService)
|
||||
: base(configFileProvider, configService, localizationService, tagRepository, mediaCoverService)
|
||||
{
|
||||
_proxy = proxy;
|
||||
}
|
||||
|
||||
@@ -233,7 +233,7 @@ namespace NzbDrone.Core.Notifications
|
||||
|
||||
public void Handle(ManualInteractionRequiredEvent message)
|
||||
{
|
||||
var series = message.Episode.Series;
|
||||
var series = message.Episode?.Series;
|
||||
var mess = "";
|
||||
|
||||
if (series != null)
|
||||
@@ -255,7 +255,7 @@ namespace NzbDrone.Core.Notifications
|
||||
{
|
||||
Message = mess,
|
||||
Series = series,
|
||||
Quality = message.Episode.ParsedEpisodeInfo.Quality,
|
||||
Quality = message.Episode?.ParsedEpisodeInfo.Quality,
|
||||
Episode = message.Episode,
|
||||
TrackedDownload = message.TrackedDownload,
|
||||
DownloadClientInfo = message.TrackedDownload.DownloadItem?.DownloadClientInfo,
|
||||
|
||||
@@ -3,6 +3,7 @@ using FluentValidation.Results;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.MediaCover;
|
||||
using NzbDrone.Core.MediaFiles;
|
||||
using NzbDrone.Core.Tags;
|
||||
using NzbDrone.Core.Tv;
|
||||
@@ -14,8 +15,8 @@ namespace NzbDrone.Core.Notifications.Webhook
|
||||
{
|
||||
private readonly IWebhookProxy _proxy;
|
||||
|
||||
public Webhook(IWebhookProxy proxy, IConfigFileProvider configFileProvider, IConfigService configService, ILocalizationService localizationService, ITagRepository tagRepository)
|
||||
: base(configFileProvider, configService, localizationService, tagRepository)
|
||||
public Webhook(IWebhookProxy proxy, IConfigFileProvider configFileProvider, IConfigService configService, ILocalizationService localizationService, ITagRepository tagRepository, IMapCoversToLocal mediaCoverService)
|
||||
: base(configFileProvider, configService, localizationService, tagRepository, mediaCoverService)
|
||||
{
|
||||
_proxy = proxy;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Linq;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.MediaCover;
|
||||
using NzbDrone.Core.MediaFiles;
|
||||
using NzbDrone.Core.Tags;
|
||||
using NzbDrone.Core.Tv;
|
||||
@@ -17,13 +18,15 @@ namespace NzbDrone.Core.Notifications.Webhook
|
||||
private readonly IConfigService _configService;
|
||||
protected readonly ILocalizationService _localizationService;
|
||||
private readonly ITagRepository _tagRepository;
|
||||
private readonly IMapCoversToLocal _mediaCoverService;
|
||||
|
||||
protected WebhookBase(IConfigFileProvider configFileProvider, IConfigService configService, ILocalizationService localizationService, ITagRepository tagRepository)
|
||||
protected WebhookBase(IConfigFileProvider configFileProvider, IConfigService configService, ILocalizationService localizationService, ITagRepository tagRepository, IMapCoversToLocal mediaCoverService)
|
||||
{
|
||||
_configFileProvider = configFileProvider;
|
||||
_configService = configService;
|
||||
_localizationService = localizationService;
|
||||
_tagRepository = tagRepository;
|
||||
_mediaCoverService = mediaCoverService;
|
||||
}
|
||||
|
||||
protected WebhookGrabPayload BuildOnGrabPayload(GrabMessage message)
|
||||
@@ -36,7 +39,7 @@ namespace NzbDrone.Core.Notifications.Webhook
|
||||
EventType = WebhookEventType.Grab,
|
||||
InstanceName = _configFileProvider.InstanceName,
|
||||
ApplicationUrl = _configService.ApplicationUrl,
|
||||
Series = new WebhookSeries(message.Series, GetTagLabels(message.Series)),
|
||||
Series = GetSeries(message.Series),
|
||||
Episodes = remoteEpisode.Episodes.ConvertAll(x => new WebhookEpisode(x)),
|
||||
Release = new WebhookRelease(quality, remoteEpisode),
|
||||
DownloadClient = message.DownloadClientName,
|
||||
@@ -55,7 +58,7 @@ namespace NzbDrone.Core.Notifications.Webhook
|
||||
EventType = WebhookEventType.Download,
|
||||
InstanceName = _configFileProvider.InstanceName,
|
||||
ApplicationUrl = _configService.ApplicationUrl,
|
||||
Series = new WebhookSeries(message.Series, GetTagLabels(message.Series)),
|
||||
Series = GetSeries(message.Series),
|
||||
Episodes = episodeFile.Episodes.Value.ConvertAll(x => new WebhookEpisode(x)),
|
||||
EpisodeFile = new WebhookEpisodeFile(episodeFile),
|
||||
Release = new WebhookGrabbedRelease(message.Release),
|
||||
@@ -85,7 +88,7 @@ namespace NzbDrone.Core.Notifications.Webhook
|
||||
EventType = WebhookEventType.EpisodeFileDelete,
|
||||
InstanceName = _configFileProvider.InstanceName,
|
||||
ApplicationUrl = _configService.ApplicationUrl,
|
||||
Series = new WebhookSeries(deleteMessage.Series, GetTagLabels(deleteMessage.Series)),
|
||||
Series = GetSeries(deleteMessage.Series),
|
||||
Episodes = deleteMessage.EpisodeFile.Episodes.Value.ConvertAll(x => new WebhookEpisode(x)),
|
||||
EpisodeFile = new WebhookEpisodeFile(deleteMessage.EpisodeFile),
|
||||
DeleteReason = deleteMessage.Reason
|
||||
@@ -99,7 +102,7 @@ namespace NzbDrone.Core.Notifications.Webhook
|
||||
EventType = WebhookEventType.SeriesAdd,
|
||||
InstanceName = _configFileProvider.InstanceName,
|
||||
ApplicationUrl = _configService.ApplicationUrl,
|
||||
Series = new WebhookSeries(addMessage.Series, GetTagLabels(addMessage.Series)),
|
||||
Series = GetSeries(addMessage.Series),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -110,7 +113,7 @@ namespace NzbDrone.Core.Notifications.Webhook
|
||||
EventType = WebhookEventType.SeriesDelete,
|
||||
InstanceName = _configFileProvider.InstanceName,
|
||||
ApplicationUrl = _configService.ApplicationUrl,
|
||||
Series = new WebhookSeries(deleteMessage.Series, GetTagLabels(deleteMessage.Series)),
|
||||
Series = GetSeries(deleteMessage.Series),
|
||||
DeletedFiles = deleteMessage.DeletedFiles
|
||||
};
|
||||
}
|
||||
@@ -122,7 +125,7 @@ namespace NzbDrone.Core.Notifications.Webhook
|
||||
EventType = WebhookEventType.Rename,
|
||||
InstanceName = _configFileProvider.InstanceName,
|
||||
ApplicationUrl = _configService.ApplicationUrl,
|
||||
Series = new WebhookSeries(series, GetTagLabels(series)),
|
||||
Series = GetSeries(series),
|
||||
RenamedEpisodeFiles = renamedFiles.ConvertAll(x => new WebhookRenamedEpisodeFile(x))
|
||||
};
|
||||
}
|
||||
@@ -175,7 +178,7 @@ namespace NzbDrone.Core.Notifications.Webhook
|
||||
EventType = WebhookEventType.ManualInteractionRequired,
|
||||
InstanceName = _configFileProvider.InstanceName,
|
||||
ApplicationUrl = _configService.ApplicationUrl,
|
||||
Series = new WebhookSeries(message.Series, GetTagLabels(message.Series)),
|
||||
Series = GetSeries(message.Series),
|
||||
Episodes = remoteEpisode.Episodes.ConvertAll(x => new WebhookEpisode(x)),
|
||||
DownloadInfo = new WebhookDownloadClientItem(quality, message.TrackedDownload.DownloadItem),
|
||||
DownloadClient = message.DownloadClientInfo?.Name,
|
||||
@@ -216,6 +219,13 @@ namespace NzbDrone.Core.Notifications.Webhook
|
||||
};
|
||||
}
|
||||
|
||||
private WebhookSeries GetSeries(Series series)
|
||||
{
|
||||
_mediaCoverService.ConvertToLocalUrls(series.Id, series.Images);
|
||||
|
||||
return new WebhookSeries(series, GetTagLabels(series));
|
||||
}
|
||||
|
||||
private List<string> GetTagLabels(Series series)
|
||||
{
|
||||
return _tagRepository.GetTags(series.Tags)
|
||||
|
||||
18
src/NzbDrone.Core/Notifications/Webhook/WebhookImage.cs
Normal file
18
src/NzbDrone.Core/Notifications/Webhook/WebhookImage.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using NzbDrone.Core.MediaCover;
|
||||
|
||||
namespace NzbDrone.Core.Notifications.Webhook
|
||||
{
|
||||
public class WebhookImage
|
||||
{
|
||||
public MediaCoverTypes CoverType { get; set; }
|
||||
public string Url { get; set; }
|
||||
public string RemoteUrl { get; set; }
|
||||
|
||||
public WebhookImage(MediaCover.MediaCover image)
|
||||
{
|
||||
CoverType = image.CoverType;
|
||||
RemoteUrl = image.RemoteUrl;
|
||||
Url = image.Url;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NzbDrone.Core.Tv;
|
||||
|
||||
namespace NzbDrone.Core.Notifications.Webhook
|
||||
@@ -14,6 +15,8 @@ namespace NzbDrone.Core.Notifications.Webhook
|
||||
public string ImdbId { get; set; }
|
||||
public SeriesTypes Type { get; set; }
|
||||
public int Year { get; set; }
|
||||
public List<string> Genres { get; set; }
|
||||
public List<WebhookImage> Images { get; set; }
|
||||
public List<string> Tags { get; set; }
|
||||
|
||||
public WebhookSeries()
|
||||
@@ -31,6 +34,8 @@ namespace NzbDrone.Core.Notifications.Webhook
|
||||
ImdbId = series.ImdbId;
|
||||
Type = series.SeriesType;
|
||||
Year = series.Year;
|
||||
Genres = series.Genres;
|
||||
Images = series.Images.Select(i => new WebhookImage(i)).ToList();
|
||||
Tags = tags;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -642,7 +642,7 @@ namespace NzbDrone.Core.Organizer
|
||||
new Dictionary<string, int>(FileNameBuilderTokenEqualityComparer.Instance)
|
||||
{
|
||||
{ MediaInfoVideoDynamicRangeToken, 5 },
|
||||
{ MediaInfoVideoDynamicRangeTypeToken, 10 }
|
||||
{ MediaInfoVideoDynamicRangeTypeToken, 11 }
|
||||
};
|
||||
|
||||
private void AddMediaInfoTokens(Dictionary<string, Func<TokenMatch, string>> tokenHandlers, EpisodeFile episodeFile)
|
||||
|
||||
Reference in New Issue
Block a user