zyfun Documentation

TypeScript electron & tdesign repository by @Hiram-Wong. AI agent rules & system prompts with 8.4k stars.

8,450 stars TypeScript TypeScript 1 file · ~5,612 tokens #electron#tdesign#vite#vue3#zyplayer
RAW Doc

File: README.md

🌐 Language

软件介绍

zyfun是一款免费、极简、全能的跨平台影音管家,一站式管理 T1-T4 全类型资源,内置多核播放器随心切换。独家老板键,一键隐身摸鱼无忧。用观影发现世界!

展开查看软件截图

影视 直播
历史 播放

🌴 注意事项

  • 仅此Github发布,请勿上当受骗;请各管理者不要宣传及引流本软件。
  • 强烈倡导合法观影,本软件仅作为播放工具,不涉及资源存储或分发。
  • 仅供个人学习交流之用,24小时内请自觉卸载,勿作商业用途。
  • 前身来源于ZY-Player,图标由@fourbeauty设计。
  • 在开始使用前,请务必详读并同意用户协议,确保遵守相关规定。

💻 跨平台说明

  • MacOS:
    • 数据库/文件/插件/日志 路径: ~/Library/Application Support/zyfun/
    • 二进制 路径: ~/.zy/bin/
  • Linux:
    • 数据库/文件/插件/日志 路径: ~/.config/zyfun/
    • 二进制 路径: ~/.zy/bin/
  • Windows:
    • 数据库/文件/插件/日志 路径: %USERPROFILE%\AppData\Roaming\zyfun\
    • 二进制 路径: %USERPROFILE%\.zy\bin\

🛠️ 下载安装

开发版下载: 需登录Github账号

最低要求: 和chromium内核要求保持一致

操作系统 x64 arm64 loong64 发行版 开发版 最低要求
Windows ✅ ✅ ➖ GitHub GitHub >= win10
MacOS ✅ ✅ ➖ GitHub GitHub >= macOS12
Linux ✅ ✅ ❌ GitHub 如意玲珑应用商店 AUR软件包 GitHub
Harmony ❌ ❌ ➖

展开查看安装问题

MacOS 安装后打开提示「文件已损坏」

bash
sudo spctl --master-disable
sudo xattr -cr /Applications/zyfun.app

Linux Appimage运行失败

Running as root without --no-sandbox is not supported

bash
./zyfun.AppImage --no-sandbox

dlopen():error loading libfuse.so.2

bash
sudo apt-get install libfuse2

Exiting GPU process due to errors during initialization

bash
xhost +

Linux deb包安装失败

Package libnss3-1d is not installed

bash
sudo apt-get install libnss3-1d

Package libxss1 is not installed

bash
sudo apt-get install libxss1

Linux rpm包安装失败

Dependency check failed libXScrnSaver is needed

bash
sudo yum install epel-release
sudo yum install libXScrnSaver

Dependency check failed xdg-utils is needed

bash
sudo yum install xdg-utils

📚 数据结构

请严格按照数据结构导入数据, 避免不必要的报错(如数据字段类型不匹配)

展开查看接口说明

text
/* Detailed source-code truncated for AI context efficiency. */

🤝 参与贡献

以下是您可以做出贡献的一些方式:

  • 贡献代码:开发新功能或优化现有代码 <开发文档> <Mcp文档>
  • 修复错误:提交您发现的任何错误的修复 <提交规范>
  • 维护问题:帮助管理GitHub问题
  • 产品设计:参与设计讨论
  • 编写文档:改进用户手册和指南
  • 社区参与:加入讨论并帮助用户

🌟 Star历史

💰 金主爸爸


File: docs/Conventional_Commits.md

参考Conventional Commits

结构

提交信息由 三部分组成:

  1. 标题 (Header):简洁描述此次更改内容。
  2. 正文 (Body):详细说明更改的背景、原因、以及具体改动(可选)。
  3. 页脚 (Footer):用于补充关联任务或备注信息(如关闭的 issue 编号或重大变更提醒)。

基本格式:

plain
<type>(<scope>): <subject>



<footer>

1. 标题格式

text
<type>(<scope>): <subject>
  • type (必填):本次提交的更改类型,明确表明变更的性质。
  • scope (可选):本次变更影响的范围(模块、功能、文件等)。
  • subject (必填):简要描述更改内容,控制在 50 个字符以内,语句开头小写,不加句号。

