From 1f685f5808d731b7720043045d57c965d6a29f60 Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Sun, 25 Feb 2024 01:05:04 +0100 Subject: [PATCH] =?utf8?q?=F0=9F=8E=A8=20Add=20=E2=80=9CimageUrl=E2=80=9D?= =?utf8?q?=20attribute=20to=20Movie?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../rhynodge/filters/webpages/savoy/Movie.java | 18 +++++--- .../filters/webpages/savoy/MovieExtractor.kt | 4 +- .../filters/webpages/savoy/MovieExtractorTest.java | 48 ++++++++++++---------- 3 files changed, 42 insertions(+), 28 deletions(-) diff --git a/src/main/java/net/pterodactylus/rhynodge/filters/webpages/savoy/Movie.java b/src/main/java/net/pterodactylus/rhynodge/filters/webpages/savoy/Movie.java index 0844b7c..5e831d8 100644 --- a/src/main/java/net/pterodactylus/rhynodge/filters/webpages/savoy/Movie.java +++ b/src/main/java/net/pterodactylus/rhynodge/filters/webpages/savoy/Movie.java @@ -20,20 +20,28 @@ public class Movie { private final String name; @JsonProperty + private final String imageUrl; + + @JsonProperty private final List performances = new ArrayList<>(); public Movie() { - this(""); + this("", ""); } - public Movie(String name) { + public Movie(String name, String imageUrl) { this.name = name; + this.imageUrl = imageUrl; } public String getName() { return name; } + public String getImageUrl() { + return imageUrl; + } + public List getPerformances() { return performances; } @@ -44,12 +52,12 @@ public class Movie { @Override public String toString() { - return format("%s (%s)", name, performances.stream().map(link -> String.format("%s: %s", link.getTime(), link.getLink())).collect(Collectors.joining(", "))); + return format("%s (%s, %s)", name, imageUrl, performances.stream().map(link -> String.format("%s: %s", link.getTime(), link.getLink())).collect(Collectors.joining(", "))); } @Override public int hashCode() { - return Objects.hash(name, performances); + return Objects.hash(name, imageUrl, performances); } @Override @@ -57,7 +65,7 @@ public class Movie { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Movie movie = (Movie) o; - return Objects.equals(name, movie.name) && Objects.equals(performances, movie.performances); + return Objects.equals(name, movie.name) && Objects.equals(imageUrl, movie.imageUrl) && Objects.equals(performances, movie.performances); } } diff --git a/src/main/kotlin/net/pterodactylus/rhynodge/filters/webpages/savoy/MovieExtractor.kt b/src/main/kotlin/net/pterodactylus/rhynodge/filters/webpages/savoy/MovieExtractor.kt index d828ec8..8bd0812 100644 --- a/src/main/kotlin/net/pterodactylus/rhynodge/filters/webpages/savoy/MovieExtractor.kt +++ b/src/main/kotlin/net/pterodactylus/rhynodge/filters/webpages/savoy/MovieExtractor.kt @@ -25,7 +25,7 @@ class MovieExtractor { .replace("&l;", "<") .replace("&g;", ">") - private fun JsonNode.extractMovie() = Movie(get("name").asText()).apply { + private fun JsonNode.extractMovie() = Movie(get("name").asText(), get("poster").get("original").asText().fixImageUrl()).apply { this@extractMovie.get("performances") .map { performance -> val begin = LocalDateTime.parse(performance.get("begin").asText(), dateFormat) @@ -40,3 +40,5 @@ class MovieExtractor { private val objectMapper = ObjectMapper() private val dateFormat = DateTimeFormatter.ISO_LOCAL_DATE_TIME + +private fun String.fixImageUrl() = replace(Regex("^/files"), "https://cdn.premiumkino.de") diff --git a/src/test/java/net/pterodactylus/rhynodge/filters/webpages/savoy/MovieExtractorTest.java b/src/test/java/net/pterodactylus/rhynodge/filters/webpages/savoy/MovieExtractorTest.java index 964b304..59bcd28 100644 --- a/src/test/java/net/pterodactylus/rhynodge/filters/webpages/savoy/MovieExtractorTest.java +++ b/src/test/java/net/pterodactylus/rhynodge/filters/webpages/savoy/MovieExtractorTest.java @@ -45,7 +45,7 @@ public class MovieExtractorTest { @Test public void moviesAreLocated() throws IOException { assertThat(movies, containsInAnyOrder( - movie("All of Us Strangers", + movie("All of Us Strangers", "https://cdn.premiumkino.de/movie/2809/db0e5c3ed02ba7fe4afa3b12aabb611f.jpg", new Pair<>(of(2024, 2, 9, 16, 15), "https://savoy.premiumkino.de/vorstellung/all-of-us-strangers/20240209/1615/HkKdhlHMvtfSMy1fqYYtYuVdgGIKtnT7i7ddY5jzRfY~"), new Pair<>(of(2024, 2, 10, 22, 15), "https://savoy.premiumkino.de/vorstellung/all-of-us-strangers/20240210/2215/znWqm8FQUNSbrODY_A0jw8Au2nW6uSqbFE7Co8UgQv0~"), new Pair<>(of(2024, 2, 11, 20, 15), "https://savoy.premiumkino.de/vorstellung/all-of-us-strangers/20240211/2015/I642oTHBKpy7sz2RULHIQK6cykSCPi57_c0TApiKbUk~"), @@ -53,53 +53,53 @@ public class MovieExtractorTest { new Pair<>(of(2024, 2, 13, 20, 30), "https://savoy.premiumkino.de/vorstellung/all-of-us-strangers/20240213/2030/M0mIWdKm5gZkan5na6zOVFBzsHWAHhqod8RCmG2Fr0Y~"), new Pair<>(of(2024, 2, 14, 14, 30), "https://savoy.premiumkino.de/vorstellung/all-of-us-strangers/20240214/1430/VZhgxh4PZutWWlLPEAe9dfOUJkB3sLnXzWoduICJYTk~") ), - movie("Dune", + movie("Dune", "https://cdn.premiumkino.de/movie/3261/bcc70cb1cc4559731b6fd547d0f5cee1.jpg", new Pair<>(of(2024, 2, 9, 19, 0), "https://savoy.premiumkino.de/vorstellung/dune/20240209/1900/o9jDuan4yyxaW7-Jg3hCJpiAM4CLZei8J2IX-O5-hA0~"), new Pair<>(of(2024, 2, 10, 15, 30), "https://savoy.premiumkino.de/vorstellung/dune/20240210/1530/jXbZnYD8R5djVnj3Ojjcsc9qdSJ0JBMVhn7PeP88HyY~"), new Pair<>(of(2024, 2, 11, 13, 30), "https://savoy.premiumkino.de/vorstellung/dune/20240211/1330/aJmlM8wOaGl_jtuWDvWG9TF7RR1zRpNrSZeArCBhn90~"), new Pair<>(of(2024, 2, 12, 20, 0), "https://savoy.premiumkino.de/vorstellung/dune/20240212/2000/2KLOCZy5zU060zKj-4zafxm3oalEyT4tNi2Fxnw5D7E~"), new Pair<>(of(2024, 2, 13, 17, 0), "https://savoy.premiumkino.de/vorstellung/dune/20240213/1700/QCphOtH-WrZ2tRbENwaxXPskrN2gH3I8dHR0Y5L3l0Y~") ), - movie("SAVOY Sneak-Preview", + movie("SAVOY Sneak-Preview", "https://cdn.premiumkino.de/movie/5617/33dc4c74b4cca5cf4585b4cadfc38ec4.png", new Pair<>(of(2024, 2, 9, 22, 30), "https://savoy.premiumkino.de/vorstellung/sneak-preview/20240209/2230/GtYBcOR_Jy7a8xDxwwPHI0wfY_v_Ep2P6rV0w4wJ7SM~"), new Pair<>(of(2024, 2, 16, 22, 0), "https://savoy.premiumkino.de/vorstellung/sneak-preview/20240216/2200/ZRC7iir9Hu8nIpH1PsiA_UDvckcj7yGqgMEYXHAs9Qw~") ), - movie("Der Junge und der Reiher", + movie("Der Junge und der Reiher", "https://cdn.premiumkino.de/movie/4013/b129f329bc07315ccd9591fd2cde19b4.jpg", new Pair<>(of(2024, 2, 10, 12, 30), "https://savoy.premiumkino.de/vorstellung/der-junge-und-der-reiher/20240210/1230/F0atZERI4Gssj3LGC-2fQlLF3rM9Uk8IbpOzHaXyx7w~") ), - movie("Poor Things", + movie("Poor Things", "https://cdn.premiumkino.de/movie/1066/aba09af737677ff6a15676ae588098b1.jpg", new Pair<>(of(2024, 2, 10, 19, 0), "https://savoy.premiumkino.de/vorstellung/poor-things/20240210/1900/SqolavKZAlBMZH_JAN-OqdZqowBv-aRqhPGHvPTphao~"), new Pair<>(of(2024, 2, 11, 17, 0), "https://savoy.premiumkino.de/vorstellung/poor-things/20240211/1700/UrS33k-jY7_ZAsm4B7wydy0SBfdVjdd73On68HtIy9E~"), new Pair<>(of(2024, 2, 13, 13, 45), "https://savoy.premiumkino.de/vorstellung/poor-things/20240213/1345/gma7KCzuaJQCSoBm8NMJb3ATjtMISm4M9IiwiVNpXpw~"), new Pair<>(of(2024, 2, 14, 17, 15), "https://savoy.premiumkino.de/vorstellung/poor-things/20240214/1715/cBjQj4qRrJaSX3m_acvfxNL1Tclg0Rrt_X63Md0rkEw~") ), - movie("Vergiss mein nicht- Eternal Sunshine of the Spotless Mind", + movie("Vergiss mein nicht- Eternal Sunshine of the Spotless Mind", "https://cdn.premiumkino.de/movie/2641/963c11bfaccb7c66da0b6b25ea8ed299.jpg", new Pair<>(of(2024, 2, 14, 20, 30), "https://savoy.premiumkino.de/vorstellung/vergiss-mein-nicht-eternal-sunshine-of-the-spotless-mind/20240214/2030/QqoCtd4ls09AD04rGSNh8qPkf02rcRzp2wFfF2BoobE~") ), - movie("Bob Marley: One Love", + movie("Bob Marley: One Love", "https://cdn.premiumkino.de/movie/1243/772641b8454ce4ea28c5eb56ec74365f.jpg", new Pair<>(of(2024, 2, 15, 20, 15), "https://savoy.premiumkino.de/vorstellung/bob-marley-one-love/20240215/2015/q4dxyPDNVvZDEeIuh1r9Y4OJ7UK36CKSr2d7p3h9LMs~") ), - movie("The Hateful 8", + movie("The Hateful 8", "https://cdn.premiumkino.de/movie/6651/164fd22df165c914f118f85ff0bd34aa.jpg", new Pair<>(of(2024, 2, 18, 19, 45), "https://savoy.premiumkino.de/vorstellung/the-hateful-8/20240218/1945/dusKDbTYgF79OipGmQO0Q4P5K02rclkjIV9At8qKfOA~") ), - movie("Prinzessin Mononoke", + movie("Prinzessin Mononoke", "https://cdn.premiumkino.de/movie/6085/062bbdbbda9f86b7e066486412532369.jpg", new Pair<>(of(2024, 2, 19, 20, 15), "https://savoy.premiumkino.de/vorstellung/prinzessin-mononoke/20240219/2015/LmbLtOrTZxBgPlBMzoRZ4_C-PfO64GeXNIKr5KGs-2M~"), new Pair<>(of(2024, 2, 22, 20, 15), "https://savoy.premiumkino.de/vorstellung/prinzessin-mononoke/20240222/2015/mvbGK2fA5AgPbADOzm7sqFYYzm2qdqqdwqdLu4rMPrg~") ), - movie("Das fünfte Element (Best of Cinema)", + movie("Das fünfte Element (Best of Cinema)", "https://cdn.premiumkino.de/movie/2861/69770d12a16f13df00b70cb830b9d75b.jpg", new Pair<>(of(2024, 2, 20, 20, 30), "https://savoy.premiumkino.de/vorstellung/das-fuenfte-element-best-of-cinema/20240220/2030/QcJZ5Yh8P2j_HKLSP8cjcXsqkbdqYdYGTexCF3RF2R4~") ), - movie("Heaven Can Wait - wir leben jetzt", + movie("Heaven Can Wait - wir leben jetzt", "https://cdn.premiumkino.de/movie/3191/b9698912f3fdec6bd72fe66be9cab6f0.jpg", new Pair<>(of(2024, 2, 21, 11, 0), "https://savoy.premiumkino.de/vorstellung/heaven-can-wait-wir-leben-jetzt/20240221/1100/GW7pwEYabwN3-e8uTGmSPTfdbyXoKe4la-B2L1SI8XI~") ), - movie("Demon Slayer: Kimetsu no yaiba - Zum Training der Säulen", + movie("Demon Slayer: Kimetsu no yaiba - Zum Training der Säulen", "https://cdn.premiumkino.de/movie/3478/96e87d7ec36c9c2b2d4ff2cc933c9401.jpg", new Pair<>(of(2024, 2, 27, 20, 30), "https://savoy.premiumkino.de/vorstellung/demon-slayer-kimetsu-no-yaiba-zum-training-der-saeulen/20240227/2030/UsAsz9NQPZGfdyLelrAHZ50MXeoElhNIPcgg3unBR0o~") ), - movie("Double Feature DUNE 1&2", + movie("Double Feature DUNE 1&2", "https://cdn.premiumkino.de/movie/7300/14d1b21dee51a82a7b096ca282bf01c8.png", new Pair<>(of(2024, 2, 28, 17, 30), "https://savoy.premiumkino.de/vorstellung/double-feature-dune-1und2/20240228/1730/Ni6Yo0fA4k7gEZiJB8Cnq33Axjnw85JBG2lBIVRwYok~"), new Pair<>(of(2024, 3, 3, 10, 0), "https://savoy.premiumkino.de/vorstellung/double-feature-dune-1und2/20240303/1000/AXcH4nnYJB9Ar0aR5zFl3Bfa238POna3UVY66_nHL6c~") ), - movie("Dune: Part Two", + movie("Dune: Part Two", "https://cdn.premiumkino.de/movie/4669/f0a036d58d75302739ea5680ab8405bc.jpg", new Pair<>(of(2024, 2, 29, 12, 30), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240229/1230/Osq78ODtBKchFFx1HgAmEPAAIWLC6JgxWqC638UaRws~"), new Pair<>(of(2024, 2, 29, 16, 15), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240229/1615/hJ3kXaFB-LjfZu2pYBVx0R_2UoqOJANwWX_AS4KW6FI~"), new Pair<>(of(2024, 2, 29, 20, 0), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240229/2000/EwA7Z5KlKNnIr0e4o_tXGpYp6xN90juBl92wcTVIZ-Q~"), @@ -121,33 +121,33 @@ public class MovieExtractorTest { new Pair<>(of(2024, 3, 6, 16, 0), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240306/1600/Y8x2dIEq1QbEpZf7Td-6-3xqg-d4iDQU9p1fIjxJB0M~"), new Pair<>(of(2024, 3, 6, 19, 45), "https://savoy.premiumkino.de/vorstellung/dune-part-two/20240306/1945/mSiOQk7DuM02IdmaVIvsv5nechCpRkWZwsK37hoXTyg~") ), - movie("791 KM", + movie("791 KM", "https://cdn.premiumkino.de/movie/2753/9585e7bd814dd2bef5d45427df2f2e92.jpg", new Pair<>(of(2024, 3, 6, 11, 0), "https://savoy.premiumkino.de/vorstellung/791-km/20240306/1100/Mcvtz3tawhaIuyCtLtBkHwt6EI8b7oGXwh5OV4YWwNQ~") ), - movie("Following", + movie("Following", "https://cdn.premiumkino.de/movie/3972/b2e687cfb6dffeb4f64acde41e7d286a.jpg", new Pair<>(of(2024, 3, 9, 12, 0), "https://savoy.premiumkino.de/vorstellung/following/20240309/1200/-Aetrz3gC8l4rgVfGc98XXU7B87mTA4RCbWCgZuXHzc~") ), - movie("Donnie Darko (Best of Cinema)", + movie("Donnie Darko (Best of Cinema)", "https://cdn.premiumkino.de/movie/5245/05adfa102a8fb61f47727224369af706.jpg", new Pair<>(of(2024, 3, 16, 22, 15), "https://savoy.premiumkino.de/vorstellung/donnie-darko-best-of-cinema/20240316/2215/ZIBOwCyKuZ7A6OyYZWQ1AqF9O487dY_LAMmURYrGqUs~") ), - movie("NT: Vanya", + movie("NT: Vanya", "https://cdn.premiumkino.de/movie/7449/cb5f27438bbffa247ca4081690f0ded9.jpg", new Pair<>(of(2024, 3, 18, 20, 30), "https://savoy.premiumkino.de/vorstellung/nt-vanya/20240318/2030/X9L2eAn_XElOtZRg7u4eiQ6kUCqcuJhrwQ5T76OAt2s~"), new Pair<>(of(2024, 3, 23, 22, 15), "https://savoy.premiumkino.de/vorstellung/nt-vanya/20240323/2215/xXgXAH_I7xX3GsQ4eA4rZsOOrJqAtK0hCCXexFMj0Fk~"), new Pair<>(of(2024, 4, 8, 20, 30), "https://savoy.premiumkino.de/vorstellung/nt-vanya/20240408/2030/PDQ-R_ltFWo8QAn-BbloxETvgegcTyaQyCZrG_MwQfo~") ), - movie("No Country For Old Men", + movie("No Country For Old Men", "https://cdn.premiumkino.de/movie/1290/dcab4000b5b95ebcc4108906d9b4e0a1.jpg", new Pair<>(of(2024, 3, 26, 20, 15), "https://savoy.premiumkino.de/vorstellung/no-country-for-old-men/20240326/2015/jtZD6DfmChngY1mDGWlaaV8kZdUPL_QT2Fh-t0clBpU~") ), - movie("Lisa Achatzi: Vom Traum zum Trauma - und zurück", + movie("Lisa Achatzi: Vom Traum zum Trauma - und zurück", "https://cdn.premiumkino.de/movie/7729/373dec2c25c06034c5d95e2d205a603c.jpg", new Pair<>(of(2024, 4, 14, 12, 0), "https://savoy.premiumkino.de/vorstellung/lisa-achatzi-vom-traum-zum-trauma-und-zurueck/20240414/1200/MOLgymd988D7m8ZOvhM75aDc5suv3VO9aHobbLsaOgQ~") ), - movie("Movie Quiz: Test Your Movie Knowledge", + movie("Movie Quiz: Test Your Movie Knowledge", "https://cdn.premiumkino.de/movie/1702/ebfecdd4c3cacb6435ba2bffb84a6902.jpg", new Pair<>(of(2024, 4, 15, 20, 15), "https://savoy.premiumkino.de/vorstellung/movie-quiz-test-your-movie-knowledge/20240415/2015/DMAaL86yGoobZhPTDdU2ksO9RUTFoPCiQKGOY7TO6tg~") ) )); } - private Matcher movie(String name, Pair... presentationTimesAndLinks) { + private Matcher movie(String name, String imageUrl, Pair... presentationTimesAndLinks) { return new TypeSafeDiagnosingMatcher() { @Override protected boolean matchesSafely(Movie movie, Description mismatchDescription) { @@ -155,6 +155,10 @@ public class MovieExtractorTest { mismatchDescription.appendText("movie is named ").appendValue(movie.getName()); return false; } + if (!movie.getImageUrl().equals(imageUrl)) { + mismatchDescription.appendText("image URL is ").appendValue(movie.getImageUrl()); + return false; + } List performances = new ArrayList<>(movie.getPerformances()); if (performances.size() != presentationTimesAndLinks.length) { mismatchDescription.appendText("has ").appendValue(performances.size()).appendText(" presentations"); -- 2.7.4