Implemented spotify plugin on server
This commit is contained in:
@@ -18,7 +18,10 @@ export const sessionDZ: any = {}
|
||||
export const getAccessToken = deemix.utils.deezer.getAccessToken
|
||||
export const getArlFromAccessToken = deemix.utils.deezer.getArlFromAccessToken
|
||||
|
||||
const deemixPlugins = {}
|
||||
export const plugins: any = {
|
||||
spotify: new deemix.plugins.spotify()
|
||||
}
|
||||
plugins.spotify.setup()
|
||||
|
||||
export const listener = {
|
||||
send(key: string, data?: any) {
|
||||
@@ -31,9 +34,14 @@ export const listener = {
|
||||
}
|
||||
}
|
||||
|
||||
export function saveSettings(newSettings: any) {
|
||||
export function getSettings(): any {
|
||||
return {settings, defaultSettings, spotifySettings: plugins.spotify.getCredentials()}
|
||||
}
|
||||
|
||||
export function saveSettings(newSettings: any, newSpotifySettings: any) {
|
||||
deemix.settings.save(newSettings, configFolder)
|
||||
settings = newSettings
|
||||
plugins.spotify.setCredentials(newSpotifySettings)
|
||||
}
|
||||
|
||||
export let queueOrder: string[] = []
|
||||
@@ -56,7 +64,7 @@ export async function addToQueue(dz: any, url: string[], bitrate: number) {
|
||||
for (let i = 0; i < url.length; i++){
|
||||
link = url[i]
|
||||
console.log(`Adding ${link} to queue`)
|
||||
let downloadObj = await deemix.generateDownloadObject(dz, link, bitrate, deemixPlugins, listener)
|
||||
let downloadObj = await deemix.generateDownloadObject(dz, link, bitrate, plugins, listener)
|
||||
if (Array.isArray(downloadObj)){
|
||||
downloadObjs.concat(downloadObj)
|
||||
} else {
|
||||
@@ -119,7 +127,8 @@ export async function startQueue(dz: any): Promise<any> {
|
||||
break
|
||||
case 'Convertable':
|
||||
downloadObject = new Convertable(currentItem)
|
||||
// Convert object here
|
||||
downloadObject = await plugins[downloadObject.plugin].convert(dz, downloadObject, settings, listener)
|
||||
fs.writeFileSync(configFolder + `queue${sep}${downloadObject.uuid}.json`, JSON.stringify({...downloadObject.toDict(), status: 'inQueue'}))
|
||||
break
|
||||
}
|
||||
currentJob = new Downloader(dz, downloadObject, settings, listener)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import { ApiHandler } from '../../../types'
|
||||
import { settings, defaultSettings } from '../../../main'
|
||||
import { getSettings } from '../../../main'
|
||||
|
||||
const path: ApiHandler['path'] = '/getSettings'
|
||||
|
||||
const handler: ApiHandler['handler'] = (_, res) => {
|
||||
res.send({ settings, defaultSettings })
|
||||
res.send(getSettings())
|
||||
}
|
||||
|
||||
const apiHandler: ApiHandler = { path, handler }
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// @ts-expect-error
|
||||
import { Deezer } from 'deezer-js'
|
||||
import { ApiHandler } from '../../../types'
|
||||
import { sessionDZ } from '../../../main'
|
||||
import { sessionDZ, plugins } from '../../../main'
|
||||
|
||||
const path: ApiHandler['path'] = '/getTracklist'
|
||||
|
||||
@@ -18,6 +18,48 @@ const handler: ApiHandler['handler'] = async (req, res) => {
|
||||
res.send(artistAPI)
|
||||
break
|
||||
}
|
||||
case 'spotifyplaylist':
|
||||
case 'spotify_playlist': {
|
||||
if (!plugins.spotify.enabled){
|
||||
res.send({
|
||||
collaborative: false,
|
||||
description: "",
|
||||
external_urls: {spotify: null},
|
||||
followers: {total: 0, href: null},
|
||||
id: null,
|
||||
images: [],
|
||||
name: "Something went wrong",
|
||||
owner: {
|
||||
display_name: "Error",
|
||||
id: null
|
||||
},
|
||||
public: true,
|
||||
tracks : [],
|
||||
type: 'playlist',
|
||||
uri: null
|
||||
})
|
||||
break
|
||||
}
|
||||
let sp = plugins.spotify.sp
|
||||
let playlist = await sp.getPlaylist(list_id)
|
||||
playlist = playlist.body
|
||||
let tracklist = playlist.tracks.items
|
||||
while (playlist.tracks.next) {
|
||||
let regExec = /offset=(\d+)&limit=(\d+)/g.exec(playlist.tracks.next)
|
||||
let offset = regExec![1]
|
||||
let limit = regExec![2]
|
||||
let playlistTracks = await sp.getPlaylistTracks(list_id, { offset, limit })
|
||||
playlist.tracks = playlistTracks.body
|
||||
tracklist = tracklist.concat(playlist.tracks.items)
|
||||
}
|
||||
tracklist.forEach((item:any, i:number) => {
|
||||
tracklist[i] = item.track
|
||||
tracklist[i].selected = false
|
||||
});
|
||||
playlist.tracks = tracklist
|
||||
res.send(playlist)
|
||||
break
|
||||
}
|
||||
default: {
|
||||
const releaseAPI = await dz.api[`get_${list_type}`](list_id)
|
||||
let releaseTracksAPI = await dz.api[`get_${list_type}_tracks`](list_id)
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
import { ApiHandler } from '../../../types'
|
||||
import { plugins } from '../../../main'
|
||||
|
||||
const path: ApiHandler['path'] = '/getUserSpotifyPlaylists'
|
||||
|
||||
const handler: ApiHandler['handler'] = async (req, res) => {
|
||||
let data
|
||||
|
||||
if (plugins.spotify.enabled){
|
||||
let sp = plugins.spotify.sp
|
||||
const username = req.query.spotifyUser
|
||||
data = []
|
||||
let playlists = await sp.getUserPlaylists(username)
|
||||
let playlistList = playlists.body.items
|
||||
while (playlists.next) {
|
||||
let regExec = /offset=(\d+)&limit=(\d+)/g.exec(playlists.next)
|
||||
let offset = regExec![1]
|
||||
let limit = regExec![2]
|
||||
let newPlaylists = await sp.getUserPlaylists(username, { offset, limit })
|
||||
playlists = newPlaylists.body
|
||||
playlistList = playlistList.concat(playlists.items)
|
||||
}
|
||||
playlistList.forEach((playlist: any) => {
|
||||
data.push(plugins.spotify._convertPlaylistStructure(playlist))
|
||||
})
|
||||
} else {
|
||||
data = { error: 'spotifyNotEnabled'}
|
||||
}
|
||||
res.send(data)
|
||||
}
|
||||
|
||||
const apiHandler: ApiHandler = { path, handler }
|
||||
|
||||
export default apiHandler
|
||||
|
||||
@@ -10,6 +10,7 @@ import getUserTracks from './getUserTracks'
|
||||
import getUserAlbums from './getUserAlbums'
|
||||
import getUserArtists from './getUserArtists'
|
||||
import getUserPlaylists from './getUserPlaylists'
|
||||
import getUserSpotifyPlaylists from './getUserSpotifyPlaylists'
|
||||
import getUserFavorites from './getUserFavorites'
|
||||
import getQueue from './getQueue'
|
||||
|
||||
@@ -26,6 +27,7 @@ export default [
|
||||
getUserAlbums,
|
||||
getUserArtists,
|
||||
getUserPlaylists,
|
||||
getUserSpotifyPlaylists,
|
||||
getUserFavorites,
|
||||
getQueue
|
||||
]
|
||||
|
||||
@@ -5,6 +5,7 @@ import cancelAllDownloads from './cancelAllDownloads'
|
||||
import removeFinishedDownloads from './removeFinishedDownloads'
|
||||
import removeFromQueue from './removeFromQueue'
|
||||
import logout from './logout'
|
||||
import saveSettings from './saveSettings'
|
||||
|
||||
export default [
|
||||
loginArl,
|
||||
@@ -13,5 +14,6 @@ export default [
|
||||
cancelAllDownloads,
|
||||
removeFinishedDownloads,
|
||||
removeFromQueue,
|
||||
logout
|
||||
logout,
|
||||
saveSettings
|
||||
]
|
||||
|
||||
21
server/src/routes/api/post/saveSettings.ts
Normal file
21
server/src/routes/api/post/saveSettings.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import { ApiHandler } from '../../../types'
|
||||
import { saveSettings, listener } from '../../../main'
|
||||
import { Settings, SpotifySettings } from '../../../types'
|
||||
|
||||
const path = '/saveSettings'
|
||||
|
||||
export interface SaveSettingsData {
|
||||
settings: Settings
|
||||
spotifySettings: SpotifySettings
|
||||
}
|
||||
|
||||
const handler: ApiHandler['handler'] = async (req, res) => {
|
||||
const { settings, spotifySettings }: SaveSettingsData = req.query
|
||||
saveSettings(settings, spotifySettings)
|
||||
listener.send('updateSettings', { settings, spotifySettings })
|
||||
res.send({ result: true })
|
||||
}
|
||||
|
||||
const apiHandler = { path, handler }
|
||||
|
||||
export default apiHandler
|
||||
@@ -12,7 +12,7 @@ export interface SaveSettingsData {
|
||||
|
||||
const cb = (data: SaveSettingsData, _: any, __: WsServer) => {
|
||||
const { settings, spotifySettings } = data
|
||||
saveSettings(settings)
|
||||
saveSettings(settings, spotifySettings)
|
||||
consoleInfo('Settings saved')
|
||||
listener.send('updateSettings', { settings, spotifySettings })
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user