Skip to content

插件类型定义

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;
  }
}