type 的取值:

  • feat:新功能(feature)。
  • fix:修复 bug。
  • docs:文档相关(如 README、注释)。
  • style:代码格式化(不影响代码逻辑)。
  • refactor:代码重构(既不修 bug 也不加功能)。
  • perf:性能优化。
  • test:增加或修改测试用例。
  • build:构建系统或外部依赖相关(如修改 package.json)。
  • ci:修改 CI 配置或脚本。
  • chore:不修改代码的杂务(如更改构建流程、配置文件)。
  • revert:回滚提交。

示例:

text
feat(auth): 添加用户登录功能
fix(cart): 修复购物车价格计算错误
docs: 更新 API 文档
style: 格式化代码
refactor(core): 优化数据处理逻辑

2. 正文格式

正文用于详细说明本次更改的背景和原因,建议包括以下内容:

  • 改变的动机(Why)。
  • 具体改动内容(What)。
  • 改动的影响(Impact)。

书写规范:

  • 每行控制在 72 个字符以内。
  • 使用英文句子结构(推荐),或者简洁的中文描述。

示例:

text
fix(cart): 修复购物车价格计算错误
- 修复了当购物车有多个商品时,价格计算不正确的问题。
- 原因是数量累加逻辑未考虑浮点数运算的精度。

3.页脚格式

页脚用于补充重要信息,例如:

  • 关闭的 Issue:
text
Closes #123
  • 重大变更:
text
BREAKING CHANGE: 重命名了用户认证接口 `/auth` 为 `/user/auth`。
  • 其他备注:

示例:

text
feat(user): 添加用户注册功能

实现了用户通过邮箱注册的功能,并进行了基础验证。
未来将进一步支持手机号注册。

BREAKING CHANGE: 用户模型字段 `username` 已改为 `userName`。
Closes #45

完整示例

text
feat(auth): 添加用户登录功能

支持通过邮箱和密码登录,并返回 JWT token。
未来版本将支持 OAuth 登录。

BREAKING CHANGE: API 接口 `/api/v1/login` 改为 `/api/v2/auth/login`。
Closes #101

使用工具强制规范

  1. commitlint:检查提交信息是否符合规范。
  2. husky:在提交前(如 pre-commit 或 commit-msg 阶段)自动检查提交信息。

配置步骤:

  1. 安装依赖:
bash
yarn add -D @commitlint/config-conventional @commitlint/cli husky
  1. 创建 commitlint.config.js 文件:
js
export default {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'type-enum': [
      2,
      'always',
      ['build', 'chore', 'ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'style', 'test', 'types'],
    ],
  },
};
  1. 启用 husky 钩子:
bash
yarn husky install

创建 commit-msg 钩子文件:

bash title=".husky/commit-msg"
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx --no-install commitlint --edit "$1"

然后使脚本可执行:

bash
chmod +x .husky/commit-msg
  1. 验证提交信息: 当提交的消息不符合规范时,Git 会报错并中断提交流程。

使用 Angular 提交规范可以提高项目协作的效率,并为版本管理和自动化工具(如 Semantic Release)提供基础支持。

也可以使用simple-git-hooks


File: docs/Develop.md

🖥️ Develop

IDE Setup

VSCode like

Project Setup

Install

bash
pnpm install

Development

Setup Rust

Download rust-lang and install

Setup Node.js

The required Node.js version is defined in .node-version. Use a version manager like nvm or fnm to install it automatically:

bash
nvm install

Setup pnpm

The pnpm version is locked in the packageManager field of package.json. Just enable corepack and it will use the correct version automatically:

bash
corepack enable

Install Dependencies

bash
pnpm install

ENV

bash
cp .env.example .env

Start

bash
pnpm dev

Debug

bash
pnpm debug

Then input chrome://inspect in browser

Test

bash
pnpm test

Build

bash
# For windows
$ pnpm build:win

# For macOS
$ pnpm build:mac

# For Linux
$ pnpm build:linux

File: docs/HarmonyOS_Electron.md

HarmonyOS Electron 快速上手指南

本指南将帮助您在 30 分钟内快速上手 HarmonyOS Electron 开发。

📋 准备清单

开发环境

  • DevEco Studio 4.0+
  • HarmonyOS SDK API Level 10+
  • Node.js 16.x+
  • 鸿蒙设备或模拟器

必需文件

  • Electron 应用源码或编译产物
  • 开发者证书(可选,用于签名)

🚀 5 分钟快速开始

步骤 1: 克隆项目

bash
git clone https://github.com/ohosvscode/ohos_electron_hap.git
cd ohos_electron_hap

步骤 2: 添加 Electron 应用

将您的 Electron 应用代码放入:

text
web_engine/src/main/resources/resfile/resources/app/

