Implemented spotify plugin on server
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user