capacitor-bridge

📁 dbobkov245-source/pwa-torserve 📅 12 days ago
1
总安装量
1
周安装量
#54244
全站排名
安装命令
npx skills add https://github.com/dbobkov245-source/pwa-torserve --skill capacitor-bridge

Agent 安装分布

claude-code 1

Skill 文档

Capacitor Bridge Skill

This skill handles the communication between the React Frontend and the Native Android layer (TVPlayer.java). Primary Goal: Launch external players (VLC, MX Player, Vimu) correctly and handle their return results (resume position).

æ¡¥ API Contract

TVPlayer.play(options)

Launches a single video file. Must return a Promise that resolves only after the player closes.

Options:

  • url (string, required): Direct link to the video stream.
  • package (string, optional): Specific player package name (e.g., net.gtvbox.videoplayer). If null, opens system chooser.
  • title (string): Title to display in the player.
  • position (number): Resume position in milliseconds.

Java Extras (What actually gets sent):

  • Intent.ACTION_VIEW
  • return_result: true
  • Flags: FLAG_ACTIVITY_CLEAR_TOP, FLAG_ACTIVITY_SINGLE_TOP (Crucial for preventing double rendering).

TVPlayer.playList(options)

Launches a playlist (Season/Series).

Options:

  • urls (string[]): Array of video URLs.
  • names (string[]): Array of episode titles.
  • startIndex (number): Which index to start playing.
  • position (number): Resume position for the started episode.

📱 Supported Players & Extras

Vimu Player (net.gtvbox.videoplayer)

  • Single: forcename (Title), forcedirect (No buffer), startfrom (Position).
  • Playlist: Uses application/vnd.gtvbox.filelist MIME type.
    • asusfilelist (URLs)
    • asusnamelist (Names)

MX Player (com.mxtech.videoplayer.ad / .pro)

  • Single: title, position.
  • Playlist: Uses standard video/* with extras.
    • video_list (Parcelable Uri[])
    • video_list.name (String[])

VLC (org.videolan.vlc)

  • Single: title, from_start (false).
  • Playlist: Not fully supported via Intent extras, falls back to acting as single file player currently.

⚠️ Critical Rules

  1. Do NOT change FLAG_ACTIVITY_SINGLE_TOP. This prevents the app from restarting or opening a second instance of the intent chooser.
  2. RESTRICTED: FLAG_ACTIVITY_NEW_TASK and FLAG_ACTIVITY_CLEAR_TOP. These flags are essential for correct stack manipulation between PWA and Native Player. Removing them breaks the return journey.
  3. Lifecycle: The promise resolves when onActivityResult fires (i.e., user closes the player).
    • Requirement: play() method MUST return a Promise resolving with { position, duration }.
  4. Resume Logic: The result object contains { position: number, duration: number, finished: boolean }. You MUST save this to localStorage immediately.