1bf6e62f2S猫头猫declare namespace IPlugin { 220e6a092S猫头猫 export interface IMediaSourceResult { 3bf6e62f2S猫头猫 headers?: Record<string, string>; 4d704daedS猫头猫 /** 兜底播放 */ 5d704daedS猫头猫 url?: string; 6b7048bd1S猫头猫 /** UA */ 78b88e961S猫头猫 userAgent?: string; 8b7048bd1S猫头猫 /** 音质 */ 9abaede57S猫头猫 quality?: IMusic.IQualityKey; 10bf6e62f2S猫头猫 } 11bf6e62f2S猫头猫 120b940038S猫头猫 export interface ISearchResult<T extends ICommon.SupportMediaType> { 130b940038S猫头猫 isEnd?: boolean; 1420e2869eS猫头猫 data: ICommon.SupportMediaItemBase[T][]; 15bf6e62f2S猫头猫 } 16bf6e62f2S猫头猫 17bf6e62f2S猫头猫 export type ISearchResultType = ICommon.SupportMediaType; 18bf6e62f2S猫头猫 1920e2869eS猫头猫 type ISearchFunc = <T extends ICommon.SupportMediaType>( 2020e2869eS猫头猫 query: string, 2120e2869eS猫头猫 page: number, 2220e2869eS猫头猫 type: T, 2320e2869eS猫头猫 ) => Promise<ISearchResult<T>>; 2420e2869eS猫头猫 25efb9da24S猫头猫 type IGetArtistWorksFunc = <T extends IArtist.ArtistMediaType>( 2620e2869eS猫头猫 artistItem: IArtist.IArtistItem, 2720e2869eS猫头猫 page: number, 2820e2869eS猫头猫 type: T, 2920e2869eS猫头猫 ) => Promise<ISearchResult<T>>; 300b940038S猫头猫 31e0caf342S猫头猫 interface IUserVariable { 32e0caf342S猫头猫 /** 键 */ 33d5bfeb7eS猫头猫 key: string; 34e0caf342S猫头猫 /** 名称 */ 35e0caf342S猫头猫 name?: string; 36bfea7386S猫头猫 /** 提示文案 */ 37bfea7386S猫头猫 hint?: string; 38d5bfeb7eS猫头猫 } 39d5bfeb7eS猫头猫 40f9afcc0dS猫头猫 interface IAlbumInfoResult { 41f9afcc0dS猫头猫 isEnd?: boolean; 42f9afcc0dS猫头猫 albumItem?: IAlbum.IAlbumItemBase; 43f9afcc0dS猫头猫 musicList?: IMusic.IMusicItem[]; 44f9afcc0dS猫头猫 } 45f9afcc0dS猫头猫 465830c002S猫头猫 interface ISheetInfoResult { 475830c002S猫头猫 isEnd?: boolean; 485830c002S猫头猫 sheetItem?: IMusic.IMusicSheetItemBase; 495830c002S猫头猫 musicList?: IMusic.IMusicItem[]; 505830c002S猫头猫 } 515830c002S猫头猫 52956ee1b7S猫头猫 interface ITopListInfoResult { 53956ee1b7S猫头猫 isEnd?: boolean; 54956ee1b7S猫头猫 topListItem?: IMusic.IMusicSheetItem; 55956ee1b7S猫头猫 musicList?: IMusic.IMusicItem[]; 56956ee1b7S猫头猫 } 57956ee1b7S猫头猫 58ceb900cdS猫头猫 interface IGetRecommendSheetTagsResult { 59ceb900cdS猫头猫 // 固定的tag 60ceb900cdS猫头猫 pinned?: IMusic.IMusicSheetItemBase[]; 61ceb900cdS猫头猫 data?: IMusic.IMusicSheetGroupItem[]; 62ceb900cdS猫头猫 } 6392b6c95aS猫头猫 644f2deeb0S猫头猫 interface IPluginDefine { 65bf6e62f2S猫头猫 /** 来源名 */ 66bf6e62f2S猫头猫 platform: string; 67c7676810S猫头猫 /** 匹配的版本号 */ 68c7676810S猫头猫 appVersion?: string; 69ef60be1cS猫头猫 /** 插件版本 */ 70ef60be1cS猫头猫 version?: string; 71ef60be1cS猫头猫 /** 远程更新的url */ 72ef60be1cS猫头猫 srcUrl?: string; 73242960d3S猫头猫 /** 主键,会被存储到mediameta中 */ 74f782cf3dS猫头猫 primaryKey?: string[]; 757f771613S猫头猫 /** 默认搜索类型 */ 764f2deeb0S猫头猫 defaultSearchType?: ICommon.SupportMediaType; 772b80a429S猫头猫 /** 有效搜索类型 */ 7839ac60f7S猫头猫 supportedSearchType?: ICommon.SupportMediaType[]; 7948f4b873S猫头猫 /** 插件缓存控制 */ 8048f4b873S猫头猫 cacheControl?: 'cache' | 'no-cache' | 'no-store'; 81400ab63dS猫头猫 /** 插件作者 */ 82400ab63dS猫头猫 author?: string; 83d5bfeb7eS猫头猫 /** 用户自定义输入 */ 84e0caf342S猫头猫 userVariables?: IUserVariable[]; 85ef165785S猫头猫 /** 提示文本 */ 86ef165785S猫头猫 hints?: Record<string, string[]>; 877688af02S猫头猫 /** 搜索 */ 880b940038S猫头猫 search?: ISearchFunc; 897688af02S猫头猫 /** 获取根据音乐信息获取url */ 9020e6a092S猫头猫 getMediaSource?: ( 91be474dd8S猫头猫 musicItem: IMusic.IMusicItemBase, 92abaede57S猫头猫 quality: IMusic.IQualityKey, 9320e6a092S猫头猫 ) => Promise<IMediaSourceResult | null>; 942fac4245S猫头猫 /** 根据主键去查询歌曲信息 */ 954060c00aS猫头猫 getMusicInfo?: ( 964060c00aS猫头猫 musicBase: ICommon.IMediaBase, 9774d0cf81S猫头猫 ) => Promise<Partial<IMusic.IMusicItem> | null>; 98ccac153aS猫头猫 /** 获取歌词 */ 994060c00aS猫头猫 getLyric?: ( 1004060c00aS猫头猫 musicItem: IMusic.IMusicItemBase, 1014060c00aS猫头猫 ) => Promise<ILyric.ILyricSource | null>; 102f9afcc0dS猫头猫 /** 获取专辑信息,里面的歌曲分页 */ 103be474dd8S猫头猫 getAlbumInfo?: ( 1040b940038S猫头猫 albumItem: IAlbum.IAlbumItemBase, 105f9afcc0dS猫头猫 page: number, 106f9afcc0dS猫头猫 ) => Promise<IAlbumInfoResult | null>; 1075830c002S猫头猫 /** 获取歌单信息,有分页 */ 1085830c002S猫头猫 getMusicSheetInfo?: ( 1095830c002S猫头猫 sheetItem: IMusic.IMusicSheetItem, 1105830c002S猫头猫 page: number, 1115830c002S猫头猫 ) => Promise<ISheetInfoResult | null>; 1122fac4245S猫头猫 /** 获取作品,有分页 */ 113efb9da24S猫头猫 getArtistWorks?: IGetArtistWorksFunc; 11408380090S猫头猫 /** 导入歌单 */ 1150e4173cdS猫头猫 // todo: 数据结构应该是IMusicSheetItem 1164d9d3c4cS猫头猫 importMusicSheet?: ( 1174d9d3c4cS猫头猫 urlLike: string, 1184d9d3c4cS猫头猫 ) => Promise<IMusic.IMusicItem[] | null>; 1194d9d3c4cS猫头猫 /** 导入单曲 */ 1204d9d3c4cS猫头猫 importMusicItem?: ( 1214d9d3c4cS猫头猫 urlLike: string, 1224d9d3c4cS猫头猫 ) => Promise<IMusic.IMusicItem | null>; 123d52aa40eS猫头猫 /** 获取榜单 */ 12492b6c95aS猫头猫 getTopLists?: () => Promise<IMusic.IMusicSheetGroupItem[]>; 125d52aa40eS猫头猫 /** 获取榜单详情 */ 126d52aa40eS猫头猫 getTopListDetail?: ( 12792b6c95aS猫头猫 topListItem: IMusic.IMusicSheetItemBase, 128956ee1b7S猫头猫 page: number, 129956ee1b7S猫头猫 ) => Promise<ITopListInfoResult>; 130ceb900cdS猫头猫 /** 获取热门歌单tag */ 131ceb900cdS猫头猫 getRecommendSheetTags?: () => Promise<IGetRecommendSheetTagsResult>; 132ceb900cdS猫头猫 /** 歌单列表 */ 133ceb900cdS猫头猫 getRecommendSheetsByTag?: ( 134ceb900cdS猫头猫 tag: ICommon.IUnique, 135ceb900cdS猫头猫 page?: number, 136ceb900cdS猫头猫 ) => Promise<ICommon.PaginationResponse<IMusic.IMusicSheetItemBase>>; 137da2a2959S猫头猫 /** 获取评论 */ 138da2a2959S猫头猫 getMusicComments?: ( 139da2a2959S猫头猫 musicItem: IMusic.IMusicItem, 140da2a2959S猫头猫 ) => Promise<ICommon.PaginationResponse<IMedia.IComment>>; 141*7fb90110S猫头猫 /** 迁移插件 */ 142*7fb90110S猫头猫 migrateFromOtherPlugin?: ( 143*7fb90110S猫头猫 mediaItem: ICommon.IMediaBase, 144*7fb90110S猫头猫 fromPlatform: string, 145*7fb90110S猫头猫 ) => Promise<{ 146*7fb90110S猫头猫 isOk: boolean; // 是否迁移成功 147*7fb90110S猫头猫 data?: ICommon.IMediaBase; // 迁移后的数据 148*7fb90110S猫头猫 }>; 149be474dd8S猫头猫 } 150be474dd8S猫头猫 1514f2deeb0S猫头猫 export interface IPluginInstance extends IPluginDefine { 1524f2deeb0S猫头猫 /** 内部属性 */ 1534f2deeb0S猫头猫 /** 插件路径 */ 1544f2deeb0S猫头猫 _path: string; 155bf6e62f2S猫头猫 } 1564f2deeb0S猫头猫 1574f2deeb0S猫头猫 type R = Required<IPluginInstance>; 1584f2deeb0S猫头猫 export type IPluginInstanceMethods = { 1594f2deeb0S猫头猫 [K in keyof R as R[K] extends (...args: any) => any ? K : never]: R[K]; 1604f2deeb0S猫头猫 }; 161e08d37a3S猫头猫 162e08d37a3S猫头猫 /** 插件其他属性 */ 163e08d37a3S猫头猫 export type IPluginMeta = { 164e08d37a3S猫头猫 order: number; 165e0caf342S猫头猫 userVariables: Record<string, string>; 166c2b3a262S猫头猫 enabled?: boolean; 167e08d37a3S猫头猫 }; 168bf6e62f2S猫头猫} 169