8 Commits

Author SHA1 Message Date
pcjones
7e7ff15f75 Workaround for weird lidarr album title parsing 2024-02-13 01:47:08 +01:00
pcjones
4ee55fc14a Merge branch 'master' of https://github.com/PCJones/UmlautAdaptarr 2024-02-13 01:38:11 +01:00
pcjones
2ae236b68c Add Lidarr album matching workaround 2024-02-13 01:38:06 +01:00
Jonas F
5fe257f5d6 Update README.md 2024-02-13 01:26:58 +01:00
pcjones
525036e08f Merge branch 'master' of https://github.com/PCJones/UmlautAdaptarr 2024-02-13 01:22:03 +01:00
pcjones
687ba9b924 Add workaround for (DE) titles 2024-02-13 01:21:59 +01:00
Jonas F
0a048c92b8 Update README.md 2024-02-13 00:14:45 +01:00
Jonas F
eef0822ce7 Update README.md 2024-02-13 00:13:35 +01:00
4 changed files with 58 additions and 16 deletions

View File

@@ -2,10 +2,10 @@
## English description coming soon ## English description coming soon
## 12.02.2024: Erste Testversion ## Erste Testversion
Wer möchte kann den UmlautAdaptarr jetzt gerne testen! Über Feedback würde ich mich sehr freuen! Wer möchte kann den UmlautAdaptarr jetzt gerne testen! Über Feedback würde ich mich sehr freuen!
Es sollte mit allen *arrs funktionieren, hat aber nur bei Sonarr schon Auswirkungen (abgesehen vom Caching). Es sollte mit allen *arrs funktionieren, hat aber nur bei Sonarr und Lidarr schon Auswirkungen (abgesehen vom Caching).
Momentan ist docker dafür nötig, wer kein Docker nutzt muss sich noch etwas gedulden. Momentan ist docker dafür nötig, wer kein Docker nutzt muss sich noch etwas gedulden.
@@ -38,8 +38,9 @@ Einige Beispiele findet ihr unter Features.
| Feature | Status | | Feature | Status |
|-------------------------------------------------------------------|---------------| |-------------------------------------------------------------------|---------------|
| Sonarr & Prowlarr Support | ✓ | | Prowlarr Support | ✓|
| Lidarr Support | (✓) kein RSS Sync| | Sonarr Support | ✓ |
| Lidarr Support | ✓|
| Releases mit deutschem Titel werden erkannt | ✓ | | Releases mit deutschem Titel werden erkannt | ✓ |
| Releases mit TVDB-Alias Titel werden erkannt | ✓ | | Releases mit TVDB-Alias Titel werden erkannt | ✓ |
| Korrekte Suche und Erkennung von Titel mit Umlauten | ✓ | | Korrekte Suche und Erkennung von Titel mit Umlauten | ✓ |

View File

@@ -54,6 +54,7 @@ namespace UmlautAdaptarr.Models
else else
{ {
TitleSearchVariations = GenerateVariations(germanTitle, mediaType).ToArray(); TitleSearchVariations = GenerateVariations(germanTitle, mediaType).ToArray();
var allTitleVariations = new List<string>(TitleSearchVariations); var allTitleVariations = new List<string>(TitleSearchVariations);
// If aliases are not null, generate variations for each and add them to the list // If aliases are not null, generate variations for each and add them to the list
@@ -66,8 +67,22 @@ namespace UmlautAdaptarr.Models
} }
} }
TitleMatchVariations = allTitleVariations.Distinct().ToArray();
AuthorMatchVariations = []; AuthorMatchVariations = [];
// if a german title ends with (DE) also add a search string that replaces (DE) with GERMAN
// also add a matching title without (DE)
if (germanTitle?.EndsWith("(DE)") ?? false)
{
TitleSearchVariations = [.. TitleSearchVariations, ..
GenerateVariations(
germanTitle.Replace("(DE)", " GERMAN").RemoveExtraWhitespaces(),
mediaType)];
allTitleVariations.AddRange(GenerateVariations(germanTitle.Replace("(DE)", "").Trim(), mediaType));
}
TitleMatchVariations = allTitleVariations.Distinct().ToArray();
} }
} }

View File

