diff --git a/apps/pyMetadata/sources/select.py b/apps/pyMetadata/sources/select.py index b08ec7fb..39b48a5c 100644 --- a/apps/pyMetadata/sources/select.py +++ b/apps/pyMetadata/sources/select.py @@ -1,3 +1,4 @@ +import logging from dataclasses import dataclass from typing import List, Optional from .result import Metadata, DataResult @@ -6,6 +7,7 @@ from .imdb import metadata as ImdbMetadata from .mal import metadata as MalMetadata from fuzzywuzzy import fuzz +logger = logging.getLogger(__name__) @dataclass class WeightedData: @@ -33,7 +35,7 @@ class UseSource(): if (imdb is not None) and (imdb.status == "COMPLETED" and imdb.data is not None): imdb_weight = 1 if (imdb.data.title == title): - imdb_weight = 6 + imdb_weight = 7 result.append(WeightedData(imdb, imdb_weight)) if (mal is not None) and (mal.status == "COMPLETED" and mal.data is not None): result.append(WeightedData(mal, 8)) @@ -59,6 +61,15 @@ class UseSource(): scored = self.__calculate_score(title=self.title, weightData=weightResult) scored.sort(key=lambda x: x.score, reverse=True) + try: + titles: List[str] = [] + for wd in weightResult: + titles.append(wd.result.data.title) + titles.extend(wd.result.data.altTitle) + logger.info(f"Title {self.title} gave the result: {"\n\t".join(titles)} \nWith used: {scored[0].result.data.title}\n") + except: + pass + # Return the result with the highest score (most likely result) return scored[0].result if scored else None diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameParser.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameParser.kt index 820e94a0..af58656a 100644 --- a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameParser.kt +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameParser.kt @@ -44,9 +44,8 @@ class FileNameParser(val fileName: String) { fun guessDesiredTitle(): String { val desiredFileName = guessDesiredFileName() - val seasonRegex = Regex("\\sS[0-9]+(\\s- [0-9]+|\\s[0-9]+)", RegexOption.IGNORE_CASE) - if (seasonRegex.containsMatchIn(desiredFileName)) { - return seasonRegex.replace(desiredFileName, "").trim() + if (Regexes.season.containsMatchIn(desiredFileName)) { + return Regexes.season.split(desiredFileName).firstOrNull()?.trim() ?: desiredFileName } else { val result = if (desiredFileName.contains(" - ")) { return desiredFileName.split(" - ").firstOrNull() ?: desiredFileName diff --git a/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/Regexes.kt b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/Regexes.kt new file mode 100644 index 00000000..2fccae51 --- /dev/null +++ b/shared/common/src/main/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/Regexes.kt @@ -0,0 +1,6 @@ +package no.iktdev.mediaprocessing.shared.common.parsing + +object Regexes { + val seasonAndEpisode = Regex("""(?i)\b(?:S|Season)\s*(\d+).*?(?:E|Episode)?\s*(\d+)\b""", RegexOption.IGNORE_CASE) + val season = Regex("""(?i)\b(?:S|Season)\s*-?\s*(\d+)""", RegexOption.IGNORE_CASE) +} \ No newline at end of file diff --git a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameParserTest.kt b/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameParserTest.kt similarity index 51% rename from apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameParserTest.kt rename to shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameParserTest.kt index d7ac73e0..b20e796a 100644 --- a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameParserTest.kt +++ b/shared/common/src/test/kotlin/no/iktdev/mediaprocessing/shared/common/parsing/FileNameParserTest.kt @@ -2,17 +2,25 @@ package no.iktdev.mediaprocessing.shared.common.parsing import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertDoesNotThrow - +import java.io.File class FileNameParserTest { + @Test + fun testParsing() { + val file = File("/src/input/Fancy.Thomas.S03.1080p.AMAZING.WEB-VALUE.DDP5AN.1.H.264/Fancy.Thomas.S03E03.Enemy.1080p.AMAZING.WEB-VALUE.DDP5AN.1.H.264.mkv") + val fnp = FileNameParser(file.nameWithoutExtension) + assertThat(fnp.guessDesiredTitle()).isEqualTo("Fancy Thomas") + assertThat(fnp.guessDesiredFileName()).isEqualTo("Fancy Thomas S03E03 Enemy") + } + @Test fun serieNameWithNumbers() { val name = "[TST] Fancy Name Test 99 - 01 [Nans][#00A8E6]" val parser = FileNameParser(name) val result = parser.guessDesiredTitle() assertThat(result).isEqualTo("Fancy Name Test 99") - assertThat(parser.guessDesiredFileName()).isEqualTo("Fancy Name Test 99 - 01") } + assertThat(parser.guessDesiredFileName()).isEqualTo("Fancy Name Test 99 - 01") + } } \ No newline at end of file