<p align="center">
  <img src="src/qEmbyApp/resources/svg/qemby_logo.svg" width="120" alt="qEmby Logo"/>
</p>

<h1 align="center">qEmby</h1>

<p align="center">
  <b>面向 Arch Linux 的 Emby / Jellyfin 桌面客户端</b>
</p>

<p align="center">
  <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License: MIT"/></a>
  <img src="https://img.shields.io/badge/Platform-Arch%20Linux-1793D1.svg" alt="Platform: Arch Linux"/>
  <img src="https://img.shields.io/badge/Qt-6.x-41CD52.svg" alt="Qt 6"/>
  <img src="https://img.shields.io/badge/C%2B%2B-20-orange.svg" alt="C++20"/>
</p>

qEmby 是一个使用 Qt 6 / C++20 编写的 Emby、Jellyfin 桌面客户端，内置基于 libmpv 的播放器，并针对 Arch Linux 桌面环境维护。

当前项目只维护 Arch Linux 版本。Windows 专属逻辑已经移除，macOS 和 Windows 不作为发布目标。

## 截图

<p align="center">
  <img src="screenshots/2.png" width="45%" alt="首页"/>
  <img src="screenshots/5.png" width="45%" alt="影片详情"/>
</p>
<p align="center">
  <img src="screenshots/3.png" width="45%" alt="设置"/>
  <img src="screenshots/4.png" width="45%" alt="管理仪表盘"/>
</p>

## 功能

- 浏览 Emby / Jellyfin 媒体库，支持电影和剧集视图。
- 内置 libmpv 播放器，支持 VAAPI、VDPAU、CUDA 和软件解码选项。
- 支持外部播放器：MPV、VLC、MPC-Qt。
- 支持播放进度同步、连续播放、上一集 / 下一集和播放完成画廊。
- 支持弹幕搜索、手动匹配、缓存、ASS 管线和原生弹幕渲染。
- 支持媒体详情、元数据编辑、媒体识别、图片更新和播放列表管理。
- 支持下载管理器、全局搜索、搜索历史、深色 / 浅色主题。
- 支持服务器管理仪表盘和 WebDAV 配置同步。
- 支持中文、英文、法语界面。

## 平台支持

| 平台 | 状态 |
| --- | --- |
| Arch Linux x86_64 | 维护中 |
| 其他 Linux 发行版 | 可自行编译，未作为发布目标 |
| Windows / macOS | 不维护 |

## 安装

推荐使用 pacman 仓库安装。先一键添加 qEmby 仓库：

```bash
grep -q '^\[qemby\]' /etc/pacman.conf || printf '\n[qemby]\nSigLevel = Optional TrustAll\nServer = https://gitea.mygoband.com/carrydela/qemby-repo/raw/branch/main/$arch\n' | sudo tee -a /etc/pacman.conf >/dev/null
```

刷新数据库并安装：

```bash
sudo pacman -Syy
sudo pacman -S qemby
```

确认仓库配置：

```bash
grep -A2 '^\[qemby\]' /etc/pacman.conf
```

也可以从 Gitea Releases 下载普通发布包后手动安装：

```bash
sudo pacman -U qemby-0.0.6-1-x86_64.pkg.tar.zst
```

启动：

```bash
qemby
```

卸载：

```bash
sudo pacman -R qemby
```

如果原生 Wayland 下遇到窗口或 OpenGL 兼容性问题，可以临时使用 XCB 后端：

```bash
QEMBY_FORCE_XCB=1 qemby
```

发布给普通用户时，应先按下文重新构建安装包，然后上传生成的普通包：

```text
packaging/arch/qemby-0.0.6-1-x86_64.pkg.tar.zst
```

不要把 `qemby-debug-*.pkg.tar.zst` 当作普通安装包分发；它体积更大，主要用于调试符号。

## 从源码构建

安装构建依赖：

```bash
sudo pacman -S --needed \
  base-devel git cmake ninja pkgconf \
  qt6-base qt6-tools qt6-svg qt6-websockets \
  mpv qcoro spdlog fmt hicolor-icon-theme
```

克隆仓库：

```bash
git clone --recursive <你的 Gitea 仓库地址> qEmby
cd qEmby
```

配置并构建：

```bash
cmake -B build -G Ninja \
  -DCMAKE_BUILD_TYPE=Release \
  -DQEMBY_USE_SYSTEM_DEPS=ON \
  -DQEMBY_FETCHCONTENT_FALLBACK=OFF

cmake --build build
```

直接运行开发构建：

```bash
./build/bin/qEmbyApp
```

## 构建 Arch 安装包

本仓库包含本地发布用的 PKGBUILD：

```bash
git archive --format=tar.gz --prefix=qEmby-0.0.6/ \
  -o packaging/arch/qemby-0.0.6.tar.gz HEAD

cd packaging/arch
makepkg -f
```

安装刚生成的包：

```bash
sudo pacman -U qemby-0.0.6-1-x86_64.pkg.tar.zst
```

如果希望一边构建一边安装：

```bash
makepkg -fi
```

## 发布流程

1. 确认版本号：`CMakeLists.txt` 和 `packaging/arch/PKGBUILD` 中的版本应一致。
2. 从当前提交生成源码包并构建 Arch 安装包：

```bash
git archive --format=tar.gz --prefix=qEmby-0.0.6/ \
  -o packaging/arch/qemby-0.0.6.tar.gz HEAD

cd packaging/arch
makepkg -f
```

3. 本地安装并启动测试：

```bash
sudo pacman -U qemby-0.0.6-1-x86_64.pkg.tar.zst
qemby
```

也可以直接测试开发构建：

```bash
cd ../..
cmake --build build
./build/bin/qEmbyApp
```

4. 在 Gitea 创建版本标签，例如 `v0.0.6`。
5. 上传 `qemby-0.0.6-1-x86_64.pkg.tar.zst` 作为 Release 附件。
6. 在 Release 说明中写清楚安装命令：

```bash
sudo pacman -U qemby-0.0.6-1-x86_64.pkg.tar.zst
```

## 项目结构

```text
qEmby/
├── CMakeLists.txt
├── cmake/
├── libs/
│   └── qwindowkit/
├── packaging/
│   └── arch/
│       ├── PKGBUILD
│       └── README.md
├── screenshots/
└── src/
    ├── qEmbyCore/      # API、模型、服务、配置
    └── qEmbyApp/       # Qt Widgets 桌面应用
```

## 技术栈

| 组件 | 说明 |
| --- | --- |
| UI 框架 | Qt 6 Widgets |
| 语言 | C++20 |
| 播放器 | libmpv |
| 异步 | QCoro |
| 日志 | spdlog |
| 窗口框架 | QWindowKit |
| 构建系统 | CMake + Ninja |
| 打包 | Arch PKGBUILD |

## 反馈

请通过 Gitea Issues 反馈问题。提交问题时建议附上：

- qEmby 版本。
- 桌面环境和会话类型，例如 KDE Wayland、GNOME Wayland、X11。
- 复现步骤。
- 终端启动日志。

## 许可证

本项目基于 [MIT License](LICENSE) 开源。

## 致谢

- [Qt](https://www.qt.io/)
- [mpv](https://mpv.io/)
- [QWindowKit](https://github.com/stdware/qwindowkit)
- [QCoro](https://github.com/danvratil/qcoro)
- [spdlog](https://github.com/gabime/spdlog)
