xref: /MusicFree/src/types/plugin.d.ts (revision 7fb901109d23a379901d3a07c4fcb24021621c5d)
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