@@ -1,4 +1,5 @@
using System.Text.RegularExpressions; using Microsoft.Extensions.FileSystemGlobbing.Internal;
using System.Text.RegularExpressions;
using System.Xml.Linq; using System.Xml.Linq;
using UmlautAdaptarr.Models; using UmlautAdaptarr.Models;
using UmlautAdaptarr.Utilities; using UmlautAdaptarr.Utilities;
@@ -73,17 +74,17 @@ namespace UmlautAdaptarr.Services
var test = originalTitle[matchEndPositionInOriginal]; var test = originalTitle[matchEndPositionInOriginal];
// Check and adjust for immediate following delimiter // Check and adjust for immediate following delimiter
if (matchEndPositionInOriginal < originalTitle.Length && new char[] { ' ', '-', '_', '.' }.Contains(originalTitle[matchEndPositionInOriginal])) char[] delimiters = new char[] { ' ', '-', '_', '.' };
if (matchEndPositionInOriginal < originalTitle.Length && delimiters.Contains(originalTitle[matchEndPositionInOriginal]))
{ {
matchEndPositionInOriginal++; // Skip the delimiter if it's immediately after the match matchEndPositionInOriginal++; // Skip the delimiter if it's immediately after the match
} }
// Ensure we trim any leading delimiters from the suffix // Ensure we trim any leading delimiters from the suffix
string suffix = originalTitle[matchEndPositionInOriginal..].TrimStart([' ', '-', '_', '.']).Trim(); string suffix = originalTitle[matchEndPositionInOriginal..].TrimStart([' ', '-', '_', '.']).Trim();
suffix = suffix.Replace("-", ".");
// Concatenate the expected title with the remaining suffix // Concatenate the expected title with the remaining suffix
var updatedTitle = $"{searchItem.ExpectedAuthor} - {searchItem.ExpectedTitle}-{suffix}"; var updatedTitle = $"{searchItem.ExpectedAuthor} - {searchItem.ExpectedTitle}-[{suffix}]";
// Update the title element // Update the title element
titleElement.Value = updatedTitle; titleElement.Value = updatedTitle;
@@ -174,12 +175,6 @@ namespace UmlautAdaptarr.Services
// Check if the originalTitle starts with the variation (ignoring case and separators) // Check if the originalTitle starts with the variation (ignoring case and separators)
if (Regex.IsMatch(normalizedOriginalTitle, variationMatchPattern, RegexOptions.IgnoreCase)) if (Regex.IsMatch(normalizedOriginalTitle, variationMatchPattern, RegexOptions.IgnoreCase))
{ {
// Workaround for the rare case of e.g. "Frieren: Beyond Journey's End" that also has the alias "Frieren"
if (expectedTitle!.StartsWith(variation, StringComparison.OrdinalIgnoreCase))
{
logger.LogWarning($"TitleMatchingService - Didn't rename: '{originalTitle}' because the expected title '{expectedTitle}' starts with the variation '{variation}'");
continue;
}
var originalTitleMatchPattern = "^" + Regex.Escape(variation).Replace("\\ ", "[._ ]"); var originalTitleMatchPattern = "^" + Regex.Escape(variation).Replace("\\ ", "[._ ]");
// Find the first separator used in the original title for consistent replacement // Find the first separator used in the original title for consistent replacement
@@ -191,6 +186,19 @@ namespace UmlautAdaptarr.Services
var variationLength = variation.Length; var variationLength = variation.Length;
var suffix = originalTitle[Math.Min(variationLength, originalTitle.Length)..]; var suffix = originalTitle[Math.Min(variationLength, originalTitle.Length)..];
// Workaround for the rare case of e.g. "Frieren: Beyond Journey's End" that also has the alias "Frieren"
if (expectedTitle!.StartsWith(variation, StringComparison.OrdinalIgnoreCase))
{
// See if we already matched the whole title by checking if S01E01 pattern is coming next to avoid false positives
// - that won't help with movies but with tv shows
var seasonMatchingPattern = $"^{separator}S\\d{{1,2}}E\\d{{1,2}}";
if (!Regex.IsMatch(suffix, seasonMatchingPattern))
{
logger.LogWarning($"TitleMatchingService - Didn't rename: '{originalTitle}' because the expected title '{expectedTitle}' starts with the variation '{variation}'");
continue;
}
}
// Clean up any leading separators from the suffix // Clean up any leading separators from the suffix
suffix = Regex.Replace(suffix, "^[._ ]+", ""); suffix = Regex.Replace(suffix, "^[._ ]+", "");

View File

@@ -0,0 +1,18 @@
@echo off
SET IMAGE_NAME=pcjones/umlautadaptarr
echo Enter the version number for the Docker image:
set /p VERSION="Version: "
echo Building Docker image with version %VERSION%...
docker build -t %IMAGE_NAME%:%VERSION% .
docker tag %IMAGE_NAME%:%VERSION% %IMAGE_NAME%:latest
echo Pushing Docker image with version %VERSION%...
docker push %IMAGE_NAME%:%VERSION%
echo Pushing Docker image with tag latest...
docker push %IMAGE_NAME%:latest
echo Done.
pause