using System.Collections.Generic; using System.Linq; using API.Comparators; using API.Entities; using API.Parser; using API.Services.Tasks.Scanner; namespace API.Extensions; public static class SeriesExtensions { /// /// Checks against all the name variables of the Series if it matches anything in the list. This does not check against format. /// /// /// /// public static bool NameInList(this Series series, IEnumerable list) { return list.Any(name => Services.Tasks.Scanner.Parser.Parser.Normalize(name) == series.NormalizedName || Services.Tasks.Scanner.Parser.Parser.Normalize(name) == Services.Tasks.Scanner.Parser.Parser.Normalize(series.Name) || name == series.Name || name == series.LocalizedName || name == series.OriginalName || Services.Tasks.Scanner.Parser.Parser.Normalize(name) == Services.Tasks.Scanner.Parser.Parser.Normalize(series.OriginalName)); } /// /// Checks against all the name variables of the Series if it matches anything in the list. Includes a check against the Format of the Series /// /// /// /// public static bool NameInList(this Series series, IEnumerable list) { return list.Any(name => Services.Tasks.Scanner.Parser.Parser.Normalize(name.Name) == series.NormalizedName || Services.Tasks.Scanner.Parser.Parser.Normalize(name.Name) == Services.Tasks.Scanner.Parser.Parser.Normalize(series.Name) || name.Name == series.Name || name.Name == series.LocalizedName || name.Name == series.OriginalName || Services.Tasks.Scanner.Parser.Parser.Normalize(name.Name) == Services.Tasks.Scanner.Parser.Parser.Normalize(series.OriginalName) && series.Format == name.Format); } /// /// Checks against all the name variables of the Series if it matches the /// /// /// /// public static bool NameInParserInfo(this Series series, ParserInfo info) { if (info == null) return false; return Services.Tasks.Scanner.Parser.Parser.Normalize(info.Series) == series.NormalizedName || Services.Tasks.Scanner.Parser.Parser.Normalize(info.Series) == Services.Tasks.Scanner.Parser.Parser.Normalize(series.Name) || info.Series == series.Name || info.Series == series.LocalizedName || info.Series == series.OriginalName || Services.Tasks.Scanner.Parser.Parser.Normalize(info.Series) == Services.Tasks.Scanner.Parser.Parser.Normalize(series.OriginalName); } /// /// Calculates the Cover Image for the Series /// /// /// /// This is under the assumption that the Volume already has a Cover Image calculated and set public static string GetCoverImage(this Series series) { var volumes = series.Volumes ?? new List(); var firstVolume = volumes.GetCoverImage(series.Format); string coverImage = null; var chapters = firstVolume.Chapters.OrderBy(c => double.Parse(c.Number), ChapterSortComparerZeroFirst.Default).ToList(); if (chapters.Count > 1 && chapters.Any(c => c.IsSpecial)) { coverImage = chapters.FirstOrDefault(c => !c.IsSpecial)?.CoverImage ?? chapters.First().CoverImage; firstVolume = null; } return firstVolume?.CoverImage ?? coverImage; } }