def GET(self): form_input = get_input() action = form_input['button'] svc, current_user, user_id = get_rdio_and_current_user() db = get_db() where_to_next = '/' if action == 'new_email': new_email = make_unique_email() db.update(USER_TABLE, where="rdio_user_id=%i" % user_id, address=new_email) where_to_next += 'config?saved=True' elif action == 'save': where_to_next += 'config?saved=True' preferences = get_db_prefs(user_id, db=db) new_preferences = get_preferences_from_input(form_input) preferences.update(new_preferences) db.update(USER_TABLE, where="rdio_user_id=%i" % user_id, prefs=BSONPostgresSerializer.from_dict(preferences)) # circular import from discoversong.sources import SourceAppsManager for source_app in SourceAppsManager.ALL: for capability in source_app.capabilities: for configurable_thing in capability.config_options(): if isinstance(configurable_thing, ConfigStoredValue): new_value = configurable_thing.read_from_input(form_input) if not configurable_thing.store_as_db_field: preferences = get_db_prefs(user_id, db=db) preferences[configurable_thing.name] = new_value db.update(USER_TABLE, where="rdio_user_id=%i" % user_id, prefs=BSONPostgresSerializer.from_dict(preferences)) else: db.update(USER_TABLE, where="rdio_user_id=%i" % user_id, **{configurable_thing.name: new_value}) raise web.seeother(where_to_next)
def well_formed_search(rdio, user_id, artist, title): db = get_db() prefs = get_db_prefs(user_id, db=db) or_search = prefs.get(Preferences.NoOrSearch, False) one_result = prefs.get(Preferences.OneResult, False) results = [] never_or = 'false' if or_search else 'true' stats.made_search(user_id) search_result = rdio.call('search', {'query': ' '.join([artist, title]), 'types': 'Track', 'never_or': never_or}) name_artist_pairs_found = {} for possible_hit in search_result['result']['results']: if possible_hit['canStream']: name = possible_hit['name'] artist_name = possible_hit['artist'] if name_artist_pairs_found.has_key((name, artist_name)): continue name_artist_pairs_found[(name, artist_name)] = True results.append((name, artist_name, possible_hit['shortUrl'], possible_hit['key'])) if one_result: break return results
def well_formed_search(rdio, user_id, artist, title): db = get_db() prefs = get_db_prefs(user_id, db=db) or_search = prefs.get(Preferences.NoOrSearch, False) one_result = prefs.get(Preferences.OneResult, False) results = [] never_or = "false" if or_search else "true" stats.made_search(user_id) search_result = rdio.call("search", {"query": " ".join([artist, title]), "types": "Track", "never_or": never_or}) name_artist_pairs_found = {} for possible_hit in search_result["result"]["results"]: if possible_hit["canStream"]: name = possible_hit["name"] artist_name = possible_hit["artist"] if name_artist_pairs_found.has_key((name, artist_name)): continue name_artist_pairs_found[(name, artist_name)] = True results.append((name, artist_name, possible_hit["shortUrl"], possible_hit["key"])) if one_result: break return results
def return_results(rdio, user_id, song_artist_url_list, from_tweet_id=None): db = get_db() prefs = get_db_prefs(user_id, db=db) playlist_key = prefs.get(Preferences.PlaylistToSaveTo, "new") add_to_collection = prefs.get(Preferences.AddToCollection, False) track_keys_list = [s[3] for s in song_artist_url_list] playlists_call = rdio.call("getPlaylists") if "result" in playlists_call: playlists = playlists_call["result"]["owned"] else: playlists = [] p_keys = [playlist["key"] for playlist in playlists] p_names = [playlist["name"] for playlist in playlists] if playlist_key in ["new", "alwaysnew"] or playlist_key not in p_keys: new_name = generate_playlist_name(p_names) result = rdio.call( "createPlaylist", { "name": new_name, "description": "Songs found by discoversong on %s." % datetime.datetime.now().strftime("%A, %d %b %Y %H:%M"), "tracks": ", ".join(track_keys_list), }, ) new_key = result["result"]["key"] if playlist_key == "new" or playlist_key not in p_keys: prefs[Preferences.PlaylistToSaveTo] = new_key db.update(USER_TABLE, where="rdio_user_id=%i" % user_id, prefs=BSONPostgresSerializer.from_dict(prefs)) # else leave 'alwaysnew' to repeat this behavior every time else: rdio.call("addToPlaylist", {"playlist": playlist_key, "tracks": ", ".join(track_keys_list)}) if add_to_collection: rdio.call("addToCollection", {"keys": ", ".join(track_keys_list)}) stats.found_songs(user_id, len(song_artist_url_list)) twitter_name_config = Capabilities.Twitter().config_options_dict()["twitter_name"] user, message = get_discoversong_user(user_id) twitter_name = "@" + twitter_name_config.get_value(user) reply_to_tweet_id = from_tweet_id song, artist, url, track_key = song_artist_url_list[0] try: tweet_about_found_song(song, artist, url, mention_name=twitter_name, reply_to_tweet_id=reply_to_tweet_id) except twython.TwythonError as twe: if twe.error_code == 403: pass
def return_results(rdio, user_id, song_artist_url_list, from_tweet_id=None): db = get_db() prefs = get_db_prefs(user_id, db=db) playlist_key = prefs.get(Preferences.PlaylistToSaveTo, 'new') add_to_collection = prefs.get(Preferences.AddToCollection, False) track_keys_list = [s[3] for s in song_artist_url_list] playlists_call = rdio.call('getPlaylists') if 'result' in playlists_call: playlists = playlists_call['result']['owned'] else: playlists = [] p_keys = [playlist['key'] for playlist in playlists] p_names = [playlist['name'] for playlist in playlists] if playlist_key in ['new', 'alwaysnew'] or playlist_key not in p_keys: new_name = generate_playlist_name(p_names) result = rdio.call('createPlaylist', {'name': new_name, 'description': 'Songs found by discoversong on %s.' % datetime.datetime.now().strftime('%A, %d %b %Y %H:%M'), 'tracks': ', '.join(track_keys_list)}) new_key = result['result']['key'] if playlist_key == 'new' or playlist_key not in p_keys: prefs[Preferences.PlaylistToSaveTo] = new_key db.update(USER_TABLE, where="rdio_user_id=%i" % user_id, prefs=BSONPostgresSerializer.from_dict(prefs)) # else leave 'alwaysnew' to repeat this behavior every time else: rdio.call('addToPlaylist', {'playlist': playlist_key, 'tracks': ', '.join(track_keys_list)}) if add_to_collection: rdio.call('addToCollection', {'keys': ', '.join(track_keys_list)}) stats.found_songs(user_id, len(song_artist_url_list)) twitter_name_config = Capabilities.Twitter().config_options_dict()['twitter_name'] user, message = get_discoversong_user(user_id) twitter_name = '@' + twitter_name_config.get_value(user) reply_to_tweet_id = from_tweet_id song, artist, url, track_key = song_artist_url_list[0] try: tweet_about_found_song(song, artist, url, mention_name=twitter_name, reply_to_tweet_id=reply_to_tweet_id) except twython.TwythonError as twe: if twe.error_code == 403: pass
def GET(self): rdio, current_user, user_id = get_rdio_and_current_user() disco_user, prefs = get_discoversong_user(user_id) # circular import from discoversong.sources import SourceAppsManager return render.config(params=Params(user=disco_user, preferences=prefs, message="", environment_message=get_environment_message()), capabilities=SourceAppsManager.all_capabilities(), editform=editform(playlists=rdio.call('getPlaylists')['result']['owned'], prefs=get_db_prefs(user_id)))
def GET(self): rdio, currentUser, user_id = get_rdio_and_current_user() disco_user, message = get_discoversong_user(user_id) prefs = BSONPostgresSerializer.to_dict(disco_user['prefs']) # circular import from discoversong.sources import SourceAppsManager return render.config(user=disco_user, prefs=prefs, capabilities=SourceAppsManager.all_capabilities(), editform=editform(playlists=rdio.call('getPlaylists')['result']['owned'], prefs=get_db_prefs(user_id)), env_message=get_environment_message(), message=message)