Implemented spotify plugin on server

This commit is contained in:
RemixDev
2021-05-29 12:06:26 +02:00
parent fee34f2b2a
commit 731295a317
25 changed files with 353 additions and 28 deletions

View File

@@ -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 }

View File

@@ -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)

View File

@@ -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

View File

@@ -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
]

View File

@@ -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
]

View 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