步骤 3: 构建运行

  1. 用 DevEco Studio 打开项目
  2. 点击 Build → Build Hap(s)
  3. 点击运行按钮安装到设备

🎉 恭喜!您的第一个鸿蒙 Electron 应用已经运行起来了!

📖 详细配置教程

自定义应用信息

修改应用名称

编辑 electron/src/main/resources/zh_CN/element/string.json:

json
{
  "string": [
    {
      "name": "EntryAbility_label",
      "value": "我的鸿蒙应用"
    }
  ]
}

替换应用图标

  1. 准备图标文件(建议 512x512 PNG)
  2. 替换 AppScope/resources/base/media/app_icon.png
  3. 重新构建应用

设置启动窗口

编辑 electron/src/main/module.json5,在 abilities 中添加:

json
"metadata": [
  {
    "name": "ohos.ability.window.width",
    "value": "1200"
  },
  {
    "name": "ohos.ability.window.height",
    "value": "800"
  },
  {
    "name": "ohos.ability.window.left",
    "value": "center"
  },
  {
    "name": "ohos.ability.window.top",
    "value": "center"
  }
]

权限配置

基础权限(自动获得)

这些权限会自动获得,无需特殊申请:

  • 网络访问
  • 获取网络信息
  • 后台运行
  • 读取剪贴板

需要申请的权限

编辑 web_engine/src/main/module.json5,在 requestPermissions 中添加:

json
{
  "name": "ohos.permission.CAMERA",
  "reason": "$string:camera_reason",
  "usedScene": {
    "abilities": ["EntryAbility"],
    "when": "inuse"
  }
}

常用权限列表:

  • ohos.permission.CAMERA - 相机
  • ohos.permission.MICROPHONE - 麦克风
  • ohos.permission.LOCATION - 位置
  • ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY - 下载目录

应用签名

申请开发者证书

  1. 访问 华为开发者联盟
  2. 注册开发者账号
  3. 申请 HarmonyOS 应用签名证书

配置签名

  1. 在 DevEco Studio 中选择 File → Project Structure
  2. 选择 Signing Configs
  3. 配置证书文件和密码
  4. 重新构建生成已签名 HAP

💡 实用示例

示例 1: 创建悬浮窗

javascript
const { BrowserWindow } = require('electron');

function createFloatWindow() {
  const floatWindow = new BrowserWindow({
    windowInfo: {
      type: 'floatWindow',
    },
    width: 400,
    height: 300,
    transparent: true,
    opacity: 0.9,
    frame: false,
    alwaysOnTop: true,
  });

  floatWindow.loadURL('https://www.example.com');
  return floatWindow;
}

示例 2: 请求系统权限

javascript
const { systemPreferences } = require('electron');

async function requestPermissions() {
  // 请求相机权限
  const cameraGranted = await systemPreferences.requestSystemPermission('camera');
  console.log('相机权限:', cameraGranted ? '已授权' : '被拒绝');

  // 请求麦克风权限
  const micGranted = await systemPreferences.requestSystemPermission('microphone');
  console.log('麦克风权限:', micGranted ? '已授权' : '被拒绝');

  // 请求目录访问权限
  const dirGranted = await systemPreferences.requestDirectoryPermission(null);
  console.log('目录权限:', dirGranted ? '已授权' : '被拒绝');
}

// 在应用启动时调用
app.whenReady().then(requestPermissions);

示例 3: 检查权限状态

javascript
const { systemPreferences } = require('electron');

function checkPermissionStatus() {
  const cameraStatus = systemPreferences.getMediaAccessStatus('camera');
  const micStatus = systemPreferences.getMediaAccessStatus('microphone');

  console.log('权限状态:', {
    camera: cameraStatus, // 'granted', 'denied', 'not-determined'
    microphone: micStatus,
  });
}

🛠️ 调试技巧

渲染进程调试

javascript
// 在主进程中
const { BrowserWindow } = require('electron');

const win = new BrowserWindow({
  webPreferences: {
    nodeIntegration: true,
    contextIsolation: false,
  },
});

// 打开开发者工具
win.webContents.openDevTools();

主进程调试

1. 启用调试模式

编辑 web_engine/src/main/ets/components/WebWindow.ets:

typescript
// 添加调试参数
let inspect = '--inspect=9229';
let vec_args = [
  '--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
  resDir,
  inspect, // 添加这行
];

2. 配置端口转发

bash
hdc fport tcp:9229 tcp:9229

