Skip to content

feat: podcast player ui - #332

Merged
roitium merged 11 commits into
devfrom
feat/podcast-player-ui
Sep 13, 2026
Merged

roitium merged 11 commits into
devfrom
feat/podcast-player-ui

Conversation

@roitium

@roitium roitium commented Sep 13, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • 新功能
    • 新增音乐/播客双播放模式,可设置全局默认模式及歌单专属播放器偏好。
    • 播客播放器支持章节列表、章节定位、章节标记、前后跳转及章节标题展示。
    • 新增播客专属控制项,包括播放速度、睡眠定时器、章节面板和播放队列。
    • 播放队列新增“清空”操作,并提供确认及错误提示。
    • 播放速度改为滑块调节,范围为 0.1–3.0 倍。
    • 播放、入队及播放上下文处理更加稳定,备份恢复时保留播放状态。

@vercel

vercel Bot commented Sep 13, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
bbplayer-docs Ready Ready Preview Sep 13, 2026 8:42am UTC

@coderabbitai

coderabbitai Bot commented Sep 13, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 9925e4ee-60f3-47bf-8459-5c2c8b5e26f0

📥 Commits

Reviewing files that changed from the base of the PR and between 79accb4 and 59ca3ec.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (80)
  • apps/mobile/babel.config.js
  • apps/mobile/drizzle/0022_player_preference.sql
  • apps/mobile/drizzle/meta/0022_snapshot.json
  • apps/mobile/drizzle/meta/_journal.json
  • apps/mobile/drizzle/migrations.js
  • apps/mobile/package.json
  • apps/mobile/src/app/(tabs)/_layout.tsx
  • apps/mobile/src/app/_layout.tsx
  • apps/mobile/src/app/downloaded.tsx
  • apps/mobile/src/app/player.tsx
  • apps/mobile/src/app/playlist/local/[id].tsx
  • apps/mobile/src/app/settings/appearance.tsx
  • apps/mobile/src/app/settings/playback.tsx
  • apps/mobile/src/components/modals/PlayerQueueModal.tsx
  • apps/mobile/src/components/modals/player/PlaybackSpeedModal.tsx
  • apps/mobile/src/features/player/components/PlayerFunctionalMenu.tsx
  • apps/mobile/src/features/player/components/PlayerMainTab.tsx
  • apps/mobile/src/features/player/components/controls/MusicControls.tsx
  • apps/mobile/src/features/player/components/controls/PlayerControlContent.tsx
  • apps/mobile/src/features/player/components/controls/PlayerControls.tsx
  • apps/mobile/src/features/player/components/controls/PodcastControls.tsx
  • apps/mobile/src/features/player/components/lyrics/LyricsControlOverlay.tsx
  • apps/mobile/src/features/player/components/lyrics/PlayerLyrics.tsx
  • apps/mobile/src/features/player/components/main/PlayerChaptersSheet.tsx
  • apps/mobile/src/features/player/components/main/PlayerHeader.tsx
  • apps/mobile/src/features/player/components/main/PlayerMainTab.tsx
  • apps/mobile/src/features/player/components/main/PlayerSlider.tsx
  • apps/mobile/src/features/player/components/main/PlayerTrackInfo.tsx
  • apps/mobile/src/features/player/components/menu/MusicFunctionalMenu.tsx
  • apps/mobile/src/features/player/components/menu/PlayerFunctionalMenu.tsx
  • apps/mobile/src/features/player/components/menu/PlayerMenuContent.tsx
  • apps/mobile/src/features/player/components/menu/PodcastFunctionalMenu.tsx
  • apps/mobile/src/features/player/components/visuals/BGStreamerShader.ts
  • apps/mobile/src/features/player/components/visuals/SkinThumbUpBurst.tsx
  • apps/mobile/src/features/player/components/visuals/SpectrumVisualizer.tsx
  • apps/mobile/src/features/player/hooks/usePlayerChapters.ts
  • apps/mobile/src/features/player/utils/chapters.test.ts
  • apps/mobile/src/features/player/utils/chapters.ts
  • apps/mobile/src/features/playlist/local/components/LocalTrackList.tsx
  • apps/mobile/src/features/playlist/local/components/PlaylistPlayerPreferenceDialog.tsx
  • apps/mobile/src/features/playlist/local/hooks/useLocalPlaylistMenu.ts
  • apps/mobile/src/features/playlist/local/hooks/useLocalPlaylistPlayer.ts
  • apps/mobile/src/features/playlist/remote/search-result/hooks/useSearchInteractions.ts
  • apps/mobile/src/hooks/player/usePlaybackOptions.ts
  • apps/mobile/src/hooks/player/useSmoothProgress.ts
  • apps/mobile/src/hooks/stores/playbackContextStore.ts
  • apps/mobile/src/hooks/stores/useAppStore.ts
  • apps/mobile/src/hooks/stores/usePlayerChaptersSheetStore.ts
  • apps/mobile/src/hooks/stores/usePlayerQueueStore.ts
  • apps/mobile/src/hooks/stores/usePlayerStore.ts
  • apps/mobile/src/lib/backup/export.ts
  • apps/mobile/src/lib/backup/import.ts
  • apps/mobile/src/lib/backup/types.ts
  • apps/mobile/src/lib/config/queryClient.ts
  • apps/mobile/src/lib/db/schema.ts
  • apps/mobile/src/lib/player/playbackSession.ts
  • apps/mobile/src/lib/player/seek.ts
  • apps/mobile/src/lib/services/playlistService.ts
  • apps/mobile/src/types/apis/bilibili.ts
  • apps/mobile/src/types/core/appStore.ts
  • apps/mobile/src/types/core/media.ts
  • apps/mobile/src/types/core/playback.ts
  • apps/mobile/src/types/legend-state.d.ts
  • apps/mobile/src/types/storage.ts
  • apps/mobile/src/utils/mmkv.ts
  • apps/mobile/src/utils/player.ts
  • apps/mobile/tsconfig.json
  • packages/bottom-tabs-react-navigation/package.json
  • packages/expo-wavy-slider/android/src/main/java/expo/modules/wavyslider/ExpoWavySliderModule.kt
  • packages/expo-wavy-slider/android/src/main/java/expo/modules/wavyslider/ExpoWavySliderView.kt
  • packages/expo-wavy-slider/package.json
  • packages/expo-wavy-slider/src/ExpoWavySlider.types.ts
  • packages/image-theme-colors/package.json
  • packages/native/package.json
  • packages/orpheus/android/src/main/java/expo/modules/orpheus/ExpoOrpheusModule.kt
  • packages/orpheus/ios/GeneralStorage.swift
  • packages/orpheus/ios/OrpheusPlayerManager.swift
  • packages/orpheus/package.json
  • patches/react-native-pager-view@9.0.3.patch
  • pnpm-workspace.yaml

