Moved functions out of main, added getSettings
This commit is contained in:
@@ -1,124 +1,7 @@
|
||||
// @ts-expect-error
|
||||
import { Deezer } from 'deezer-js'
|
||||
// @ts-expect-error
|
||||
import deemix from 'deemix'
|
||||
|
||||
export const dz = new Deezer()
|
||||
let homeCache: any, chartsCache: any
|
||||
|
||||
export async function getHome() {
|
||||
if (!homeCache) {
|
||||
homeCache = await dz.api.get_chart(0, { limit: 30 })
|
||||
}
|
||||
return homeCache
|
||||
}
|
||||
|
||||
export async function getCharts() {
|
||||
if (!chartsCache) {
|
||||
const chartsData = await dz.api.get_countries_charts()
|
||||
const countries: any[] = []
|
||||
chartsData.forEach((country: any) => {
|
||||
countries.push({
|
||||
title: country.title.replace('Top ', ''),
|
||||
id: country.id,
|
||||
picture_small: country.picture_small,
|
||||
picture_medium: country.picture_medium,
|
||||
picture_big: country.picture_big
|
||||
})
|
||||
})
|
||||
chartsCache = { data: countries }
|
||||
}
|
||||
return chartsCache
|
||||
}
|
||||
|
||||
export async function getTracklist(list_id: string, list_type: string) {
|
||||
switch (list_type) {
|
||||
case 'artist': {
|
||||
const artistAPI = await dz.api.get_artist(list_id)
|
||||
artistAPI.releases = await dz.gw.get_artist_discography_tabs(list_id, 100)
|
||||
return artistAPI
|
||||
}
|
||||
default: {
|
||||
const releaseAPI = await dz.api[`get_${list_type}`](list_id)
|
||||
let releaseTracksAPI = await dz.api[`get_${list_type}_tracks`](list_id)
|
||||
releaseTracksAPI = releaseTracksAPI.data
|
||||
|
||||
const tracks: any[] = []
|
||||
const showdiscs =
|
||||
list_type === 'album' &&
|
||||
releaseTracksAPI.length &&
|
||||
releaseTracksAPI[releaseTracksAPI.length - 1].disk_number !== 1
|
||||
let current_disk = 0
|
||||
|
||||
releaseTracksAPI.forEach((track: any) => {
|
||||
if (showdiscs && parseInt(track.disk_number) !== current_disk) {
|
||||
current_disk = parseInt(track.disk_number)
|
||||
tracks.push({ type: 'disc_separator', number: current_disk })
|
||||
}
|
||||
track.selected = false
|
||||
tracks.push(track)
|
||||
})
|
||||
releaseAPI.tracks = tracks
|
||||
return releaseAPI
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export async function searchAll(term: string) {
|
||||
const results = await dz.gw.search(term)
|
||||
const order: string[] = []
|
||||
results.ORDER.forEach((element: string) => {
|
||||
if (['TOP_RESULT', 'TRACK', 'ALBUM', 'ARTIST', 'PLAYLIST'].includes(element)) order.push(element)
|
||||
})
|
||||
if (results.TOP_RESULT && results.TOP_RESULT.length) {
|
||||
const originalTopResult = results.TOP_RESULT[0]
|
||||
const topResult: any = {
|
||||
type: originalTopResult.__TYPE__
|
||||
}
|
||||
switch (topResult.type) {
|
||||
case 'artist':
|
||||
topResult.id = originalTopResult.ART_ID
|
||||
topResult.picture = `https://e-cdns-images.dzcdn.net/images/artist/${originalTopResult.ART_PICTURE}`
|
||||
topResult.title = originalTopResult.ART_NAME
|
||||
topResult.nb_fan = originalTopResult.NB_FAN
|
||||
break
|
||||
case 'album':
|
||||
topResult.id = originalTopResult.ALB_ID
|
||||
topResult.picture = `https://e-cdns-images.dzcdn.net/images/cover/${originalTopResult.ALB_PICTURE}`
|
||||
topResult.title = originalTopResult.ALB_TITLE
|
||||
topResult.artist = originalTopResult.ART_NAME
|
||||
topResult.nb_song = originalTopResult.NUMBER_TRACK
|
||||
break
|
||||
case 'playlist':
|
||||
topResult.id = originalTopResult.PLAYLIST_ID
|
||||
topResult.picture = `https://e-cdns-images.dzcdn.net/images/${originalTopResult.PICTURE_TYPE}/${originalTopResult.PLAYLIST_PICTURE}`
|
||||
topResult.title = originalTopResult.TITLE
|
||||
topResult.artist = originalTopResult.PARENT_USERNAME
|
||||
topResult.nb_song = originalTopResult.NB_SONG
|
||||
break
|
||||
default:
|
||||
topResult.id = '0'
|
||||
topResult.picture = 'https://e-cdns-images.dzcdn.net/images/cover'
|
||||
break
|
||||
}
|
||||
}
|
||||
results.ORDER = order
|
||||
return results
|
||||
}
|
||||
|
||||
export async function search(term: string, type: string, start: number, nb: number) {
|
||||
switch (type) {
|
||||
case 'track':
|
||||
return await dz.api.search_track(term, { limit: nb, index: start })
|
||||
case 'album':
|
||||
return await dz.api.search_album(term, { limit: nb, index: start })
|
||||
case 'artist':
|
||||
return await dz.api.search_artist(term, { limit: nb, index: start })
|
||||
case 'playlist':
|
||||
return await dz.api.search_playlist(term, { limit: nb, index: start })
|
||||
case 'radio':
|
||||
return await dz.api.search_radio(term, { limit: nb, index: start })
|
||||
case 'user':
|
||||
return await dz.api.search_user(term, { limit: nb, index: start })
|
||||
default:
|
||||
return await dz.api.search(term, { limit: nb, index: start })
|
||||
}
|
||||
}
|
||||
export let settings: any = deemix.settings.load()
|
||||
export const dz = new Deezer(settings.tagsLanguage)
|
||||
|
||||
@@ -10,7 +10,7 @@ export interface RawChartTracksQuery {
|
||||
limit?: number
|
||||
}
|
||||
|
||||
const path: ApiHandler['path'] = '/get-chart-tracks'
|
||||
const path: ApiHandler['path'] = '/getChartTracks'
|
||||
|
||||
const handler: RequestHandler<{}, {}, {}, RawChartTracksQuery> = async (req, res, next) => {
|
||||
try {
|
||||
|
||||
@@ -1,11 +1,26 @@
|
||||
import { ApiHandler } from '../../../types'
|
||||
import { getCharts } from '../../../main'
|
||||
import { dz } from '../../../main'
|
||||
|
||||
const path: ApiHandler['path'] = '/getCharts'
|
||||
|
||||
let chartsCache: any
|
||||
|
||||
const handler: ApiHandler['handler'] = async (_, res) => {
|
||||
const chartsData = await getCharts()
|
||||
res.send(chartsData)
|
||||
if (!chartsCache) {
|
||||
const chartsData = await dz.api.get_countries_charts()
|
||||
const countries: any[] = []
|
||||
chartsData.forEach((country: any) => {
|
||||
countries.push({
|
||||
title: country.title.replace('Top ', ''),
|
||||
id: country.id,
|
||||
picture_small: country.picture_small,
|
||||
picture_medium: country.picture_medium,
|
||||
picture_big: country.picture_big
|
||||
})
|
||||
})
|
||||
chartsCache = { data: countries }
|
||||
}
|
||||
res.send(chartsCache)
|
||||
}
|
||||
|
||||
const apiHandler: ApiHandler = { path, handler }
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
import { ApiHandler } from '../../../types'
|
||||
import { getHome } from '../../../main'
|
||||
import { dz } from '../../../main'
|
||||
|
||||
const path: ApiHandler['path'] = '/getHome'
|
||||
|
||||
let homeCache: any
|
||||
|
||||
const handler: ApiHandler['handler'] = async (_, res) => {
|
||||
const homeData = await getHome()
|
||||
res.send(homeData)
|
||||
if (!homeCache) {
|
||||
homeCache = await dz.api.get_chart(0, { limit: 30 })
|
||||
}
|
||||
res.send(homeCache)
|
||||
}
|
||||
|
||||
const apiHandler: ApiHandler = { path, handler }
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
import { ApiHandler } from '../../../types'
|
||||
import { settings } from '../../../main'
|
||||
|
||||
const path: ApiHandler['path'] = '/getSettings'
|
||||
|
||||
const handler: ApiHandler['handler'] = async (_, res) => {
|
||||
res.send(settings)
|
||||
}
|
||||
|
||||
const apiHandler: ApiHandler = { path, handler }
|
||||
|
||||
export default apiHandler
|
||||
|
||||
@@ -1,11 +1,43 @@
|
||||
import { ApiHandler } from '../../../types'
|
||||
import { getTracklist } from '../../../main'
|
||||
import { dz } from '../../../main'
|
||||
|
||||
const path: ApiHandler['path'] = '/getTracklist'
|
||||
|
||||
const handler: ApiHandler['handler'] = async (req, res) => {
|
||||
const tracklistData = await getTracklist(String(req.query.id), String(req.query.type))
|
||||
res.send(tracklistData)
|
||||
let list_id = String(req.query.id)
|
||||
let list_type = String(req.query.type)
|
||||
switch (list_type) {
|
||||
case 'artist': {
|
||||
const artistAPI = await dz.api.get_artist(list_id)
|
||||
artistAPI.releases = await dz.gw.get_artist_discography_tabs(list_id, {limit: 100})
|
||||
res.send(artistAPI)
|
||||
break
|
||||
}
|
||||
default: {
|
||||
const releaseAPI = await dz.api[`get_${list_type}`](list_id)
|
||||
let releaseTracksAPI = await dz.api[`get_${list_type}_tracks`](list_id)
|
||||
releaseTracksAPI = releaseTracksAPI.data
|
||||
|
||||
const tracks: any[] = []
|
||||
const showdiscs =
|
||||
list_type === 'album' &&
|
||||
releaseTracksAPI.length &&
|
||||
releaseTracksAPI[releaseTracksAPI.length - 1].disk_number !== 1
|
||||
let current_disk = 0
|
||||
|
||||
releaseTracksAPI.forEach((track: any) => {
|
||||
if (showdiscs && parseInt(track.disk_number) !== current_disk) {
|
||||
current_disk = parseInt(track.disk_number)
|
||||
tracks.push({ type: 'disc_separator', number: current_disk })
|
||||
}
|
||||
track.selected = false
|
||||
tracks.push(track)
|
||||
})
|
||||
releaseAPI.tracks = tracks
|
||||
res.send(releaseAPI)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const apiHandler: ApiHandler = { path, handler }
|
||||
|
||||
@@ -5,5 +5,15 @@ import search from './search'
|
||||
import getTracklist from './getTracklist'
|
||||
import albumSearch from './albumSearch'
|
||||
import getChartTracks from './getChartTracks'
|
||||
import getSettings from './getSettings'
|
||||
|
||||
export default [albumSearch, getHome, getCharts, getChartTracks, mainSearch, search, getTracklist]
|
||||
export default [
|
||||
albumSearch,
|
||||
getHome,
|
||||
getCharts,
|
||||
getChartTracks,
|
||||
mainSearch,
|
||||
search,
|
||||
getTracklist,
|
||||
getSettings
|
||||
]
|
||||
|
||||
@@ -1,11 +1,49 @@
|
||||
import { ApiHandler } from '../../../types'
|
||||
import { searchAll } from '../../../main'
|
||||
import { dz } from '../../../main'
|
||||
|
||||
const path: ApiHandler['path'] = '/mainSearch'
|
||||
|
||||
const handler: ApiHandler['handler'] = async (req, res) => {
|
||||
const searchData = await searchAll(String(req.query.term))
|
||||
res.send(searchData)
|
||||
const term = String(req.query.term)
|
||||
const results = await dz.gw.search(term)
|
||||
const order: string[] = []
|
||||
results.ORDER.forEach((element: string) => {
|
||||
if (['TOP_RESULT', 'TRACK', 'ALBUM', 'ARTIST', 'PLAYLIST'].includes(element)) order.push(element)
|
||||
})
|
||||
if (results.TOP_RESULT && results.TOP_RESULT.length) {
|
||||
const originalTopResult = results.TOP_RESULT[0]
|
||||
const topResult: any = {
|
||||
type: originalTopResult.__TYPE__
|
||||
}
|
||||
switch (topResult.type) {
|
||||
case 'artist':
|
||||
topResult.id = originalTopResult.ART_ID
|
||||
topResult.picture = `https://e-cdns-images.dzcdn.net/images/artist/${originalTopResult.ART_PICTURE}`
|
||||
topResult.title = originalTopResult.ART_NAME
|
||||
topResult.nb_fan = originalTopResult.NB_FAN
|
||||
break
|
||||
case 'album':
|
||||
topResult.id = originalTopResult.ALB_ID
|
||||
topResult.picture = `https://e-cdns-images.dzcdn.net/images/cover/${originalTopResult.ALB_PICTURE}`
|
||||
topResult.title = originalTopResult.ALB_TITLE
|
||||
topResult.artist = originalTopResult.ART_NAME
|
||||
topResult.nb_song = originalTopResult.NUMBER_TRACK
|
||||
break
|
||||
case 'playlist':
|
||||
topResult.id = originalTopResult.PLAYLIST_ID
|
||||
topResult.picture = `https://e-cdns-images.dzcdn.net/images/${originalTopResult.PICTURE_TYPE}/${originalTopResult.PLAYLIST_PICTURE}`
|
||||
topResult.title = originalTopResult.TITLE
|
||||
topResult.artist = originalTopResult.PARENT_USERNAME
|
||||
topResult.nb_song = originalTopResult.NB_SONG
|
||||
break
|
||||
default:
|
||||
topResult.id = '0'
|
||||
topResult.picture = 'https://e-cdns-images.dzcdn.net/images/cover'
|
||||
break
|
||||
}
|
||||
}
|
||||
results.ORDER = order
|
||||
res.send(results)
|
||||
}
|
||||
|
||||
const apiHandler: ApiHandler = { path, handler }
|
||||
|
||||
@@ -1,16 +1,37 @@
|
||||
import { ApiHandler } from '../../../types'
|
||||
import { search } from '../../../main'
|
||||
import { dz } from '../../../main'
|
||||
|
||||
const path: ApiHandler['path'] = '/search'
|
||||
|
||||
const handler: ApiHandler['handler'] = async (req, res) => {
|
||||
const searchData = await search(
|
||||
String(req.query.term),
|
||||
String(req.query.type),
|
||||
parseInt(String(req.query.start)),
|
||||
parseInt(String(req.query.nb))
|
||||
)
|
||||
res.send(searchData)
|
||||
const term = String(req.query.term)
|
||||
const type = String(req.query.type)
|
||||
const start = parseInt(String(req.query.start))
|
||||
const nb = parseInt(String(req.query.nb))
|
||||
|
||||
switch (type) {
|
||||
case 'track':
|
||||
res.send( await dz.api.search_track(term, { limit: nb, index: start }) )
|
||||
break
|
||||
case 'album':
|
||||
res.send( await dz.api.search_album(term, { limit: nb, index: start }) )
|
||||
break
|
||||
case 'artist':
|
||||
res.send( await dz.api.search_artist(term, { limit: nb, index: start }) )
|
||||
break
|
||||
case 'playlist':
|
||||
res.send( await dz.api.search_playlist(term, { limit: nb, index: start }) )
|
||||
break
|
||||
case 'radio':
|
||||
res.send( await dz.api.search_radio(term, { limit: nb, index: start }) )
|
||||
break
|
||||
case 'user':
|
||||
res.send( await dz.api.search_user(term, { limit: nb, index: start }) )
|
||||
break
|
||||
default:
|
||||
res.send( await dz.api.search(term, { limit: nb, index: start }) )
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
const apiHandler: ApiHandler = { path, handler }
|
||||
|
||||
Reference in New Issue
Block a user