diff --git a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java
index 47b087d..48eacde 100644
--- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java
+++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java
@@ -1,15 +1,26 @@
package de.b00tload.tools.lastfmtospotifyplaylist;
+import com.neovisionaries.i18n.CountryCode;
import de.b00tload.tools.lastfmtospotifyplaylist.arguments.ArgumentHandler;
import de.b00tload.tools.lastfmtospotifyplaylist.arguments.Arguments;
import de.b00tload.tools.lastfmtospotifyplaylist.util.PeriodHelper;
+import de.b00tload.tools.lastfmtospotifyplaylist.util.TokenHelper;
import de.umass.lastfm.Caller;
import de.umass.lastfm.Track;
import de.umass.lastfm.User;
+import io.javalin.Javalin;
+import io.javalin.http.ContentType;
+import se.michaelthelin.spotify.SpotifyApi;
+import se.michaelthelin.spotify.model_objects.credentials.AuthorizationCodeCredentials;
+import se.michaelthelin.spotify.model_objects.specification.Playlist;
-import java.util.Collection;
-import java.util.HashMap;
+import java.net.URI;
+import java.time.Clock;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
import static de.b00tload.tools.lastfmtospotifyplaylist.util.Logger.logLn;
@@ -22,6 +33,7 @@ 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("playlist.name", "LastFMToSpotify@" + LocalDateTime.now(Clock.systemDefaultZone()).format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
// parse arguments
for (int a = 0; a < args.length; a++) {
Arguments arg;
@@ -49,28 +61,60 @@ public class LastFMToSpotify {
// Start Progress Bar
try {
logLn("Authenticating with Spotify...", 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();
+ AtomicBoolean waiting = new AtomicBoolean(true);
+ try (Javalin webserver = Javalin.create().start(9876)) {
+ webserver.get("/callback/spotify", ctx -> {
+ if(ctx.queryParamMap().containsKey("code")) {
+ AuthorizationCodeCredentials cred = api.authorizationCode(ctx.queryParam("code")).build().execute();
+ configuration.put("spotify.access", cred.getAccessToken());
+ if(configuration.containsKey("spotify.saveaccess")) TokenHelper.saveTokens(cred);
+ ctx.result("success. ").contentType(ContentType.TEXT_HTML);
+ waiting.set(false);
+ } else {
+ logLn("Error: Spotify authorization failed."+LINE_SEPERATOR+ctx.queryParam("error"), 1);
+ System.exit(500);
+ }
+ });
+ logLn("Waiting for Spotify authorization.", 1);
+ //TODO: Open auth page in Browser
+ while (waiting.get());
+ webserver.stop();
+ }
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);
Collection