declare namespace IPlugin {
export interface IMediaSourceResult {
headers?: Record<string, string>;
url?: string;
userAgent?: string;
quality?: IMusic.IQualityKey;
}
export interface ISearchResult<T extends ICommon.SupportMediaType> {
isEnd?: boolean;
data: ICommon.SupportMediaItemBase[T][];
}
export type ISearchResultType = ICommon.SupportMediaType;
type ISearchFunc = <T extends ICommon.SupportMediaType>(
query: string,
page: number,
type: T,
) => Promise<ISearchResult<T>>;
type IGetArtistWorksFunc = <T extends IArtist.ArtistMediaType>(
artistItem: IArtist.IArtistItem,
page: number,
type: T,
) => Promise<ISearchResult<T>>;
interface IUserVariable {
key: string;
name?: string;
hint?: string;
}
interface IAlbumInfoResult {
isEnd?: boolean;
albumItem?: IAlbum.IAlbumItemBase;
musicList?: IMusic.IMusicItem[];
}
interface ISheetInfoResult {
isEnd?: boolean;
sheetItem?: IMusic.IMusicSheetItemBase;
musicList?: IMusic.IMusicItem[];
}
interface ITopListInfoResult {
isEnd?: boolean;
topListItem?: IMusic.IMusicSheetItem;
musicList?: IMusic.IMusicItem[];
}
interface IGetRecommendSheetTagsResult {
pinned?: IMusic.IMusicSheetItemBase[];
data?: IMusic.IMusicSheetGroupItem[];
}
interface IPluginDefine {
platform: string;
appVersion?: string;
version?: string;
srcUrl?: string;
primaryKey?: string[];
defaultSearchType?: ICommon.SupportMediaType;
supportedSearchType?: ICommon.SupportMediaType[];
cacheControl?: "cache" | "no-cache" | "no-store";
author?: string;
description?: string;
userVariables?: IUserVariable[];
hints?: Record<string, string[]>;
search?: ISearchFunc;
getMediaSource?: (
musicItem: IMusic.IMusicItemBase,
quality: IMusic.IQualityKey,
) => Promise<IMediaSourceResult | null>;
getMusicInfo?: (
musicBase: ICommon.IMediaBase,
) => Promise<Partial<IMusic.IMusicItem> | null>;
getLyric?: (
musicItem: IMusic.IMusicItemBase,
) => Promise<ILyric.ILyricSource | null>;
getAlbumInfo?: (
albumItem: IAlbum.IAlbumItemBase,
page: number,
) => Promise<IAlbumInfoResult | null>;
getMusicSheetInfo?: (
sheetItem: IMusic.IMusicSheetItem,
page: number,
) => Promise<ISheetInfoResult | null>;
getArtistWorks?: IGetArtistWorksFunc;
importMusicSheet?: (
urlLike: string,
) => Promise<IMusic.IMusicItem[] | null>;
importMusicItem?: (
urlLike: string,
) => Promise<IMusic.IMusicItem | null>;
getTopLists?: () => Promise<IMusic.IMusicSheetGroupItem[]>;
getTopListDetail?: (
topListItem: IMusic.IMusicSheetItemBase,
page: number,
) => Promise<ITopListInfoResult>;
getRecommendSheetTags?: () => Promise<IGetRecommendSheetTagsResult>;
getRecommendSheetsByTag?: (
tag: ICommon.IUnique,
page?: number,
) => Promise<ICommon.PaginationResponse<IMusic.IMusicSheetItemBase>>;
getMusicComments?: (
musicItem: IMusic.IMusicItem,
page?: number
) => Promise<ICommon.PaginationResponse<IMedia.IComment>>;
}
export interface IPluginInstance extends IPluginDefine {
_path: string;
}
type R = Required<IPluginInstance>;
export type IPluginInstanceMethods = {
[K in keyof R as R[K] extends (...args: any) => any ? K : never]: R[K];
};
export type IPluginMeta = {
order: number;
userVariables: Record<string, string>;
enabled?: boolean;
};
}