3. Chrome 调试

  1. 在 Chrome 中访问:chrome://inspect
  2. 点击 "Configure..." 添加 localhost:9229
  3. 启动应用后点击 "inspect" 开始调试

🔧 常见问题解决

问题 1: 构建失败 "找不到 SO 库"

解决方案:

  1. 检查 electron/libs/arm64-v8a/ 目录是否存在
  2. 确认 5 个 SO 文件都已正确放置
  3. 检查文件权限

问题 2: 应用启动崩溃

解决方案:

  1. 检查 Electron 应用代码是否放在正确位置
  2. 确认应用代码已正确编译(如 TypeScript → JavaScript)
  3. 查看 DevEco Studio 的日志输出

问题 3: 权限被拒绝

解决方案:

  1. 检查 module.json5 中的权限声明
  2. 确认已正确调用权限请求 API
  3. 对于 ACL 权限,确认已申请相应证书

问题 4: 三方库不兼容

解决方案:

javascript
// 检查平台
if (process.platform === 'ohos') {
  // 鸿蒙平台特殊处理
  console.log('运行在 HarmonyOS 上');
}

// 替换不兼容的库
const fs = process.platform === 'ohos' ? require('./ohos-fs-polyfill') : require('fs');

📚 进阶学习

了解鸿蒙文件系统

javascript
// 应用数据目录
const userDataPath = '/data/storage/el2/base/files';
const tempPath = '/data/storage/el2/base/temp';
const cachePath = '/data/storage/el2/base/cache';

// 使用 Electron API
const { app } = require('electron');
console.log('用户数据目录:', app.getPath('userData'));
console.log('临时目录:', app.getPath('temp'));

性能优化建议

  1. 预加载重要资源: 将常用文件放在应用包内
  2. 合理使用权限: 只申请必需的权限
  3. 优化启动时间: 减少首屏加载资源
  4. 内存管理: 及时释放不用的窗口和资源

发布准备

  1. 测试各种权限场景
  2. 验证多窗口功能
  3. 检查应用图标和名称
  4. 准备应用商店描述

🎯 下一步

  • 💬 加入开发者社区交流

需要帮助?

  • 📖 查看完整文档
  • 🐛 提交 Issue
  • 💬 联系维护团队

祝您开发愉快!🎉


File: docs/Loong_Electron.md

Loong Electron 快速上手指南

本指南将帮助您在 5 分钟内快速上手 Loong Electron 开发。

uos loong文档

loong官方文档

咱龙了吗?

步骤 1: 安装npm管理工具。

bash
#!/bin/bash
pkgsource=http://ftp.loongnix.cn/nodejs/LoongArch/dist/v20.8.0/node-v20.8.0-linux-loong64.tar.gz
[ -f $(basename $pkgsource) ] || wget $pkgsource
sudo mkdir -p /opt/nodejs
sudo tar --strip-components=1 -C /opt/nodejs -xvf $(basename $pkgsource)
sudo tee /etc/profile.d/nodejs.sh << "EOF"
export PATH=/opt/nodejs/bin:$PATH
export C_INCLUDE_PATH=/opt/nodejs/include:$C_INCLUDE_PATH
EOF
bash
sudo bash install_npm.sh
source /etc/profile.d/nodejs.sh

步骤 2: 安装Electron

由于loongarch环境的electron官方没有编译对应的版本。

因此需要ELECTRON_MIRROR指定龙芯镜像源。同时设置electron_use_remote_checksums=1不检查校验文件。

bash
#!/bin/bash
export electron_use_remote_checksums=1
if [ "$(arch)" == "loongarch" ];then
export ELECTRON_MIRROR="http://ftp.loongnix.cn/electron/LoongArch/"
else
export ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"
fi
npm install [email protected] -g --unsafe-perm=true --allow-root
npm info -g electron
bash
sudo bash install_electron.sh

💡 程序示例

步骤 1: 下载源码及安装依赖

bash
git clone https://github.com/electron/electron-quick-start
cd electron-quick-start
npm install

步骤 2: 编译打包

bash
npm install --save-dev @electron-forge/cli
npx electron-forge import
npm run make
sudo dpkg -i /home/$HOME/electron-quick-start/out/make/deb/x64/electron-quick-start_1.0.0_amd64.deb

File: docs/Mcp.md

Mcp

debug-electron-mcp

Document

json
{
  "debug-electron-mcp": {
    "args": ["-y", "@debugelectron/debug-electron-mcp@latest"],
    "command": "npx"
  }
}

swagger-mcp

Document

