mirror of
https://gitlab.com/RemixDev/deemix-gui-pyweb.git
synced 2024-12-29 10:56:06 +00:00
13b3d90abc
This fixes #13
186 lines
6 KiB
Python
186 lines
6 KiB
Python
#!/usr/bin/env python3
|
|
from deemix.api.deezer import Deezer
|
|
from deemix.app.settings import Settings
|
|
from deemix.app.queuemanager import QueueManager
|
|
from deemix.app.spotifyhelper import SpotifyHelper, emptyPlaylist as emptySpotifyPlaylist
|
|
|
|
from deemix.utils.misc import getTypeFromLink, getIDFromLink
|
|
from deemix.utils.localpaths import getConfigFolder
|
|
|
|
import os.path as path
|
|
import json
|
|
|
|
|
|
class deemix:
|
|
def __init__(self, portable):
|
|
self.configFolder = portable or getConfigFolder()
|
|
self.set = Settings(self.configFolder)
|
|
self.sp = SpotifyHelper(self.configFolder)
|
|
self.qm = QueueManager()
|
|
|
|
self.chartsList = []
|
|
self.homeCache = None
|
|
|
|
def shutdown(self, interface=None):
|
|
if self.set.settings['saveDownloadQueue']:
|
|
self.qm.saveQueue(self.configFolder)
|
|
self.qm.cancelAllDownloads(interface)
|
|
if interface:
|
|
interface.send("toast", {'msg': "Server is closed."})
|
|
|
|
def getConfigArl(self):
|
|
tempDeezer = Deezer()
|
|
arl = None
|
|
if path.isfile(path.join(self.configFolder, '.arl')):
|
|
with open(path.join(self.configFolder, '.arl'), 'r') as f:
|
|
arl = f.readline().rstrip("\n")
|
|
if not arl or not tempDeezer.login_via_arl(arl):
|
|
while True:
|
|
arl = input("Paste here your arl:")
|
|
if tempDeezer.login_via_arl(arl):
|
|
break
|
|
with open(path.join(self.configFolder, '.arl'), 'w') as f:
|
|
f.write(arl)
|
|
return arl
|
|
|
|
|
|
def restoreDownloadQueue(self, dz, interface=None):
|
|
self.qm.loadQueue(self.configFolder, self.set.settings, interface)
|
|
|
|
def queueRestored(self, dz, interface=None):
|
|
self.qm.nextItem(dz, self.sp, interface)
|
|
|
|
def get_charts(self, dz):
|
|
if len(self.chartsList) == 0:
|
|
temp = dz.get_charts_countries()
|
|
countries = []
|
|
for i in range(len(temp)):
|
|
countries.append({
|
|
'title': temp[i]['title'].replace("Top ", ""),
|
|
'id': temp[i]['id'],
|
|
'picture_small': temp[i]['picture_small'],
|
|
'picture_medium': temp[i]['picture_medium'],
|
|
'picture_big': temp[i]['picture_big']
|
|
})
|
|
self.chartsList = countries
|
|
return self.chartsList
|
|
|
|
def get_home(self, dz):
|
|
if not self.homeCache:
|
|
self.homeCache = session['dz'].get_charts()
|
|
return self.homeCache
|
|
|
|
def getDownloadFolder(self):
|
|
return self.set.settings['downloadLocation']
|
|
|
|
def getUserFavorites(self, dz):
|
|
user_id = dz.user['id']
|
|
result = {}
|
|
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']
|
|
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)
|
|
return result
|
|
|
|
def updateUserSpotifyPlaylists(self, user):
|
|
if user == "" or not self.sp.spotifyEnabled:
|
|
return []
|
|
try:
|
|
return self.sp.get_user_playlists(user)
|
|
except:
|
|
return []
|
|
|
|
def updateUserPlaylists(self, dz):
|
|
user_id = dz.user['id']
|
|
try:
|
|
return dz.get_user_playlists(user_id)['data']
|
|
except:
|
|
return dz.get_user_playlists_gw(user_id)
|
|
|
|
def updateUserAlbums(self, dz):
|
|
user_id = dz.user['id']
|
|
try:
|
|
return dz.get_user_albums(user_id)['data']
|
|
except:
|
|
return dz.get_user_albums_gw(user_id)
|
|
|
|
def updateUserArtists(self, dz):
|
|
user_id = dz.user['id']
|
|
try:
|
|
return dz.get_user_artists(user_id)['data']
|
|
except:
|
|
return dz.get_user_artists_gw(user_id)
|
|
|
|
def updateUserTracks(self, dz):
|
|
user_id = dz.user['id']
|
|
try:
|
|
return dz.get_user_tracks(user_id)['data']
|
|
except:
|
|
return dz.get_user_tracks_gw(user_id)
|
|
|
|
def getSpotifyPlaylistTracklist(self, id):
|
|
if id == "" or not self.sp.spotifyEnabled:
|
|
return emptySpotifyPlaylist
|
|
return self.sp.get_playlist_tracklist(id)
|
|
|
|
# Search functions
|
|
def mainSearch(self, dz, term):
|
|
return dz.search_main_gw(term)
|
|
|
|
def search(self, dz, term, type, start, nb):
|
|
return dz.search(term, type, nb, start)
|
|
|
|
# Queue functions
|
|
def addToQueue(self, dz, url, bitrate=None, interface=None):
|
|
if ';' in url:
|
|
url = url.split(";")
|
|
self.qm.addToQueue(dz, self.sp, url, self.set.settings, bitrate, interface)
|
|
|
|
|
|
def removeFromQueue(self, uuid, interface=None):
|
|
self.qm.removeFromQueue(uuid, interface)
|
|
|
|
|
|
def cancelAllDownloads(self, interface=None):
|
|
self.qm.cancelAllDownloads(interface)
|
|
|
|
|
|
def removeFinishedDownloads(self, interface=None):
|
|
self.qm.removeFinishedDownloads(interface)
|
|
|
|
|
|
def initDownloadQueue(self):
|
|
(queue, queueComplete, queueList, currentItem) = self.qm.getQueue()
|
|
return (queue, queueComplete, queueList, currentItem)
|
|
|
|
def analyzeLink(self, dz, link):
|
|
type = getTypeFromLink(link)
|
|
relID = getIDFromLink(link, type)
|
|
if type in ["track", "album"]:
|
|
data = getattr(dz, 'get_' + type)(relID)
|
|
else:
|
|
data = {}
|
|
return (type, data)
|
|
|
|
# Settings functions
|
|
def getDefaultSettings(self):
|
|
return self.set.defaultSettings
|
|
|
|
def getSettings(self):
|
|
return self.set.settings
|
|
|
|
def saveSettings(self, newSettings):
|
|
return self.set.saveSettings(newSettings)
|
|
|
|
def getSpotifyCredentials(self):
|
|
return self.sp.getCredentials()
|
|
|
|
def setSpotifyCredentials(self, newCredentials):
|
|
return self.sp.setCredentials(newCredentials)
|