From 5e834ae3be7c146c1709c1c6bee2ded558577774 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 16 Feb 2016 20:45:41 +0100 Subject: [PATCH 1/2] improve colon handling --- .../java/eu/kanade/tachiyomi/util/ChapterRecognition.java | 5 +++-- .../java/eu/kanade/tachiyomi/ChapterRecognitionTest.java | 7 +++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/ChapterRecognition.java b/app/src/main/java/eu/kanade/tachiyomi/util/ChapterRecognition.java index 812916e54..1dbe9ebc6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/ChapterRecognition.java +++ b/app/src/main/java/eu/kanade/tachiyomi/util/ChapterRecognition.java @@ -15,7 +15,8 @@ public class ChapterRecognition { private static final Pattern withAlphaPostfix = Pattern.compile("(\\d+[\\.,]?\\d*\\s*)([a-z])($|\\b)"); private static final Pattern cleanNumber = Pattern.compile("(\\d+[\\.,]?\\d+)($|\\b)"); private static final Pattern uncleanNumber = Pattern.compile("(\\d+[\\.,]?\\d*)"); - private static final Pattern withColon = Pattern.compile("(\\d+[\\.,]?\\d*\\s*:)"); + private static final Pattern withColon = Pattern.compile("(\\d+[\\.,]?\\d*\\s*:)([^\\d]|$)"); + private static final Pattern startingNumber = Pattern.compile("^(\\d+[\\.,]?\\d*)"); private static final Pattern pUnwanted = Pattern.compile("(\\b|\\d)(v|ver|vol|version|volume)\\.?\\s*\\d+\\b"); @@ -84,7 +85,7 @@ public class ChapterRecognition { // Try to remove the manga name from the chapter, and try again String mangaName = replaceIrrelevantCharacters(manga.title); - String nameWithoutManga = difference(mangaName, name); + String nameWithoutManga = difference(mangaName, name).trim(); if (!nameWithoutManga.isEmpty()) { matcher = uncleanNumber.matcher(nameWithoutManga); occurrences = getAllOccurrences(matcher); diff --git a/app/src/test/java/eu/kanade/tachiyomi/ChapterRecognitionTest.java b/app/src/test/java/eu/kanade/tachiyomi/ChapterRecognitionTest.java index 150520ad5..6aace84f9 100644 --- a/app/src/test/java/eu/kanade/tachiyomi/ChapterRecognitionTest.java +++ b/app/src/test/java/eu/kanade/tachiyomi/ChapterRecognitionTest.java @@ -179,4 +179,11 @@ public class ChapterRecognitionTest { ChapterRecognition.parseChapterNumber(c, randomManga); assertThat(c.chapter_number).isEqualTo(-1f); } + + @Test + public void testChapterWithTime() { + Chapter c = createChapter("Fairy Tail 404: 00:00"); + ChapterRecognition.parseChapterNumber(c, randomManga); + assertThat(c.chapter_number).isEqualTo(404f); + } } From eee137a084d89e71fe65c33387acc60b36fc671b Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 16 Feb 2016 21:03:52 +0100 Subject: [PATCH 2/2] prefer numbers at the start of the chapter title if otherwise unparsed --- .../kanade/tachiyomi/util/ChapterRecognition.java | 13 +++++++++++++ .../eu/kanade/tachiyomi/ChapterRecognitionTest.java | 9 +++++++++ 2 files changed, 22 insertions(+) diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/ChapterRecognition.java b/app/src/main/java/eu/kanade/tachiyomi/util/ChapterRecognition.java index 1dbe9ebc6..1373deae1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/ChapterRecognition.java +++ b/app/src/main/java/eu/kanade/tachiyomi/util/ChapterRecognition.java @@ -122,6 +122,19 @@ public class ChapterRecognition { return; } } + + + // check for a number either at the start or right after the manga title + matcher = startingNumber.matcher(name); + if (matcher.find()) { + chapter.chapter_number = Float.parseFloat(matcher.group(1)); + return; + } + matcher = startingNumber.matcher(nameWithoutManga); + if (matcher.find()) { + chapter.chapter_number = Float.parseFloat(matcher.group(1)); + return; + } } /** diff --git a/app/src/test/java/eu/kanade/tachiyomi/ChapterRecognitionTest.java b/app/src/test/java/eu/kanade/tachiyomi/ChapterRecognitionTest.java index 6aace84f9..6235e298d 100644 --- a/app/src/test/java/eu/kanade/tachiyomi/ChapterRecognitionTest.java +++ b/app/src/test/java/eu/kanade/tachiyomi/ChapterRecognitionTest.java @@ -186,4 +186,13 @@ public class ChapterRecognitionTest { ChapterRecognition.parseChapterNumber(c, randomManga); assertThat(c.chapter_number).isEqualTo(404f); } + + @Test + public void testPlainNumberInTitle() { + Chapter c = createChapter("Kuroko no Basket 002 Monday at 840 on the Rooftop"); + Manga manga = new Manga(); + manga.title = "Kuroko no Basket"; + ChapterRecognition.parseChapterNumber(c, manga); + assertThat(c.chapter_number).isEqualTo(2f); + } }