json
{
  "swagger-mcp": {
    "args": ["-y", "swagger-mcp@latest"],
    "command": "npx",
    "env": {
      "API_BASE_URL": "http://127.0.0.1:9978",
      "API_DOCS_URL": "http://127.0.0.1:9978/docs/json"
    }
  }
}

tdesign-mcp

Document

json
{
  "tdesign-mcp-server": {
    "args": ["-y", "tdesign-mcp-server"],
    "command": "npx"
  }
}

File: src/renderer/src/components/multi-player/README.md

忽略dplayer/nplayer/oplayer说明 (已移除)

  • 差异说明

    • 解码器
      • dash
      • flv
        • oplayer: mpegts
        • artplayer/xgplayer/nplayer/dplayer: flv
      • mpegts: oplayer/xgplayer不支持ts分片类型
      • torrent: xgplayer不支持
      • xgplayer: 解码器默认参数与其他不对齐(参数不一致)
    • 请求头(不支持情况) -> 链接绑请求头 -> 底层拦截(electron)
      • oplayer: dash/flv/shaka均不支持
      • xgplayer: 仅m3u8/flv支持
      • torrent: 均不支持
      • shaka: 解码器只有第一次请求mpd存在请求头 m4s 不带请求头
    • 记忆
      • oplayer: 赋值音量与ui不对应(功能不影响) -> 静音直接显示0 但 赋值会显示赋值
      • oplayer: 倍速/音量/静音记忆失效(偶发)
    • 右键
      • 支持: artplayer/dplayer/nplayer(不支持画质数据)
      • 不支持: xgpayer/oplayer
    • 音量
      • artplayer/dplayer/oplayer/xgplayer: 静音显示0
      • nplayer: 静音显示原音量
      • artplayer: 静音点击音量条会提示音量变动但是ui没渲染实际也是静音, 拖动直接恢复
    • 弹幕
      • dplayer: 弹幕使用 url+blob / apiBackend
      • dplayer: 弹幕发布无法控制底部距离
      • oplayer: 渲染有问题获取不到图层真实尺寸
    • 国际化
      • artplayer/dplayer/nplayer/xgplayer: 支持 简体/繁体/英语
      • oplayer: 不支持繁体
      • artplayer: 弹幕部分只支持简体
    • 画质
      • nplayer: 不支持多画质
    • 切换
      • 解码器
        • dplayer/nplayer/oplayer/xgplayer: 跨解码器切换链接
        • artplayer: 同解码器切换链接
      • 请求头
        • artplayer/dplayer/nplayer/xgplayer: 可切请求头
        • oplayer: 不可切请求头
      • xgplayer 切换 mpd 失败
      • dplayer 切换 mpd 会提示加载失败, 实际加载了
    • 其他
      • nplayer: 一旦 startTime 超过总时长会报错
      • nplayer: 摧毁后重建会丢失插件 pip 和 playNext, 刷新生效
  • 参数

    • container: 容器id不带#
    • type: 解码器类型 hls dash flv mpegts torrent mp4
    • url: 视频地址
    • quality: 视频质量 { name, url }
    • headers: 请求头
    • autoplay: 自动播放
    • isLive: 直播
    • startTime: 开始时间,单位秒
    • next: 下集按钮
  • 方法

    • barrage: 弹幕
    • create: 创建播放器
    • destroy: 摧毁播放器
    • onTimeUpdate: 实时返回时间
    • play: 播放
    • pause: 暂停
    • togglePlay: 播放/暂停
    • toggleMuted: 切换静音
    • time: 视频时间<当前播放时间, 总进度时间>
    • seek: 跳转
    • playbackRate: 当前倍速
    • setPlaybackRate: 设置倍速
    • muted: 当前静音
    • setMuted: 设置静音
    • volume: 当前音量
    • setVolume: 设置音量
  • 插槽

    • header: 头部插槽
  • mediaUtils

    • checkMediaType: 检测媒体类型
    • removeUnSafeHeaders: 移除不安全请求头
    • convertStandardToUri: 请求头转url拼接
    • convertWebToElectron: web不安全请求头转electron请求头
    • getExtensionFromMime: 获取文件扩展名-根据Mime
    • getMimeFromExtension: 获取Mime-根据扩展名
    • getFileExtension: 获取文件扩展名-根据路径
    • getStreamContentTypeToExtension: 获取媒体类型-根据网络流ContentType
    • getDecoderFromExtension: 获取媒体对应解码器
    • getStreamContentType: 获取ContentType
    • isHEVCVideoSupported: 检查是否支持hevc
    • isSafeHeader: 检查请求头 key 是否安全