diff --git a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java index 48eacde..0a28505 100644 --- a/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java +++ b/src/main/java/de/b00tload/tools/lastfmtospotifyplaylist/LastFMToSpotify.java @@ -11,6 +11,7 @@ import de.umass.lastfm.Track; import de.umass.lastfm.User; import io.javalin.Javalin; import io.javalin.http.ContentType; +import io.javalin.http.HttpStatus; import se.michaelthelin.spotify.SpotifyApi; import se.michaelthelin.spotify.model_objects.credentials.AuthorizationCodeCredentials; import se.michaelthelin.spotify.model_objects.specification.Playlist; @@ -57,8 +58,6 @@ public class LastFMToSpotify { } } - - // Start Progress Bar try { logLn("Authenticating with Spotify...", 1); SpotifyApi.Builder build = SpotifyApi.builder(); @@ -68,12 +67,13 @@ public class LastFMToSpotify { SpotifyApi api = build.build(); AtomicBoolean waiting = new AtomicBoolean(true); try (Javalin webserver = Javalin.create().start(9876)) { + Runtime.getRuntime().addShutdownHook(new Thread(webserver::stop)); 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); + ctx.result("success. ").contentType(ContentType.TEXT_HTML).status(HttpStatus.OK); waiting.set(false); } else { logLn("Error: Spotify authorization failed."+LINE_SEPERATOR+ctx.queryParam("error"), 1); @@ -83,9 +83,9 @@ public class LastFMToSpotify { logLn("Waiting for Spotify authorization.", 1); //TODO: Open auth page in Browser while (waiting.get()); - webserver.stop(); } logLn("Authenticating with LastFM...", 1); + Caller.getInstance().setApiRootUrl("https://ws.audioscrobbler.com/2.0/"); 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); @@ -94,14 +94,15 @@ public class LastFMToSpotify { api.setAccessToken(configuration.get("spotify.access")); Playlist list = api.createPlaylist(api.getCurrentUsersProfile().build().execute().getId(), configuration.get("playlist.name")).public_(configuration.containsKey("playlist.public")||configuration.containsKey("playlist.collab")).collaborative(configuration.containsKey("playlist.collab")).setHeader("User-Agent", configuration.get("requests.useragent")).build().execute(); List adders = new LinkedList<>(); + String charsToReplace = "[\"']"; //regex for " and ' for (Track track : tracks) { logLn("Adding " + track.getName() + " by " + track.getArtist(), 3); StringBuilder searchQuery = new StringBuilder(); - searchQuery.append("track:").append(track.getName()); + searchQuery.append("track:").append(track.getName().replaceAll(charsToReplace, "")); searchQuery.append(" artist:").append(track.getArtist()); if(track.getAlbum()!=null&&!track.getAlbum().equalsIgnoreCase("null")&&!track.getAlbum().isEmpty()) searchQuery.append(" album:").append(track.getAlbum()); - logLn("Search query: " + searchQuery.toString(), 3); + 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());