史悦
83f385edb2
取消了后台的music-dl.sayqz代理
2026-01-14 17:38:43 +08:00
史悦
932826aeca
sync-server/server.js:在 type=url 的 JSON 解析里增加多种 URL 结构识别,拿到链接后继续服务端跟随重定向并直通流媒
...
体,避免把 JSON 返回给 <audio>。
2026-01-14 17:33:07 +08:00
史悦
9b737012e9
refactor: 改进音乐API代理的重定向和URL请求处理
...
- 新增对 type=url 请求的特殊处理逻辑
- 解析JSON响应中的url字段并自动跟随
- 提取 buildHeaders() 函数统一请求头构建
- 新增 requestStream() 函数处理流式请求和重定向
- 限制最大重定向次数为5次
- 改进 Range 和 If-Range 头部传递
2026-01-14 17:15:19 +08:00
史悦
4bdb5c539d
fix: 改进音乐API代理的图片端点处理,将JSON响应转换为重定向
2026-01-14 16:19:52 +08:00
史悦
6b1cdb92ad
修改了api的地址
2026-01-14 15:27:02 +08:00
史悦
a76ef33c4c
feat: 添加音乐API代理以解决CORS跨域问题
...
- index.html: 将API_BASE改为相对路径 /api/music-api
- sync-server/server.js: 新增 /music-api 代理端点转发请求至 music-dl.sayqz.com
- 新增 proxyRequest 函数处理HTTPS代理请求和重定向
2026-01-14 15:17:58 +08:00
史悦
c9fac4b7fe
1. iOS自动切歌问题(2处):
...
- isNearEnd:阈值 0.15s → 0.5s
- updateTime:移除 iOS 限制
2. 时长显示负值问题(2处):
- formatTime:增加异常值保护
- resolveDurationSeconds:防止返回负数
2026-01-13 17:47:46 +08:00
史悦
79595dc9ed
改动位置
...
- Netease-sync/server.js:仅用 setInterval(syncIntervalSeconds * 1000)
2026-01-13 14:28:01 +08:00
史悦
58ac7ec198
改动点
...
- searchSongInNavidrome 增加:
- 去括号标题(去掉 (Live) / (十年荣耀版) 等)
- 按歌手进行兜底搜索,再用 path/idToken/模糊标题匹配
- 优先 path 命中(含真实文件名或 netease_id)
2026-01-13 13:12:09 +08:00
史悦
ae5e34694e
改动位置
...
- Netease-sync/server.js
- 记录 downloadStatus
- 记录 unmatchedSongs
- 输出 [Sync] Unmatched songs (N): ... (id=..., downloaded=...)
2026-01-13 12:00:04 +08:00
史悦
0ff4769eb0
- Netease-sync/server.js
...
- 新增 buildDownloadHeadersForUrl(url, source)
- 当直链域名包含 qqmusic 时,自动带上
- Referer: https://y.qq.com/
- Origin: https://y.qq.com
- Range: bytes=0-
- 直链下载时使用该头部
2026-01-13 11:34:16 +08:00
史悦
ad972dd2a5
- Netease-sync/server.js
...
- 新增 formatSongLog
- 解析失败日志包含 id/source/apiUrl
- 下载失败日志包含 id/source/directUrl
2026-01-13 11:19:47 +08:00
史悦
c07c4e42e6
- Netease-sync/server.js:在 processSong 中新增换源回退逻辑
...
- 日志会提示:
- Trying fallback source kuwo for ...
- No search hit from ...(若搜索无结果)
2026-01-13 11:11:50 +08:00
史悦
ef44218198
- Netease-sync/server.js:新增 search 回退与结果挑选逻辑(type=search)
...
- 主下载失败后走搜索回退,再用搜索命中的 id 下载
- 保持文件名仍用原歌单 ID(不影响 Navidrome 匹配)
2026-01-13 10:52:05 +08:00
史悦
1f8d392114
fix: 移除多余的闭合大括号
2026-01-13 10:21:00 +08:00
史悦
44ff76d58d
feat(下载): 增强音乐下载功能,支持多音质选择和自定义请求头
...
- 为 downloadFile 函数添加 headers 参数以支持自定义请求头
- 新增 buildDownloadHeaders 函数构建不同来源的请求头
- 新增 getPreferredQualities 函数处理音质偏好
- 新增 resolveTuneHubAudioUrl 函数解析音频URL
- 重构 processSong 为异步函数,支持多音质尝试下载
- 为歌曲对象添加 url 和 types 字段支持直接下载链接和音质选择
2026-01-13 10:06:35 +08:00
史悦
b5b093e64b
feat(同步): 改进网易云音乐到Navidrome的播放列表同步逻辑
...
添加获取Navidrome播放列表歌曲ID的功能
确保同步时检查并补全缺失歌曲,避免重复添加
使用Set去重处理歌曲ID列表
2026-01-13 09:33:44 +08:00
史悦
5561bf2400
fix(Subsonic API): 修复数组参数处理和播放列表更新日志
...
改进Subsonic API请求中数组参数的处理方式,避免空值
添加播放列表更新时的日志输出
2026-01-13 09:21:19 +08:00
史悦
c6fb745b85
feat(同步功能): 改进网易云音乐歌曲在Navidrome中的搜索逻辑
...
重构searchSongInNavidrome函数,支持多种查询组合和重试机制
- 新增对歌曲名、艺术家、专辑的多维度查询
- 添加基于ID令牌的精确匹配
- 实现最多2次的重试机制
- 优化匹配逻辑,提高搜索成功率
2026-01-13 09:09:58 +08:00
史悦
a2a366d34a
fix(音频播放): 修复iOS设备在页面隐藏时音频播放逻辑问题
...
优化音频播放逻辑,当页面隐藏时不再延迟播放。同时修正自动播放下一首时的立即播放条件判断。
2026-01-13 08:45:21 +08:00
史悦
50f7869a05
feat: 实现网易云音乐同步服务核心功能与UI改进
...
添加完整的网易云音乐同步到Navidrome的功能实现,包括:
1. 新增Docker支持与相关配置文件
2. 实现歌单同步逻辑与Navidrome API集成
3. 改进前端UI界面与交互体验
4. 添加状态监控与错误处理机制
5. 实现定时同步功能与进度显示
2026-01-12 20:03:30 +08:00
史悦
89a28e1bc5
feat: 添加网易云音乐同步到Navidrome的功能
...
新增NetEase-sync模块,实现将网易云音乐歌单同步到Navidrome的功能
修复iOS设备自动播放问题,优化播放器体验
2026-01-12 17:59:31 +08:00
史悦
4ea05279bd
修复(服务器):增强文件名清理的健壮性
...
实施更严格的文件名清理措施,包括Unicode标准化处理(NFC)、控制字符移除以及200字符的长度限制,以防止歌曲下载过程中出现文件系统错误。
2026-01-09 10:13:53 +08:00
史悦
33ab93aa33
修复(core): 全局强制歌曲ID为字符串类型
...
引入`normalizeSongId`工具函数以确保应用内数据类型统一:
- 规范化API响应数据(搜索、排行榜、歌单)
- 初始化时清理LocalStorage数据(歌单、收藏、当前歌曲)
- 同步远程数据时进行类型规范化,避免类型不匹配
- 修复`toggleLike`和播放状态中潜在的ID比较错误
2026-01-09 09:55:06 +08:00
史悦
186733dccf
恢复单一SyncToken模式,合并网易云ID到SyncToken,实现"导入即替换"逻辑
...
调整同步策略:网易云模式下,自动执行"拉取网易云 -> 合并本地(非覆盖) -> 推送至私有云KV"
2026-01-07 18:34:50 +08:00
史悦
36ee441c06
现在,您可以放心地设置私有云 Token 进行全量备份,同时挂载一个网易云歌单作为数据源之一,系统会自动处理好所有的数据流转。
2026-01-07 18:26:36 +08:00
史悦
b79f4a8b2c
点击左上角菜单,打开侧边栏。
...
点击“导入网易云歌单”按钮。
粘贴网易云歌单分享链接。
系统将自动提取 ID,导入歌曲,并开启每 15 分钟一次的自动同步。
若要切回私有云同步,只需清空输入框内容或重新输入您的 Server Key 即可。
2026-01-07 18:08:58 +08:00
史悦
264ffb8b38
修复(播放器):标准化传递给点赞处理器的歌曲对象
...
确保传递给toggleLike的是一个具有标准化source属性的新对象引用。这解决了平台/source属性不匹配的潜在问题,并确保状态更新能够正确触发。
2026-01-07 17:53:13 +08:00
史悦
13ef60b7bd
功能改进(同步):新增元数据嵌入并优化匹配逻辑
...
- 在Docker容器中安装ffmpeg以支持媒体处理
- 为下载文件嵌入标题、艺术家、专辑及封面图等元数据
- 重构文件存在性检测机制,兼容多种命名格式
- 下载过程中采用临时文件确保数据完整性
(注:根据中文技术文档惯例进行了以下优化:
1. 使用"功能改进"替代直译"feat",更符合国内开发文档表述
2. "metadata embedding"译为"元数据嵌入"是行业标准译法
3. "refactor"译为"重构"准确传达代码改造含义
4. 采用四字短语"确保数据完整性"保持技术文档的简洁性
5. 使用中文括号和冒号格式,符合国内技术文档排版规范)
2026-01-07 12:26:30 +08:00
史悦
c81dad23f6
fix(sync): improve token switching and auto-sync behavior
...
- Introduce `lastSuccessToken` state to track the last verified sync token
- Update manual sync to overwrite local favorites when switching tokens, treating it as a login action rather than a merge
- Prevent auto-sync from running when the current token does not match the last successful one to avoid unintended data uploads
2026-01-07 10:29:02 +08:00
史悦
cbc3acb213
refactor(ui): redesign playlist detail header
...
- Move back button to cover image area with updated styling
- Remove sticky top bar for cleaner view
- Add explicit container names in docker-compose.yml
2026-01-07 10:22:05 +08:00
史悦
c3877be35d
fix(player): refactor audio element handling and improve auto-play reliability
...
- Replace detached `new Audio()` with rendered `<audio>` element to better support mobile behaviors and standard DOM events
- Introduce `autoAdvanceLockRef` to prevent race conditions where the next song might be triggered multiple times
- Add manual time check near the end of the track to trigger auto-advance, acting as a fallback for the `ended` event
- Update `playNext` logic to handle immediate playback transitions more robustly
2026-01-07 10:08:35 +08:00
史悦
a244347999
Modified processSong to check for res.statusCode === 302.
...
If a redirect is encountered, the Location header is extracted and treated as the direct download URL for the music file.
This aligns the code with the API behavior which redirects to the actual file location instead of returning a JSON response.
2026-01-06 16:22:48 +08:00
史悦
6b182ceba8
增加了 Duration 检查:在 updateMediaSessionPosition 函数中,现在会先判断 duration 是否为有效的正数。如果 duration <= 0,则不再调用 setPositionState,避免触发浏览器的错误行为。
...
移除了错误的重置调用:删除了在切歌或清空播放时调用的 setPositionState({ duration: 0 ... })。根据 Media Session API 规范,duration 必须为正数,传入 0 往往是导致 Firefox 隐藏通知栏控制条的主要原因。
2026-01-06 16:04:24 +08:00
史悦
9a220dfe78
增加了 HTTP 状态码检查:在调用音乐下载 API 时,如果返回的状态码不是 200(例如 403 Forbidden 或 500 Error),现在会记录错误并跳过,而不是尝试解析响应体。这应该能解决 Unexpected token F (可能是 "Forbidden" 或 "Failed") 导致的崩溃问题。
2026-01-06 15:58:30 +08:00
史悦
9f1d52c09d
取消了输入时的频繁同步:移除了对 syncToken 变化的自动监听,只在收藏列表变化时触发。
...
支持了删除同步:通过快照对比,本地删除操作可以正确同步到云端,而不仅仅是简单的追加或覆盖。
防止了意外覆盖:同步前先拉取远程数据进行合并,避免了直接用本地旧数据覆盖云端新数据的情况。
2026-01-06 15:55:32 +08:00
史悦
1af86ed6a6
同步时会下载音乐
2026-01-06 15:03:06 +08:00
史悦
87599a4ce8
已调整全屏播放器底部控制区域的布局,减小了占用空间
2026-01-06 14:28:05 +08:00
史悦
45dfa6ee04
已在播放列表(PlaylistDrawer)中添加了播放模式切换按钮
2026-01-06 14:19:43 +08:00
史悦
cfefceaf28
已更新同步按钮功能:
...
添加图标:按钮现在包含一个旋转图标 (fa-rotate)。
加载状态:点击同步时,图标会旋转,按钮文字变为“同步中”并禁用。
完成提示:同步完成后,会在按钮下方显示“同步完成”的绿色提示文字,并在3秒后自动消失。
2026-01-06 14:16:59 +08:00
史悦
a506fad6fd
现在会在歌手名后面显示专辑名
2026-01-06 14:12:58 +08:00
史悦
ecd9f60ac9
修复移动端通知栏进度条的问题
2026-01-06 13:42:54 +08:00
史悦
e115ee1db1
feat(ui): rebrand to Meishi Music and wire up sidebar
...
- Rename application from TuneHub to Meishi Music in UI and PWA manifest
- Implement cache clearing logic to remove local storage items
- Pass sync state and handlers to the Sidebar component
2026-01-06 11:26:56 +08:00
史悦
ca1026d166
feat(sync): add cloud synchronization for favorites
...
Add a new sync service and frontend integration to allow syncing
favorites across devices using a token.
- Configure `sync-service` in docker-compose.yml on port 7482
- Add sync token input and manual sync button to SideDrawer
- Implement auto-sync logic to persist favorites to the KV store
- Add logic to merge cloud favorites with local data on initialization
2026-01-06 11:20:06 +08:00
史悦
33e3ec714e
feat(ui): add clear cache and optimize media session
...
- Add button in side drawer settings to clear local cache data
- Refactor Media Session position updates to trigger on specific events (seek, play/pause, load) instead of every time update
- Add finite number validation for seek operations
2026-01-06 10:59:14 +08:00
史悦
b1e76110ff
完整的 Media Session API 支持
2026-01-06 10:52:43 +08:00
史悦
2841aff80b
修改标题
2026-01-06 10:40:47 +08:00
史悦
a7421891f0
docker
2026-01-06 10:34:28 +08:00
史悦
db524ffd28
docker
2026-01-06 10:32:41 +08:00
史悦
56d94c9592
first commit
2026-01-06 10:27:08 +08:00