Walkthrough

新增音乐与播客双模式播放流程。新增播放上下文、队列会话、播客章节、章节跳转和歌单播放器偏好。播放器控制、滑块、菜单、队列弹层及原生组件同步更新。

Changes

播放会话与状态基础

Layer / File(s) Summary
播放会话与持久化状态
apps/mobile/src/types/core/playback.ts, apps/mobile/src/hooks/stores/*, apps/mobile/src/lib/player/*, apps/mobile/src/utils/player.ts
新增播放模式、播放上下文、统一播放会话、队列同步、MMKV 持久化和备份恢复。
播放选项与数据库迁移
apps/mobile/src/hooks/player/*, apps/mobile/src/lib/db/*, apps/mobile/drizzle/*
新增播放速度、随机和循环状态同步。playlists 增加 player_preference 字段。

播客播放器与章节

Layer / File(s) Summary
章节数据与轨道跳转
apps/mobile/src/features/player/utils/*, apps/mobile/src/features/player/hooks/usePlayerChapters.ts, apps/mobile/src/lib/player/seek.ts
新增章节数据解析、边界计算、章节查询和轨道内跳转。新增测试覆盖无效输入、排序、去重和边界。
播客播放器界面
apps/mobile/src/app/player.tsx, apps/mobile/src/features/player/components/main/*, apps/mobile/src/features/player/components/lyrics/*
播放器按模式切换页面和控制区。播客模式隐藏歌词页,显示章节面板,并使用章节进度交互。
原生章节标记
packages/expo-wavy-slider/*
WavySlider 支持章节标记的过滤、动画、颜色和 RTL 绘制。

播放器控制与菜单

Layer / File(s) Summary
音乐与播客控制组件
apps/mobile/src/features/player/components/controls/*
拆分音乐控制、播客控制和通用次级控制。
播放器功能菜单
apps/mobile/src/features/player/components/menu/*
新增共享菜单组件,并提供音乐与播客菜单内容。
队列与播放速度操作
apps/mobile/src/components/modals/*
队列弹层支持确认清空。播放速度弹层改用 0.1 至 3.0 的滑块,并在提交失败时回滚。

歌单播放器偏好

Layer / File(s) Summary
歌单偏好设置与播放入口
apps/mobile/src/app/playlist/local/[id].tsx, apps/mobile/src/features/playlist/local/*, apps/mobile/src/lib/services/playlistService.ts, apps/mobile/src/app/settings/playback.tsx
新增歌单播放器偏好对话框和默认播放器设置。播放入口使用歌单偏好或全局默认模式。

平台支持与基础设施

Layer / File(s) Summary
构建与依赖支持
apps/mobile/package.json, apps/mobile/tsconfig.json, pnpm-workspace.yaml, patches/*, packages/*/package.json
更新依赖版本、构建许可、路径映射和 pager 过渡补丁。
视觉与查询支持
apps/mobile/src/features/player/components/visuals/*, apps/mobile/src/lib/config/queryClient.ts
新增背景流光着色器和点赞动画。修正频谱路径构建。静默查询错误不再触发全局错误处理。

Estimated code review effort: 5 (Critical) | ~90 minutes

Change: Feature

✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/podcast-player-ui

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

小兔抱来一枚新播放键
音乐播客排成两条线
章节标记在滑块上闪
歌单偏好写入新页面
队列安静地整理完
月光下播放器继续向前

Comment @coderabbitai help to get the list of available commands.

@socket-security

socket-security Bot commented Sep 13, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addednpm/​@​swmansion/​argent@​0.25.0991008898100
Addednpm/​@​legendapp/​state@​3.0.0-beta.489610010092100
Updatednpm/​react-native-gesture-handler@​3.2.1 ⏵ 3.3.0100 +110095 -198 +1100
Updatednpm/​react-native-pager-view@​9.0.2 ⏵ 9.0.410010010098100

View full report

@safedep

safedep Bot commented Sep 13, 2026

Copy link
Copy Markdown

SafeDep Report Summary

Green Malicious Packages Badge Green Vulnerable Packages Badge Green Risky License Badge

Package Details
Package Malware Vulnerability Risky License Report
icon @legendapp/state @ 3.0.0-beta.48
apps/mobile/package.json pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon @swmansion/argent @ 0.25.0
apps/mobile/package.json pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon expo @ 57.0.20
packages/orpheus/package.json packages/native/package.json packages/expo-wavy-slider/package.json packages/image-theme-colors/package.json
ok icon
ok icon
ok icon
🔗
icon expo-router @ 57.0.19
packages/bottom-tabs-react-navigation/package.json
ok icon
ok icon
ok icon
🔗
icon react-native-gesture-handler @ 3.3.0
apps/mobile/package.json pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗
icon react-native-pager-view @ 9.0.4
apps/mobile/package.json pnpm-lock.yaml
ok icon
ok icon
ok icon
🔗

View complete scan results →

This report is generated by SafeDep GitHub App

@roitium
roitium merged commit 8ad2109 into dev Sep 13, 2026
8 of 9 checks passed
@roitium
roitium deleted the feat/podcast-player-ui branch September 13, 2026 15:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant