From a4693bb53766075eef773e7b27f06e4ad9accbfa Mon Sep 17 00:00:00 2001 From: Mykola Soloduha Date: Wed, 22 Apr 2020 12:27:09 +0300 Subject: [PATCH] optimized import and other small changes --- app.py | 60 +++++++++------- server.py | 212 +++++++++++++++++++++++++++++------------------------- 2 files changed, 151 insertions(+), 121 deletions(-) diff --git a/app.py b/app.py index c4d30a7..78ca179 100644 --- a/app.py +++ b/app.py @@ -1,61 +1,73 @@ -import deemix.utils.localpaths as localpaths from deemix.app.queuemanager import addToQueue, removeFromQueue, getQueue, cancelAllDownloads, removeFinishedDownloads from deemix.app.settings import initSettings, getSettings, saveSettings from deemix.app.spotify import SpotifyHelper -from os import system as execute settings = {} spotifyHelper = None + def getUser(dz): - return dz.user + return dz.user + def initialize(): - global settings - global spotifyHelper - settings = initSettings() - spotifyHelper = SpotifyHelper() + global settings + global spotifyHelper + settings = initSettings() + spotifyHelper = SpotifyHelper() + def shutdown(interface=None): - getQueue() - cancelAllDownloads(interface) - if interface: - interface.send("toast", {'msg': "Server is closed."}) + getQueue() + cancelAllDownloads(interface) + if interface: + interface.send("toast", {'msg': "Server is closed."}) + # Search functions def mainSearch(dz, term): - return dz.search_main_gw(term) + return dz.search_main_gw(term) + def search(dz, term, type, start, nb): - return dz.search(term, type, nb, start) + return dz.search(term, type, nb, start) + # Queue functions def addToQueue_link(dz, url, bitrate=None, interface=None): - return addToQueue(dz, spotifyHelper, url, settings, bitrate, interface) + return addToQueue(dz, spotifyHelper, url, settings, bitrate, interface) + def removeFromQueue_link(uuid, interface=None): - removeFromQueue(uuid, interface) + removeFromQueue(uuid, interface) + def cancelAllDownloads_link(interface=None): - cancelAllDownloads(interface) + cancelAllDownloads(interface) + def removeFinishedDownloads_link(interface=None): - removeFinishedDownloads(interface) + removeFinishedDownloads(interface) + def getQueue_link(): - return getQueue() + return getQueue() + # Settings functions def getSettings_link(): - return getSettings() + return getSettings() + def saveSettings_link(newSettings): - global settings - settings = newSettings - return saveSettings(newSettings) + global settings + settings = newSettings + return saveSettings(newSettings) + def getSpotifyCredentials(): - return spotifyHelper.getCredentials() + return spotifyHelper.getCredentials() + def setSpotifyCredentials(newCredentials): - return spotifyHelper.setCredentials(newCredentials) + return spotifyHelper.setCredentials(newCredentials) diff --git a/server.py b/server.py index 6f05e0e..30cd1d8 100644 --- a/server.py +++ b/server.py @@ -1,40 +1,42 @@ -import json +import logging import os +import sys from flask import Flask, render_template, request, session from flask_socketio import SocketIO, emit -import logging + +import app from deemix.api.deezer import Deezer from deemix.app.MessageInterface import MessageInterface -import app -import time -import sys + class CustomFlask(Flask): - jinja_options = Flask.jinja_options.copy() - jinja_options.update(dict( - block_start_string='$$', - block_end_string='$$', - variable_start_string='$', - variable_end_string='$', - comment_start_string='$#', - comment_end_string='#$', -)) + jinja_options = Flask.jinja_options.copy() + jinja_options.update(dict( + block_start_string='$$', + block_end_string='$$', + variable_start_string='$', + variable_end_string='$', + comment_start_string='$#', + comment_end_string='#$', + )) gui_dir = os.path.join(os.path.dirname(__file__), 'public') # development path if not os.path.exists(gui_dir): # frozen executable path - gui_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'public') + gui_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'public') server = CustomFlask(__name__, static_folder=gui_dir, template_folder=gui_dir) server.config['SEND_FILE_MAX_AGE_DEFAULT'] = 1 # disable caching socketio = SocketIO(server) + class SocketInterface(MessageInterface): - def send(self, message, value=None): - if value: - socketio.emit(message, value) - else: - socketio.emit(message) + def send(self, message, value=None): + if value: + socketio.emit(message, value) + else: + socketio.emit(message) + socket_interface = SocketInterface() @@ -44,122 +46,138 @@ server.logger.disabled = True app.initialize() + @server.route('/') def landing(): - return render_template('index.html') + return render_template('index.html') + @server.route('/shutdown') def closing(): - app.shutdown(interface=socket_interface) - func = request.environ.get('werkzeug.server.shutdown') - func() - return 'server closed' + app.shutdown(interface=socket_interface) + func = request.environ.get('werkzeug.server.shutdown') + func() + return 'server closed' + @socketio.on('connect') def on_connect(): - session['dz'] = Deezer() - settings = app.getSettings_link() - spotifyCredentials = app.getSpotifyCredentials() - emit('init_settings', (settings, spotifyCredentials)) - queue, queueComplete, queueList, currentItem = app.getQueue_link() - emit('init_downloadQueue', {'queue': queue, 'queueComplete': queueComplete, 'queueList': queueList, 'currentItem': currentItem}) + session['dz'] = Deezer() + settings = app.getSettings_link() + spotifyCredentials = app.getSpotifyCredentials() + emit('init_settings', (settings, spotifyCredentials)) + queue, queueComplete, queueList, currentItem = app.getQueue_link() + emit('init_downloadQueue', + {'queue': queue, 'queueComplete': queueComplete, 'queueList': queueList, 'currentItem': currentItem}) + @socketio.on('login') def login(arl, force=False): - emit('toast', {'msg': "Logging in...", 'icon': 'loading', 'dismiss': False, 'id': "login-toast"}) - if not session['dz'].logged_in: - result = session['dz'].login_via_arl(arl) - else: - if force: - session['dz'] = Deezer() - result = session['dz'].login_via_arl(arl) - if result == 1: - result = 3 - else: - result = 2 - emit('logged_in', {'status': result, 'arl': arl, 'user': app.getUser(session['dz'])}) + emit('toast', {'msg': "Logging in...", 'icon': 'loading', 'dismiss': False, 'id': "login-toast"}) + if not session['dz'].logged_in: + result = session['dz'].login_via_arl(arl) + else: + if force: + session['dz'] = Deezer() + result = session['dz'].login_via_arl(arl) + if result == 1: + result = 3 + else: + result = 2 + emit('logged_in', {'status': result, 'arl': arl, 'user': app.getUser(session['dz'])}) + @socketio.on('logout') def logout(): - status = 0 - if session['dz'].logged_in: - session['dz'] = Deezer() - status = 0 - else: - status = 1 - emit('logged_out', status) + status = 0 + if session['dz'].logged_in: + session['dz'] = Deezer() + status = 0 + else: + status = 1 + emit('logged_out', status) + @socketio.on('mainSearch') def mainSearch(data): - emit('mainSearch', app.mainSearch(session['dz'], data['term'])) + emit('mainSearch', app.mainSearch(session['dz'], data['term'])) + @socketio.on('search') def search(data): - result = app.search(session['dz'], data['term'], data['type'], data['start'], data['nb']) - result['type'] = data['type'] - emit('search', result) + result = app.search(session['dz'], data['term'], data['type'], data['start'], data['nb']) + result['type'] = data['type'] + emit('search', result) + @socketio.on('addToQueue') def addToQueue(data): - result = app.addToQueue_link(session['dz'], data['url'], data['bitrate'], interface=socket_interface) - if result == "Not logged in": - emit('toast', {'msg': "You need to log in to download tracks!", 'icon': 'report'}) + result = app.addToQueue_link(session['dz'], data['url'], data['bitrate'], interface=socket_interface) + if result == "Not logged in": + emit('toast', {'msg': "You need to log in to download tracks!", 'icon': 'report'}) + @socketio.on('removeFromQueue') def removeFromQueue(uuid): - app.removeFromQueue_link(uuid, interface=socket_interface) + app.removeFromQueue_link(uuid, interface=socket_interface) + @socketio.on('removeFinishedDownloads') def removeFinishedDownloads(): - app.removeFinishedDownloads_link(interface=socket_interface) + app.removeFinishedDownloads_link(interface=socket_interface) + @socketio.on('cancelAllDownloads') def cancelAllDownloads(): - app.cancelAllDownloads_link(interface=socket_interface) + app.cancelAllDownloads_link(interface=socket_interface) + @socketio.on('saveSettings') def saveSettings(settings, spotifyCredentials): - app.saveSettings_link(settings) - app.setSpotifyCredentials(spotifyCredentials) - socketio.emit('updateSettings', (settings, spotifyCredentials)) + app.saveSettings_link(settings) + app.setSpotifyCredentials(spotifyCredentials) + socketio.emit('updateSettings', (settings, spotifyCredentials)) + @socketio.on('getTracklist') def getTracklist(data): - if data['type'] == 'artist': - artistAPI = session['dz'].get_artist(data['id']) - artistAlbumsAPI = session['dz'].get_artist_albums(data['id'])['data'] - tracksData = { 'all': []} - for release in artistAlbumsAPI: - if not release['record_type'] in tracksData: - tracksData[release['record_type']] = [] - tracksData[release['record_type']].append(release) - tracksData['all'].append(release) - artistAPI['releases'] = tracksData - emit('show_artist', artistAPI) - else: - releaseAPI = getattr(session['dz'], 'get_'+data['type'])(data['id']) - releaseTracksAPI = getattr(session['dz'], 'get_'+data['type']+'_tracks')(data['id'])['data'] - tracks = [] - showdiscs = False - if data['type'] == 'album' and len(releaseTracksAPI) and releaseTracksAPI[-1]['disk_number'] != 1: - current_disk = 0 - showdiscs = True - for track in releaseTracksAPI: - if showdiscs and int(track['disk_number']) != current_disk: - current_disk = int(track['disk_number']) - tracks.append({'type': 'disc_separator', 'number': current_disk}) - track['selected'] = False - tracks.append(track) - releaseAPI['tracks'] = tracks - emit('show_'+data['type'], releaseAPI) + if data['type'] == 'artist': + artistAPI = session['dz'].get_artist(data['id']) + artistAlbumsAPI = session['dz'].get_artist_albums(data['id'])['data'] + tracksData = {'all': []} + for release in artistAlbumsAPI: + if not release['record_type'] in tracksData: + tracksData[release['record_type']] = [] + tracksData[release['record_type']].append(release) + tracksData['all'].append(release) + artistAPI['releases'] = tracksData + emit('show_artist', artistAPI) + else: + releaseAPI = getattr(session['dz'], 'get_' + data['type'])(data['id']) + releaseTracksAPI = getattr(session['dz'], 'get_' + data['type'] + '_tracks')(data['id'])['data'] + tracks = [] + showdiscs = False + if data['type'] == 'album' and len(releaseTracksAPI) and releaseTracksAPI[-1]['disk_number'] != 1: + current_disk = 0 + showdiscs = True + for track in releaseTracksAPI: + if showdiscs and int(track['disk_number']) != current_disk: + current_disk = int(track['disk_number']) + tracks.append({'type': 'disc_separator', 'number': current_disk}) + track['selected'] = False + tracks.append(track) + releaseAPI['tracks'] = tracks + emit('show_' + data['type'], releaseAPI) + def run_server(port): - print("Starting server at http://127.0.0.1:"+str(port)) - socketio.run(server, host='0.0.0.0', port=port) + print("Starting server at http://127.0.0.1:" + str(port)) + socketio.run(server, host='0.0.0.0', port=port) + if __name__ == '__main__': - if len(sys.argv) >= 2: - port = int(sys.argv[1]) - else: - port = 33333 - run_server(port) + if len(sys.argv) >= 2: + port = int(sys.argv[1]) + else: + port = 33333 + run_server(port)