chengww
537e280fdd
refactor(persist): 抽公共防抖 storage 与 minifySong 工具,playlist/playerCore 接入
...
把 9caaec3 在 playlist 内联的 minifySong + debouncedLocalStorage 抽到
utils 共用,playerCore 同步接入,为后续推广到 playHistory 做准备。
- 新增 utils/debouncedStorage.ts:高频状态变更(volume 拖动、isPlay
切换)2s 防抖落盘,beforeunload 钩子兜底刷盘;多 store 共用同一
pendingWrites map,flush 时一次写完所有 pending key
- 新增 utils/persistedSong.ts:minifySong 剥离 base64 picUrl、仅保留
local:// 永不过期的 playMusicUrl;ar.length 守卫避免空数组吞掉
s.artists 兜底;al.id 守卫避免序列化出无 id 空壳
- playlist.ts 删除内联实现改用 import,行为不变
- playerCore.ts 切到防抖落盘并 minify playMusic;id 守卫避免空
playMusic 走 minify 后失去 Object.keys().length===0 判空能力,
下次启动会误恢复一首无 id 的空歌
Trade-off:极端非正常退出(kill -9 / 断电)下最近 2s 的 volume /
isPlay / playMusic 变更会丢——这些状态丢一次无大碍,可接受
2026-05-17 23:07:58 +08:00
chengww
15258f28fd
fix(local-music): 封面落盘 + URL 编码统一,修复持久化配额与编码边界
...
- 新增 src/shared/localUrl.ts 共用 local:// 编码:按路径段 encodeURIComponent,
避免整体编码把 / 转成 %2F 引发 Chromium 解析边界差异,同时正确处理
空格/中文/# 等特殊字符(封面落到含空格目录时 Image loader 会加载失败)
- 封面从内嵌 base64 Data URL 改为 userData/AudioCovers/<sha256>.<ext> 落盘,
MAX_COVER_BYTES 1MB→8MB;老条目(无 coverPath 字段)扫描时一次性自愈
- playlist minify 剥离 base64 picUrl 并仅持久化 local:// 永不过期的 playMusicUrl,
防止单张 base64 封面撑爆 localStorage 5MB 配额导致整个 playList 写入失败;
localStorage 写入加 try/catch 兜底,避免配额超限时直接抛异常
2026-05-17 23:07:17 +08:00
alger
ee98eb0266
fix(player): 私人 FM 模式下点击下一首按钮可正常切歌
...
FM 播放列表只保留 1 首,原 _nextPlay 走到"顺序模式 + 最后一首"
分支只弹"列表已播完"提示,仅 audioService end 事件中拉取下一首
FM 的逻辑生效,导致用户手动点击下一首无效(issue #666)。
抽出 _nextFmPlay,_nextPlay 入口检测 isFmPlaying 直接路由到 FM
分支;MusicHook end 事件去掉重复的 FM 处理,统一走 nextPlayOnEnd。
2026-05-10 13:00:55 +08:00
chengww
2b1024ca24
fix(player): 静音保留原音量,解除后可恢复
...
- playerCore 新增持久化 isMuted 状态及 setMuted/toggleMute,静音时音频输出置 0 但 volume 保持不变
- 音量 > 0 时自动解除静音
- useVolumeControl 移除原 0↔30 切换;滑块/百分比展示真实音量,图标反映静音态
- 三个播放栏的音量滑块在静音时 disabled;PlayBar 百分比文字同步置灰(仅文字颜色)
2026-04-26 21:47:11 +08:00
Vanilla-puree
0ab784024c
feat(download): 新增未保存下载设置时的确认对话框 ( #507 )
...
- feat(download): 关闭下载设置抽屉时检测未保存更改,提供取消/放弃/保存选项
- fix: 自动播放首次暂停无法暂停,移除不必要的 isFirstPlay 检查
- fix: 歌手详情路由添加 props key,修复跳转歌手详情不生效问题
- i18n: 添加 download.save.* 翻译(5 种语言)
Co-Authored-By: 心妄 <1661272893@qq.com >
2026-04-10 23:26:33 +08:00
alger
0cfec3dd82
refactor(player): 重构播放控制系统,移除 Howler.js 改用原生 HTMLAudioElement
...
- 新建 playbackController.ts,使用 generation-based 取消替代 playbackRequestManager 状态机
- audioService 重写:单一持久 HTMLAudioElement + Web Audio API,createMediaElementSource 只调一次
- playerCore 瘦身为纯状态管理,移除 handlePlayMusic/playAudio/checkPlaybackState
- playlist next/prev 简化,区分用户手动切歌和歌曲自然播完
- MusicHook 适配 HTMLAudioElement API(.currentTime/.duration/.paused)
- preloadService 从 Howl 实例缓存改为 URL 可用性验证
- 所有 view/component 调用者迁移到 playbackController.playTrack()
修复:快速切歌竞态、seek 到未缓冲位置失败、重启后自动播放循环提示、EQ 重建崩溃
2026-03-29 13:18:05 +08:00
alger
c28368f783
fix(local-music): 扫描自动清理已删除文件,修复双滚动条
...
- scanFolders() 扫描时收集磁盘文件路径,完成后自动移除 IndexedDB 中已删除的条目
- 移除外层 n-scrollbar,改用 flex 布局,n-virtual-list 作为唯一滚动容器
2026-03-27 23:02:09 +08:00
alger
bc46024499
refactor(download): 重构下载系统,支持暂停/恢复/取消,修复歌词加载
...
- 新建 DownloadManager 类(主进程),每个任务独立 AbortController 控制
- 新建 Pinia useDownloadStore 作为渲染进程单一数据源
- 支持暂停/恢复/取消下载,支持断点续传(Range header)
- 批量下载全部完成后发送汇总系统通知,单首不重复通知
- 并发数可配置(1-5),队列持久化(重启后恢复)
- 修复下载列表不全、封面加载失败、通知重复等 bug
- 修复本地/下载歌曲歌词加载:优先从 ID3/FLAC 元数据提取,API 作为 fallback
- 删除 useDownloadStatus.ts,统一状态管理
- DownloadDrawer/DownloadPage 全面重写,移除 @apply 违规
- 新增 5 语言 i18n 键值(暂停/恢复/取消/排队中等)
2026-03-27 23:02:08 +08:00
alger
59f71148af
fix: 修复打包后白屏问题(createDiscreteApi 循环依赖)
...
playlist.ts 被 Vite 拆分为独立 chunk 后与主 chunk 形成循环依赖,
顶层调用 createDiscreteApi 导致 NMessageProvider 组件 TDZ 错误。
改为延迟初始化解决。同时移除调试代码。
2026-03-22 22:46:59 +08:00
alger
2b8378bbae
✨ feat: 重构心动模式与私人FM播放逻辑
...
- 心动模式从播放模式循环中独立,移至 SearchBar 作为独立按钮
- 新增私人FM自动续播:播放结束后自动获取下一首
- 播放列表设置时自动清除FM模式标志
- 顺序播放模式播放到最后一首后正确停止
- 新增获取关注歌手新歌 API
- 补充心动模式相关 i18n 翻译
2026-03-22 16:49:00 +08:00
alger
a3f91c45f0
✨ feat: 重构首页Hero、导航菜单与页面布局统一
...
HomeHero:
- 重建每日推荐(左)+私人FM(右)双栏布局
- FM播放/暂停切换、不喜欢/下一首、背景流动动画、均衡器特效
- 修复FM数据获取(res.data.data双层结构)
- 歌单预加载改为hover懒加载避免502
导航优化:
- SearchBar顶部菜单: 首页/歌单/专辑/排行榜/MV/本地音乐
- 侧边栏隐藏MV和本地音乐(hideInSidebar)
- 修复搜索类型切换时失焦收起(@mousedown.prevent)
页面统一:
- 新建StickyTabPage通用布局组件(标题+吸顶tabs+内容slot)
- 歌单/专辑/MV/播客页面统一使用StickyTabPage重构
- CategorySelector第一项添加ml-0.5防scale裁切
播客优化:
- RadioCard简化去除订阅按钮、容忍radio为undefined
- 去除最近播放section、loadDashboard包含loadSubscribedRadios
i18n: 新碟上架→专辑(5语言)、新增fmTrash/fmNext(5语言)
2026-03-16 23:22:35 +08:00
alger
51910011c8
fix: 隐藏 Web 端本地音乐菜单项
2026-03-15 16:41:47 +08:00
alger
239229a60c
fix: 修复自动播放循环与暂停失效问题 (H-UI-05/H-UI-07)
...
- fix(player): 修复 checkPlaybackState 无限重试循环,添加最大重试次数限制 (3次)
- fix(player): 修复 handlePlayMusic 参数 isPlay 遮蔽同名 ref 导致 play/isPlay/userPlayIntent 状态不同步
- fix(player): 播放成功后清除 isFirstPlay 标记,避免暂停时被 setPlay 误判为新歌从头播放
- fix(ui): 移除 AppMenu z-index 重复声明 (H-UI-05)
- perf(ui): MiniPlayBar 进度条 hover 改用 transform: scaleY() 替代 height 变化 (H-UI-07)
2026-03-15 15:49:59 +08:00
alger
57a441312f
feat(ui): 重构 SearchBar、集成 useScrollTitle 标题滚动显示、修复专辑搜索跳转
...
- 重新设计 SearchBar:左侧 Tab(播放列表/MV/排行榜)+ 滑动指示器 + 搜索框自动展开收缩
- 新增 navTitle store 和 useScrollTitle hook,支持页面滚动后在 SearchBar 显示标题
- 集成 useScrollTitle 到 MusicListPage、歌手详情、关注/粉丝列表、搜索结果页
- 修复搜索结果页专辑点击跳转失败(缺失 type 字段)
- 新增 5 种语言 searchBar tab i18n 键值
2026-03-15 14:11:59 +08:00
alger
067868f786
perf: 优化播放列表持久化,精简序列化字段并添加防抖写入 (H-010)
...
自定义序列化器仅保留必要字段,排除 lyric/song/playMusicUrl 等大体积数据
添加防抖 localStorage 包装降低写入频率,beforeunload 时刷新未写入数据
2026-03-12 18:31:29 +08:00
alger
ec8a07576f
fix: 修复播放并发控制死代码、shallowRef响应式、歌词IPC高频调用 (H-005/H-006/H-009)
...
- H-005: 删除 playerCore.ts 中无效的 playInProgress 局部变量
- H-006: fetchSongs 修改 shallowRef 元素后添加 triggerRef 触发更新
- H-009: sendLyricToWin 从每秒20次全量发送改为每秒5次轻量更新
2026-03-12 18:07:20 +08:00
alger
bf341fa7c8
feat(update): 重构自动更新系统,使用 electron-updater 替代手动下载
...
- CI 构建 macOS 拆分为 x64/arm64 分别构建,合并 latest-mac.yml
- 主进程使用 electron-updater 管理检查、下载、安装全流程
- 渲染进程 UpdateModal 改为响应式同步主进程更新状态
- IPC 通道统一为 app-update:* 系列
- 窗口拦截外部链接在系统浏览器打开
- 新增 5 语言更新相关国际化文案
2026-03-11 22:30:35 +08:00
alger
c714860c96
fix(本地音乐): 扫描阶段直接使用mtime做增量判断
2026-03-04 21:12:48 +08:00
alger
36917a979d
feat: 优化音乐播放逻辑
2026-03-04 19:53:50 +08:00
alger
e53a035ebc
refactor: 重构历史记录
2026-02-06 20:35:04 +08:00
alger
b955e95edc
feat: 优化播放逻辑
2026-02-06 20:34:07 +08:00
alger
0e47c127fe
feat: 添加本地音乐扫描播放功能
2026-02-06 17:49:14 +08:00
alger
292751643f
feat: 优化 UI 逻辑适配移动端
2026-02-06 12:50:58 +08:00
alger
3a3820cf52
feat: 扩展数据层与播放能力
2026-02-04 20:18:27 +08:00
algerkong
999cd6526b
feat: 优化播放检测逻辑
2025-12-20 14:16:32 +08:00
alger
0f42bfc6cb
fix:修复随机播放问题
2025-12-20 02:29:43 +08:00
alger
af9117ee5f
feat: 优化预加载逻辑和继续播放功能
2025-12-17 15:05:40 +08:00
alger
6bc168c5bd
feat: 优化播放错误处理
2025-12-17 13:19:10 +08:00
alger
89c6b11110
feat: 添加 lx 音源导入
2025-12-13 15:00:38 +08:00
alger
b9287e1c36
fix: 修复音源解析致命性错误
2025-12-13 14:46:15 +08:00
alger
1a0e449e13
feat: 一系列播放优化
2025-12-13 11:31:49 +08:00
algerkong
07f6152c56
fix: 修复预加载问题
2025-12-13 11:31:49 +08:00
alger
34ba2250bf
feat: 重构播放 store
2025-11-08 14:26:04 +08:00
alger
1005718c07
feat: 封面图预先加载
2025-11-08 14:22:44 +08:00
alger
3527da17da
feat: 添加心动模式播放
2025-10-22 22:48:52 +08:00
alger
9bf513d35d
feat: 添加历史日推功能
2025-10-22 21:52:22 +08:00
alger
6d7ba6dbae
feat: 历史记录页面 添加本地和云端两种记录支持,支持歌曲、歌单、专辑
2025-10-22 21:51:16 +08:00
alger
a9adb6be36
feat: 用户页面添加收藏专辑展示
2025-10-22 21:50:20 +08:00
alger
a5d3ff359c
feat: 优化逐字歌词效果,桌面歌词添加逐字歌词效果
2025-10-12 17:11:48 +08:00
alger
29ba231a7d
feat: 平板模式
2025-10-11 20:24:11 +08:00
alger
cb2baeadf5
feat: 逐字歌词
2025-10-11 20:23:54 +08:00
alger
8f0728d9db
feat: 登录状态校验功能修改
2025-09-14 00:34:54 +08:00
alger
d8734f8302
feat: 格式化代码
2025-09-14 00:19:41 +08:00
Alger
a9f76c7952
Merge branch 'main' into feat/dislike-improvement
2025-09-13 23:59:40 +08:00
alger
70677dfb14
fix: 不喜欢的操作只有每日推荐歌曲才请求接口,去除不喜欢的提示
2025-09-13 23:58:33 +08:00
alger
e91667a2e6
fix: 修改国际化问题 和 音源优先级以及音源解析错误处理
2025-09-13 22:52:37 +08:00
shano
fb8b4c9341
feat: 日推不感兴趣调用官方接口
2025-09-10 13:13:17 +08:00
shano
7ae6e041b5
fix
2025-09-10 09:55:47 +08:00
shano
df236e491c
feat: add custom api
2025-09-09 22:05:48 +08:00
alger
ad51f57bd7
🦄 refactor: 重构播放列表逻辑 优化随机播放功能
...
feated: #368 #353
2025-08-12 19:51:29 +08:00