mirror of
https://github.com/austinried/subtracks.git
synced 2025-12-29 17:39:27 +01:00
impl artistInfo
This commit is contained in:
parent
5ce3b5bcdf
commit
6fb4b30294
@ -1,5 +1,5 @@
|
|||||||
import { DOMParser } from 'xmldom';
|
import { DOMParser } from 'xmldom';
|
||||||
import { GetArtistsResponse, GetIndexesResponse, SubsonicResponse } from './response';
|
import { GetArtistInfo2Response, GetArtistInfoResponse, GetArtistsResponse, GetIndexesResponse, SubsonicResponse } from './response';
|
||||||
|
|
||||||
export class SubsonicApiClient {
|
export class SubsonicApiClient {
|
||||||
address: string;
|
address: string;
|
||||||
@ -50,22 +50,19 @@ export class SubsonicApiClient {
|
|||||||
|
|
||||||
async getArtists(): Promise<SubsonicResponse<GetArtistsResponse>> {
|
async getArtists(): Promise<SubsonicResponse<GetArtistsResponse>> {
|
||||||
const xml = await this.apiRequest('getArtists');
|
const xml = await this.apiRequest('getArtists');
|
||||||
const data = new GetArtistsResponse(xml);
|
const response = new SubsonicResponse<GetArtistsResponse>(xml, new GetArtistsResponse(xml));
|
||||||
const response = new SubsonicResponse<GetArtistsResponse>(xml, data);
|
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getIndexes(ifModifiedSince?: number): Promise<SubsonicResponse<GetIndexesResponse>> {
|
async getIndexes(ifModifiedSince?: number): Promise<SubsonicResponse<GetIndexesResponse>> {
|
||||||
const params = new URLSearchParams();
|
const params = new URLSearchParams();
|
||||||
console.log(params);
|
|
||||||
if (ifModifiedSince !== undefined) {
|
if (ifModifiedSince !== undefined) {
|
||||||
params.append('ifModifiedSince', ifModifiedSince.toString());
|
params.append('ifModifiedSince', ifModifiedSince.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
const xml = await this.apiRequest('getIndexes', params);
|
const xml = await this.apiRequest('getIndexes', params);
|
||||||
const data = new GetIndexesResponse(xml);
|
const response = new SubsonicResponse<GetIndexesResponse>(xml, new GetIndexesResponse(xml));
|
||||||
const response = new SubsonicResponse<GetIndexesResponse>(xml, data);
|
|
||||||
|
|
||||||
console.log(response.status);
|
console.log(response.status);
|
||||||
console.log(response.version);
|
console.log(response.version);
|
||||||
@ -73,6 +70,40 @@ export class SubsonicApiClient {
|
|||||||
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getArtistInfo(id: string, count?: number, includeNotPresent?: boolean): Promise<SubsonicResponse<GetArtistInfoResponse>> {
|
||||||
|
const params = new URLSearchParams();
|
||||||
|
params.append('id', id);
|
||||||
|
if (count !== undefined) {
|
||||||
|
params.append('count', count.toString());
|
||||||
|
}
|
||||||
|
if (includeNotPresent !== undefined) {
|
||||||
|
params.append('includeNotPresent', includeNotPresent.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
const xml = await this.apiRequest('getArtistInfo', params);
|
||||||
|
const response = new SubsonicResponse<GetArtistInfoResponse>(xml, new GetArtistInfoResponse(xml));
|
||||||
|
console.log(response.data);
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getArtistInfo2(id: string, count?: number, includeNotPresent?: boolean): Promise<SubsonicResponse<GetArtistInfo2Response>> {
|
||||||
|
const params = new URLSearchParams();
|
||||||
|
params.append('id', id);
|
||||||
|
if (count !== undefined) {
|
||||||
|
params.append('count', count.toString());
|
||||||
|
}
|
||||||
|
if (includeNotPresent !== undefined) {
|
||||||
|
params.append('includeNotPresent', includeNotPresent.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
const xml = await this.apiRequest('getArtistInfo2', params);
|
||||||
|
const response = new SubsonicResponse<GetArtistInfo2Response>(xml, new GetArtistInfo2Response(xml));
|
||||||
|
console.log(response.data);
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class SubsonicApiError extends Error {
|
export class SubsonicApiError extends Error {
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { Artist, ArtistID3 } from "./element";
|
import { Artist, ArtistID3, BaseArtist } from "./element";
|
||||||
|
|
||||||
export type ResponseStatus = 'ok' | 'failed';
|
export type ResponseStatus = 'ok' | 'failed';
|
||||||
|
|
||||||
@ -45,3 +45,51 @@ export class GetIndexesResponse {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class BaseGetArtistInfoResponse<T extends BaseArtist> {
|
||||||
|
similarArtists: T[] = [];
|
||||||
|
biography?: string;
|
||||||
|
musicBrainzId?: string;
|
||||||
|
lastFmUrl?: string;
|
||||||
|
smallImageUrl?: string;
|
||||||
|
mediumImageUrl?: string;
|
||||||
|
largeImageUrl?: string;
|
||||||
|
|
||||||
|
constructor(xml: Document, artistType: new (e: Element) => T) {
|
||||||
|
if (xml.getElementsByTagName('biography').length > 0) {
|
||||||
|
this.biography = xml.getElementsByTagName('biography')[0].textContent as string;
|
||||||
|
}
|
||||||
|
if (xml.getElementsByTagName('musicBrainzId').length > 0) {
|
||||||
|
this.musicBrainzId = xml.getElementsByTagName('musicBrainzId')[0].textContent as string;
|
||||||
|
}
|
||||||
|
if (xml.getElementsByTagName('lastFmUrl').length > 0) {
|
||||||
|
this.lastFmUrl = xml.getElementsByTagName('lastFmUrl')[0].textContent as string;
|
||||||
|
}
|
||||||
|
if (xml.getElementsByTagName('smallImageUrl').length > 0) {
|
||||||
|
this.smallImageUrl = xml.getElementsByTagName('smallImageUrl')[0].textContent as string;
|
||||||
|
}
|
||||||
|
if (xml.getElementsByTagName('mediumImageUrl').length > 0) {
|
||||||
|
this.mediumImageUrl = xml.getElementsByTagName('mediumImageUrl')[0].textContent as string;
|
||||||
|
}
|
||||||
|
if (xml.getElementsByTagName('largeImageUrl').length > 0) {
|
||||||
|
this.largeImageUrl = xml.getElementsByTagName('largeImageUrl')[0].textContent as string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const similarArtistElements = xml.getElementsByTagName('similarArtist');
|
||||||
|
for (let i = 0; i < similarArtistElements.length; i++) {
|
||||||
|
this.similarArtists.push(new artistType(similarArtistElements[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class GetArtistInfoResponse extends BaseGetArtistInfoResponse<Artist> {
|
||||||
|
constructor(xml: Document) {
|
||||||
|
super(xml, Artist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class GetArtistInfo2Response extends BaseGetArtistInfoResponse<ArtistID3> {
|
||||||
|
constructor(xml: Document) {
|
||||||
|
super(xml, ArtistID3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user