From 745acc765f9720d0e249cb43ed03af62144872ac Mon Sep 17 00:00:00 2001 From: Alix von Schirp Date: Tue, 24 Jan 2023 16:21:06 +0100 Subject: [PATCH] Implemented checking flags for exclusivity - Also fixed a problem where required arguments were not found by their name, but only by their aliases. - Minor cleanup. - Fixed a problem where default logging level was not set successfully due to a naming error in the configuration field. --- .gitignore | 2 +- .vscode/settings.json | 3 --- .../LastFMToSpotify.java | 19 +++++++------ .../arguments/ArgumentHandler.java | 27 ++++++++++++++++--- .../arguments/Arguments.java | 11 ++++++++ 5 files changed, 45 insertions(+), 17 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.gitignore b/.gitignore index 1666f0b..13dde21 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ /target/ .idea/ compile.bat -.vscode/ \ No newline at end of file +/.vscode/ diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index c5f3f6b..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "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 93be20a..b332761 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java @@ -37,10 +37,13 @@ public class LastFMToSpotify { 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("playlist.name", "LastFMToSpotify@" + LocalDateTime.now(Clock.systemDefaultZone()).format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); - configuration.put("log.level", "1"); + configuration.put("logging.level", "1"); if (!ArgumentHandler.checkArguments(args)) { return; } + if(!ArgumentHandler.checkExclusivity(args)){ + return; + } // parse arguments for (int a = 0; a < args.length; a++) { @@ -112,15 +115,11 @@ public class LastFMToSpotify { searchQuery.append(" album:").append(track.getAlbum()); logLn("Search query: " + searchQuery, 3); se.michaelthelin.spotify.model_objects.specification.Track[] add = api.searchTracks(searchQuery.toString()).market(CountryCode.DE).setHeader("User-Agent", configuration.get("requests.useragent")).build().execute().getItems(); - if(add.length!=0) { -// adders.add(add[0].getUri()); -// logLn("Added " + add[0].getName() + " to " + configuration.get("playlist.name"), 3); - for(se.michaelthelin.spotify.model_objects.specification.Track t : add){ - if(t.getName().equalsIgnoreCase(track.getName())){ - adders.add(t.getUri()); - logLn("Added " + add[0].getName() + " to " + configuration.get("playlist.name"), 3); - break; - } + for(se.michaelthelin.spotify.model_objects.specification.Track t : add){ + if(t.getName().equalsIgnoreCase(track.getName())){ + adders.add(t.getUri()); + logLn("Added " + add[0].getName() + " to " + configuration.get("playlist.name"), 3); + break; } } } 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 54be115..12fc178 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/ArgumentHandler.java @@ -17,6 +17,7 @@ import java.time.temporal.ChronoField; import java.time.temporal.IsoFields; import java.time.temporal.TemporalField; import java.time.temporal.WeekFields; +import java.util.Arrays; import java.util.Locale; import static de.b00tload.tools.lastfmtospotifyplaylist.LastFMToSpotify.LINE_SEPERATOR; @@ -58,20 +59,40 @@ public class ArgumentHandler { // check if all required arguments are given Arguments[] required = {Arguments.SECRET, Arguments.CLIENT, Arguments.TOKEN, Arguments.USER}; for (Arguments argument : required) { - boolean found = false; + boolean found = List.of(args).contains("--" + argument.getName()); // check all aliases for (String alias : argument.getAliases()) { // if one alias is found check next argument - if (List.of(args).contains(alias)) { + if (List.of(args).contains("-"+alias)) { found = true; break; } } // else return false if (!found) { + logLn("Missing required argument " + argument.getName(), 1); return false; } - } + } + return true; + } + + public static boolean checkExclusivity(String[] args){ + Arguments[][] exclusive = {{Arguments.PUBLIC, Arguments.COLLABORATIVE}, {Arguments.WEEKLY, Arguments.MONTHLY, Arguments.QUARTERLY, Arguments.BIANNUALLY, Arguments.YEARLY}}; + for(Arguments[] arguments : exclusive){ + int count = 0; + for(Arguments argument : arguments){ + if(List.of(args).contains("--"+argument.getName())) count++; + for(String alias : argument.getAliases()) { + if(List.of(args).contains("-"+alias)) count++; + } + if(count>1){ + logLn("You may only use one flag out of every exclusive group." + LINE_SEPERATOR + + "This exclusive group contains of: " + Arrays.toString(arguments), 1); + return false; + } + } + } return true; } 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 f6009b2..88e0a4c 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/Arguments.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/arguments/Arguments.java @@ -91,4 +91,15 @@ public enum Arguments { ret = getByAlias(v); return ret; } + + @Override + public String toString() { + StringBuilder args = new StringBuilder("--").append(this.name).append(" ("); + for(String alias : this.getAliases()){ + args.append("-").append(alias).append(", "); + } + args.delete(args.length()-2, args.length()); + args.append(")"); + return args.toString(); + } }