From c4215726ef866adbafc5f9bcf8e5b98ea7e7a010 Mon Sep 17 00:00:00 2001 From: Morril Date: Wed, 18 Jan 2023 03:22:23 +0100 Subject: [PATCH 1/9] changed gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 744289d..4cc072f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ # Project exclude paths -/target/ \ No newline at end of file +/target/ +/compile.bat \ No newline at end of file From 9b7c6b28f84a14c44a8d5e7e947e6c7461735f2f Mon Sep 17 00:00:00 2001 From: Alix von Schirp Date: Wed, 18 Jan 2023 02:26:48 +0100 Subject: [PATCH 2/9] Implemented logging Also fixed a minor issue where the configuration HashMap was not initialized and threw a NullPointerException. --- .gitignore | 3 ++- .../tools/lastfmtospotifyplaylist/LastFMToSpotify.java | 8 ++++++++ .../arguments/ArgumentHandler.java | 10 ++++++++-- .../tools/lastfmtospotifyplaylist/util/Logger.java | 4 +++- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 4cc072f..045e6d5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ # Project exclude paths /target/ -/compile.bat \ No newline at end of file +/compile.bat +.idea/ diff --git a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java index 113c598..5b0e3ae 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java @@ -15,12 +15,15 @@ import java.io.IOException; import java.net.URI; import java.util.HashMap; +import static de.b00tload.tools.lastfmtospotifyplaylist.util.Logger.logLn; + public class LastFMToSpotify { public static final String LINE_SEPERATOR = System.getProperty("line.separator"); public static HashMap configuration; public static void main(String[] args) { + configuration = new HashMap<>(); configuration.put("requests.useragent", "LastFMToSpotify/1.0-Snapshot (" + System.getProperty("os.name") + "; " + System.getProperty("os.arch") + ") Java/"+System.getProperty("java.version")); for(int a = 0; a Spotify Playlist", 4)) { for (int progress = 1; progress<=5; progress++) { diff --git a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java index 21cc314..e2b572d 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java @@ -53,7 +53,13 @@ public class ArgumentHandler { } private static void verbose(String value){ - //wenn value != int - System.out.println("LogLevel must be a numeric value."); + try { + int loglevel = Integer.parseInt(value); + configuration.put("logging.level", String.valueOf(loglevel)); + } catch (NumberFormatException e) { + System.out.println("LogLevel must be a numeric value."); + System.exit(500); + } + } } diff --git a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/util/Logger.java b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/util/Logger.java index eb38e8d..cad03cc 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/util/Logger.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/util/Logger.java @@ -5,7 +5,9 @@ import static de.b00tload.tools.lastfmtospotifyplaylist.LastFMToSpotify.configur public class Logger { public static void logLn(String string, int priority){ - if(Integer.parseInt(configuration.get("verbose.level"))) + if(Integer.parseInt(configuration.get("logging.level"))>=priority){ + System.out.println(string); + } } } From 5c1dcea12ad56fda32b3bc171e3f1ada92f439da Mon Sep 17 00:00:00 2001 From: Alix von Schirp Date: Wed, 18 Jan 2023 03:22:22 +0100 Subject: [PATCH 3/9] Implemented Tokens The arguments for spotify and lastfm auth are now being handled. --- .../LastFMToSpotify.java | 6 +-- .../arguments/ArgumentHandler.java | 41 ++++++++++++++++++- .../arguments/Arguments.java | 9 +++- 3 files changed, 49 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java index 5b0e3ae..8a751a2 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java @@ -47,10 +47,6 @@ public class LastFMToSpotify { } } - logLn("Priority 0",0 ); - logLn("Priority 1",1 ); - logLn("Priority 2",2 ); - logLn("Priority 3",3 ); // Start Progress Bar try (ProgressBar pb = new ProgressBar("LastFM -> Spotify Playlist", 4)) { @@ -64,7 +60,7 @@ public class LastFMToSpotify { case 2: pb.setExtraMessage("Authenticating with LastFM..."); Caller.getInstance().setUserAgent(configuration.get("requests.useragent")); - User.getInfo(configuration.get("lastfm.user"), configuration.get("lastfm.apikey")).getName(); + logLn(User.getInfo(configuration.get("lastfm.user"), configuration.get("lastfm.apikey")).getName(), 1); break; case 3: pb.setExtraMessage("Reading from LastFM..."); diff --git a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java index e2b572d..400a643 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java @@ -1,6 +1,5 @@ package de.b00tload.tools.lastfmtospotifyplaylist.arguments; -import de.b00tload.tools.lastfmtospotifyplaylist.util.Logger; import org.jetbrains.annotations.Nullable; import static de.b00tload.tools.lastfmtospotifyplaylist.LastFMToSpotify.LINE_SEPERATOR; @@ -12,6 +11,10 @@ public class ArgumentHandler { switch (argument){ case HELP -> help(value); case VERBOSE -> verbose(value); + case SECRET -> secret(value); + case CLIENT -> client(value); + case TOKEN -> token(value); + case USER -> user(value); } } @@ -53,6 +56,10 @@ public class ArgumentHandler { } private static void verbose(String value){ + if(value == null){ + System.out.println("--loglevel must be provided with a numeric log level. Check usage: " + Arguments.VERBOSE.getUsage()); + System.exit(500); + } try { int loglevel = Integer.parseInt(value); configuration.put("logging.level", String.valueOf(loglevel)); @@ -62,4 +69,36 @@ public class ArgumentHandler { } } + + private static void token(String value) { + if(value == null || value.equalsIgnoreCase("")){ + System.out.println("--lastfmtoken must be provided with an api token from LastFM. Check usage: " + Arguments.TOKEN.getUsage()); + System.exit(500); + } + configuration.put("lastfm.apikey", value); + } + + private static void user(String value) { + if(value == null || value.equalsIgnoreCase("")){ + System.out.println("--lastfmuser must be provided with a LastFM username. Check usage: " + Arguments.USER.getUsage()); + System.exit(500); + } + configuration.put("lastfm.user", value); + } + + private static void client(String value) { + if(value == null || value.equalsIgnoreCase("")){ + System.out.println("--spotifyclient must be provided with a client id from Spotify. Check usage: " + Arguments.CLIENT.getUsage()); + System.exit(500); + } + configuration.put("spotify.clientid", value); + } + + private static void secret(String value) { + if(value == null || value.equalsIgnoreCase("")){ + System.out.println("--spotifysecret must be provided with a client secret from Spotify. Check usage: " + Arguments.SECRET.getUsage()); + System.exit(500); + } + configuration.put("spotify.secret", value); + } } diff --git a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/Arguments.java b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/Arguments.java index f535f66..e509f79 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/Arguments.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/Arguments.java @@ -16,7 +16,14 @@ public enum Arguments { + " - 2: Verbose Will echo current step being worked on" + LINE_SEPERATOR + " - 3: Debug Will give specific information on what excactly the tool is doing", "--loglevel ", "log", "l"), - SECRET("spotifysecret", "[]", "--spotifysecret ", "sS", "sSecret"); + SECRET("spotifysecret", "[Required]" + LINE_SEPERATOR + + "Sets the spotify client secret.", "--spotifysecret ", "sS", "sSecret"), + CLIENT("spotifyclient", "[Required]" + LINE_SEPERATOR + + "Sets the spotify cliend id.", "--spotifyclient ", "sC", "sClient"), + TOKEN("lastfmtoken", "[Required]" + LINE_SEPERATOR + + "Sets the LastFM API token.", "--lastfmtoken ", "lT", "lToken"), + USER("lastfmuser", "[Required]" + LINE_SEPERATOR + + "Sets the LastFM API token.", "--lastfmuser ", "lU", "lUser"); private final String name; private final String description; From d2f75f478fb45f54e5f1c6ab4de213b43869bc57 Mon Sep 17 00:00:00 2001 From: Morril Date: Wed, 18 Jan 2023 03:36:16 +0100 Subject: [PATCH 4/9] removed progress bar --- .../LastFMToSpotify.java | 48 +++++++------------ 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java index 8a751a2..b2186b0 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java @@ -49,38 +49,22 @@ public class LastFMToSpotify { // Start Progress Bar - try (ProgressBar pb = new ProgressBar("LastFM -> Spotify Playlist", 4)) { - for (int progress = 1; progress<=5; progress++) { - pb.step(); // step by 1 - switch (progress) { - case 1: - pb.setExtraMessage("Authenticating with Spotify..."); - - break; - case 2: - pb.setExtraMessage("Authenticating with LastFM..."); - Caller.getInstance().setUserAgent(configuration.get("requests.useragent")); - logLn(User.getInfo(configuration.get("lastfm.user"), configuration.get("lastfm.apikey")).getName(), 1); - break; - case 3: - pb.setExtraMessage("Reading from LastFM..."); - User.getTopTracks(configuration.get("lastfm.user"), Period.ONE_MONTH, configuration.get("lastfm.apikey")); - break; - case 4: - pb.setExtraMessage("Creating Playlist..."); - SpotifyApi.Builder build = SpotifyApi.builder(); - build.setClientId(configuration.get("spotify.clientid")); - build.setClientSecret(configuration.get("spotify.secret")); - build.setRedirectUri(URI.create("http://localhost:9876/callback/spotify/")); - SpotifyApi api = build.build(); - api.setAccessToken(configuration.get("spotify.access")); - api.createPlaylist(api.getCurrentUsersProfile().build().execute().getId(), configuration.get("playlist.name")).setHeader("User-Agent", configuration.get("requests.useragent")); - break; - case 5: - pb.setExtraMessage("Done."); - break; - } - } + try { + logLn("Authenticating with Spotify...", 1); + logLn("Authenticating with LastFM...", 1); + Caller.getInstance().setUserAgent(configuration.get("requests.useragent")); + logLn(User.getInfo(configuration.get("lastfm.user"), configuration.get("lastfm.apikey")).getName(), 1); + logLn("Reading from LastFM...", 1); + User.getTopTracks(configuration.get("lastfm.user"), Period.ONE_MONTH, configuration.get("lastfm.apikey")); + logLn("Creating Playlist...", 1); + SpotifyApi.Builder build = SpotifyApi.builder(); + build.setClientId(configuration.get("spotify.clientid")); + build.setClientSecret(configuration.get("spotify.secret")); + build.setRedirectUri(URI.create("http://localhost:9876/callback/spotify/")); + SpotifyApi api = build.build(); + api.setAccessToken(configuration.get("spotify.access")); + api.createPlaylist(api.getCurrentUsersProfile().build().execute().getId(), configuration.get("playlist.name")).setHeader("User-Agent", configuration.get("requests.useragent")); + logLn("Done.", 1); } catch (IOException | ParseException | SpotifyWebApiException e) { throw new RuntimeException(e); } From bc4a6dcb7e4d3d18dedb6c93a0828beb9168e11a Mon Sep 17 00:00:00 2001 From: Morril Date: Wed, 18 Jan 2023 03:36:49 +0100 Subject: [PATCH 5/9] gitignore stuff --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 045e6d5..f181f62 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /target/ /compile.bat .idea/ +compile.bat \ No newline at end of file From d8bbba5dd042641e0f039d76e0a9082e6caa347d Mon Sep 17 00:00:00 2001 From: Morril Date: Wed, 18 Jan 2023 04:01:12 +0100 Subject: [PATCH 6/9] fixed break --- .../tools/lastfmtospotifyplaylist/LastFMToSpotify.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java index b2186b0..459ea3a 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java @@ -6,7 +6,6 @@ import de.b00tload.tools.lastfmtospotifyplaylist.arguments.Arguments; import de.umass.lastfm.Caller; import de.umass.lastfm.Period; import de.umass.lastfm.User; -import me.tongfei.progressbar.ProgressBar; import org.apache.hc.core5.http.ParseException; import se.michaelthelin.spotify.SpotifyApi; import se.michaelthelin.spotify.exceptions.SpotifyWebApiException; @@ -23,8 +22,10 @@ public class LastFMToSpotify { public static HashMap configuration; public static void main(String[] args) { + // create hash map with user agent configuration = new HashMap<>(); configuration.put("requests.useragent", "LastFMToSpotify/1.0-Snapshot (" + System.getProperty("os.name") + "; " + System.getProperty("os.arch") + ") Java/"+System.getProperty("java.version")); + // parse arguments for(int a = 0; a Date: Wed, 18 Jan 2023 04:45:07 +0100 Subject: [PATCH 7/9] Implemented Fetching tracks and selecting periods. Also deleted progress bar dependency after removal from code in 3445f51 and cleaned up formatting. --- pom.xml | 5 -- .../LastFMToSpotify.java | 47 ++++++++++--------- .../arguments/ArgumentHandler.java | 36 +++++++++----- .../arguments/Arguments.java | 12 ++++- .../util/PeriodHelper.java | 14 ++++++ 5 files changed, 72 insertions(+), 42 deletions(-) create mode 100644 src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/util/PeriodHelper.java diff --git a/pom.xml b/pom.xml index f3f5e33..aeed268 100644 --- a/pom.xml +++ b/pom.xml @@ -56,11 +56,6 @@ javalin 5.3.1 - - me.tongfei - progressbar - 0.9.5 - \ No newline at end of file diff --git a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java index 459ea3a..47b087d 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java @@ -3,15 +3,12 @@ package de.b00tload.tools.lastfmtospotifyplaylist; import de.b00tload.tools.lastfmtospotifyplaylist.arguments.ArgumentHandler; import de.b00tload.tools.lastfmtospotifyplaylist.arguments.Arguments; +import de.b00tload.tools.lastfmtospotifyplaylist.util.PeriodHelper; import de.umass.lastfm.Caller; -import de.umass.lastfm.Period; +import de.umass.lastfm.Track; import de.umass.lastfm.User; -import org.apache.hc.core5.http.ParseException; -import se.michaelthelin.spotify.SpotifyApi; -import se.michaelthelin.spotify.exceptions.SpotifyWebApiException; -import java.io.IOException; -import java.net.URI; +import java.util.Collection; import java.util.HashMap; import static de.b00tload.tools.lastfmtospotifyplaylist.util.Logger.logLn; @@ -24,27 +21,27 @@ public class LastFMToSpotify { public static void main(String[] args) { // create hash map with user agent configuration = new HashMap<>(); - configuration.put("requests.useragent", "LastFMToSpotify/1.0-Snapshot (" + System.getProperty("os.name") + "; " + System.getProperty("os.arch") + ") Java/"+System.getProperty("java.version")); + configuration.put("requests.useragent", "LastFMToSpotify/1.0-Snapshot (" + System.getProperty("os.name") + "; " + System.getProperty("os.arch") + ") Java/" + System.getProperty("java.version")); // parse arguments - for(int a = 0; a tracks = User.getTopTracks(configuration.get("lastfm.user"), PeriodHelper.getPeriodByString(configuration.get("lastfm.period")), configuration.get("lastfm.apikey")); + for (Track track : tracks) { + logLn(track.getName() + " by " + track.getArtist(), 3); + } logLn("Creating Playlist...", 1); - SpotifyApi.Builder build = SpotifyApi.builder(); - build.setClientId(configuration.get("spotify.clientid")); - build.setClientSecret(configuration.get("spotify.secret")); - build.setRedirectUri(URI.create("http://localhost:9876/callback/spotify/")); - SpotifyApi api = build.build(); - api.setAccessToken(configuration.get("spotify.access")); - api.createPlaylist(api.getCurrentUsersProfile().build().execute().getId(), configuration.get("playlist.name")).setHeader("User-Agent", configuration.get("requests.useragent")); + //SpotifyApi.Builder build = SpotifyApi.builder(); + //build.setClientId(configuration.get("spotify.clientid")); + //build.setClientSecret(configuration.get("spotify.secret")); + //build.setRedirectUri(URI.create("http://localhost:9876/callback/spotify/")); + //SpotifyApi api = build.build(); + //api.setAccessToken(configuration.get("spotify.access")); + //api.createPlaylist(api.getCurrentUsersProfile().build().execute().getId(), configuration.get("playlist.name")).setHeader("User-Agent", configuration.get("requests.useragent")); logLn("Done.", 1); - } catch (IOException | ParseException | SpotifyWebApiException e) { +// } catch (IOException | ParseException | SpotifyWebApiException e) { + } catch (Exception e) { throw new RuntimeException(e); } //TODO: Implement diff --git a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java index 400a643..aa8ef72 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java @@ -1,5 +1,6 @@ package de.b00tload.tools.lastfmtospotifyplaylist.arguments; +import de.umass.lastfm.Period; import org.jetbrains.annotations.Nullable; import static de.b00tload.tools.lastfmtospotifyplaylist.LastFMToSpotify.LINE_SEPERATOR; @@ -7,14 +8,19 @@ import static de.b00tload.tools.lastfmtospotifyplaylist.LastFMToSpotify.configur public class ArgumentHandler { - public static void handle(Arguments argument, @Nullable String value){ - switch (argument){ + public static void handle(Arguments argument, @Nullable String value) { + switch (argument) { case HELP -> help(value); case VERBOSE -> verbose(value); case SECRET -> secret(value); case CLIENT -> client(value); case TOKEN -> token(value); case USER -> user(value); + case WEEKLY -> period(Period.WEEK); + case MONTHLY -> period(Period.ONE_MONTH); + case QUARTERLY -> period(Period.THREE_MONTHS); + case BIANNUALLY -> period(Period.SIX_MONTHS); + case YEARLY -> period(Period.TWELVE_MONTHS); } } @@ -22,10 +28,10 @@ public class ArgumentHandler { handle(argument, null); } - private static void help(String value){ - if(value == null){ + private static void help(String value) { + if (value == null) { System.out.println("This is a list of all available commands. For more specific help on the argument run --help ."); - for(Arguments arg : Arguments.values()) { + for (Arguments arg : Arguments.values()) { String name = arg.getName(); String description = arg.getDescription(); System.out.println("____________________"); @@ -35,7 +41,7 @@ public class ArgumentHandler { System.exit(200); } Arguments arg = Arguments.resolveByNameOrAlias(value); - if(arg == null) { + if (arg == null) { System.out.println("This argument is unknown. Use --help to get a list of all arguments"); System.exit(200); } @@ -47,7 +53,7 @@ public class ArgumentHandler { System.out.println(" DESCRIPTION" + LINE_SEPERATOR + description); System.out.println(" USAGE: " + usage); StringBuilder aliasString = new StringBuilder(); - for(String alias : aliases){ + for (String alias : aliases) { aliasString.append(", -").append(alias); } System.out.println(" ALIASES:" + aliasString.substring(1)); @@ -55,8 +61,8 @@ public class ArgumentHandler { System.exit(200); } - private static void verbose(String value){ - if(value == null){ + private static void verbose(String value) { + if (value == null) { System.out.println("--loglevel must be provided with a numeric log level. Check usage: " + Arguments.VERBOSE.getUsage()); System.exit(500); } @@ -71,7 +77,7 @@ public class ArgumentHandler { } private static void token(String value) { - if(value == null || value.equalsIgnoreCase("")){ + if (value == null || value.equalsIgnoreCase("")) { System.out.println("--lastfmtoken must be provided with an api token from LastFM. Check usage: " + Arguments.TOKEN.getUsage()); System.exit(500); } @@ -79,7 +85,7 @@ public class ArgumentHandler { } private static void user(String value) { - if(value == null || value.equalsIgnoreCase("")){ + if (value == null || value.equalsIgnoreCase("")) { System.out.println("--lastfmuser must be provided with a LastFM username. Check usage: " + Arguments.USER.getUsage()); System.exit(500); } @@ -87,7 +93,7 @@ public class ArgumentHandler { } private static void client(String value) { - if(value == null || value.equalsIgnoreCase("")){ + if (value == null || value.equalsIgnoreCase("")) { System.out.println("--spotifyclient must be provided with a client id from Spotify. Check usage: " + Arguments.CLIENT.getUsage()); System.exit(500); } @@ -95,10 +101,14 @@ public class ArgumentHandler { } private static void secret(String value) { - if(value == null || value.equalsIgnoreCase("")){ + if (value == null || value.equalsIgnoreCase("")) { System.out.println("--spotifysecret must be provided with a client secret from Spotify. Check usage: " + Arguments.SECRET.getUsage()); System.exit(500); } configuration.put("spotify.secret", value); } + + private static void period(Period value) { + configuration.put("lastfm.period", value.getString()); + } } diff --git a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/Arguments.java b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/Arguments.java index e509f79..c8fcd00 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/Arguments.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/Arguments.java @@ -23,7 +23,17 @@ public enum Arguments { TOKEN("lastfmtoken", "[Required]" + LINE_SEPERATOR + "Sets the LastFM API token.", "--lastfmtoken ", "lT", "lToken"), USER("lastfmuser", "[Required]" + LINE_SEPERATOR - + "Sets the LastFM API token.", "--lastfmuser ", "lU", "lUser"); + + "Sets the LastFM API token.", "--lastfmuser ", "lU", "lUser"), + WEEKLY("weekly", "[Optional]" + LINE_SEPERATOR + + "Creates a playlist from your top tracks from last week.", "--weekly", "W"), + MONTHLY("monthly", "[Optional, Default]" + LINE_SEPERATOR + + "Creates a playlist from your top tracks from last month.", "--monthly", "M"), + QUARTERLY("quarterly", "[Optional]" + LINE_SEPERATOR + + "Creates a playlist from your top tracks from last quarter.", "--quarterly", "Q"), + BIANNUALLY("biannually", "[Optional]" + LINE_SEPERATOR + + "Creates a playlist from your top tracks from last half-year.", "--biannualy", "B"), + YEARLY("yearly", "[Optional]" + LINE_SEPERATOR + + "Creates a playlist from your top tracks from last year.", "--anually", "A");; private final String name; private final String description; diff --git a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/util/PeriodHelper.java b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/util/PeriodHelper.java new file mode 100644 index 0000000..2c68faf --- /dev/null +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/util/PeriodHelper.java @@ -0,0 +1,14 @@ +package de.b00tload.tools.lastfmtospotifyplaylist.util; + +import de.umass.lastfm.Period; + +public class PeriodHelper { + + public static Period getPeriodByString(String string){ + for(Period p : Period.values()){ + if(p.getString().equalsIgnoreCase(string)) return p; + } + return Period.ONE_MONTH; + } + +} From 4659e8f7d932652afd13618a32f02d4193b5a3a5 Mon Sep 17 00:00:00 2001 From: Morril Date: Wed, 18 Jan 2023 03:22:23 +0100 Subject: [PATCH 8/9] changed gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index f181f62..dd87276 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ /target/ /compile.bat .idea/ -compile.bat \ No newline at end of file +compile.bat From 47d64077b200f759d2fa3338396f491b0e052d4b Mon Sep 17 00:00:00 2001 From: Morril Date: Mon, 23 Jan 2023 20:05:15 +0100 Subject: [PATCH 9/9] implemented checkArguments to prohibit crash on missing required arguments --- .vscode/settings.json | 3 +++ .../LastFMToSpotify.java | 4 +++ .../arguments/ArgumentHandler.java | 25 +++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c5f3f6b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "interactive" +} \ No newline at end of file diff --git a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java index 47b087d..28fe14a 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java @@ -22,6 +22,10 @@ public class LastFMToSpotify { // create hash map with user agent configuration = new HashMap<>(); configuration.put("requests.useragent", "LastFMToSpotify/1.0-Snapshot (" + System.getProperty("os.name") + "; " + System.getProperty("os.arch") + ") Java/" + System.getProperty("java.version")); + configuration.put("log.level", "1"); + if (!ArgumentHandler.checkArguments(args)) { + return; + } // parse arguments for (int a = 0; a < args.length; a++) { Arguments arg; diff --git a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java index aa8ef72..d253220 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java @@ -6,6 +6,10 @@ import org.jetbrains.annotations.Nullable; import static de.b00tload.tools.lastfmtospotifyplaylist.LastFMToSpotify.LINE_SEPERATOR; import static de.b00tload.tools.lastfmtospotifyplaylist.LastFMToSpotify.configuration; +import java.util.List; + +import javax.xml.crypto.Data; + public class ArgumentHandler { public static void handle(Arguments argument, @Nullable String value) { @@ -28,6 +32,27 @@ public class ArgumentHandler { handle(argument, null); } + public static boolean checkArguments(String[] args) { + // check if all required arguments are given + Arguments[] required = {Arguments.SECRET, Arguments.CLIENT, Arguments.TOKEN, Arguments.USER}; + for (Arguments argument : required) { + boolean found = false; + // check all aliases + for (String alias : argument.getAliases()) { + // if one alias is found check next argument + if (List.of(args).contains(alias)) { + found = true; + break; + } + } + // else return false + if (!found) { + return false; + } + } + return true; + } + private static void help(String value) { if (value == null) { System.out.println("This is a list of all available commands. For more specific help on the argument run --help .");