插件类型定义
1. 介绍
本指南介绍如何编写符合 IPluginDefine
规范的视频播放插件,以便在你的 App 中使用插件机制扩展功能。
2. 插件接口定义
插件需要遵循以下 TypeScript 接口:
ts
interface IPluginDefine {
id: string;
/** 来源名 */
name: string;
/** 插件源地址 */
from: string;
/** 插件版本 */
version?: string;
/** 远程更新的url */
srcUrl?: string;
/** 插件作者 */
author?: string;
/** 用户自定义输入 */
userVariables?: IUserVariable[];
/** 初始化轮播数据 */
initRotationData?: () => Promise<IMovie.IMovieBase[]>;
/** 初始化每周数据 */
initWeekData?: () => Promise<IMovie.IMovieBase[][]>;
/** 获取详细信息 */
getDetailData: (movieItem: IMovie.IMovieBase) => Promise<IMovie.IMovieItem>;
/** 搜索 */
search?: (query: string, page?: number) => Promise<ISearchResult>;
/** 播放 */
play?: (url: string, movieItem: IMovie.IMovieSource) => Promise<IMovieSourceResult>;
}
3. 相关类型定义
ts
declare namespace IMovie {
/** 总集数 */
export interface ITotalItem {
html: string;
value: string;
/** 其他可以被序列化的信息 */
[k: string]: any;
}
export interface ILineItemValue {
default?: boolean;
html: string;
value: string;
total: IMovie.ITotalItem[];
}
/** 线路 */
export interface ILineItem {
[k: string]: IMovie.ILineItemValue;
}
export interface IMovieBase {
/** 视频在平台的唯一编号 */
id: string;
/** 平台 */
platform: string;
/** 标题 */
title: string;
/** 封面 */
img: string;
/** 状态 */
tag?: string;
/** 插件id */
pluginId: string;
/** 其他可以被序列化的信息 */
[k: string]: any;
}
export interface IMovieItem extends IMovie.IMovieBase {
/** 地区 */
region?: string;
/** 简介 */
desc?: string;
/** 导演 */
director?: string;
/** 主演 */
actor?: string;
/** 更新时间 */
updateTime?: string;
/** 线路 */
line?: IMovie.ILineItem;
/** 扩展展示信息 */
labelMap?: {
[k: string]: string;
};
}
// 片源定义
export interface IMovieSource extends IMovie.IMovieItem {
/** 播放地址 */
url?: string;
/** 视频播放类型 */
type?: string;
/** 当前线路 */
activeLine?: string;
/** 当前播放第几集 */
activeNumber?: string;
/** 播放状态 */
playStatus?: string;
}
}