diff --git a/README.md b/README.md index 87ba474..35bfd0c 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,26 @@ # Rating Reader -Rating Reader is a program that reads movie and TV show scores from [IMDb](https://www.imdb.com) and conveniently displays them in a spoiler-free way. Needs an internet connection to work correctly. +Rating Reader is an application that reads media scores from [IMDb](https://www.imdb.com) and conveniently displays them in a spoiler-free way. +Needs an internet connection to work.

By Sam Salek ## How to download -The most up-to-date version of RatingReader.exe is located under builds/_current. Simply select the file and press the "Download" button to start downloading. +The most up-to-date version of RatingReader.exe is located under "builds/_current", a .jar version of the application also exists in the same place for those inclined. +Simply select the file and press the "Download" button to start downloading (a warning may pop up before/during the download. This is perfectly normal, however the application itself is not harmful to your computer in any way. The source code is always available if skeptical). +Older builds also exist beside the "_current" folder, these are however not recommended as they can be unstable and/or buggy. + ## Update Log -#### 0.6.0: +#### 0.6.3 (27/12/20): +* Added support for video games. +* Made the application version and name always stay consistent. +* Fixed a bug which caused the text for seasons 10 and above to be cutoff. +* Fixed movies showing "Other" as media type. +* Fixed a crash that could sometimes occur. + +#### 0.6.0 (22/12/20): * Episodes without a rating is now also displayed (with rating "NA"). * Episodes now correctly displays their respective episode name. * Added functionality for Miniseries' and media that necessarily isn't a series or movie. @@ -17,5 +28,5 @@ The most up-to-date version of RatingReader.exe is located under builds/_current * Minor UI changes and optimizations. * Few bug fixes. -#### 0.5.0: +#### 0.5.0 (14/11/20): * Initial version release. diff --git a/builds/_current/RatingReader-0.6.0.exe b/builds/0.6.3/RatingReader_0.6.3.exe similarity index 95% rename from builds/_current/RatingReader-0.6.0.exe rename to builds/0.6.3/RatingReader_0.6.3.exe index 469d718..cb5e39b 100644 Binary files a/builds/_current/RatingReader-0.6.0.exe and b/builds/0.6.3/RatingReader_0.6.3.exe differ diff --git a/builds/_current/ratingreader-0.6.0.jar b/builds/0.6.3/ratingreader-0.6.3.jar similarity index 95% rename from builds/_current/ratingreader-0.6.0.jar rename to builds/0.6.3/ratingreader-0.6.3.jar index 346b0d3..632d787 100644 Binary files a/builds/_current/ratingreader-0.6.0.jar and b/builds/0.6.3/ratingreader-0.6.3.jar differ diff --git a/builds/_current/RatingReader_0.6.3.exe b/builds/_current/RatingReader_0.6.3.exe new file mode 100644 index 0000000..cb5e39b Binary files /dev/null and b/builds/_current/RatingReader_0.6.3.exe differ diff --git a/builds/_current/ratingreader-0.6.3.jar b/builds/_current/ratingreader-0.6.3.jar new file mode 100644 index 0000000..632d787 Binary files /dev/null and b/builds/_current/ratingreader-0.6.3.jar differ diff --git a/pom.xml b/pom.xml index 0b1bffe..1e252d1 100644 --- a/pom.xml +++ b/pom.xml @@ -6,9 +6,10 @@ com.zemahzalek ratingreader - 0.6.0 + ${dev.version} jar - RatingReader + + ${dev.name} UTF-8 @@ -73,7 +74,7 @@ javafx-maven-plugin 0.0.3 - com.zemahzalek.ratingreader.RatingReader + com.zemahzalek.ratingreader.view.RatingReader @@ -129,7 +130,7 @@ gui - target/RatingReader-${project.version}.exe + target/${dev.executable.name}_${project.version}.exe target/${project.artifactId}-${project.version}.jar false @@ -149,6 +150,26 @@ + + + org.codehaus.mojo + properties-maven-plugin + 1.0.0 + + + initialize + + read-project-properties + + + + src/main/resources/dev.properties + + + + + + diff --git a/src/main/java/com/zemahzalek/ratingreader/Main.java b/src/main/java/com/zemahzalek/ratingreader/Main.java index 623aa0e..24ac1ff 100644 --- a/src/main/java/com/zemahzalek/ratingreader/Main.java +++ b/src/main/java/com/zemahzalek/ratingreader/Main.java @@ -1,5 +1,7 @@ package com.zemahzalek.ratingreader; +import com.zemahzalek.ratingreader.view.RatingReader; + public class Main { public static void main(String[] args) { diff --git a/src/main/java/com/zemahzalek/ratingreader/MediaType.java b/src/main/java/com/zemahzalek/ratingreader/MediaType.java deleted file mode 100644 index 379d5a7..0000000 --- a/src/main/java/com/zemahzalek/ratingreader/MediaType.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.zemahzalek.ratingreader; - -public enum MediaType { - MOVIE, SERIES, MINISERIES, OTHER; - - // Converts to string with first letter uppercase and rest lowercase - @Override - public String toString() { - return name().charAt(0) + name().substring(1).toLowerCase(); - } -} diff --git a/src/main/java/com/zemahzalek/ratingreader/Controller.java b/src/main/java/com/zemahzalek/ratingreader/controller/Controller.java similarity index 97% rename from src/main/java/com/zemahzalek/ratingreader/Controller.java rename to src/main/java/com/zemahzalek/ratingreader/controller/Controller.java index ae270d9..2241da1 100644 --- a/src/main/java/com/zemahzalek/ratingreader/Controller.java +++ b/src/main/java/com/zemahzalek/ratingreader/controller/Controller.java @@ -1,5 +1,7 @@ -package com.zemahzalek.ratingreader; +package com.zemahzalek.ratingreader.controller; +import com.zemahzalek.ratingreader.view.EpisodeItem; +import com.zemahzalek.ratingreader.model.Media; import javafx.application.Platform; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; @@ -117,7 +119,7 @@ public void run() { @Override public void run() { resultNameLabel.setText(media.getName() + " (" + media.getReleaseYear() + ")"); - resultTypeLabel.setText(media.getType().toString()); + resultTypeLabel.setText(media.getType().getName()); updateResults(1); // Get season 1 on search // Only do this if media is a TV Series diff --git a/src/main/java/com/zemahzalek/ratingreader/ImdbController.java b/src/main/java/com/zemahzalek/ratingreader/controller/ImdbController.java similarity index 86% rename from src/main/java/com/zemahzalek/ratingreader/ImdbController.java rename to src/main/java/com/zemahzalek/ratingreader/controller/ImdbController.java index b509975..4f67846 100644 --- a/src/main/java/com/zemahzalek/ratingreader/ImdbController.java +++ b/src/main/java/com/zemahzalek/ratingreader/controller/ImdbController.java @@ -1,5 +1,7 @@ -package com.zemahzalek.ratingreader; +package com.zemahzalek.ratingreader.controller; +import com.zemahzalek.ratingreader.model.Media; +import com.zemahzalek.ratingreader.model.MediaType; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; @@ -20,7 +22,7 @@ public ImdbController(Media media) { this.media = media; } - void setMedia(String mediaName) throws IOException { + public void setMedia(String mediaName) throws IOException { fetchImdbWebsiteCode(mediaName); fetchMediaName(); fetchMediaType(); @@ -64,60 +66,43 @@ private void fetchSeasonsWebsiteCode() throws IOException { } private void fetchMediaName() { - if(mainWebsiteCode == null) { - return; - } - String name = mainWebsiteCode.getElementsByClass("title_wrapper").first().child(0).text(); media.setName(name); } private void fetchMediaType() { - if(mainWebsiteCode == null) { - return; - } - String type = mainWebsiteCode.getElementsByClass("subtext").first().select("a").last().text(); // Gets first "subtext" div and selects last element of type "a" type = type.replaceAll("[^A-Za-z]", ""); // Remove all non alphabetic characters // Sets correct mediaType MediaType mediaType; - switch (type) { - case "Movie": - mediaType = MediaType.MOVIE; - break; - - case "TVSeries": - mediaType = MediaType.SERIES; - break; - - case "TVMiniSeries": - mediaType = MediaType.MINISERIES; - break; - - default: - mediaType = MediaType.OTHER; - break; + if(type.equalsIgnoreCase("TVSeries")) { + mediaType = MediaType.SERIES; + } + else if(type.equalsIgnoreCase("TVMiniSeries")) { + mediaType = MediaType.MINISERIES; + } + else if(type.contains("Videogame")) { + mediaType = MediaType.VIDEOGAME; + } + else { + mediaType = MediaType.MOVIE; } media.setType(mediaType); } private void fetchMediaReleaseYear() { - if(mainWebsiteCode == null) { + String releaseYear = mainWebsiteCode.getElementsByClass("subtext").first().select("a").last().text(); // Gets first "subtext" div and selects last element of type "a" + releaseYear = releaseYear.replaceAll("[^\\d]", ""); // Remove all non numeric characters + + // If no release year is found + if(releaseYear.equals("")) { return; } - String releaseYear = mainWebsiteCode.getElementsByClass("subtext").first().select("a").last().text(); // Gets first "subtext" div and selects last element of type "a" - - char firstChar = releaseYear.charAt(0); - // Check if firstChar is a number - if(firstChar >= '0' && firstChar <= '9') { - releaseYear = releaseYear.replaceAll("[^\\d]", ""); // Remove all non numeric characters + if(releaseYear.length() > 4) { releaseYear = releaseYear.substring(releaseYear.length() - 4); // Keeps only 4 last numbers (the year) - } else { - releaseYear = releaseYear.replaceAll("[^\\d]", ""); // Remove all non numeric characters - releaseYear = releaseYear.substring(0,4); // Cuts of excess year information } media.setReleaseYear(Integer.parseInt(releaseYear)); @@ -136,7 +121,6 @@ private void fetchMediaCategory() { */ private void fetchNrSeasons() { - String seasonsAndYearsDivName = "seasons-and-year-nav"; int seasonDivIndex = 3; Element seasonsAndYearDiv = mainWebsiteCode.getElementsByClass(seasonsAndYearsDivName).first(); // Get first div of that name @@ -146,7 +130,6 @@ private void fetchNrSeasons() { } private void fetchNrEpisodesPerSeason() { - ArrayList episodeAmount = new ArrayList<>(); for (int i = 0; i < media.getNrSeasons(); i++) { diff --git a/src/main/java/com/zemahzalek/ratingreader/Media.java b/src/main/java/com/zemahzalek/ratingreader/model/Media.java similarity index 98% rename from src/main/java/com/zemahzalek/ratingreader/Media.java rename to src/main/java/com/zemahzalek/ratingreader/model/Media.java index 9c26c0b..d5b431a 100644 --- a/src/main/java/com/zemahzalek/ratingreader/Media.java +++ b/src/main/java/com/zemahzalek/ratingreader/model/Media.java @@ -1,4 +1,4 @@ -package com.zemahzalek.ratingreader; +package com.zemahzalek.ratingreader.model; import java.util.ArrayList; diff --git a/src/main/java/com/zemahzalek/ratingreader/model/MediaType.java b/src/main/java/com/zemahzalek/ratingreader/model/MediaType.java new file mode 100644 index 0000000..832d035 --- /dev/null +++ b/src/main/java/com/zemahzalek/ratingreader/model/MediaType.java @@ -0,0 +1,15 @@ +package com.zemahzalek.ratingreader.model; + +public enum MediaType { + MOVIE("Movie"), SERIES("Series"), MINISERIES("Miniseries"), VIDEOGAME("Video Game"), OTHER("Other"); + + private String name; + + MediaType(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/com/zemahzalek/ratingreader/EpisodeItem.java b/src/main/java/com/zemahzalek/ratingreader/view/EpisodeItem.java similarity index 96% rename from src/main/java/com/zemahzalek/ratingreader/EpisodeItem.java rename to src/main/java/com/zemahzalek/ratingreader/view/EpisodeItem.java index 5cef99d..daa9120 100644 --- a/src/main/java/com/zemahzalek/ratingreader/EpisodeItem.java +++ b/src/main/java/com/zemahzalek/ratingreader/view/EpisodeItem.java @@ -1,5 +1,6 @@ -package com.zemahzalek.ratingreader; +package com.zemahzalek.ratingreader.view; +import com.zemahzalek.ratingreader.model.Media; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.fxml.FXML; diff --git a/src/main/java/com/zemahzalek/ratingreader/RatingReader.java b/src/main/java/com/zemahzalek/ratingreader/view/RatingReader.java similarity index 53% rename from src/main/java/com/zemahzalek/ratingreader/RatingReader.java rename to src/main/java/com/zemahzalek/ratingreader/view/RatingReader.java index 1451297..41f5da7 100644 --- a/src/main/java/com/zemahzalek/ratingreader/RatingReader.java +++ b/src/main/java/com/zemahzalek/ratingreader/view/RatingReader.java @@ -1,4 +1,4 @@ -package com.zemahzalek.ratingreader; +package com.zemahzalek.ratingreader.view; import javafx.application.Application; import javafx.fxml.FXMLLoader; @@ -6,6 +6,10 @@ import javafx.scene.Scene; import javafx.stage.Stage; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + public class RatingReader extends Application { public static void run(String[] args) { @@ -18,9 +22,18 @@ public void start(Stage stage) throws Exception { Scene scene = new Scene(rootFXML, 700, 500); stage.setMinWidth(650); stage.setMinHeight(400); - stage.setTitle("Rating Reader 0.6.0"); + String title = readPropertiesFile("dev.name") + " " + readPropertiesFile("dev.version"); + stage.setTitle(title); stage.setScene(scene); stage.show(); } + + private String readPropertiesFile(String key) throws IOException { + Properties properties = new Properties(); + InputStream stream = this.getClass().getResourceAsStream("/dev.properties"); + properties.load(stream); + + return properties.getProperty(key); + } } diff --git a/src/main/resources/dev.properties b/src/main/resources/dev.properties new file mode 100644 index 0000000..aabb803 --- /dev/null +++ b/src/main/resources/dev.properties @@ -0,0 +1,4 @@ +dev.name = Rating Reader +dev.executable.name = RatingReader +dev.version = 0.6.3 +dev.url = https://github.com/sam123bir/RatingReader diff --git a/src/main/resources/fxml/root.fxml b/src/main/resources/fxml/root.fxml index 27208eb..9415f5b 100644 --- a/src/main/resources/fxml/root.fxml +++ b/src/main/resources/fxml/root.fxml @@ -11,7 +11,7 @@ - +