diff --git a/app.py b/app.py index f2dd01a..9f8cb62 100644 --- a/app.py +++ b/app.py @@ -2,7 +2,8 @@ import eventlet requests = eventlet.import_patched('requests') -from deemix.api.deezer import Deezer +from deezer import Deezer +from deezer.utils import clean_search_query from deemix.app.settings import Settings, DEFAULT_SETTINGS from deemix.app.queuemanager import QueueManager from deemix.app.spotifyhelper import SpotifyHelper, emptyPlaylist as emptySpotifyPlaylist @@ -144,7 +145,7 @@ class deemix: def get_charts(self, dz): if len(self.chartsList) == 0: - temp = dz.get_charts_countries() + temp = dz.api.get_countries_charts() countries = [] for i in range(len(temp)): countries.append({ @@ -159,7 +160,7 @@ class deemix: def get_home(self, dz): if not self.homeCache: - self.homeCache = dz.get_charts() + self.homeCache = dz.api.get_chart() return self.homeCache def getDownloadFolder(self): @@ -167,8 +168,8 @@ class deemix: def getTracklist(self, dz, data): if data['type'] == 'artist': - artistAPI = dz.get_artist(data['id']) - artistAPI['releases'] = dz.get_artist_discography_gw(data['id'], 100) + artistAPI = dz.api.get_artist(data['id']) + artistAPI['releases'] = dz.gw.get_artist_discography_tabs(data['id'], 100) return artistAPI elif data['type'] == 'spotifyplaylist': playlistAPI = self.getSpotifyPlaylistTracklist(data['id']) @@ -177,8 +178,8 @@ class deemix: playlistAPI['tracks'][i]['selected'] = False return playlistAPI else: - releaseAPI = getattr(dz, 'get_' + data['type'])(data['id']) - releaseTracksAPI = getattr(dz, 'get_' + data['type'] + '_tracks')(data['id'])['data'] + releaseAPI = getattr(dz.api, 'get_' + data['type'])(data['id']) + releaseTracksAPI = getattr(dz.api, 'get_' + data['type'] + '_tracks')(data['id'])['data'] tracks = [] showdiscs = False if data['type'] == 'album' and len(releaseTracksAPI) and releaseTracksAPI[-1]['disk_number'] != 1: @@ -196,17 +197,17 @@ class deemix: def getUserFavorites(self, dz): result = {} if dz.logged_in: - user_id = dz.user['id'] + user_id = dz.current_user['id'] try: - result['playlists'] = dz.get_user_playlists(user_id)['data'] - result['albums'] = dz.get_user_albums(user_id)['data'] - result['artists'] = dz.get_user_artists(user_id)['data'] - result['tracks'] = dz.get_user_tracks(user_id)['data'] + result['playlists'] = dz.api.get_user_playlists(user_id)['data'] + result['albums'] = dz.api.get_user_albums(user_id)['data'] + result['artists'] = dz.api.get_user_artists(user_id)['data'] + result['tracks'] = dz.api.get_user_tracks(user_id)['data'] except: - result['playlists'] = dz.get_user_playlists_gw(user_id) - result['albums'] = dz.get_user_albums_gw(user_id) - result['artists'] = dz.get_user_artists_gw(user_id) - result['tracks'] = dz.get_user_tracks_gw(user_id) + result['playlists'] = dz.gw.get_user_playlists(user_id) + result['albums'] = dz.gw.get_user_albums(user_id) + result['artists'] = dz.gw.get_user_artists(user_id) + result['tracks'] = dz.gw.get_user_tracks(user_id) return result def updateUserSpotifyPlaylists(self, user): @@ -218,32 +219,32 @@ class deemix: return [] def updateUserPlaylists(self, dz): - user_id = dz.user['id'] + user_id = dz.current_user['id'] try: - return dz.get_user_playlists(user_id)['data'] + return dz.api.get_user_playlists(user_id)['data'] except: - return dz.get_user_playlists_gw(user_id) + return dz.gw.get_user_playlists(user_id) def updateUserAlbums(self, dz): - user_id = dz.user['id'] + user_id = dz.current_user['id'] try: - return dz.get_user_albums(user_id)['data'] + return dz.api.get_user_albums(user_id)['data'] except: - return dz.get_user_albums_gw(user_id) + return dz.gw.get_user_albums(user_id) def updateUserArtists(self, dz): - user_id = dz.user['id'] + user_id = dz.current_user['id'] try: - return dz.get_user_artists(user_id)['data'] + return dz.api.get_user_artists(user_id)['data'] except: - return dz.get_user_artists_gw(user_id) + return dz.gw.get_user_artists(user_id) def updateUserTracks(self, dz): - user_id = dz.user['id'] + user_id = dz.current_user['id'] try: - return dz.get_user_tracks(user_id)['data'] + return dz.api.get_user_tracks(user_id)['data'] except: - return dz.get_user_tracks_gw(user_id) + return dz.gw.get_user_tracks(user_id) def getSpotifyPlaylistTracklist(self, id): if id == "" or not self.sp.spotifyEnabled: @@ -252,16 +253,62 @@ class deemix: # Search functions def mainSearch(self, dz, term): - return dz.search_main_gw(term) + results = dz.gw.search(clean_search_query(term)) + order = [] + for x in results['ORDER']: + if x in ['TOP_RESULT', 'TRACK', 'ALBUM', 'ARTIST', 'PLAYLIST']: + order.append(x) + if 'TOP_RESULT' in results and len(results['TOP_RESULT']): + orig_top_result = results['TOP_RESULT'][0] + top_result = {} + top_result['type'] = orig_top_result['__TYPE__'] + if top_result['type'] == 'artist': + top_result['id'] = orig_top_result['ART_ID'] + top_result['picture'] = 'https://e-cdns-images.dzcdn.net/images/artist/' + orig_top_result['ART_PICTURE'] + top_result['title'] = orig_top_result['ART_NAME'] + top_result['nb_fan'] = orig_top_result['NB_FAN'] + elif top_result['type'] == 'album': + top_result['id'] = orig_top_result['ALB_ID'] + top_result['picture'] = 'https://e-cdns-images.dzcdn.net/images/cover/' + orig_top_result['ALB_PICTURE'] + top_result['title'] = orig_top_result['ALB_TITLE'] + top_result['artist'] = orig_top_result['ART_NAME'] + top_result['nb_song'] = orig_top_result['NUMBER_TRACK'] + elif top_result['type'] == 'playlist': + top_result['id'] = orig_top_result['PLAYLIST_ID'] + top_result['picture'] = 'https://e-cdns-images.dzcdn.net/images/' + orig_top_result['PICTURE_TYPE'] + '/' + orig_top_result['PLAYLIST_PICTURE'] + top_result['title'] = orig_top_result['TITLE'] + top_result['artist'] = orig_top_result['PARENT_USERNAME'] + top_result['nb_song'] = orig_top_result['NB_SONG'] + else: + top_result['id'] = "0" + top_result['picture'] = 'https://e-cdns-images.dzcdn.net/images/cover' + top_result['picture'] += '/156x156-000000-80-0-0.jpg' + top_result['link'] = 'https://deezer.com/'+top_result['type']+'/'+str(top_result['id']) + results['TOP_RESULT'][0] = top_result + results['ORDER'] = order + return results def search(self, dz, term, type, start, nb): - return dz.search(term, type, nb, start) + if type == "album": + return dz.api.search_album(clean_search_query(term), limit=nb, index=start) + if type == "artist": + return dz.api.search_artist(clean_search_query(term), limit=nb, index=start) + if type == "playlist": + return dz.api.search_playlist(clean_search_query(term), limit=nb, index=start) + if type == "radio": + return dz.api.search_radio(clean_search_query(term), limit=nb, index=start) + if type == "track": + return dz.api.search_track(clean_search_query(term), limit=nb, index=start) + if type == "user": + return dz.api.search_user(clean_search_query(term), limit=nb, index=start) + return dz.api.search(clean_search_query(term), limit=nb, index=start) - def searchAlbum(self, dz, term, start, nb): - return dz.search_album_gw(term, start, nb) - - def newReleases(self, dz): - return dz.get_new_releases() + # Needs to be reimplemented in deezer-py + # def searchAlbum(self, dz, term, start, nb): + # return None #dz.search_album_gw(term, start, nb) + # + # def newReleases(self, dz): + # return None #dz.get_new_releases() # Queue functions def addToQueue(self, dz, url, bitrate=None, interface=None, ack=None): @@ -288,7 +335,7 @@ class deemix: type = getTypeFromLink(link) relID = getIDFromLink(link, type) if type in ["track", "album"]: - data = getattr(dz, 'get_' + type)(relID) + data = getattr(dz.api, 'get_' + type)(relID) else: data = {} return (type, data) diff --git a/server-requirements.txt b/server-requirements.txt index 0b5e95b..255c9de 100644 --- a/server-requirements.txt +++ b/server-requirements.txt @@ -1,4 +1,5 @@ -deemix>=1.5.0 +deemix>=2.0.1 +deezer-py flask flask-socketio eventlet diff --git a/server.py b/server.py index 05d86d0..7ca0a58 100644 --- a/server.py +++ b/server.py @@ -17,9 +17,9 @@ from flask import Flask, render_template, request, session, redirect, copy_curre from flask_socketio import SocketIO, emit from werkzeug.middleware.proxy_fix import ProxyFix +from deezer import Deezer from deemix import __version__ as deemix_version from app import deemix, LoginStatus, resource_path -from deemix.api.deezer import Deezer from deemix.app.messageinterface import MessageInterface # Workaround for MIME type error in certain Windows installs @@ -158,7 +158,7 @@ def login(arl, force=False, child=0): global first_connection if not app.isDeezerAvailable: - emit('logged_in', {'status': LoginStatus.NOT_AVAILABLE, 'arl': arl, 'user': session['dz'].user}) + emit('logged_in', {'status': LoginStatus.NOT_AVAILABLE, 'arl': arl, 'user': session['dz'].current_user}) return if child == None: child = 0 @@ -169,7 +169,7 @@ def login(arl, force=False, child=0): result = app.login(session['dz'], arl, int(child)) if force and result == LoginStatus.SUCCESS: result = LoginStatus.FORCED_SUCCESS - emit('logged_in', {'status': result, 'arl': arl, 'user': session['dz'].user}) + emit('logged_in', {'status': result, 'arl': arl, 'user': session['dz'].current_user}) if first_connection and result in [LoginStatus.SUCCESS, LoginStatus.FORCED_SUCCESS]: first_connection = False app.restoreDownloadQueue(session['dz'], socket_interface) @@ -203,26 +203,27 @@ def search(data): result['ack'] = data.get('ack') emit('search', result) -@socketio.on('albumSearch') -def albumSearch(data): - if data['term'].strip() != "": - albums = app.searchAlbum(session['dz'], data['term'], data['start'], data['nb']) - output = { - 'data': albums, - 'total': len(albums), - 'ack': data.get('ack') - }; - emit('albumSearch', output) - -@socketio.on('newReleases') -def newReleases(data): - result = app.newReleases(session['dz']) - output = { - 'data': result, - 'total': len(result), - 'ack': data.get('ack') - }; - emit('newReleases', output) +# Needs to be reimplemented in deezer-py +# @socketio.on('albumSearch') +# def albumSearch(data): +# if data['term'].strip() != "": +# albums = app.searchAlbum(session['dz'], data['term'], data['start'], data['nb']) +# output = { +# 'data': albums, +# 'total': len(albums), +# 'ack': data.get('ack') +# }; +# emit('albumSearch', output) +# +# @socketio.on('newReleases') +# def newReleases(data): +# result = app.newReleases(session['dz']) +# output = { +# 'data': result, +# 'total': len(result), +# 'ack': data.get('ack') +# }; +# emit('newReleases', output) @socketio.on('queueRestored') def queueRestored(): @@ -266,7 +267,7 @@ def analyzeLink(link): @socketio.on('getChartTracks') def getChartTracks(id): - emit('setChartTracks', session['dz'].get_playlist_tracks(id)['data']) + emit('setChartTracks', session['dz'].api.get_playlist_tracks(id)['data']) @socketio.on('update_userFavorites') def update_userFavorites(): @@ -327,7 +328,7 @@ def applogin(): if arl: emit('applogin_arl', arl) else: - emit('logged_in', {'status': 2, 'user': session['dz'].user}) + emit('logged_in', {'status': 2, 'user': session['dz'].current_user}) else: print("Can't open login page, you're not running the gui") diff --git a/webui b/webui index 75225ca..4479633 160000 --- a/webui +++ b/webui @@ -1 +1 @@ -Subproject commit 75225ca6a35aed2cb192d9507c8d61d907ce8381 +Subproject commit 4479633551e4364e1fefdc1f7c8d2bf725bfdf33