diff --git a/spotify_mpd_sync/msplaylist/authenticate.py b/spotify_mpd_sync/msplaylist/authenticate.py index f8778b7..5affd6c 100644 --- a/spotify_mpd_sync/msplaylist/authenticate.py +++ b/spotify_mpd_sync/msplaylist/authenticate.py @@ -1,27 +1,41 @@ # shows a user's playlists (need to be authenticated via oauth) -from __future__ import print_function -import os +import threading import spotipy.oauth2 as oauth2 import spotipy import queue -import threading from bottle import route, run, response, request +from sys import exit auth_token_queue = queue.Queue() +event_queue = queue.Queue() @route('/') def index(): auth_code = request.query.code if auth_code: + print("putting auth code in queue") auth_token_queue.put(auth_code) return "It worked! You may close this tab now" return "Oops! Something went wrong. Please file a bug report" +def wait_for_done(task): + server = threading.Thread(target=task) + server.daemon = True + server.start() + while True: + print("waiting for done token") + event = event_queue.get() + if event == "done": + print("Server being killed") + break + exit(1) + def run_server(): - task = threading.Thread(target=lambda : run(host='localhost', port=8080)) - task.start() + threading.Thread(target= lambda: wait_for_done(lambda: run(host='localhost', port=8080))).start() + print("server started") + def prompt_for_user_token(username, scope=None, client_id = None, client_secret = None, redirect_uri = None, cache_path = None): @@ -74,6 +88,7 @@ def prompt_for_user_token(username, scope=None, client_id = None, token_info = sp_oauth.get_cached_token() if not token_info: + run_server() auth_url = sp_oauth.get_authorize_url() try: import webbrowser @@ -83,7 +98,10 @@ def prompt_for_user_token(username, scope=None, client_id = None, print("Please navigate here: %s" % auth_url) response = "localhost:8080?code=%s" % auth_token_queue.get() - auth_token_queue.task_done() + print("Got auth token!") + print(response) + print("putting done token") + event_queue.put("done") code = sp_oauth.parse_response_code(response) token_info = sp_oauth.get_access_token(code) diff --git a/spotify_mpd_sync/msplaylist/spotify.py b/spotify_mpd_sync/msplaylist/spotify.py index 9297145..1fda444 100644 --- a/spotify_mpd_sync/msplaylist/spotify.py +++ b/spotify_mpd_sync/msplaylist/spotify.py @@ -1,4 +1,6 @@ #! /usr/bin/env python +import gevent.monkey +gevent.monkey.patch_all() import spotipy from spotipy.oauth2 import SpotifyClientCredentials @@ -10,11 +12,10 @@ from re import sub from os import environ import spotipy.util as util -from spotify_mpd_sync.msplaylist.authenticate import run_server, prompt_for_user_token +from spotify_mpd_sync.msplaylist.authenticate import prompt_for_user_token class Spotify(): def __init__(self): - run_server() self.username = environ.get("SPOTIFY_USERNAME") scope = "playlist-read-private" @@ -83,6 +84,7 @@ class Spotify(): # Now it should be safe to add any new playlist items for track_id in new_playlist: + print(track_id) try: self.mpd_client.playlistadd(playlist, track_id) except CommandError as e: