Extra endpoints for lidarr
This commit is contained in:
@@ -9,7 +9,6 @@ export interface RawAlbumQuery {
|
||||
term: string
|
||||
start?: string
|
||||
nb?: string
|
||||
ack: number
|
||||
}
|
||||
|
||||
export interface AlbumSearchParams extends Omit<RawAlbumQuery, 'start' | 'nb'> {
|
||||
@@ -20,7 +19,6 @@ export interface AlbumSearchParams extends Omit<RawAlbumQuery, 'start' | 'nb'> {
|
||||
export interface AlbumResponse {
|
||||
data: any[]
|
||||
total: number
|
||||
ack: RawAlbumQuery['ack']
|
||||
}
|
||||
|
||||
const path: ApiHandler['path'] = '/album-search/'
|
||||
@@ -33,18 +31,19 @@ const handler: RequestHandler<{}, {}, {}, RawAlbumQuery> = async (req, res) => {
|
||||
return res.status(400).send()
|
||||
}
|
||||
|
||||
const { term, start, nb, ack } = parseQuery(req.query)
|
||||
const { term, start, nb } = parseQuery(req.query)
|
||||
|
||||
if (!term || term.trim() === '') {
|
||||
return res.status(400).send()
|
||||
}
|
||||
|
||||
const albums = await dz.api.search_album(term, { start, nb })
|
||||
const results = await dz.gw.search_music(term, 'ALBUM', { index: start, limit: nb })
|
||||
|
||||
const albums = await Promise.all(results.data.map((c: any) => getAlbumDetails(dz, c.ALB_ID)))
|
||||
|
||||
const output: AlbumResponse = {
|
||||
data: albums,
|
||||
total: albums.data.length,
|
||||
ack
|
||||
total: albums.length
|
||||
}
|
||||
|
||||
return res.send(output)
|
||||
@@ -52,8 +51,6 @@ const handler: RequestHandler<{}, {}, {}, RawAlbumQuery> = async (req, res) => {
|
||||
|
||||
const apiHandler = { path, handler }
|
||||
|
||||
export default apiHandler
|
||||
|
||||
function parseQuery(query: RawAlbumQuery): AlbumSearchParams {
|
||||
let startingPoint = 0
|
||||
|
||||
@@ -70,11 +67,26 @@ function parseQuery(query: RawAlbumQuery): AlbumSearchParams {
|
||||
return {
|
||||
term: query.term,
|
||||
start: startingPoint,
|
||||
nb: newNb,
|
||||
ack: query.ack
|
||||
nb: newNb
|
||||
}
|
||||
}
|
||||
|
||||
// function getAlbums(term: string, start: number, nb: number): any[] {
|
||||
// return []
|
||||
// }
|
||||
async function getAlbumDetails(dz: any, albumId: string): Promise<any> {
|
||||
const result = await dz.gw.get_album_page(albumId)
|
||||
const output = result.DATA
|
||||
|
||||
let duration = 0
|
||||
result.SONGS.data.forEach((s: any) => {
|
||||
if ('DURATION' in s) {
|
||||
duration += parseInt(s.DURATION)
|
||||
}
|
||||
})
|
||||
|
||||
output.DURATION = duration
|
||||
output.NUMBER_TRACK = result.SONGS.total
|
||||
output.LINK = `https://deezer.com/album/${output.ALB_ID}`
|
||||
|
||||
return output
|
||||
}
|
||||
|
||||
export { apiHandler, getAlbumDetails }
|
||||
|
||||
Reference in New Issue
Block a user