Compare commits

..

1167 Commits

Author SHA1 Message Date
lyswhut
3fe34545b9 添加自定义源二进制数据传输支持 2023-05-13 11:53:56 +08:00
lyswhut
da4be33a04 添加上限设置 2023-05-12 20:13:35 +08:00
lyswhut
47e2a5a460 更新依赖 2023-05-08 18:07:26 +08:00
lyswhut
04337ef4b8 添加音效用户预设 2023-05-08 18:04:04 +08:00
lyswhut
df58c8eb80 添加强行构建环境变量参数 2023-05-06 16:36:33 +08:00
lyswhut
b0bf1bf4be 添加繁忙重试重试 2023-05-05 19:01:57 +08:00
lyswhut
1a3d84d4c4 更新版本号 2023-05-04 19:15:52 +08:00
lyswhut
735f629ca1 添加更多环境混响音效 2023-05-04 19:14:00 +08:00
lyswhut
9dc927b50b 修复名称显示 2023-05-04 19:13:48 +08:00
lyswhut
47a336eb64 修复 2023-05-03 18:16:53 +08:00
lyswhut
33b66aaea0 改名 2023-05-03 17:56:32 +08:00
lyswhut
7b9eefdf2d 新增音效设置 2023-05-03 17:45:43 +08:00
lyswhut
ea5e8b56dd 发布v2.2.2 2023-05-01 17:44:11 +08:00
lyswhut
e52fff4d0e 修复添加歌曲弹窗默认列表名字显示问题 2023-05-01 16:15:39 +08:00
lyswhut
8d108509c9 修改默认设置 2023-05-01 16:04:41 +08:00
lyswhut
d3cc630501 更新版本号 2023-05-01 15:32:59 +08:00
lyswhut
e74f297f9e 修复在低版本Linux amd64系统上无法启动的问题 2023-05-01 14:55:35 +08:00
lyswhut
8be9c75734 修改安装依赖的命令 2023-05-01 12:27:46 +08:00
lyswhut
851851a7e6 更新 2023-05-01 11:47:34 +08:00
lyswhut
1cbe46dc3b 发布v2.2.1 2023-05-01 11:13:24 +08:00
lyswhut
675a943d59 更新依赖 2023-04-29 15:19:57 +08:00
Folltoshe
908815def3 更新音源API (#1352)
* 更新API

---------

Co-authored-by: lyswhut <lyswhut@qq.com>
2023-04-29 15:09:17 +08:00
lyswhut
200ca1eeda 移除多余翻译 2023-04-29 14:16:38 +08:00
Folltoshe
b81cc139b3 优化UI (#1353)
* 优化UI

* 更新

---------

Co-authored-by: lyswhut <lyswhut@qq.com>
2023-04-29 13:10:56 +08:00
lyswhut
f8ae906326 支持wy热门评论翻页 2023-04-28 19:49:53 +08:00
lyswhut
e6f55804f4 更新依赖 2023-04-27 14:04:01 +08:00
lyswhut
1432a19d7d 更新版本号 2023-04-24 13:13:10 +08:00
lyswhut
74fbfb130c 修复歌单加载 2023-04-24 13:05:11 +08:00
lyswhut
3cf45f602f 修复对存在错误时间标签的歌词的解析 2023-04-22 18:32:49 +08:00
lyswhut
7a9dcc71fd 更新导航栏样式 2023-04-20 23:35:57 +08:00
lyswhut
fb5249a979 修复 2023-04-16 15:02:30 +08:00
lyswhut
3f694b75f8 修复列表加载问题 2023-04-16 14:52:22 +08:00
彭狸花喵
0e1ee66dd6 更新kg获取歌单gid接口 & 修复歌单介绍显示 (#1328) 2023-04-16 13:28:55 +08:00
lyswhut
920e002247 优化搜索框背景配色,使其适应高透明主题 2023-04-15 18:22:54 +08:00
Folltoshe
ab0b352d36 修复tx热门评论回复图片显示异常 (#1326) 2023-04-15 17:59:52 +08:00
lyswhut
aa4b08a156 更新依赖 2023-04-14 19:46:05 +08:00
lyswhut
66514908d2 更新版本号 2023-04-13 15:07:47 +08:00
lyswhut
60f0801a7c 修复评论图片显示问题 2023-04-13 15:07:33 +08:00
lyswhut
7149d0d43f 优化更新弹窗弹出时机 2023-04-13 14:34:18 +08:00
Folltoshe
d970687ebe 音源API更新 & 其他改动 (#1295)
## API

### kg源

- 增加歌单歌曲flac24bit显示
- 修复酷狗码只能导入500首的问题
- 更新排行榜

### mg源

- 修复搜索不显示时长的问题
- 修复评论加载失败的问题
- 更新排行榜

### tx源

- 增加热门评论图片显示
- 更新排行榜

### wy源

- 更新排行榜

## 其他

- 添加自定义源zlib模块的支持

---------

Co-authored-by: 彭狸花喵 <94218819+helloplhm-qwq@users.noreply.github.com>
Co-authored-by: lyswhut <lyswhut@qq.com>
2023-04-13 14:32:59 +08:00
lyswhut
d0425fc0d6 更新版本号 2023-04-09 15:36:52 +08:00
lyswhut
bdd5b46708 更新依赖 2023-04-09 15:35:00 +08:00
lyswhut
6d949d7e4d 更新依赖 2023-03-31 20:12:14 +08:00
lyswhut
5d72d092fc 优化&修复同步机制 2023-03-30 17:46:37 +08:00
lyswhut
667fc8c8a6 修复缺失的翻译 2023-03-30 17:45:58 +08:00
lyswhut
f7a2d9fd06 启用桌面歌词时,取消对歌词窗口的聚焦(#1273) 2023-03-29 12:49:30 +08:00
lyswhut
85946efd0b 修复启用全局快捷键时与Media Session注册冲突的问题 2023-03-27 19:57:31 +08:00
lyswhut
f6a853bfe9 发布v2.2.0 2023-03-26 12:14:30 +08:00
lyswhut
4bfbdeb9a5 添加搜索重试 2023-03-26 12:00:29 +08:00
lyswhut
1e53508d67 修复聚合搜索跳转到最后一页后由于列表是空的导致翻页组件隐藏的问题(#1217) 2023-03-26 12:00:20 +08:00
lyswhut
b8fca59cbb 更新依赖 2023-03-25 10:34:41 +08:00
lyswhut
9ada6fe4a7 更新默认设置 2023-03-25 10:04:07 +08:00
lyswhut
b1593a2053 播放速率的粒度调整为0.01,范围0.6-2.0x 2023-03-25 10:04:07 +08:00
彭狸花喵
22a5125a11 修复一个拼写错误导致kg搜索AlbumID为undefined的问题 (#1255) 2023-03-25 10:03:32 +08:00
lyswhut
dfd9a0019b 更新版号 2023-03-23 17:34:01 +08:00
lyswhut
e1d81c199b 更新文案 2023-03-23 17:32:15 +08:00
lyswhut
e8f574ee9c 修复潜在问题 2023-03-23 17:31:59 +08:00
lyswhut
472af1bca6 更新版本号 2023-03-21 17:56:04 +08:00
lyswhut
671346bcdd 修复连续选择时的初始选择歌曲位置被意外改变的问题 2023-03-20 16:33:18 +08:00
lyswhut
9132abb3fe 移除动画预热 2023-03-18 11:13:04 +08:00
lyswhut
1c681e9f82 修复标签显示 2023-03-17 14:50:07 +08:00
lyswhut
19286ef99d 更新依赖 2023-03-17 14:40:56 +08:00
lyswhut
37ad2f522a 更新日志 2023-03-15 17:47:16 +08:00
lyswhut
1e1aa65fc0 新增设置-其他-列表数据清理功能 2023-03-15 17:44:20 +08:00
lyswhut
ec6e067938 新增设置-桌面歌词设置-重置窗口设置功能 2023-03-15 17:44:20 +08:00
Folltoshe
ea515fdd85 增加kg排行榜flac24bit显示 (#1238)
* 增加kg排行榜flac24bit显示
---------

Co-authored-by: lyswhut <lyswhut@qq.com>
2023-03-15 17:42:40 +08:00
lyswhut
c11c202248 更新版本号 2023-03-12 14:13:15 +08:00
lyswhut
1cfee31483 修复企鹅歌单列表歌单名字不显示的问题 2023-03-12 14:12:06 +08:00
lyswhut
00a5aa01c7 更新依赖 2023-03-12 11:31:25 +08:00
lyswhut
fc61cf16ed 修复快照被意外删除的问题 2023-03-09 16:53:35 +08:00
lyswhut
0684e29098 更新字段获取 2023-03-07 16:44:09 +08:00
lyswhut
66d29293cd 更新说明 2023-03-05 20:04:18 +08:00
lyswhut
e9fd657852 优化tx歌单打开 2023-03-05 18:29:57 +08:00
lyswhut
bd7f51358c 更新版本号 2023-03-05 17:34:30 +08:00
lyswhut
371b8fad05 kg源数据更新 (#1232)
* kg源评论接口更新,热门评论完整支持
* kg搜索HiRes支持
---------

Co-authored-by: 彭狸花喵 <94218819+helloplhm-qwq@users.noreply.github.com>
2023-03-05 17:27:17 +08:00
lyswhut
fe259747dc 音量、播放模式等设置弹出式按钮在鼠标移到按钮上时将自动弹出设置内容 2023-03-05 14:30:15 +08:00
lyswhut
d4d94ddbee 修复tx源某些歌单因为歌曲信息缺失导致打开失败的问题 2023-03-04 21:39:08 +08:00
lyswhut
f62d773246 更新依赖 2023-03-04 17:48:13 +08:00
lyswhut
20294233e6 快捷键调整音量时每次加减2%音量改为4% 2023-03-04 16:26:39 +08:00
lyswhut
cb4ab411f9 新增全屏时自动关闭歌词设置 2023-03-04 16:10:34 +08:00
lyswhut
7f008d1f9c 优化自动重连 2023-03-04 13:22:08 +08:00
lyswhut
fe0487c3f9 更新版本号 2023-03-02 17:44:48 +08:00
lyswhut
a54e810af1 修复新设备同步时快照key没有被保存导致的下次同步仍然需要选择同步模式的问题 2023-03-01 22:46:24 +08:00
lyswhut
5cc1f20fac 更新依赖 2023-03-01 18:51:17 +08:00
lyswhut
da804e1f69 更新名字 2023-03-01 18:47:18 +08:00
lyswhut
3399333360 完善同步 2023-03-01 18:44:51 +08:00
lyswhut
e75ab3a7d7 更新版本号 2023-02-28 18:29:42 +08:00
lyswhut
3b70acc3ca 重构数据同步功能,新增客户端模式 2023-02-28 18:01:56 +08:00
lyswhut
b42092884e 支持wy源flac hires歌曲类型的显示 2023-02-26 17:20:05 +08:00
lyswhut
fea2db0e29 修复使用酷狗码无法打开某些类型的歌单的问题 2023-02-26 16:58:27 +08:00
lyswhut
fe7bc924da 修复记住播放进度的情况下,使用Scheme URL打开应用播放的歌曲进度没有被重置的问题 2023-02-22 15:43:45 +08:00
lyswhut
60b357e6f9 修复同步连接的处理问题 2023-02-22 14:44:34 +08:00
lyswhut
5544a469c4 优化wy翻译、罗马音歌词解析 2023-02-19 17:12:19 +08:00
lyswhut
067ca91c4d 发布v2.1.2 2023-02-18 19:57:55 +08:00
lyswhut
afd8d692fd 发布v2.1.1 2023-02-18 19:14:01 +08:00
lyswhut
a9a8fa2857 发布v2.1.0 2023-02-18 13:50:31 +08:00
lyswhut
4b3a624ed9 更新electron到22.3.0 2023-02-17 23:10:16 +08:00
lyswhut
549ea19c26 移除不需要的代码 2023-02-15 09:12:55 +08:00
lyswhut
c0515c9c4f 修复去重列表移除歌曲后列表没有刷新的问题 2023-02-10 21:06:09 +08:00
lyswhut
e81d594d01 修复重启后歌词快进不生效的问题 2023-02-10 19:44:00 +08:00
lyswhut
3d469a4986 更新依赖 2023-02-10 18:07:19 +08:00
lyswhut
b91bd7ede0 修复竖向桌面歌词无法加粗的问题 2023-02-10 13:09:18 +08:00
lyswhut
6048af99bc 添加下载失败信息状态 2023-02-10 08:58:24 +08:00
lyswhut
ef9427122e 新增是否加粗扩展歌词设置 2023-02-09 17:52:58 +08:00
lyswhut
02402f5207 新增设置-下载设置-是否嵌入翻译歌词、罗马音歌词设置 2023-02-09 17:52:23 +08:00
lyswhut
80197ee18c 降级glibc版本编译 2023-02-08 20:23:39 +08:00
lyswhut
8989b05a69 更新版本号 2023-02-08 18:28:30 +08:00
lyswhut
f809782559 新增播放速率调整功能 2023-02-08 18:27:35 +08:00
lyswhut
9522e975a0 修复API初始化失败的问题 2023-02-08 18:07:00 +08:00
lyswhut
8854fb69d8 更新native module 2023-02-08 18:06:31 +08:00
lyswhut
10bd75ea7b 更新Electron到v22.2.0 2023-02-08 00:27:31 +08:00
lyswhut
f33ffb55a7 修复 2023-02-08 00:11:00 +08:00
lyswhut
3bff44da0c 防止桌面歌词窗口在屏幕分辨率变小时,窗口位置跟随分辨率变化的问题 2023-02-07 11:56:19 +08:00
lyswhut
cf960e3695 添加启动时的数据库表及表结构完整性校验 2023-02-06 17:33:21 +08:00
lyswhut
c8eac2690f 修复某些kg歌单链接无法打开的问题 2023-02-06 14:21:16 +08:00
lyswhut
8af458e61a 更新版本号 2023-02-05 20:41:33 +08:00
lyswhut
07899327f1 新增是否在更新版本的首次启动时显示更新日志弹窗设置 2023-02-05 20:40:30 +08:00
lyswhut
dd5bffe071 为所有文本输入框添加右键快速粘贴的功能 2023-02-05 15:32:11 +08:00
lyswhut
83000b75ca 添加忽略二次提示 2023-02-05 13:38:25 +08:00
lyswhut
e6c3815493 完善歌词获取流程 2023-02-05 13:28:43 +08:00
lyswhut
32626ef773 完善lib替换 2023-02-04 18:56:47 +08:00
lyswhut
ab1d18debe 添加x源逐字歌词的支持 2023-02-04 18:38:06 +08:00
lyswhut
62330571a3 更新版号 2023-02-03 19:42:07 +08:00
lyswhut
a8827c361c 优化 2023-02-03 19:41:34 +08:00
lyswhut
4635481c77 修改列表响应式更新机制,尝试修复偶现的删除歌曲列表未更新的问题 2023-02-03 19:41:22 +08:00
lyswhut
c6f9e421c1 更新版本号 2023-02-03 01:23:10 +08:00
lyswhut
448e1cd0c3 修复较旧Linux arm64系统下无法启动软件的问题 2023-02-03 01:00:31 +08:00
lyswhut
5ee7c5a319 优化 2023-02-02 14:10:05 +08:00
lyswhut
89625188f1 更新版本号 2023-02-01 17:30:54 +08:00
lyswhut
fdd19068a8 fix 2023-02-01 16:50:13 +08:00
lyswhut
ef7033cac0 调整了桌面歌词在启用滚动到顶部时的距离 2023-02-01 16:23:41 +08:00
lyswhut
65840e45cd 优化 2023-02-01 14:12:52 +08:00
lyswhut
6075f413dc lint fix 2023-02-01 12:50:52 +08:00
lyswhut
ba3b2f613a 修复更新日志弹窗显示 2023-02-01 12:50:38 +08:00
lyswhut
165832e703 完善支持wy歌词获取 2023-02-01 11:24:58 +08:00
lyswhut
7e27ec488b 添加wy源逐字歌词的支持 2023-01-31 23:40:25 +08:00
lyswhut
4e3356ccb2 更新依赖 2023-01-31 18:35:34 +08:00
lyswhut
6b69cdf12f 优化版本更新操作 2023-01-31 17:48:38 +08:00
lyswhut
c24b29a42c 新增桌面歌词设置字体加粗设置&优化歌词字体显示 2023-01-30 17:48:47 +08:00
lyswhut
c013d19530 修复播放下载列表的歌曲时,调整歌词偏移时间功能异常的问题 2023-01-25 20:14:49 +08:00
lyswhut
5a1e1864d9 修正错别字 2023-01-18 22:31:10 +08:00
lyswhut
7c56b2fce2 发布v2.0.5 2023-01-18 22:14:29 +08:00
lyswhut
7266352ca0 修复字母被截取的问题 2023-01-18 21:41:42 +08:00
lyswhut
c1cff1e3c2 修复macOS下的软件系统菜单中的退出功能不会完全退出软件的问题(#1148) 2023-01-18 17:25:51 +08:00
lyswhut
c003efe1e9 fix type 2023-01-18 15:57:06 +08:00
lyswhut
68d847aca5 修复随机播放模式下使用稍后播放功能播放我的列表的歌曲时,切换下一曲永远是当前歌曲的问题(#1147) 2023-01-18 15:56:05 +08:00
lyswhut
82bea640c4 重写桌面歌词窗口坐标的计算逻辑 2023-01-18 15:43:26 +08:00
lyswhut
4fa88dd7a0 修复声音输出设备更改时后的自动暂停播放设置无效的问题 2023-01-18 14:04:04 +08:00
lyswhut
900bdd3afe 发布v2.0.4 2023-01-15 15:15:00 +08:00
lyswhut
8dff457422 优化虚拟列表 2023-01-14 16:48:20 +08:00
lyswhut
850a429243 优化代码逻辑,修复潜在播放问题 2023-01-14 16:03:56 +08:00
lyswhut
d3c8f16aed 更新依赖 2023-01-14 00:50:43 +08:00
lyswhut
a43e127dd0 修复备份与恢复的列表导入列表信息设置逻辑问题与潜在问题 2023-01-14 00:50:29 +08:00
lyswhut
84e52f5525 修复Linux armv7l系统(如树莓派)下无法启动的问题 2023-01-14 00:06:04 +08:00
lyswhut
1dce2c1f7a 更新 2023-01-12 14:08:28 +08:00
lyswhut
1c802ad5f5 fix type 2023-01-11 16:47:57 +08:00
lyswhut
db38db9256 修复桌面歌词启用歌词缩放后的阴影显示问题;就放桌面歌词在启用卡拉OK歌词后字体边缘可能被截断的问题 2023-01-11 13:08:28 +08:00
lyswhut
cb9fa62dac 修复从搜索界面进入歌单详情后,若启用强迫症设置的清空功能会导致意外清空搜索框、搜索列表的问题 2023-01-11 10:53:17 +08:00
lyswhut
9cc36e2a6a 优化临时播放逻辑 2023-01-11 09:28:31 +08:00
lyswhut
bf310adc12 fix type 2023-01-11 08:33:13 +08:00
lyswhut
7273b6ad67 修复备份文件导入指引无法识别v2配置的问题 2023-01-11 08:32:49 +08:00
lyswhut
a02f9e1151 发布v2.0.3 2023-01-08 13:25:39 +08:00
lyswhut
6ef8015179 修复歌词阴影问题 2023-01-07 18:59:44 +08:00
lyswhut
db38b27e52 修复桌面歌词开启不允许换行后出现字体截断的问题(#1106) 2023-01-07 15:59:30 +08:00
lyswhut
cccb5b191d 修复修改播放设置-音频输出设置后,所做的更改没有被保存的问题(#1116) 2023-01-07 15:17:07 +08:00
lyswhut
3c589743b1 更新版本号 2023-01-06 17:47:21 +08:00
lyswhut
65270e02da 优化定时停止 2023-01-06 14:49:09 +08:00
lyswhut
27c1bf8eb6 eslint 2023-01-06 14:39:44 +08:00
lyswhut
1db54195f5 修复禁用切歌时歌曲播放完毕后的歌曲信息显示问题 2023-01-06 14:39:08 +08:00
lyswhut
399208429d 修复暂停按钮图标显示 2023-01-06 14:35:52 +08:00
lyswhut
b40e57f191 修复某些情况下歌词的滚动问题 2023-01-06 14:22:17 +08:00
lyswhut
be350e49f0 更新版本号 2023-01-05 19:04:50 +08:00
lyswhut
bae732016c 修复桌面歌词使用斜体出现截断的问题(#1106) 2023-01-05 18:49:50 +08:00
lyswhut
e50a67f0e4 点击打开歌单弹窗背景可以关闭弹窗(#1096) 2023-01-05 18:49:08 +08:00
lyswhut
26e8e0a1b1 修复Linux arm64系统下无法启动的问题(#1102) 2023-01-05 18:47:27 +08:00
lyswhut
c8210e0516 修复初始设置的桌面歌词窗口没有完全居右下角的问题 2023-01-05 11:57:44 +08:00
lyswhut
95590dd07f 修复列表备份文件存在异常歌曲信息时无法导入的问题 2023-01-02 18:35:42 +08:00
lyswhut
7e94e96bcc 优化迁移 2023-01-02 17:57:01 +08:00
lyswhut
5009494e89 发布v2.0.2 2023-01-02 17:52:40 +08:00
lyswhut
e58c2f86aa 修复无效的歌曲信息导致我的列表数据迁移失败的问题(#1095) 2023-01-02 17:52:19 +08:00
lyswhut
fcea542def 发布v2.0.1 2023-01-02 16:41:25 +08:00
lyswhut
44407585fa 合并sql语句 2023-01-02 13:40:46 +08:00
lyswhut
3d93d88bf0 发布v2.0.0 2023-01-01 14:21:26 +08:00
lyswhut
8a49e32d2a 优化 2023-01-01 14:16:29 +08:00
lyswhut
8bbc4a3c4a 修复输入框字体不跟随设置的问题 2022-12-30 18:37:08 +08:00
lyswhut
3a9dbbb577 完善同步 2022-12-30 17:06:03 +08:00
lyswhut
5f11fa65b4 修复列表覆盖问题 2022-12-30 16:07:59 +08:00
lyswhut
6f4129d317 更新依赖 2022-12-30 15:21:16 +08:00
lyswhut
e2a1d7b99d 新增下载目录存在同名的文件时跳过下载此任务设置 2022-12-30 14:00:49 +08:00
lyswhut
18b6f73008 导入备份时过滤歌曲 2022-12-30 13:24:37 +08:00
lyswhut
c16de232ad 完善同步 2022-12-30 13:16:40 +08:00
lyswhut
6ff1d683a5 添加主题字体颜色设置 2022-12-30 12:12:09 +08:00
lyswhut
a7c2857808 完善同步 2022-12-26 17:40:45 +08:00
lyswhut
4cea16c326 更新版本号 2022-12-26 17:40:27 +08:00
lyswhut
a8228159b7 屏蔽同步功能 2022-12-26 17:39:27 +08:00
lyswhut
4594f2fd1f 修复tx源评论加载失败的问题 2022-12-26 17:39:11 +08:00
lyswhut
9c7661d1ae 更新依赖 2022-12-26 14:36:46 +08:00
lyswhut
dd2416b5ae 修复新旧歌曲信息转换 2022-12-26 14:14:21 +08:00
lyswhut
54ddb7473b 修改scheme校验 2022-12-26 14:13:18 +08:00
lyswhut
cc7ad7c71f 移除重复预置颜色 2022-12-26 09:52:59 +08:00
lyswhut
bfc07b2a97 更新依赖 2022-12-20 17:34:48 +08:00
lyswhut
2aad2c6b8a 特效 2022-12-17 16:01:31 +08:00
lyswhut
959df65e0a update match 2022-12-10 15:42:26 +08:00
lyswhut
76d32c1cb4 fix match 2022-12-10 14:48:01 +08:00
lyswhut
da59164664 修复潜在匹配问题 2022-12-10 14:15:43 +08:00
lyswhut
01c3a7d687 更新版本号(2.0.0-beta.22) 2022-12-10 13:47:58 +08:00
lyswhut
9a57118300 修复kg某些歌单链接无法打开的问题 2022-12-10 13:06:18 +08:00
lyswhut
8ecd6e6f54 修复扩展歌词匹配问题 2022-12-07 20:11:15 +08:00
lyswhut
b9ac754c07 更新依赖 2022-12-06 18:25:17 +08:00
lyswhut
3bd48e547d 更新版本号 2022-12-05 18:45:18 +08:00
lyswhut
92c77332a0 修复桌面歌词在关闭软件时被重置回关闭状态的问题 2022-12-05 13:05:17 +08:00
lyswhut
5c7652afe8 图片懒加载 2022-11-30 12:19:14 +08:00
lyswhut
c2dd35790f 减淡评论点赞数颜色 2022-11-30 00:44:31 +08:00
lyswhut
5dae561b70 更新版本号 2022-11-29 17:57:00 +08:00
lyswhut
b3600bef34 修复tx歌单无法显示的问题,添加歌单更新时间显示(如果有) 2022-11-29 13:48:57 +08:00
lyswhut
c6087f577d 添加kg源评论图片展示 2022-11-29 09:32:19 +08:00
lyswhut
c695c00e76 更新版本号 2022-11-28 18:19:36 +08:00
lyswhut
0d10d1f95b 添加进度条样式设置 2022-11-28 18:16:56 +08:00
lyswhut
f80d03ed15 修复潜在报错 2022-11-27 19:41:00 +08:00
lyswhut
f2b023193c 更新版本号 2022-11-27 19:18:59 +08:00
lyswhut
e467b92bb9 修复wy源我喜欢个人云盘歌曲信息获取问题 2022-11-27 19:14:27 +08:00
lyswhut
ae467cd515 修复缺失参数警告 2022-11-27 18:07:32 +08:00
lyswhut
9e51a55d45 桌面歌词新增在任务栏显示歌词进程设置(#1063) 2022-11-26 13:51:27 +08:00
lyswhut
67a3ab164a 更新依赖 2022-11-25 23:37:46 +08:00
lyswhut
77ea6d3748 更新ts类型导入导出语法 2022-11-25 23:01:39 +08:00
lyswhut
5e9b3a16fa 修复潜在的报错 2022-11-25 23:00:08 +08:00
lyswhut
bdeab55d3c 以非透明透明模式下启动时为主界面添加边框 2022-11-25 22:59:11 +08:00
lyswhut
bb10474cbb 修复默认的软件内快捷键与全局快捷键设置被调换的问题 2022-11-25 22:57:42 +08:00
lyswhut
d7a8e3dc51 更新版本号 2022-11-23 18:05:44 +08:00
lyswhut
2d5e336f0f 修复程序初始化顺序导致的问题 2022-11-23 18:04:28 +08:00
lyswhut
2aa4ff8422 修复播放稍后播放的歌曲时在原播放列表被更新是意外切歌的问题 2022-11-23 18:04:21 +08:00
lyswhut
8f7523dd95 更新依赖 2022-11-22 17:57:02 +08:00
lyswhut
f5cdd99fe6 更新日志 2022-11-21 17:32:55 +08:00
lyswhut
2459b4c64c 修复弹出层进度条调整位置时存在时间偏移的问题 2022-11-20 13:42:17 +08:00
lyswhut
54ea4c03d6 更新版本号 2022-11-19 18:06:11 +08:00
lyswhut
59061a0672 修改播放栏进度条布局 2022-11-19 18:05:37 +08:00
lyswhut
03b73e89b3 修复切歌方式按钮提示文本错误的问题 2022-11-19 12:30:10 +08:00
lyswhut
3bc6fc97a2 修复迁移旧版本配置失败的问题 2022-11-18 20:54:57 +08:00
lyswhut
82176a831d 更新版本号 2022-11-18 19:10:09 +08:00
lyswhut
9920e5ef99 修复导入列表数据时的歌曲信息转换问题 2022-11-18 09:58:02 +08:00
lyswhut
f3852b20ca 修复空路径检查处理问题 2022-11-17 22:40:23 +08:00
lyswhut
b20886f08a 修复以全屏启动设置与窗口大小检测冲突的问题 2022-11-17 18:21:25 +08:00
lyswhut
ec2b802912 聚合搜索歌单添加源名称显示 2022-11-17 18:06:14 +08:00
lyswhut
3b5832eceb 更新依赖,尝试修复某些系统环境下获取字体列表出现乱码的问题 2022-11-17 17:40:26 +08:00
lyswhut
589e373bd8 更新依赖 2022-11-16 19:19:04 +08:00
lyswhut
a6fd41900f 修复自定义主题背景路径存在空格时无法显示的问题 2022-11-16 19:18:59 +08:00
lyswhut
7daa626d55 修复播放详情页鼠标不会自动隐藏的问题 2022-11-16 13:23:06 +08:00
lyswhut
72da89235a 移除播放详情页左边竖线 2022-11-15 19:46:14 +08:00
lyswhut
8a14fe7985 更新版本号 2022-11-15 18:28:20 +08:00
lyswhut
1e1c0515d1 修复列表渲染性能bug 2022-11-15 12:33:10 +08:00
lyswhut
95a398da23 添加播放状态 2022-11-14 21:26:22 +08:00
lyswhut
ff8a8d860f 修复列表编号与图标显示问题 2022-11-14 21:12:27 +08:00
lyswhut
928cf264b0 更新依赖 2022-11-14 20:28:09 +08:00
lyswhut
7139682bc7 修复图标显示问题 2022-11-14 20:25:31 +08:00
lyswhut
b5ad039980 添加“近墨者黑”皮肤 2022-11-14 20:22:40 +08:00
lyswhut
ab37817d26 添加列表激活图标 2022-11-14 20:22:35 +08:00
lyswhut
e79f8b357c 修复编辑列表名字时按esc键无法退出编辑状态的问题 2022-11-14 19:02:36 +08:00
lyswhut
bdb9f9b949 添加对wy源评论表情的emoji转换 2022-11-13 16:44:45 +08:00
lyswhut
07708c7a56 修改弹出层动画 2022-11-13 15:38:34 +08:00
lyswhut
05e9c07aa1 修复上一曲按钮图标不清晰的问题 2022-11-13 14:43:00 +08:00
lyswhut
3486cfaab7 修复播放时间意外换行 2022-11-13 12:31:01 +08:00
lyswhut
313eba409c 更新版本号 2022-11-12 15:29:51 +08:00
lyswhut
88cae5d8e9 优化与修复 2022-11-12 14:52:36 +08:00
lyswhut
52c4a77934 支持打开波点音乐歌单(需在酷我源打开) 2022-11-12 14:52:21 +08:00
lyswhut
e526c244f3 更新依赖 2022-11-11 13:09:48 +08:00
lyswhut
54b5517222 更新播放栏UI 2022-11-10 18:35:15 +08:00
lyswhut
70a691bc68 优化单选框交互 2022-11-10 17:54:40 +08:00
lyswhut
55d22e424d 更新依赖 2022-11-09 17:44:11 +08:00
lyswhut
69ea40abc0 下拉选择器自动定位选中项位置 2022-11-09 17:23:27 +08:00
lyswhut
953fc94cb0 优化大列表增删操作性能 2022-11-09 17:08:12 +08:00
lyswhut
4b22518532 优化翻译 2022-11-09 10:41:39 +08:00
lyswhut
b60c438694 修复强迫症设置的搜索清理问题 2022-11-09 10:41:01 +08:00
lyswhut
d1d9d65a06 修改播放栏UI 2022-11-06 15:47:55 +08:00
lyswhut
b1ee4d10d7 更新版本号 2022-11-06 14:02:50 +08:00
lyswhut
908ef635fa 修复列表歌曲移动问题 2022-11-06 13:30:59 +08:00
lyswhut
6b2cf5df2f 减淡阴影 2022-11-05 15:41:18 +08:00
lyswhut
1105a9f31c 修复依赖问题 2022-11-05 15:17:04 +08:00
lyswhut
689724db6c 更新依赖 2022-11-05 14:37:10 +08:00
lyswhut
3530a95738 优化UI 2022-11-05 13:59:31 +08:00
lyswhut
c9d8bbe874 fix 2022-11-05 09:45:28 +08:00
lyswhut
8d87990793 保存utf8格式歌词时添加bom 2022-11-05 09:45:28 +08:00
lyswhut
5c4590d507 fix 2022-11-05 09:45:28 +08:00
lyswhut
11d3754c08 处理路径中存在百分号导致的问题 2022-11-04 20:27:51 +08:00
lyswhut
209bf9e0aa fix 2022-11-04 19:17:13 +08:00
lyswhut
9eaf072e8f 修改构建顺序 2022-11-04 19:16:44 +08:00
lyswhut
065bbef781 修复在歌曲添加弹窗中创建的新列表没有显示的问题 2022-11-04 18:46:44 +08:00
lyswhut
beb5589a4a 更新版本号 2022-11-04 18:29:48 +08:00
lyswhut
d88d5e7818 修复文字被截取的问题 2022-11-04 18:28:35 +08:00
lyswhut
12336148d9 禁用gpu沙盒 2022-11-04 16:41:43 +08:00
lyswhut
9bec54c454 迁移搜索、播放启动参数支持 2022-11-04 15:56:34 +08:00
lyswhut
303d712860 添加源存在性检查 2022-11-04 15:18:25 +08:00
lyswhut
9e6bfaada4 移除多余类型 2022-11-04 14:50:46 +08:00
lyswhut
3f8c47100d 更新依赖 2022-11-03 07:35:48 +08:00
lyswhut
716120ea61 更新歌曲播放栏布局 2022-11-03 06:34:57 +08:00
lyswhut
2003c5a0c9 兼容url格式的主题背景图片 2022-10-29 20:25:24 +08:00
lyswhut
07898cdfd6 添加桌面歌词滚动对齐方式、歌词间距设置 2022-10-29 15:20:59 +08:00
lyswhut
72418194e9 移除歌词文件分离 2022-10-29 13:20:11 +08:00
lyswhut
358b93fb70 自定义支持flac24bit声明 2022-10-29 13:19:52 +08:00
lyswhut
3e9a111643 修改图片读取顺序 2022-10-29 13:19:15 +08:00
lyswhut
8841951fe3 fix path 2022-10-29 11:40:36 +08:00
lyswhut
e45cee6596 v2.0.0 2022-10-29 11:36:35 +08:00
lyswhut
66b965d9f7 Merge branch 'dev' 2022-09-03 01:17:26 +08:00
lyswhut
f4285ae106 发布v1.22.3 2022-09-03 01:17:05 +08:00
lyswhut
657e65bc6a 修复因音源的域名到期导致的音源失效的问题 2022-09-03 01:16:23 +08:00
lyswhut
41fc8d2e2e 修正错误 2022-09-03 01:15:24 +08:00
lyswhut
25ca781d76 更新faq 2022-08-22 18:39:08 +08:00
lyswhut
41f4130e5d Merge branch 'dev' 2022-08-18 17:15:24 +08:00
lyswhut
8e19f3fc0b 发布v1.22.2 2022-08-18 17:15:00 +08:00
lyswhut
c4b8ac8b0b 修复hires类型显示 2022-08-11 17:20:07 +08:00
lyswhut
0ac2df1297 更新版本号 2022-08-11 17:01:18 +08:00
lyswhut
251450fd50 修复企鹅音乐搜索失效的问题 2022-08-11 15:44:37 +08:00
lyswhut
85c5595f43 更新依赖 2022-08-06 18:26:10 +08:00
lyswhut
ca3188c930 优化列表保存性能 2022-08-06 18:20:58 +08:00
lyswhut
2f47f82b0f 修复某些缺失的繁体中文翻译 2022-08-06 17:33:23 +08:00
lyswhut
0e09598b10 降级electron到v15.5.7 2022-08-05 10:45:17 +08:00
lyswhut
a705420528 修复依赖安全警告 2022-08-04 09:31:39 +08:00
lyswhut
4089887514 升级electron到v18.3.7 2022-08-04 09:18:53 +08:00
lyswhut
a3d02e5f39 修复列表移动的更新问题 2022-08-04 08:38:30 +08:00
lyswhut
6e09363832 修复无法批量排序歌曲的问题 2022-08-04 08:37:57 +08:00
lyswhut
1c58a64847 修复wy源音质获取问题 2022-07-22 14:29:57 +08:00
lyswhut
2a716e4d5a 更新依赖 2022-07-17 12:40:21 +08:00
lyswhut
a2c613d380 修复默认设置的语言显示问题 2022-07-10 16:06:07 +08:00
lyswhut
aa4b09436c Merge branch 'dev' 2022-07-09 12:03:42 +08:00
lyswhut
9521bba4ba 发布v1.22.1 2022-07-09 12:03:16 +08:00
lyswhut
55d10021f8 更新依赖 2022-07-08 19:03:36 +08:00
lyswhut
7fe35748d0 更新依赖 2022-07-08 16:43:28 +08:00
lyswhut
ff9efbd4ea 歌单列表添加歌单内歌曲数量显示 2022-07-08 16:39:56 +08:00
lyswhut
23b8c325f4 修复tx源搜索失效的问题 2022-07-08 09:12:45 +08:00
lyswhut
ecfccb4c40 修复临时列表meta信息丢失的问题 2022-07-03 22:55:33 +08:00
lyswhut
2472574cde 更新依赖 2022-07-03 22:16:06 +08:00
lyswhut
bf81c8facc 更新版本号 2022-06-25 13:23:30 +08:00
lyswhut
9bf0d69ab6 更新依赖 2022-06-25 10:29:55 +08:00
lyswhut
cf9d98d434 修复若桌面歌词窗口与主窗口重叠时,鼠标划过重叠区域鼠标会闪烁的问题 2022-06-20 12:02:55 +08:00
lyswhut
da8e67d4e5 修复处于不支持的源时,歌单、排行榜的右键下载菜单没有禁用的问题 2022-06-19 14:36:04 +08:00
lyswhut
d695cdef08 Merge branch 'dev' 2022-06-19 12:34:09 +08:00
lyswhut
d7a7701c09 发布v1.22.0 2022-06-19 11:59:11 +08:00
lyswhut
a31180260b 屏蔽设置 2022-06-18 11:50:54 +08:00
lyswhut
f33947287c 更新版本号 2022-06-17 20:26:08 +08:00
lyswhut
c054ceeab5 修复 2022-06-17 20:17:42 +08:00
lyswhut
c8dce1bcb6 更新更新 Electron 到 v17.4.7 2022-06-17 20:16:07 +08:00
lyswhut
6195c10646 更新常见问题地址 2022-06-17 19:20:08 +08:00
lyswhut
535cbbbd16 修复ctrl跳转播放失效的问题 2022-06-17 14:44:28 +08:00
lyswhut
fa99f35bc0 修复歌词显示问题 2022-06-15 11:08:00 +08:00
lyswhut
5800f0e354 添加导入文件错误时的指引提示 2022-06-15 09:30:58 +08:00
lyswhut
aa5e621184 新增设置-桌面歌词设置-鼠标移入歌词区域时降低歌词透明度(#883) 2022-06-14 11:43:18 +08:00
lyswhut
283bdd6246 添加歌曲列表更新操作的二次确认 2022-06-13 12:57:25 +08:00
lyswhut
2884e67109 修复esc键冲突问题 2022-06-12 18:01:26 +08:00
lyswhut
4542f9b2e3 更新依赖 2022-06-12 14:46:34 +08:00
lyswhut
9d08f91079 修复在新建歌单输入框、歌单内歌曲搜索输入框会意外触发设置的全局快捷键的问题(#879) 2022-06-12 14:39:58 +08:00
lyswhut
0704a4ad12 修复设置快捷键时的处理逻辑问题 2022-06-11 18:52:52 +08:00
lyswhut
bb8509a21c 支持mg源逐字歌词的播放 2022-06-09 13:03:46 +08:00
lyswhut
f2e3d4a53d 更新版本号 2022-06-07 19:49:01 +08:00
lyswhut
b8a221e67e 更新t文档 2022-06-07 08:52:19 +08:00
lyswhut
f4147cce37 添加其他开发者工具打开方式 2022-06-07 08:51:41 +08:00
lyswhut
01f9fd502f 还原文档 2022-06-06 10:00:12 +08:00
lyswhut
5d20adc81e 更新依赖 2022-06-05 14:51:58 +08:00
lyswhut
6a78f659e3 移除http_proxy环境变量 2022-06-05 14:51:46 +08:00
lyswhut
211f584bf8 更新文档说明 2022-06-04 13:03:20 +08:00
lyswhut
fcfba8b12c 新增添加歌曲到“我的列表”时,若按住ctrl键,则不会自动关闭添加窗口 2022-06-04 12:48:26 +08:00
lyswhut
85e4c7555a 修复多选后切换列表后不会清空多选内容的问题 2022-06-04 12:43:15 +08:00
lyswhut
19dccffdde 优化换源匹配 2022-05-31 09:13:59 +08:00
lyswhut
359514a83c 修复变量移除问题 2022-05-29 10:58:04 +08:00
lyswhut
90ea0dc857 修复环境变量被替换的问题 2022-05-29 10:48:05 +08:00
lyswhut
ae18db45a4 修复若配置了http_proxy环境变量时,会意外使用此代理配置的问题 2022-05-29 10:39:14 +08:00
lyswhut
4783c9be8d 更新依赖 2022-05-26 13:02:52 +08:00
lyswhut
ff41fa9829 修复kuwo歌词解析 2022-05-26 12:03:40 +08:00
lyswhut
aa56dafd5f 新增设置-以全屏模式启动设置 2022-05-24 08:57:04 +08:00
lyswhut
f2f2008d5d Merge branch 'dev' 2022-05-22 11:17:47 +08:00
lyswhut
15d2589db8 发布v1.21.0 2022-05-22 11:17:13 +08:00
lyswhut
47a8da49ca 修改包大小提示 2022-05-22 01:50:34 +08:00
lyswhut
2250cac7f9 不处理可能存在翻译的歌词 2022-05-22 01:50:02 +08:00
lyswhut
94e3063307 添加flac 24bit显示 2022-05-20 19:32:31 +08:00
lyswhut
88691b3f18 更新依赖 2022-05-19 17:33:12 +08:00
lyswhut
3851880007 添加稍后播放说明 2022-05-19 15:19:37 +08:00
lyswhut
e5d2e089f4 在全屏状态下使用Esc键可以退出全屏 2022-05-19 14:57:42 +08:00
lyswhut
bfe7f24a4b 删除未下载完成的任务时,只同时尝试删除已有下载进度的本地文件(#849) 2022-05-17 10:07:34 +08:00
lyswhut
0d1e2c3349 更新链接 2022-05-17 09:22:43 +08:00
lyswhut
bc6272a0ed 更新依赖 2022-05-17 09:11:52 +08:00
lyswhut
56a752dc26 更新依赖 2022-05-13 10:48:32 +08:00
lyswhut
0fe443c92a 修复潜在歌单更新失败的问题 2022-05-12 12:03:45 +08:00
lyswhut
74afdb2a46 更新依赖 2022-05-11 15:52:04 +08:00
lyswhut
ebd6ff36ed 合并打包的页面文件 2022-05-11 15:37:06 +08:00
lyswhut
a5ec36bf89 新增设置-播放设置-显示歌词罗马音 2022-05-10 11:12:14 +08:00
lyswhut
c65802c1c3 修复长度大于一行的歌词在使用歌词调整播放进度时的时间不准问题 2022-05-10 09:36:12 +08:00
lyswhut
784515e411 修复原始歌词存在偏移时,歌词偏移设置的重置未按预期工作的问题 2022-05-09 14:07:31 +08:00
lyswhut
e859d39b2b 更新依赖 2022-05-08 13:34:59 +08:00
lyswhut
62c4bfb9eb 修复评论换行处理问题 2022-05-07 12:56:46 +08:00
lyswhut
8ab1bdf30a 修复关闭“显示切换动画”设置后,在应用启动时该设置没有被应用的问题 2022-05-05 16:02:09 +08:00
lyswhut
c758066e25 禁用透明窗口时右侧不再偏移5px距离 2022-05-05 14:57:04 +08:00
lyswhut
06b7f69b3c 同时删除一首歌以上时将需要二次确认删除 2022-05-04 10:06:02 +08:00
lyswhut
c3c43a2645 修复某些情况下歌曲播放出错时不会自动切歌的问题 2022-05-03 19:53:13 +08:00
lyswhut
343395a5de 更新依赖 2022-05-03 18:55:39 +08:00
lyswhut
3c9bb74b61 lint fix 2022-04-26 13:04:28 +08:00
lyswhut
c9cf30692f 更新依赖 2022-04-26 13:04:19 +08:00
lyswhut
c979339c4e Merge branch 'dev' 2022-04-17 10:06:33 +08:00
lyswhut
9393906eb9 修复构建 2022-04-17 10:06:13 +08:00
lyswhut
1b4c910264 Merge branch 'dev' 2022-04-17 09:08:06 +08:00
lyswhut
4db5d26b1e 发布v1.20.0 2022-04-17 09:07:44 +08:00
lyswhut
c09a4131db 修复歌词菜单弹出位置问题 2022-04-16 14:41:58 +08:00
lyswhut
ce6f3f23c6 修复歌曲匹配 2022-04-16 14:19:19 +08:00
lyswhut
7b898c2d91 更新依赖 2022-04-16 13:49:29 +08:00
lyswhut
3da797a0ad 修复linux构建 2022-04-13 20:04:25 +08:00
lyswhut
517899cd03 优化逻辑 2022-04-13 11:52:01 +08:00
lyswhut
1d6a14685e 更新依赖 2022-04-13 11:09:30 +08:00
lyswhut
737d00f550 修复正在下载的歌曲暂停任务后,再开始会导致程序卡死的问题 2022-04-13 11:08:29 +08:00
lyswhut
68798a9627 优化歌词选择UI问题 2022-04-11 11:56:22 +08:00
lyswhut
5b1dfee05c 修复歌曲信息更新时的保存问题 2022-04-10 22:40:28 +08:00
lyswhut
e75863e99d 跳过空白歌词 2022-04-10 22:25:25 +08:00
lyswhut
1c542a9b17 跳过空白歌词 2022-04-10 22:11:42 +08:00
lyswhut
729ac5a0d7 修复全屏切换的事件清理问题 2022-04-10 21:37:25 +08:00
lyswhut
ff8195df46 添加列表元数据清理 2022-04-10 21:03:40 +08:00
lyswhut
692ab6dacb 更新依赖 2022-04-10 20:28:29 +08:00
lyswhut
128039d678 修复歌词偏移处理问题 2022-04-09 13:42:12 +08:00
lyswhut
bb5de056d4 更新依赖 2022-04-09 10:40:45 +08:00
lyswhut
d927ac90e7 修复按键监听问题 2022-04-08 14:04:50 +08:00
lyswhut
f61099ecad 修改按键绑定 2022-04-08 11:43:43 +08:00
lyswhut
f96b663bbe 更新版本号 2022-04-07 19:29:18 +08:00
lyswhut
f65213f8aa 修复启用代理时,https请求可能被挂起或被转为http的问题 2022-04-07 14:41:09 +08:00
lyswhut
2e5adeb50c 优化滚动 2022-04-07 09:54:06 +08:00
lyswhut
6de84d3b9b 修复歌词调整时间显示问题 2022-04-07 09:24:09 +08:00
lyswhut
65ae08add6 修复网易歌单详情无法打开的问题 2022-04-07 08:28:02 +08:00
lyswhut
3c970c24c1 修复换源失败时的处理问题 2022-04-05 22:08:35 +08:00
lyswhut
93f3507dc8 添加说明 2022-04-05 17:15:29 +08:00
lyswhut
e92e291409 修复鼠标自动隐藏问题 2022-04-05 16:47:37 +08:00
lyswhut
4b4de8937e 更新windows下的图标 2022-04-05 14:34:56 +08:00
lyswhut
27a036bc00 优化布局 2022-04-04 20:56:40 +08:00
lyswhut
1eb2540c67 更新依赖 2022-04-04 20:11:30 +08:00
lyswhut
3a5bd6029f 更新版本号 2022-04-03 14:00:20 +08:00
lyswhut
249ff7f2d2 尝试修改应用名称 2022-04-03 13:56:39 +08:00
lyswhut
9afa965d5d 修复使用Scheme URL搜索歌曲时,不会自动关闭播放详情页(若处于打开状态)的问题 2022-04-03 00:37:38 +08:00
lyswhut
28b7b5581d 添加提示 2022-04-02 22:14:47 +08:00
lyswhut
26aab15e50 修复wy源搜索某些歌曲时第一页之后的歌曲无法加载的问题 2022-04-02 21:16:41 +08:00
lyswhut
92351049f1 修复潜在更新问题 2022-04-02 14:26:31 +08:00
lyswhut
47d3c50863 新增列表更新管理 2022-04-02 14:13:58 +08:00
lyswhut
36ac3532e6 修复歌词菜单的弹出问题 2022-04-01 14:29:07 +08:00
lyswhut
dee16f6943 修复播放详情页的鼠标隐藏问题 2022-04-01 14:28:22 +08:00
lyswhut
3541b568c9 更新版本号 2022-03-31 17:54:35 +08:00
lyswhut
4dfa4d9525 新增设置-桌面歌词设置-自动刷新歌词置顶 2022-03-31 17:54:22 +08:00
lyswhut
5938f4e591 修复窗口尺寸设置对应的字体大小在启动后不生效的问题 2022-03-31 13:19:50 +08:00
lyswhut
9ac26be65d 记录连接时间 2022-03-30 16:22:13 +08:00
lyswhut
5099ba9c96 添加源有效性校验 2022-03-30 13:14:23 +08:00
lyswhut
bca5b13516 修复鼠标不会隐藏的问题 2022-03-28 20:28:33 +08:00
lyswhut
6ceb984393 更新版本号 2022-03-28 19:04:40 +08:00
lyswhut
17b29f376a 更新说明文档 2022-03-28 18:46:13 +08:00
lyswhut
36bef673d3 在全屏状态下鼠标在空白处静止不动3秒后自动将其隐藏 2022-03-28 18:05:58 +08:00
lyswhut
c2fa4e5220 修复不启用热门搜索时,搜索历史不显示的问题 2022-03-28 14:11:03 +08:00
lyswhut
ddf06d20c2 移除右击调整 2022-03-28 13:04:43 +08:00
lyswhut
e51f640371 在全屏状态下的播放详情页仍会显示退出播放详情页按钮 2022-03-28 09:41:30 +08:00
lyswhut
e302f53d5c Update 2022-03-27 12:23:48 +08:00
lyswhut
b2058b9581 调整颜色 2022-03-26 14:59:13 +08:00
lyswhut
35501d328b 加深颜色 2022-03-26 13:15:39 +08:00
lyswhut
cb746c64db 更新版本号 2022-03-26 13:06:34 +08:00
lyswhut
e2f6d117bc 优化播放详情页背景显示 2022-03-26 13:06:07 +08:00
lyswhut
9fd9449eca 新增播放错误时自动切换歌曲设置 2022-03-25 15:52:33 +08:00
lyswhut
1f97af6ff1 修复歌词解析问题 2022-03-25 15:52:19 +08:00
lyswhut
f1a7862a9c 更新node版本 2022-03-25 14:34:12 +08:00
lyswhut
8aeac3ed2e 更新依赖 2022-03-25 10:24:47 +08:00
lyswhut
469832a598 通过歌词调整进度时添加对偏移时间的计算 2022-03-23 17:49:34 +08:00
lyswhut
e0e65e4374 更新版本号 2022-03-22 20:21:01 +08:00
lyswhut
66f78d6979 修复偏移标签的匹配问题 2022-03-22 20:19:16 +08:00
lyswhut
efc58f7dd1 更新版本号 2022-03-22 17:49:18 +08:00
lyswhut
bc301c27c2 新增播放详情页歌词右键菜单,新增歌词偏移设置 2022-03-22 16:55:44 +08:00
lyswhut
82ea1935de 修复任务栏收藏按钮的下载列表歌曲收藏问题 2022-03-21 10:03:35 +08:00
lyswhut
226fb05337 修复Linux无法全屏的问题 2022-03-20 20:16:01 +08:00
lyswhut
be219f03d5 typo 2022-03-20 14:28:59 +08:00
lyswhut
f10c1e923e Merge branch 'dev' 2022-03-20 13:52:15 +08:00
lyswhut
66121e5ff3 发布v1.19.0 2022-03-20 13:50:32 +08:00
lyswhut
478b71172d 添加切歌逻辑注释 2022-03-20 12:53:48 +08:00
lyswhut
e7370f12ae 切换devtools版本 2022-03-20 12:26:03 +08:00
lyswhut
b844a577c7 迁移提示文本字段 2022-03-20 12:04:01 +08:00
lyswhut
9bf33fdb25 优化播放下载列表时的切歌性能 2022-03-20 01:47:09 +08:00
lyswhut
8b988b227b 修复下载列表播放歌曲序号更新问题 2022-03-20 00:43:16 +08:00
lyswhut
8b2be019c6 移除偏移 2022-03-19 19:46:13 +08:00
lyswhut
4d7d92759f 过滤id重复的歌曲 2022-03-19 16:25:28 +08:00
lyswhut
798b840472 fix syntax 2022-03-19 13:07:43 +08:00
lyswhut
48db75a995 更新依赖 2022-03-19 13:05:49 +08:00
lyswhut
7072541ba7 Generate file MD5 2022-03-19 13:03:10 +08:00
lyswhut
7119c915ec 修复依赖漏洞警告问题 2022-03-18 20:30:58 +08:00
lyswhut
5e3035cc15 更新依赖 2022-03-18 19:32:00 +08:00
lyswhut
7cf2e4c4ed 修复歌单详情获取流程问题 2022-03-18 14:56:29 +08:00
lyswhut
674a3a0a3f 优化歌词解析 2022-03-18 14:36:00 +08:00
lyswhut
7486a99494 修改延迟 2022-03-18 13:15:52 +08:00
lyswhut
783d96bd7d 更新文档 2022-03-18 11:38:08 +08:00
lyswhut
64eea42092 优化歌词播放机制 2022-03-18 11:27:31 +08:00
lyswhut
8453ad0fb4 修复歌词播放问题 2022-03-18 11:26:52 +08:00
lyswhut
0acfeff006 优化托盘菜单操作#686 2022-03-18 10:56:28 +08:00
lyswhut
a338b7ef39 取消默认偏移 2022-03-15 15:29:53 +08:00
lyswhut
e821660124 添加动画 2022-03-15 11:23:58 +08:00
lyswhut
bad6045164 修复歌词解析问题 2022-03-15 10:54:51 +08:00
lyswhut
6779fd7ae5 优化歌词偏移时间计算 2022-03-15 10:23:47 +08:00
lyswhut
04858cc42c 修复歌词解析问题 2022-03-14 19:38:48 +08:00
lyswhut
916975b0a9 更新版本号 2022-03-14 17:59:38 +08:00
lyswhut
644db88e58 添加对歌词offset字段的支持 2022-03-14 17:37:27 +08:00
lyswhut
b025af45fa 优化歌词播放器 2022-03-14 17:06:50 +08:00
lyswhut
0f11731c01 修复歌词解析问题 2022-03-14 15:37:44 +08:00
lyswhut
ea1d21a3ef 修复歌词解析问题 2022-03-14 10:24:30 +08:00
lyswhut
545ba6521b 新增对kw源卡拉OK歌词的支持 2022-03-14 10:02:31 +08:00
lyswhut
1fd3e6c9fa 更换kw歌词获取方式 2022-03-13 15:00:43 +08:00
lyswhut
2913c0c7de 优化音频可视化与音频设备输出设置冲突的提示机制 2022-03-13 11:32:40 +08:00
lyswhut
a4c851899f 修复依赖漏洞警告 2022-03-12 21:32:51 +08:00
lyswhut
df1c58e79b 修复依赖安全警告 2022-03-12 20:53:59 +08:00
lyswhut
67edeab09b 更新版本号 2022-03-11 21:44:46 +08:00
lyswhut
fe07ac025a 修复设置的迁移问题 2022-03-11 21:44:38 +08:00
lyswhut
fc72d99ab3 优化大屏的UI布局 2022-03-11 21:36:33 +08:00
lyswhut
377f665361 修复UI问题 2022-03-11 20:44:40 +08:00
lyswhut
4e458ec4cb 修复计算问题 2022-03-11 20:08:41 +08:00
lyswhut
6f4500f31a 修复与优化列表渲染 2022-03-11 15:10:29 +08:00
lyswhut
a363c5525b 修复使用链接导入的歌单无法在我的列表打开原歌单详情页的问题 2022-03-11 12:02:59 +08:00
lyswhut
65027fceba 修复设置迁移问题 2022-03-11 11:30:47 +08:00
lyswhut
2b0c75a649 添加提示 2022-03-11 11:29:30 +08:00
lyswhut
bcc79541c1 优化大屏下的UI展示 2022-03-11 10:52:13 +08:00
lyswhut
081d6dc91e 修复评论列表显示问题 2022-03-11 10:10:01 +08:00
lyswhut
09a5111e36 修复列表渲染问题 2022-03-10 19:52:03 +08:00
lyswhut
253746843c 更新描述 2022-03-10 19:02:09 +08:00
lyswhut
5d2fac9247 更新版本号 2022-03-10 17:47:05 +08:00
lyswhut
3c2a1093a0 更新依赖 2022-03-10 17:46:41 +08:00
lyswhut
88b3d8ee4a 新增动态主题“道法自然” 2022-03-10 16:07:51 +08:00
lyswhut
d35a6f504f 优化下载、歌曲添加弹窗在大屏幕下的排版 2022-03-09 15:03:35 +08:00
lyswhut
4965dad6a2 修复评论宽度计算问题 2022-03-09 15:02:49 +08:00
lyswhut
3ad4584159 修复设置意外被更改的问题 2022-03-08 18:20:09 +08:00
lyswhut
5e291255bb 修复切换全屏问题 2022-03-08 18:02:45 +08:00
lyswhut
205c99372e 修复标签列表宽度问题 2022-03-08 17:42:42 +08:00
lyswhut
a05f3a969b 更新版本号 2022-03-08 17:19:57 +08:00
lyswhut
3acc0931d8 新增全屏状态 2022-03-08 17:19:34 +08:00
lyswhut
05f6a953ea 添加音频可视化与音频输出设备冲突的提示 2022-03-08 14:51:29 +08:00
lyswhut
6253368f05 更新版本号 2022-03-08 08:32:00 +08:00
lyswhut
9483f2f178 修复依赖 2022-03-07 19:10:15 +08:00
lyswhut
8df6e7ef90 修复展开评论时的歌词大小问题 2022-03-07 17:23:33 +08:00
lyswhut
b09dba0a95 添加通过歌词调整播放进度开关设置 2022-03-07 16:10:18 +08:00
lyswhut
cfee4a0b24 新增通过播放详情页歌词调整播放进度 2022-03-07 15:33:04 +08:00
lyswhut
34febf4949 确保音频输出改变时能暂停播放 2022-03-06 21:57:32 +08:00
lyswhut
6aed9dfb9f 修复Windows任务栏缩略图工具栏控制按钮的歌曲收藏按钮状态更新问题 2022-03-06 21:38:45 +08:00
lyswhut
c7360993c9 更新说明 2022-03-06 14:29:44 +08:00
lyswhut
34a072bada 修复展开评论时的歌词间隔问题 2022-03-06 13:43:58 +08:00
lyswhut
dda0d54f20 添加歌词间隔跟随字体大小改变 2022-03-06 13:33:13 +08:00
lyswhut
d710c31d48 修复翻译依赖导致的错误 2022-03-06 13:11:03 +08:00
lyswhut
02c74f7d96 修复AppImage包无法运行的问题 2022-03-06 10:27:37 +08:00
lyswhut
5bdccba29e 修复高度塌陷的问题 2022-03-05 16:11:25 +08:00
lyswhut
cdc819fbe8 新增对播放详情页歌词大小、是否缩放、对齐方式的设置 2022-03-05 16:06:45 +08:00
lyswhut
4629d4cd3e 修复桌面歌词没有处理停止播放状态的问题 2022-03-03 17:39:33 +08:00
lyswhut
ba3a70c524 更新快捷操作说明 2022-03-03 13:15:56 +08:00
lyswhut
52b985dd8e 更新依赖 2022-03-02 18:41:29 +08:00
lyswhut
b51c8e1552 修复“当前的声音输出设备被改变时暂停播放歌曲”设置无效的问题 2022-02-28 12:00:54 +08:00
lyswhut
86f9c03707 添加LX中定义的快捷操作汇总说明 2022-02-27 12:25:53 +08:00
lyswhut
e61c84ee08 优化Windows任务栏缩略图工具栏控制按钮在浅色任务栏下的显示效果 2022-02-27 11:36:18 +08:00
lyswhut
2f39808275 Merge branch 'dev' 2022-02-26 13:39:58 +08:00
lyswhut
f5aee4cbd0 修复依赖 2022-02-26 13:39:37 +08:00
lyswhut
9fd9bb4eef Merge branch 'dev' 2022-02-26 13:31:14 +08:00
lyswhut
685cae8993 更新依赖 2022-02-26 13:30:54 +08:00
lyswhut
ec14aadec6 Merge branch 'dev' 2022-02-26 13:14:33 +08:00
lyswhut
b934770e1e 更新依赖 2022-02-26 13:14:19 +08:00
lyswhut
2f76433f34 Merge branch 'dev' 2022-02-26 12:58:31 +08:00
lyswhut
535c63be2b 修改构建顺序 2022-02-26 12:57:58 +08:00
lyswhut
53d4f08ee7 Merge branch 'dev' 2022-02-26 12:22:00 +08:00
lyswhut
81b72fe72b 发布v1.18.0 2022-02-26 12:21:40 +08:00
lyswhut
e496794052 更新依赖 2022-02-26 12:19:48 +08:00
lyswhut
442b4fb30f 分离方法 2022-02-25 10:26:59 +08:00
lyswhut
9528b10d01 添加debug启动参数 2022-02-25 10:18:57 +08:00
lyswhut
a9f9c887b5 更新版本号 2022-02-24 17:25:03 +08:00
lyswhut
6105a331aa 修复播放器的停止逻辑问题 2022-02-24 17:23:33 +08:00
lyswhut
0f0be95c12 修复任务栏按钮的控制问题 2022-02-24 17:21:36 +08:00
lyswhut
d6ca9e4539 修复windows平台下软件目录存在portable文件夹时,仍会在默认目录创建文件的问题 2022-02-24 13:09:13 +08:00
lyswhut
d3b5171237 优化滚动 2022-02-22 17:05:18 +08:00
lyswhut
cf501ac19e 修复字体设置不生效的问题 2022-02-22 08:56:10 +08:00
lyswhut
4fd4746ddf 更新版本号 2022-02-21 17:41:56 +08:00
lyswhut
61c1476823 新增任务栏缩略图工具栏控制按钮 2022-02-21 16:05:41 +08:00
lyswhut
e28b8bb6e8 修改默认字体 2022-02-21 10:28:09 +08:00
lyswhut
5eb9107adf 新增设置-基本设置-软件字体设置 2022-02-20 17:22:58 +08:00
lyswhut
83ddf74890 修复歌单详情的播放按钮无效的问题 2022-02-18 17:21:11 +08:00
lyswhut
6aa7f2a0ee 移除多余样式 2022-02-18 16:34:35 +08:00
lyswhut
d801d55c3c 修复进度条动画问题 2022-02-18 16:21:03 +08:00
lyswhut
491e644c3c 修改进度条高度 2022-02-18 16:15:08 +08:00
lyswhut
5844232a00 添加源数量限制 2022-02-18 15:50:51 +08:00
lyswhut
abbf067625 修复歌单无法从用data传参调用的问题 2022-02-18 14:48:15 +08:00
lyswhut
806c882965 更新说明 2022-02-18 11:26:17 +08:00
lyswhut
3fe5a85ffe 更新依赖 2022-02-18 10:33:56 +08:00
lyswhut
95dae62bb3 更新说明 2022-02-17 16:29:42 +08:00
lyswhut
f7edd54ea7 修复宽度计算问题 2022-02-17 15:48:55 +08:00
lyswhut
78ae89199e 更新说明 2022-02-17 14:53:51 +08:00
lyswhut
fc12a235f2 自定义源添加更新地址参数 2022-02-17 10:13:45 +08:00
lyswhut
48fc96226c 更新版本号 2022-02-16 18:38:11 +08:00
lyswhut
3534dd27dc 自定义源新增更新弹窗方法 2022-02-16 18:32:55 +08:00
lyswhut
a7e3c1a0c4 优化进度条动画 2022-02-16 11:30:35 +08:00
lyswhut
43c5051158 打开播放详情页时隐藏外部进度条 2022-02-16 10:33:52 +08:00
lyswhut
2f56a7090a 新增Scheme URL对音乐搜索的调用支持;新增Scheme URL以url传参的方式调用 2022-02-15 18:49:02 +08:00
lyswhut
13ffcfbbcd 更新调用错误信息弹窗按钮文案 2022-02-15 15:29:13 +08:00
lyswhut
1aeb8e29e2 更新依赖 2022-02-15 15:13:25 +08:00
lyswhut
a3b844d2e3 添加缺失的翻译 2022-02-14 15:55:12 +08:00
lyswhut
5aa027f1a9 修复问题 2022-02-14 15:48:43 +08:00
lyswhut
c12be6a1c8 新增定时暂停播放功能 2022-02-14 15:38:27 +08:00
lyswhut
c891ed81e1 修复某些歌曲无法下载的问题 2022-02-13 14:17:38 +08:00
lyswhut
c48921990d 修复下载功能的歌词换源时会进入死循环的问题 2022-02-13 14:16:45 +08:00
lyswhut
54bfd945e5 修复wy源某些歌曲获取歌词翻译的问题处理 2022-02-13 14:14:23 +08:00
lyswhut
1d8c4db5eb 更新版本号 2022-02-12 18:25:39 +08:00
lyswhut
055ab98d4c 把歌曲的热门评论与最新评论拆分成两个列表显示 2022-02-11 19:38:51 +08:00
lyswhut
777551cb43 新增打开收藏的在线列表的对应平台详情页功能 2022-02-11 16:51:39 +08:00
lyswhut
68827f7697 修复修改列表名时无法使用Ctrl键的问题 2022-02-11 16:06:07 +08:00
lyswhut
8e5b144f00 新增“双击列表里的歌曲时自动切换到当前列表播放”设置 2022-02-10 12:48:01 +08:00
lyswhut
748a420b64 修复排行榜名字右击菜单的播放功能在播放非激活的列表时的列表获取问题 2022-02-09 21:02:43 +08:00
lyswhut
80fc43a075 更新依赖 2022-02-09 19:53:26 +08:00
lyswhut
0588f2846b 添加链接 2022-02-08 17:34:58 +08:00
lyswhut
8e4e7d9efa 更新依赖 2022-02-07 13:02:46 +08:00
lyswhut
6df01edc7a 更新electron到v13.6.9 2022-02-04 18:30:06 +08:00
lyswhut
996396c943 过滤tx源某些不支持播放的歌曲,解决播放此类内容会导致意外的问题 2022-02-04 18:29:48 +08:00
lyswhut
e3dddb9288 Merge branch 'dev' 2022-01-28 19:16:01 +08:00
lyswhut
47ce71c959 发布v1.17.1 2022-01-28 19:09:56 +08:00
lyswhut
8921aeb3f2 更新依赖 2022-01-28 19:08:13 +08:00
lyswhut
35be9739d4 修复列表的聚焦问题 2022-01-27 09:33:49 +08:00
lyswhut
f5ce46431b 修复快捷键与默认按键行为冲突的问题 2022-01-27 09:31:28 +08:00
lyswhut
81ed70d291 更新依赖 2022-01-26 17:49:25 +08:00
lyswhut
4b0fdceb76 优化kw源英文与翻译歌词的匹配 2022-01-26 17:47:03 +08:00
lyswhut
58e537732c 更新依赖 2022-01-25 17:36:35 +08:00
lyswhut
02ad79b12a 更新依赖 2022-01-24 16:01:26 +08:00
lyswhut
b179887efc 更新链接 2022-01-22 13:27:06 +08:00
lyswhut
0580b059fc Merge branch 'dev' 2022-01-22 13:02:05 +08:00
lyswhut
bebd0e7258 发布v1.17.0 2022-01-22 13:01:38 +08:00
lyswhut
6e96b2163e 更新依赖 2022-01-22 13:00:18 +08:00
lyswhut
ca15ac987c 更新依赖 2022-01-21 16:46:01 +08:00
lyswhut
6d3414caa9 更新版本号 2022-01-18 16:41:18 +08:00
lyswhut
85b80312e0 修改颜色 2022-01-18 16:04:26 +08:00
lyswhut
30d5f53c1d 更新已收藏的在线列表时,将始终重新加载,不再使用缓存 2022-01-18 15:34:48 +08:00
lyswhut
bad2e98757 更新依赖 2022-01-18 08:49:56 +08:00
lyswhut
45da396cb2 修复tx源无搜索结果的问题 2022-01-18 08:49:36 +08:00
lyswhut
d195176a46 修复列表跳转问题 2022-01-17 09:21:12 +08:00
lyswhut
53078f79a6 新增桌面歌词是否延迟滚动设置 2022-01-16 20:00:22 +08:00
lyswhut
dbb7f0c683 更新版本号 2022-01-16 13:54:54 +08:00
lyswhut
cb7703ecbb 修复从网页打开歌单时无法收藏的问题 2022-01-16 13:54:07 +08:00
lyswhut
e63d7174bb 加深颜色 2022-01-16 11:34:07 +08:00
lyswhut
31ab7a0493 更新文档 2022-01-15 16:28:21 +08:00
lyswhut
c503f09529 新增“便携”功能 2022-01-15 16:28:16 +08:00
lyswhut
f5bb9189af 修复播放状态的提示问题 2022-01-14 17:24:38 +08:00
lyswhut
9ed8ba80c4 更新依赖 2022-01-14 13:34:29 +08:00
lyswhut
f9cce82a93 更新依赖 2022-01-14 11:19:26 +08:00
lyswhut
79d418d1a1 修复依赖 2022-01-13 08:39:48 +08:00
lyswhut
15d7f73aca 更新依赖 2022-01-12 22:59:51 +08:00
lyswhut
4561870ece 修复构建 2022-01-12 18:01:40 +08:00
lyswhut
dbc8c9d07d 更新依赖 2022-01-12 17:16:21 +08:00
lyswhut
d81a2029ec 更新版本号 2022-01-12 16:55:51 +08:00
lyswhut
d04a5a2f92 更新依赖 2022-01-12 16:52:12 +08:00
lyswhut
5146f083ff 新增打开主窗口开发者工具快捷键 2022-01-11 16:58:33 +08:00
lyswhut
57122c6eea 优化代码 2022-01-11 15:40:06 +08:00
lyswhut
ca748906c0 修复从Scheme URL启动软件打开歌单详情时会加载两次的问题 2022-01-11 15:25:35 +08:00
lyswhut
4d31bde98a 更新版本号 2022-01-08 01:36:31 +08:00
lyswhut
3f98c332bd 修复问题 2022-01-08 01:25:05 +08:00
lyswhut
fb3eced1fb 添加类型 2022-01-07 23:02:01 +08:00
lyswhut
9641ea0b3a 修复url长度校验 2022-01-07 23:01:50 +08:00
lyswhut
1df05a5529 修复文档显示问题 2022-01-07 17:59:40 +08:00
lyswhut
a393bb02dd 新增 Scheme URL 支持 2022-01-07 17:23:48 +08:00
lyswhut
20518cbe2b 更新依赖 2022-01-07 09:42:02 +08:00
lyswhut
9447034deb 修复稍后播放问题 2022-01-06 18:27:30 +08:00
lyswhut
c7f0fcbe9f 调整音频可视化参数 2022-01-05 15:51:49 +08:00
lyswhut
fce8719432 优化程序初始化逻辑,修复无网络的情况下的初始化问题 2022-01-05 11:50:13 +08:00
lyswhut
ce383769da 更新版本号 2022-01-05 11:18:14 +08:00
lyswhut
342af62aea 修复openDevTools选项无效的问题 2022-01-05 11:17:29 +08:00
lyswhut
b3ab05cc86 新增启动参数-proxy-server-proxy-bypass-list 2022-01-04 15:27:25 +08:00
lyswhut
36966e220c 修复代理不生效的问题 2022-01-04 15:27:20 +08:00
lyswhut
8ae3347c05 减淡新年主题搜索框底色 2022-01-04 10:13:41 +08:00
lyswhut
4f51a8ce31 优化频谱、修改频谱均值加成 2022-01-04 09:41:18 +08:00
lyswhut
1371bbe6fb 为可视化音频的频谱整体添加频谱均值加成,使频谱显示更有节奏感 2022-01-03 16:36:08 +08:00
lyswhut
94f4c9e334 修复播放列表为空时点击播放按钮会报错的问题 2022-01-01 16:26:17 +08:00
lyswhut
c5c89f9d9e Merge branch 'dev' 2022-01-01 15:28:19 +08:00
lyswhut
6a79f8ec0d 发布v1.16.0 2022-01-01 15:27:52 +08:00
lyswhut
aa940ef9f7 更新依赖 2022-01-01 15:06:46 +08:00
lyswhut
7a20f06cf4 修复界面切换问题 2022-01-01 15:06:17 +08:00
lyswhut
b9596f2a6e 更新新年皮肤 2022-01-01 14:37:40 +08:00
lyswhut
bb2dfc269c 修正错别字 2021-12-31 19:29:58 +08:00
lyswhut
684af4e7db 调整添加按钮宽度 2021-12-31 11:55:55 +08:00
lyswhut
1c946ac661 添加帮助图标 2021-12-31 11:48:11 +08:00
lyswhut
f8d06d38ab 修改右边位置时的控制按钮为windows风格 2021-12-31 10:07:05 +08:00
lyswhut
2a679c914b 降级node 2021-12-30 19:12:58 +08:00
lyswhut
3f8d5ed570 更新版本号 2021-12-27 18:14:58 +08:00
lyswhut
028c2f9f03 我的列表新增拖动调整位置功能 2021-12-27 18:14:43 +08:00
lyswhut
b783c0c227 修复列表无法重命名的问题 2021-12-27 15:57:02 +08:00
lyswhut
30787a372e 禁用拼写检查 2021-12-27 11:19:11 +08:00
lyswhut
b99169cc3b 更新说明 2021-12-25 22:56:59 +08:00
lyswhut
78cf146a92 修复潜在歌词滚动问题 2021-12-25 15:42:32 +08:00
lyswhut
b867167b78 优化 2021-12-24 19:31:50 +08:00
lyswhut
d8dfbf6995 更新版本号 2021-12-24 17:40:16 +08:00
lyswhut
c2d6737796 播放详情页新增音频可视化功能 2021-12-24 17:39:50 +08:00
lyswhut
dcfe055461 更新依赖 2021-12-24 11:40:31 +08:00
lyswhut
c86b1c259c 为播放详情页、桌面歌词添加延迟滚动,播放详情页略微减小已激活歌词的缩放大小及桌面歌词翻译大小 2021-12-24 11:06:00 +08:00
lyswhut
400c16ba2d 更新版本号 2021-12-23 17:49:37 +08:00
lyswhut
3ff0dbb7ef 优化歌单、排行榜一键播放按钮的播放机制 2021-12-23 15:28:01 +08:00
lyswhut
469a88f368 优化歌词滚动 2021-12-23 11:31:38 +08:00
lyswhut
217ff27e72 优化列表滚动性能 2021-12-23 10:37:51 +08:00
lyswhut
e337f7121b 为导出CSV文件头部自动应用相应翻译 2021-12-19 19:41:51 +08:00
lyswhut
665ac5ee99 更新版本号 2021-12-19 19:09:09 +08:00
lyswhut
f06c493458 调整评论组件位置 2021-12-19 18:23:42 +08:00
lyswhut
f383e47344 修复播放栏的歌曲添加按钮打开的添加窗口不会自动关闭的问题 2021-12-19 18:23:21 +08:00
lyswhut
e15518cd51 为CSV格式添加头部 2021-12-18 13:06:26 +08:00
lyswhut
27ce62dd4f 修复列表顺序同步问题 2021-12-18 13:03:26 +08:00
lyswhut
26202d8e56 更新版本号 2021-12-17 17:46:28 +08:00
lyswhut
d93b5a3374 支持对移动端的位置同步调整 2021-12-17 17:36:10 +08:00
lyswhut
e3acb7ce4e 同步功能添加对列表顺序调整的控制 2021-12-17 17:18:56 +08:00
lyswhut
5b7c965c48 更新依赖 2021-12-17 14:51:58 +08:00
lyswhut
5f1e670dd7 更新win图标 2021-12-16 17:29:58 +08:00
lyswhut
ab1562ea33 添加一个获取歌曲URL超时的定时器 2021-12-15 09:00:55 +08:00
lyswhut
2359a1444b 修复最小化托盘设置不起作用的问题 2021-12-14 23:00:20 +08:00
lyswhut
9075b6629f 整理事件代码 2021-12-14 20:24:11 +08:00
lyswhut
583e8c43d6 移除多余代码 2021-12-14 20:02:39 +08:00
lyswhut
26369dd14b 更新版本号 2021-12-14 17:47:27 +08:00
lyswhut
9d40e7c004 修复热搜词获取问题 2021-12-13 15:57:45 +08:00
lyswhut
267535844e 更新依赖 2021-12-13 14:10:32 +08:00
lyswhut
0f5d2189e0 修复无法关闭状态栏歌曲进度的问题 2021-12-13 14:07:26 +08:00
lyswhut
f76f4d9d29 修复保存歌曲进度设置问题 2021-12-13 13:12:50 +08:00
lyswhut
2ba5e40012 移除多余代码 2021-12-12 21:48:36 +08:00
lyswhut
1fe6ae4556 修复某些情况下切歌会导致错误的状态提示内容 2021-12-12 20:14:10 +08:00
lyswhut
3d8a1894f6 还原linux平台下的图标更改 2021-12-11 17:14:07 +08:00
lyswhut
70cfce833c 更新版本号 2021-12-11 16:24:27 +08:00
lyswhut
96c3034a07 修复调整当前播放歌曲的位置时会导致切歌的问题 2021-12-11 16:24:00 +08:00
lyswhut
5aad81c696 修复刚从线列表的歌曲无法批量添加、添加到我的列表后无法调整顺序等问题 2021-12-11 15:54:08 +08:00
lyswhut
b0e2f44f01 修复歌曲搜索多选不准确的问题 2021-12-11 15:32:56 +08:00
lyswhut
442e633800 修复无法移动歌曲的问题 2021-12-11 14:46:27 +08:00
lyswhut
5f1e788a25 调整linux、Mac平台下的图标大小 2021-12-11 13:50:05 +08:00
lyswhut
3808e7e78f 修改图标大小 2021-12-10 21:02:17 +08:00
lyswhut
650edc1b1e 修复歌曲排序描述 2021-12-10 20:28:04 +08:00
lyswhut
cb5e1bd795 更新依赖 2021-12-10 14:21:09 +08:00
lyswhut
3282557769 修复无法批量稍后播放的问题 2021-12-10 08:37:26 +08:00
lyswhut
dff18b6b9d 修复潜在报错 2021-12-09 17:51:51 +08:00
lyswhut
2a64ead1c4 添加加载超时时尝试刷新URL 2021-12-08 17:51:06 +08:00
lyswhut
eb0a61d35b 添加图片加载失败的处理 2021-12-08 17:18:37 +08:00
lyswhut
ddca70980e 修改托盘图标顺序 2021-12-07 17:48:01 +08:00
lyswhut
5aa3502ef5 调整黑色主题翻页器背景颜色 2021-12-07 15:07:23 +08:00
lyswhut
3b02703805 添加vue devtools 2021-12-07 11:32:19 +08:00
lyswhut
f39d13c8f8 更新版本号 2021-12-06 18:58:02 +08:00
lyswhut
16a203227a 修复问题 2021-12-06 18:56:56 +08:00
lyswhut
b350f133b0 新增将播放与下载的歌词转换为繁体中文选项 2021-12-06 16:07:12 +08:00
lyswhut
ec3a0e08c3 新增根据歌曲名、歌手名等字段对列表自动排序的功能 2021-12-06 15:33:36 +08:00
lyswhut
a96eea5e44 修复切换切歌模式切换时提示实时不更新的问题 2021-12-05 23:17:27 +08:00
lyswhut
0dc7815e35 新增将我的列表保存为TXT、CSV格式 2021-12-05 21:36:46 +08:00
lyswhut
7f6e1c25e9 修复列表搜索不能用键盘选择的问题 2021-12-05 19:16:33 +08:00
lyswhut
9291c35b00 修复某些歌曲评论的时间显示 2021-12-05 18:58:30 +08:00
lyswhut
90b67fc05c 优化快捷键设置 2021-12-04 20:32:22 +08:00
lyswhut
09afd2c6f8 修复列表高度计算问题 2021-12-04 19:10:04 +08:00
lyswhut
1def571191 添加源显示 2021-12-04 18:09:21 +08:00
lyswhut
ef52f2465e 优化 2021-12-04 17:32:02 +08:00
lyswhut
845e5de43f 移除日志 2021-12-04 17:28:55 +08:00
lyswhut
b7433264eb 更新版本号 2021-12-04 17:26:36 +08:00
lyswhut
60e606a413 修复问题 2021-12-04 17:25:21 +08:00
lyswhut
9afafec9d6 修复列表问题 2021-12-04 02:25:55 +08:00
lyswhut
c9cb84a28d 修复导入 2021-12-04 02:15:08 +08:00
lyswhut
8949383ade 修复列表操作问题 2021-12-04 01:55:36 +08:00
lyswhut
f732ea4dab 关闭devtools 2021-12-04 01:45:28 +08:00
lyswhut
162842415f 移除日志 2021-12-04 01:44:20 +08:00
lyswhut
07d200a752 修复同步问题 2021-12-04 01:30:34 +08:00
lyswhut
822e1ea6c9 修复搜索问题 2021-12-04 00:27:13 +08:00
lyswhut
f79ae1541d 修复批量下载 2021-12-04 00:00:19 +08:00
lyswhut
2dfa93383f 修复kw源某些歌曲的歌词提取异常的问题 2021-12-03 23:46:41 +08:00
lyswhut
1ab5db8507 添加vue eslint规则,修复问题 2021-12-03 23:45:03 +08:00
lyswhut
ccd951b5d3 修复 2021-12-03 22:27:36 +08:00
lyswhut
6259690d12 更新依赖 2021-12-03 22:12:42 +08:00
lyswhut
8059d9cd73 升级到 vue3 2021-12-03 22:11:11 +08:00
lyswhut
c6635e554a 更新依赖 2021-12-03 21:49:49 +08:00
lyswhut
d7ca662e70 更新说明 2021-11-29 10:45:55 +08:00
lyswhut
b6f885b250 优化歌词自动换源机制 2021-11-28 01:54:45 +08:00
lyswhut
63141c4ac9 优化进度条逻辑 2021-11-28 00:15:51 +08:00
lyswhut
94e9f01e62 Merge branch 'dev' 2021-11-21 12:13:30 +08:00
lyswhut
cffa74b1c2 发布v1.15.3 2021-11-21 12:12:00 +08:00
lyswhut
1fb917941e 更新依赖 2021-11-21 12:10:45 +08:00
lyswhut
08c6a4e2fb 修复列表切换问题 2021-11-19 22:15:58 +08:00
lyswhut
976be6d96f 修复因kw源歌词接口停用导致该源歌词获取失败的问题 2021-11-18 14:51:00 +08:00
lyswhut
fe95b45820 更新依赖 2021-11-13 23:29:18 +08:00
lyswhut
47dffeee76 修复潜在的音乐加载超时不会切歌的问题 2021-11-13 23:29:09 +08:00
lyswhut
be7b06f5c8 修复播放下载列表时存在失效的歌曲会导致切歌不准确的问题 2021-11-13 23:29:00 +08:00
lyswhut
3a371f8d75 修复设置-控制按钮位置选项与下载歌词编码格式选项命名冲突导致选项显示异常的问题 2021-11-13 23:04:27 +08:00
lyswhut
fa97058895 优化字典#682 2021-11-13 21:57:01 +08:00
lyswhut
df9289367b 修改文案 2021-11-09 20:07:29 +08:00
lyswhut
3a824b1d5e 更新模板 2021-11-09 20:03:03 +08:00
lyswhut
6f72da87b1 Merge branch 'dev' of github.com:lyswhut/lx-music-desktop into dev 2021-11-09 19:34:55 +08:00
lyswhut
1b1c5ad6da Merge branch 'dev' 2021-11-09 18:37:40 +08:00
lyswhut
f4777f787c 发布v1.15.2 2021-11-09 18:37:19 +08:00
lyswhut
6bcf45fba7 降级electron到v13.4.0 2021-11-09 18:35:17 +08:00
lyswhut
1e8a05e313 更新问题模板 2021-11-09 16:54:55 +08:00
lyswhut
1cf0f2dd0b Merge branch 'dev' 2021-11-09 09:25:40 +08:00
lyswhut
25a0439928 发布v1.15.1 2021-11-09 09:25:13 +08:00
lyswhut
df20e97d60 添加媒体播放进度条的信息设置 2021-11-09 09:17:21 +08:00
lyswhut
fd764a28a4 更新electron到v15.3.1 2021-11-09 08:52:00 +08:00
lyswhut
81bd8fbb74 支持启动软件时恢复播放下载列表里的歌曲 2021-11-06 16:15:29 +08:00
lyswhut
47ee572640 更新依赖 2021-11-06 14:26:33 +08:00
lyswhut
a0b9553158 优化播放详情页的打开 2021-11-06 14:26:16 +08:00
lyswhut
7659a6cadf 更新说明 2021-11-03 16:30:31 +08:00
lyswhut
a65bae8243 移除过时的选项 2021-11-03 16:30:22 +08:00
lyswhut
421abac30a 更新依赖 2021-11-03 16:29:58 +08:00
lyswhut
0b11e97427 添加列表歌手、专辑的提示气泡 2021-11-03 16:27:13 +08:00
lyswhut
fbe1ff73f1 修复下载列表无法切下一首歌的问题 2021-11-03 16:26:43 +08:00
lyswhut
68e831468b 修复潜在播放详情页问题 2021-11-01 09:21:54 +08:00
lyswhut
e382f0dba0 优化下载功能的添加、删除、暂停任务时的流畅度 2021-10-31 21:50:57 +08:00
lyswhut
f0f92952d6 优化我的列表、下载列表等列表的滚动流畅度 2021-10-30 12:16:58 +08:00
lyswhut
58f016ca00 修复潜在同步问题 2021-10-30 10:07:08 +08:00
lyswhut
faff0edb4a 更新 2021-10-29 21:16:30 +08:00
lyswhut
5e9a9e5b55 移除多余代码 2021-10-29 20:29:28 +08:00
lyswhut
e182dde718 修复了某些情况下会列表同步失败,导致连接断开无限重连的问题 2021-10-29 20:09:43 +08:00
lyswhut
7dfc2e8736 修复列表数据过大导致同步失败的问题 2021-10-29 20:09:37 +08:00
lyswhut
b27a547fb8 修复某些情况下获取URL失败时会意外切歌的问题 2021-10-29 20:05:11 +08:00
lyswhut
379c752cf8 Merge branch 'dev' 2021-10-29 15:15:03 +08:00
lyswhut
35abdc63d4 降级 electron-builder 2021-10-29 15:14:41 +08:00
lyswhut
a386915b50 Merge branch 'dev' 2021-10-29 14:23:27 +08:00
lyswhut
ab16bc849d 发布v1.15.0 2021-10-29 14:23:03 +08:00
lyswhut
90007127ba 更新依赖 2021-10-29 14:21:04 +08:00
lyswhut
a1935cbdac 修复列表项高度随窗口的大小适配问题 2021-10-29 14:20:51 +08:00
lyswhut
7de91bd923 更新图标 2021-10-28 09:56:23 +08:00
lyswhut
cdbcae21ac 添加黑色托盘图标 2021-10-27 17:11:35 +08:00
lyswhut
ea62033cf3 修改图标 2021-10-27 16:21:41 +08:00
lyswhut
a48423944a 修复缺失的包问题 2021-10-27 14:22:02 +08:00
lyswhut
b7fb3cd208 调整图标尺寸 2021-10-27 14:21:32 +08:00
lyswhut
34825b5063 兼容桌面歌词以触摸的方式移动、调整大小 2021-10-26 15:51:48 +08:00
lyswhut
7737012103 更新依赖 2021-10-26 15:33:14 +08:00
lyswhut
3912a375c5 更新版本号 2021-10-26 14:44:35 +08:00
lyswhut
35ca6db1ee 优化我的列表、下载、歌单、排行榜列表性能 2021-10-26 14:44:15 +08:00
lyswhut
0d20869337 优化进入、离开播放详情页的性能 2021-10-26 10:30:01 +08:00
lyswhut
89d161268e 更新说明 2021-10-23 20:12:49 +08:00
lyswhut
5ae39ef8d3 更新依赖 2021-10-21 14:57:34 +08:00
lyswhut
e57696d4ff 优化开关评论时的动画性能 2021-10-17 13:49:35 +08:00
lyswhut
15c9a5468b 更新依赖 2021-10-15 20:08:46 +08:00
lyswhut
30318b7c61 更新版本号 2021-10-15 19:56:01 +08:00
lyswhut
8b0fc9bf5f 更新 Electron 到 v15.2.0 2021-10-15 19:54:48 +08:00
lyswhut
5fdba7720c 添加弹窗 2021-10-14 08:54:33 +08:00
lyswhut
ca12dc604d 完善评论 2021-10-13 12:00:02 +08:00
lyswhut
09f4d8ac0c 修复同一首歌的URL、歌词等同时需要换源时的处理问题 2021-10-09 10:21:34 +08:00
lyswhut
254b82cc60 修复kg源的歌单链接无法打开的问题 2021-10-07 20:01:19 +08:00
lyswhut
d4240006f1 自定义源新增version字段,新增utils.buffer.bufToString方法 2021-10-07 12:28:03 +08:00
lyswhut
68518e609d 增加自定义脚本名字长度 2021-10-07 10:22:30 +08:00
lyswhut
001eba6729 优化列表同步代码逻辑 2021-10-06 13:37:23 +08:00
lyswhut
ff47a224c7 Merge branch 'dev' 2021-10-04 12:28:08 +08:00
lyswhut
8810e25ea9 发布v1.14.1 2021-10-04 12:22:52 +08:00
lyswhut
eb67d67a60 修复v1.14.0出现的备份与恢复功能备份的数据无法恢复的问题 2021-10-04 12:22:16 +08:00
lyswhut
e12f95ff74 更新版本号 2021-10-03 11:00:20 +08:00
lyswhut
2fe213d060 修复我的列表搜索输入某些字符会导致应用崩溃的问题 2021-10-03 10:55:09 +08:00
lyswhut
b726ee42f7 Merge branch 'dev' 2021-10-02 13:43:46 +08:00
lyswhut
6b71b4709e 发布v1.14.0 2021-10-02 13:43:19 +08:00
lyswhut
0701b78720 优化英文歌曲名匹配 2021-10-01 22:47:55 +08:00
lyswhut
82d1ac1e83 更新依赖 2021-10-01 22:18:50 +08:00
lyswhut
8acf98631f 更新版本号 2021-10-01 22:16:08 +08:00
lyswhut
0a31d19561 新增重复歌曲列表 2021-10-01 22:15:45 +08:00
lyswhut
91279922f1 新增歌词文本选择复制功能 2021-10-01 12:30:07 +08:00
lyswhut
96804ae2e2 更新版本号 2021-09-30 16:45:20 +08:00
lyswhut
3ae8a89961 更新依赖 2021-09-30 16:44:32 +08:00
lyswhut
f8f13fd32c 优化歌词处理 2021-09-30 14:56:35 +08:00
lyswhut
ae61d2c629 调整位置 2021-09-30 14:56:24 +08:00
lyswhut
b1918e8b15 新增删除列表前的确认弹窗 2021-09-30 14:45:14 +08:00
lyswhut
ce7bca5b36 新增单个列表导入/导出功能 2021-09-30 14:27:32 +08:00
lyswhut
51be62bc29 更新依赖 2021-09-30 08:52:14 +08:00
Unintended
c1ff3971de Typo (#643) 2021-09-25 11:16:56 +08:00
Wei Yijun
57db286405 修复GNOME等桌面下每次打开应用时需重新设置歌词窗口置顶的问题 (#636) 2021-09-22 10:33:48 +08:00
lyswhut
592b670e96 更新版本号 2021-09-18 17:31:21 +08:00
lyswhut
97fdcaac51 新增歌词简体中文转繁体中文,当软件语言被设置为繁体中文后,播放歌曲的歌词也将自动转成繁体中文显示 2021-09-18 17:30:46 +08:00
lyswhut
271d9ac13e 更新依赖 2021-09-15 17:08:38 +08:00
lyswhut
b6cea110a7 修复在有提示信息的地方长按鼠标按键时提示信息会闪烁的问题 2021-09-11 15:39:02 +08:00
lyswhut
4b5dae4779 修复点击播放详情页的进度条跳进度时会出现偏移的问题 2021-09-10 14:31:07 +08:00
lyswhut
a250317a28 修复mg排行榜无法加载的问题 2021-09-09 16:45:10 +08:00
lyswhut
431605e793 Merge branch 'dev' of github.com:lyswhut/lx-music-desktop into dev 2021-09-07 22:20:06 +08:00
lyswhut
a4d3c06119 Merge branch 'dev' 2021-09-05 12:16:56 +08:00
lyswhut
246412cb2c 发布v1.13.0 2021-09-05 12:14:17 +08:00
lyswhut
2fb013fb41 修正排版 2021-09-05 12:13:44 +08:00
lyswhut
6f9d684b2d 复从电脑浏览器复制的企鹅歌单链接无法打开的问题 2021-09-05 12:13:32 +08:00
lyswhut
af6a2ec581 更新依赖 2021-09-04 21:24:42 +08:00
lyswhut
488b28921f 添加“Windows 7 下桌面歌词字体列表为空”问题解答 2021-08-29 21:31:44 +08:00
lyswhut
4c23fc1011 移除eiows包 2021-08-29 18:32:03 +08:00
lyswhut
db1c903f1b 更新版本号 2021-08-29 18:27:38 +08:00
lyswhut
3fdf7411fc 新增桌面歌词字体设置 2021-08-29 18:27:01 +08:00
lyswhut
1da275ff3a 更新依赖 2021-08-28 13:25:34 +08:00
lyswhut
bc5167f38d 使用中文括号 2021-08-26 16:21:26 +08:00
lyswhut
609b6f3123 更新版本号 2021-08-26 16:00:43 +08:00
lyswhut
fe35081e03 新增“下载的歌词文件编码格式”设置 2021-08-26 16:00:03 +08:00
lyswhut
72df1a35a0 更新推荐的DNS值 2021-08-26 08:54:58 +08:00
lyswhut
90ffcf5071 更新依赖 2021-08-25 16:29:11 +08:00
lyswhut
35f60cc536 添加说明 2021-08-24 08:46:42 +08:00
lyswhut
31bb40c50b 更新版本号 2021-08-23 11:25:53 +08:00
lyswhut
bc7b35f816 修复无法从歌单界面打开网易歌单详情的问题 2021-08-23 11:23:42 +08:00
lyswhut
0c76612a4c 更新版本号 2021-08-22 13:10:28 +08:00
lyswhut
ab86674aa3 软件内快捷键的最小化触发时,如果已启用托盘,则隐藏程序,否则最小化程序 2021-08-22 10:26:59 +08:00
lyswhut
8cd5a01dd5 更新依赖 2021-08-20 21:59:16 +08:00
lyswhut
4ef5bafcca 更新依赖 2021-08-20 21:56:15 +08:00
lyswhut
2c783e0657 修复错误 2021-08-20 11:15:51 +08:00
lyswhut
0c7ead5b21 Merge branch 'dev' of github.com:lyswhut/lx-music-desktop into dev 2021-08-19 19:27:42 +08:00
lyswhut
57a8b7842e 修复某些情况下列表同步不一致的问题 2021-08-19 15:23:29 +08:00
lyswhut
4b5a7b6a74 添加测试群 2021-08-18 17:04:38 +08:00
lyswhut
c09c31767d 更新依赖 2021-08-18 16:10:13 +08:00
lyswhut
ecff04618b 支持网易源“我喜欢”歌单以注入token的方式打开 2021-08-18 14:03:00 +08:00
lyswhut
c377469dad 歌曲搜索框新增清理按钮 2021-08-16 15:46:43 +08:00
lyswhut
ecb41382cb 更新常见问题 2021-08-16 09:10:23 +08:00
lyswhut
3150b12b99 修复重名问题 2021-08-15 19:45:11 +08:00
lyswhut
364260b070 修复某些情况下同步功能会导致切歌混乱的问题 2021-08-12 10:40:45 +08:00
lyswhut
5ccf6f077d Merge branch 'dev' 2021-08-11 17:07:02 +08:00
lyswhut
5b113c5c22 发布v1.12.2 2021-08-11 17:06:18 +08:00
lyswhut
ff53900ea3 修复同步服务器启动失败时,关闭同步服务不会清空失败信息的问题 2021-08-11 16:39:33 +08:00
lyswhut
b0b0403d9a 移除多余内容 2021-08-11 15:23:20 +08:00
lyswhut
21c3b3ab57 修复上一曲切换问题 2021-08-11 13:28:51 +08:00
lyswhut
e85709a341 修复稍后播放切歌问题 2021-08-11 11:57:41 +08:00
lyswhut
04be42a4d6 添加规则 2021-08-11 10:22:15 +08:00
lyswhut
8196e8a84d 更新依赖 2021-08-11 10:00:04 +08:00
lyswhut
1f85492690 修复播放下载列表的歌曲时切歌、歌词显示问题 2021-08-11 09:59:47 +08:00
lyswhut
e15178150b 移除日志 2021-08-08 12:16:22 +08:00
lyswhut
d83aee2507 Merge branch 'dev' 2021-08-08 11:54:46 +08:00
lyswhut
354a9904e9 发布v1.12.1 2021-08-08 11:54:21 +08:00
lyswhut
fe3379ffbb 修复随机播放下无法切歌的问题 2021-08-08 11:54:13 +08:00
lyswhut
0164936038 Merge branch 'dev' 2021-08-08 10:29:09 +08:00
lyswhut
9106d6455f 发布v1.12.0 2021-08-08 10:28:43 +08:00
lyswhut
5ddea2b1da 修复图片为空时设置歌曲信息出错的问题 2021-08-07 19:35:13 +08:00
lyswhut
2549c5587e 更新依赖 2021-08-07 13:45:44 +08:00
lyswhut
c9f28d8105 更新依赖 2021-08-05 10:39:59 +08:00
lyswhut
75b2db4749 添加播放器对系统媒体控制与显示的兼容处理 2021-08-05 10:21:20 +08:00
lyswhut
b6f291d721 添加提示语 2021-08-02 14:32:45 +08:00
lyswhut
4f7e227392 移除日志输出 2021-08-01 20:12:38 +08:00
lyswhut
7d95eb34c7 修复同步服务启动失败刷新连接码按钮仍然可以点击的问题 2021-08-01 20:11:38 +08:00
lyswhut
7e3ee38920 修复删除列表中正在播放的歌曲时不会自动切歌的问题 2021-08-01 20:07:40 +08:00
lyswhut
d44c2c26a8 修复beta版MAC包构建失败的问题 2021-08-01 13:46:16 +08:00
lyswhut
d77a41c20f 更新版本 2021-08-01 13:35:58 +08:00
lyswhut
c50c747691 完善代码 2021-08-01 13:28:12 +08:00
lyswhut
bcf3dde60d 完成同步功能 2021-08-01 12:57:13 +08:00
lyswhut
33ec3de1b4 更新依赖 2021-08-01 12:46:17 +08:00
lyswhut
26be5b5c4f 移除多余依赖 2021-07-23 22:01:34 +08:00
lyswhut
56af57c682 修复某些情况下所显示的歌词、封面图片与当前正在播放的歌曲不一致的问题 2021-07-23 16:14:56 +08:00
lyswhut
3a5cb3f7c2 修复导入kg歌单最多只能加载100、500首歌曲的问题 2021-07-21 15:33:41 +08:00
lyswhut
724c6be85b 禁用win arm版本的自动下载更新 2021-07-18 14:56:18 +08:00
lyswhut
1c4a56f95b Merge branch 'dev' 2021-07-18 13:59:58 +08:00
lyswhut
9c21e96538 发布v1.11.0 2021-07-18 13:56:26 +08:00
lyswhut
67074bd682 更新依赖 2021-07-17 16:40:52 +08:00
lyswhut
b535987392 更新依赖 2021-07-14 14:27:59 +08:00
lyswhut
d5c0c2e3d3 更新依赖 2021-07-10 12:26:14 +08:00
lyswhut
7580c79c00 替换过时API 2021-07-07 15:02:46 +08:00
lyswhut
c0a13622b0 更新依赖 2021-07-06 16:51:18 +08:00
lyswhut
58d7326f77 优化mg源打开歌单的链接兼容 2021-07-06 16:51:13 +08:00
lyswhut
45d7a12d0d 更新依赖 2021-07-05 10:08:44 +08:00
lyswhut
40b4f15340 更新说明 2021-07-02 14:58:14 +08:00
lyswhut
9c28ff67c1 更新 2021-07-02 10:28:32 +08:00
lyswhut
e3f146dabf 移除wy源歌单列表按“最新”排序的按钮 2021-06-30 11:55:32 +08:00
lyswhut
2b2a6a7f10 更新依赖 2021-06-30 11:44:51 +08:00
lyswhut
192574dfe8 更新依赖 2021-06-27 14:47:19 +08:00
lyswhut
8e95e06b2d 添加网易歌单无法打开的说明 2021-06-24 14:50:04 +08:00
lyswhut
1963b3ee71 修复mg源搜索失效的问题 2021-06-19 13:26:58 +08:00
lyswhut
507f66b3b6 修复dns查询问题 2021-06-18 15:13:15 +08:00
lyswhut
94bf9eae8b 更新依赖 2021-06-17 15:38:03 +08:00
lyswhut
0fa32f976c 移除日志输出 2021-06-16 16:24:39 +08:00
lyswhut
198238d4b5 优化网络请求,尝试去解决无法连接服务器的问题 2021-06-16 10:23:48 +08:00
lyswhut
66631ac105 修复进度条高度问题 2021-06-14 13:52:46 +08:00
lyswhut
19c5996351 更新依赖 2021-06-11 16:25:36 +08:00
lyswhut
cd3140a9c7 新增“添加歌曲到列表时的位置”设置 2021-06-11 15:45:09 +08:00
lyswhut
56201d6a01 更新依赖 2021-06-10 18:10:52 +08:00
lyswhut
654cb41e3e 添加 win arm64 架构的安装包构建 2021-06-07 09:04:34 +08:00
lyswhut
fa744d9204 添加i18n-ally扩展设置 2021-06-06 20:31:09 +08:00
lyswhut
3e1c56ff82 修复打包失败的问题 2021-06-05 12:18:43 +08:00
lyswhut
5d5164c4e9 更新依赖 2021-06-04 16:08:15 +08:00
lyswhut
0791e760a4 修复打开kw歌单失败时会无限重试的问题 2021-06-03 15:12:53 +08:00
lyswhut
b53fe2dd5e 优化wy源歌单导入匹配 2021-06-03 14:50:37 +08:00
lyswhut
1648b0c2dd 更新依赖 2021-05-31 17:12:53 +08:00
lyswhut
1a5adfabf4 更新依赖 2021-05-27 08:44:37 +08:00
lyswhut
c538e9c4fc Merge branch 'dev' 2021-05-25 16:19:49 +08:00
lyswhut
98422b296d 发布v1.10.2 2021-05-25 16:19:23 +08:00
lyswhut
e35068137d 修复企鹅音乐搜索歌曲没有结果的问题 2021-05-25 16:18:45 +08:00
lyswhut
83dda92603 Merge branch 'dev' 2021-05-25 15:42:13 +08:00
lyswhut
6bbcb519d7 发布v1.10.1 2021-05-25 15:40:57 +08:00
lyswhut
7fa3baacfd 更新依赖 2021-05-25 15:40:07 +08:00
lyswhut
f94c1ef852 不允许播放空列表 2021-05-24 11:03:21 +08:00
lyswhut
cc4cb1a6a7 修复企鹅音乐搜索歌曲没有结果的问题 2021-05-23 16:31:31 +08:00
lyswhut
247a322366 修复播放在空的歌单列表点击播放全部时报错的问题 2021-05-23 16:31:26 +08:00
lyswhut
7ec7023d1b Merge branch 'dev' 2021-05-20 08:28:13 +08:00
lyswhut
b4edd95bab 移除多余选项 2021-05-20 08:22:44 +08:00
lyswhut
50ddc8caa3 去除多余选项 2021-05-20 01:16:44 +08:00
lyswhut
6263dbbd0f Merge branch 'dev' 2021-05-20 00:14:56 +08:00
lyswhut
64c45daf16 修改安装包构建顺序,使latest.yml仍指向x86_64版本的包 2021-05-20 00:14:36 +08:00
lyswhut
5ed41cb5ac Merge branch 'dev' 2021-05-19 21:19:05 +08:00
lyswhut
29dea5f829 添加win x64与x86版本安装包的单独构建 2021-05-19 21:17:27 +08:00
lyswhut
e51b21421d Merge branch 'dev' 2021-05-19 18:28:10 +08:00
lyswhut
5cae4ae0bf 使用更新的node版本 2021-05-19 18:27:48 +08:00
lyswhut
5f2cbb30c2 Merge branch 'dev' 2021-05-19 18:21:49 +08:00
lyswhut
1ddec2cb69 发布v1.10.0 2021-05-19 18:21:16 +08:00
lyswhut
96b54cc77a 稍微加高进度条 2021-05-19 18:15:41 +08:00
lyswhut
4da6524493 修复了一个歌曲下载失败时不会跳过任务的问题 2021-05-19 18:15:04 +08:00
lyswhut
1364d58065 新增Mac arm64位dmg包的构建 2021-05-19 16:55:02 +08:00
lyswhut
4383966051 更新依赖 2021-05-19 11:15:36 +08:00
lyswhut
86451fb5d0 更新依赖 2021-05-17 16:47:09 +08:00
lyswhut
0878c7398d 排行榜界面添加播放、收藏整个排行榜功能 2021-05-17 15:43:47 +08:00
lyswhut
81643165c2 修复在线列表的请求取消问题 2021-05-16 22:46:46 +08:00
lyswhut
b37802949c 更新依赖 2021-05-16 14:12:11 +08:00
lyswhut
a53f2388b4 更新网盘地址 2021-05-16 14:09:03 +08:00
lyswhut
e823543cad 更新 2021-05-15 20:40:01 +08:00
lyswhut
bdf7f903e9 修复mg源歌单标签、排行榜歌曲列表无法加载的问题 2021-05-15 20:39:53 +08:00
lyswhut
336b40a102 修复wy源的歌曲音质匹配问题 2021-05-15 17:27:25 +08:00
lyswhut
354922195f 修复请求重试bug 2021-05-15 01:42:23 +08:00
lyswhut
9c1199fc48 更新FAQ 2021-05-12 17:20:38 +08:00
lyswhut
ea35ed25d8 修复kw部分歌单无法打开的问题 2021-05-12 14:04:08 +08:00
lyswhut
add05ef913 修复在当前正常播放的列表中使用稍后播放功能时,播放完后稍后播放的歌曲后不会恢复原来播放位置播放的问题 2021-05-10 16:35:34 +08:00
lyswhut
e3aa4110fc 更新依赖 2021-05-09 13:33:46 +08:00
lyswhut
8a0ed1bc13 更新说明 2021-05-03 12:41:03 +08:00
lyswhut
0db490d444 更新依赖 2021-04-30 21:22:50 +08:00
lyswhut
4fd89c8a83 修正错别字 2021-04-28 17:47:33 +08:00
lyswhut
4fe17e556e 修复快捷键设置框内的提示问题 2021-04-26 15:17:01 +08:00
lyswhut
e95553163c 修复全局快捷键对桌面歌词无效的问题 2021-04-26 14:13:11 +08:00
lyswhut
8ae72074ef 更新 2021-04-25 13:18:49 +08:00
lyswhut
b6c1403f4b 显示换源提示 2021-04-25 10:29:08 +08:00
lyswhut
920d696d0b 更新歌曲无法下载、播放说明 2021-04-24 17:22:45 +08:00
lyswhut
a8dcb0b973 优化逻辑 2021-04-24 17:22:28 +08:00
lyswhut
895198b7b8 修正描述 2021-04-24 16:10:22 +08:00
lyswhut
144941d991 Merge branch 'dev' 2021-04-24 15:55:49 +08:00
lyswhut
f203517ce8 发布1.9.0版本 2021-04-24 15:55:40 +08:00
lyswhut
6dd6741237 Merge branch 'dev' 2021-04-24 15:53:37 +08:00
lyswhut
066e9c2fd5 修复上传包名匹配 2021-04-24 15:38:02 +08:00
lyswhut
f500b9b2d5 优化beta打包流程 2021-04-24 15:13:10 +08:00
lyswhut
c80e35872e 修改打包名 2021-04-24 14:34:52 +08:00
lyswhut
05eda6e406 修复打包失败 2021-04-24 14:13:13 +08:00
lyswhut
1686182616 更新版本号 2021-04-24 13:50:34 +08:00
lyswhut
fd5720451e 更新依赖 2021-04-24 13:48:27 +08:00
lyswhut
5b9adc8daa 修复属性计算 2021-04-23 10:57:47 +08:00
lyswhut
3efd6867d8 新增自动换源下载功能 2021-04-22 16:01:47 +08:00
lyswhut
cd1a55652f 修复换源错误的处理 2021-04-18 15:06:21 +08:00
lyswhut
47d0a4a343 修复正在播放“稍后播放”的歌曲时,对“稍后播放”前播放的列表进行添加、删除操作会导致切歌的问题 2021-04-16 16:58:20 +08:00
lyswhut
fe76d103f0 更新依赖 2021-04-16 14:18:53 +08:00
lyswhut
789a9bfe1a 更新依赖 2021-04-15 09:21:35 +08:00
lyswhut
391f97d3bb 修复js加载顺序问题 2021-04-14 16:11:57 +08:00
lyswhut
d077a03e60 优化配色 2021-04-14 15:38:59 +08:00
lyswhut
3317b6a9e5 优化配色 2021-04-14 15:01:55 +08:00
lyswhut
0b0f0e4649 新增黑色皮肤“黑纸白字” 2021-04-14 14:46:57 +08:00
lyswhut
f75e416479 添加黑色皮肤 2021-04-14 13:33:36 +08:00
lyswhut
d83db6bdf5 Merge branch 'dev' into 黑色主题 2021-04-14 08:35:00 +08:00
lyswhut
92ec461a77 修正设置页“搜索设置”部分内容的缩进显示问题 2021-04-13 15:57:25 +08:00
lyswhut
144fe3b8ac 更新依赖 2021-04-10 20:43:20 +08:00
lyswhut
af2e650538 兼容打开咪咕移动端分享的歌单链接,添加打开歌单的信息显示 2021-04-06 15:39:16 +08:00
lyswhut
1c585dc479 分离歌曲URL的缓存 2021-04-05 19:31:07 +08:00
lyswhut
c6853b197c 修复列表清除Bug 2021-04-03 21:31:19 +08:00
lyswhut
ef591c883a 移除列表lrc存储 2021-04-03 21:17:27 +08:00
lyswhut
4918db9cb1 分离歌词与歌曲列表信息的保存 2021-04-03 20:26:28 +08:00
lyswhut
b8250b67c9 升级到 webpack 5 2021-04-03 13:58:10 +08:00
lyswhut
d6f87894aa 更新依赖 2021-04-03 13:12:11 +08:00
lyswhut
c808500083 新增Windows arm64位免安装版的构建 2021-03-31 08:54:47 +08:00
lyswhut
3a6c2be48a 更新依赖 2021-03-29 08:54:55 +08:00
lyswhut
a28d01704a 更新faq 2021-03-27 19:34:45 +08:00
lyswhut
8bed654756 修复聚合搜索总页计算问题 2021-03-24 11:06:18 +08:00
lyswhut
8845884b24 更新发布流程 2021-03-21 13:23:13 +08:00
lyswhut
ea5de9a289 优化歌曲自动换源匹配 2021-03-20 20:55:44 +08:00
lyswhut
7922920f51 修改默认每页条数 2021-03-20 20:19:04 +08:00
lyswhut
dcf6ab0792 清理列表缓存将同时清理歌词 2021-03-20 19:52:02 +08:00
lyswhut
57fe510138 更新网盘链接 2021-03-20 00:10:36 +08:00
lyswhut
b4c7a6e448 自动禁用空代理 2021-03-18 17:30:44 +08:00
lyswhut
1d8702e95f 添加路径提示支持 2021-03-16 11:01:57 +08:00
lyswhut
8171fcd346 序启动时对数据文件做读取校验,数据出现损坏时自动备份损坏的数据 2021-03-14 02:06:35 +08:00
lyswhut
b1ccdeb0d3 修正错误 2021-03-13 16:49:05 +08:00
lyswhut
969b03b364 略微减小翻译字体大小 2021-03-13 15:25:35 +08:00
lyswhut
5ed81132fb 优化错误处理 2021-03-13 14:35:20 +08:00
lyswhut
c663cdbe0d 分离store逻辑 2021-03-13 14:10:36 +08:00
lyswhut
a4d46fd501 修正描述 2021-03-12 22:49:27 +08:00
lyswhut
c3e1ead90a Merge branch 'dhmkh' into dev 2021-03-12 22:42:17 +08:00
lyswhut
92c10eb534 修改协议阅读时间 2021-03-12 16:30:27 +08:00
lyswhut
08d0758616 修复备份与恢复功能在恢复数据时某些设置不立即生效的问题 2021-03-12 16:22:22 +08:00
lyswhut
68d8369a8b 修正单词拼写错误 2021-03-12 09:02:40 +08:00
lyswhut
af59a4472a 调整翻译字体大小 2021-03-11 17:34:29 +08:00
lyswhut
269546add1 Merge branch 'dev' 2021-03-10 10:23:50 +08:00
lyswhut
65246f8856 修正beta打包规则 2021-03-10 10:22:19 +08:00
lyswhut
ab35fe793d Merge branch 'dev' 2021-03-10 10:20:34 +08:00
lyswhut
e7b897e67c 优化打包命令 2021-03-10 10:19:49 +08:00
lyswhut
0b5dbb464d Merge branch 'dev' 2021-03-10 09:36:04 +08:00
lyswhut
60419f4319 修正徽章地址 2021-03-10 09:35:48 +08:00
lyswhut
1ddf0db18d 重命名beta打包工作流文件名 2021-03-10 09:34:43 +08:00
lyswhut
0732ca37b8 优化打包规则 2021-03-10 09:33:04 +08:00
lyswhut
801ea899e6 迁移到GitHub Actions 2021-03-10 09:21:43 +08:00
lyswhut
ba5159d2ad 修复Linux构建错误 2021-03-10 01:39:08 +08:00
lyswhut
ab2cf5a50f 修正错误,添加dev构建 2021-03-10 01:34:58 +08:00
lyswhut
d533c12315 修复Linux配置 2021-03-10 01:24:28 +08:00
lyswhut
1d90719053 Merge branch 'dev' 2021-03-10 01:18:49 +08:00
lyswhut
127d279266 修正语法错误 2021-03-10 01:15:30 +08:00
lyswhut
a484f66e69 修正语法错误 2021-03-10 01:02:30 +08:00
lyswhut
b34924e264 Merge branch 'dev' 2021-03-10 00:59:36 +08:00
lyswhut
4d5494c256 更新文件夹名 2021-03-10 00:59:06 +08:00
lyswhut
46b094a57a Merge branch 'dev' 2021-03-10 00:51:44 +08:00
lyswhut
0ef89c30e3 更新更新日志 2021-03-10 00:50:55 +08:00
lyswhut
dc2a89ce3f Merge branch 'dev' 2021-03-10 00:47:42 +08:00
lyswhut
47adcfec30 添加缓存 2021-03-10 00:42:27 +08:00
lyswhut
25e848702f 更新依赖 2021-03-10 00:42:15 +08:00
lyswhut
756a285978 修复收藏的在线列表id迁移保存出错的问题 2021-03-10 00:41:38 +08:00
lyswhut
fcf79bda03 Merge branch 'dev' 2021-03-09 22:55:20 +08:00
lyswhut
6b170f3116 尝试迁移到GitHub Actions 2021-03-09 22:50:08 +08:00
lyswhut
ea6bc245ff Merge branch 'dev' 2021-03-09 20:50:50 +08:00
lyswhut
61dc344d89 发布v1.8.2 2021-03-09 20:49:49 +08:00
lyswhut
fa6b7eacaa 修复歌曲ID存储变更导致酷狗图片获取失败的问题 2021-03-09 17:40:33 +08:00
lyswhut
23dafe539d 修正错误 2021-03-08 19:20:49 +08:00
lyswhut
0a654efda0 修改api窗口名 2021-03-07 21:43:00 +08:00
lyswhut
bec10ebe34 Merge branch 'dev' 2021-03-07 17:56:13 +08:00
lyswhut
0e03ca5d48 发布v1.8.1 2021-03-07 17:55:04 +08:00
lyswhut
4b1bf29ea0 新增启动参数-dhmkh 2021-03-07 17:54:02 +08:00
lyswhut
b391b2c16d 添加链接锚点 2021-03-07 17:53:24 +08:00
lyswhut
7b9cf93b40 修复歌词翻译的主题颜色适配问题 2021-03-07 15:07:22 +08:00
lyswhut
dd55e5e086 修改api窗口名 2021-03-07 13:30:47 +08:00
lyswhut
ba2b1dac92 Merge branch 'dev' 2021-03-07 12:38:11 +08:00
lyswhut
56ffeb3008 发布v1.8.0 2021-03-07 12:36:57 +08:00
lyswhut
b3757fd6b5 修复在下载列表右击未下载完成的歌曲弹出的右击菜单中没有开始下载选项的问题 2021-03-07 12:22:53 +08:00
lyswhut
e0de81230e Merge branch 'api' into dev 2021-03-07 12:01:59 +08:00
lyswhut
2bc669c828 添加更新日志 2021-03-07 01:29:23 +08:00
lyswhut
493f7809a4 优化歌词特殊字符移除 2021-03-07 01:22:25 +08:00
lyswhut
ef52cd6991 Merge branch 'dev' into lrc 2021-03-07 01:18:54 +08:00
lyswhut
480f15b6f6 优化酷狗搜索结果 2021-03-07 01:18:44 +08:00
lyswhut
fcfee88ef4 移除日志打印 2021-03-07 00:56:00 +08:00
lyswhut
19f647e6ab Merge branch 'dev' into lrc 2021-03-04 15:27:45 +08:00
lyswhut
27e5ec02f4 优化单首歌曲的“添加到列表”弹窗歌曲列表状态的显示 2021-03-04 15:27:29 +08:00
lyswhut
0808d77a2d 修复鼠标显示状态 2021-03-04 14:33:23 +08:00
lyswhut
90d9e9b911 修复歌词缩放设置失效的问题 2021-03-04 13:20:19 +08:00
lyswhut
ebfbc11c20 Merge branch 'dev' into lrc 2021-03-03 17:21:13 +08:00
lyswhut
2764743062 更新说明 2021-03-03 16:52:19 +08:00
lyswhut
c66d7d6187 完善歌词 2021-03-03 16:51:02 +08:00
lyswhut
f2b6c0a443 支持桌面歌词拖动 2021-03-02 18:41:27 +08:00
lyswhut
aef0ffa506 修改桌面歌词为逐字播放 2021-03-02 18:10:12 +08:00
lyswhut
040fcfba4f 初步完善歌词 2021-03-02 08:32:26 +08:00
lyswhut
9f72831e4a 更新依赖 2021-02-23 19:51:01 +08:00
lyswhut
fa0d9ad4c3 新增启动参数-play 2021-02-22 12:59:39 +08:00
lyswhut
b6107b7281 优化列表存储逻辑 2021-02-21 16:19:08 +08:00
lyswhut
6ffe61562b 移除自动换源清理 2021-02-21 15:46:19 +08:00
lyswhut
b5f5e13f22 移除xm verify窗口 2021-02-21 12:34:50 +08:00
lyswhut
376b7545e1 修复我的列表的灰色歌曲会显示下载按钮的问题 2021-02-20 01:01:58 +08:00
lyswhut
ffaa3e591b 修复kg获取图片失败的错误处理 2021-02-20 00:50:00 +08:00
lyswhut
24d5722ef7 移除log 2021-02-19 22:10:37 +08:00
lyswhut
9e1fe0a6c1 移除多余代码 2021-02-19 21:59:58 +08:00
lyswhut
d128aeb6ef 修复kg歌曲详情页的歌曲无法播放的问题 2021-02-19 11:47:25 +08:00
lyswhut
ef371dedb4 修正描述 2021-02-15 19:53:46 +08:00
lyswhut
00d262f0e6 修复mg源歌单列表无法加载的问题 2021-02-15 12:40:12 +08:00
lyswhut
475b8924c3 修复歌单列表加载失败时无法进入歌单打开界面的问题 2021-02-15 10:52:29 +08:00
lyswhut
0afb1417a3 修复下载列表数据存储问题 2021-02-06 00:09:09 +08:00
lyswhut
b6b41660d6 移除未使用的变量 2021-02-05 23:07:36 +08:00
lyswhut
c78811fe36 移除虾米源,允许播放除了搜索列表以外的所有歌曲 2021-02-05 23:06:08 +08:00
lyswhut
a0254eb4f2 优化英文名歌曲匹配 2021-02-04 17:26:11 +08:00
lyswhut
e9c96ecde2 修复搜索列表双击不支持播放的源时会导致切歌的问题 2021-02-04 14:37:52 +08:00
lyswhut
f9cbf9254c 新增设置-其他-列表缓存信息清理功能 2021-02-02 15:08:07 +08:00
lyswhut
70d24ffdfd 修复音乐搜索列表的稍后播放功能无效的问题 2021-02-01 18:26:26 +08:00
lyswhut
84530ca0a2 添加网盘无法打开的提示 2021-02-01 16:17:57 +08:00
lyswhut
e848fda4e3 将下载列表与我的列表分离存储 2021-02-01 14:55:39 +08:00
lyswhut
51964e51c6 Merge branch 'dev' 2021-01-30 14:33:58 +08:00
lyswhut
0c63268df1 发布v1.7.1版本 2021-01-30 14:30:05 +08:00
lyswhut
316f62c3c8 修复MAC下xm音乐滑块验证问题 2021-01-30 14:29:20 +08:00
lyswhut
9e37800426 修复非透明模式下右侧滚动条无法拖动的问题 2021-01-30 14:18:12 +08:00
lyswhut
3e0ee374c9 移除对changelog的html对version.json的写入 2021-01-30 13:46:46 +08:00
lyswhut
bb411a365c Merge branch 'dev' 2021-01-30 13:17:47 +08:00
lyswhut
da0878a7a7 更新依赖到最新 2021-01-30 13:15:32 +08:00
lyswhut
d0328f17e1 发布v1.7.0版本 2021-01-30 13:14:33 +08:00
lyswhut
c6f49984a7 修改默认弹出层动画 2021-01-30 12:53:39 +08:00
lyswhut
f53fb071f0 更新electron到9.4.2 2021-01-29 22:24:37 +08:00
lyswhut
2cc8af71d0 修复自动换源遇到不支持的源时报错的问题 2021-01-29 10:18:48 +08:00
lyswhut
006da66028 导出歌单移除换源信息 2021-01-28 14:09:22 +08:00
lyswhut
2a74abdef4 修复xm源验证问题 2021-01-28 10:22:26 +08:00
lyswhut
269b14394d 修复了一个由版本更新日志显示导致的潜在远程代码执行攻击漏洞 2021-01-27 19:20:29 +08:00
lyswhut
d6d6fae2ca 禁止打开非http协议链接 2021-01-26 08:43:07 +08:00
lyswhut
331afc37df 新增“记住播放进度”功能的控制,优化设置项展示 2021-01-25 10:44:03 +08:00
lyswhut
041bfdaf3c 修复切换音乐来源可能无法切歌的问题 2021-01-23 19:36:29 +08:00
lyswhut
023cd15cd0 调整加载动画速度 2021-01-23 16:45:01 +08:00
lyswhut
f2fb37df4c 修复快速切换歌曲时, 会出现播放的歌曲和界面展示的歌曲不一致的问题 2021-01-23 16:33:12 +08:00
lyswhut
c4ae0dddb0 修改自动更新阶段的描述 2021-01-23 15:43:14 +08:00
lyswhut
f66077f012 修复手动切歌不清除稍后播放列表的问题 2021-01-23 14:56:57 +08:00
lyswhut
a31d6bc5ae 修改菜单大小 2021-01-23 14:42:01 +08:00
lyswhut
fad13f517b 更新electron到9.4.1 2021-01-21 16:26:46 +08:00
lyswhut
ef36517a26 修复恢复播放会导致重复播放的问题 2021-01-21 15:16:46 +08:00
lyswhut
085e45a50f 新增“稍后播放”功能 2021-01-21 14:39:37 +08:00
lyswhut
43b06a686b 修改构建命令 2021-01-20 14:55:34 +08:00
lyswhut
e8dba4d133 优化播放歌曲换源匹配规则 2021-01-18 16:28:11 +08:00
lyswhut
1af3cd1d77 优化播放歌曲换源匹配 2021-01-18 16:21:57 +08:00
lyswhut
4c44310fea 移除下面热搜词的加载 2021-01-16 01:11:55 +08:00
lyswhut
3e343a80fd 搜索界面新增搜索状态的提示 2021-01-16 01:11:17 +08:00
lyswhut
313fac9f18 Merge branch 'dev' 2021-01-13 21:35:00 +08:00
lyswhut
2c242c66e5 发布v1.6.1版本 2021-01-13 21:34:28 +08:00
lyswhut
4e2b525c99 移除initTOC调用 2021-01-13 14:06:59 +08:00
lyswhut
93c76d4ba0 添加参数修改说明 2021-01-13 14:05:47 +08:00
lyswhut
b69ecca252 修改目录 2021-01-13 11:16:16 +08:00
lyswhut
947011103c 降级electron到9.3.3修复部分系统没有声音的问题 2021-01-13 11:14:53 +08:00
lyswhut
2fd7e4503a 修复自动换源导致的搜索列表每页变成10条数据的问题 2021-01-12 11:42:56 +08:00
lyswhut
a5fce15661 改进自动换源时的歌曲匹配 2021-01-12 11:09:27 +08:00
lyswhut
f1561ddc21 修复某些情况下自动换源的时间过长时会终止换源自动切歌的问题 2021-01-11 16:21:08 +08:00
lyswhut
74ce094d79 更新无法试听解决方法 2021-01-11 14:12:58 +08:00
lyswhut
f832d70701 更新-dha参数的描述 2021-01-10 13:14:50 +08:00
lyswhut
7b7711d410 Merge branch 'dev' into 黑色主题 2021-01-09 20:32:55 +08:00
lyswhut
3b00efdeae Merge branch 'dev' into 黑色主题 2020-12-24 17:22:30 +08:00
lyswhut
0a0d6969ec 初始提交 2020-11-14 11:48:51 +08:00
923 changed files with 101024 additions and 37684 deletions

View File

@@ -1,21 +0,0 @@
platform:
- x64
cache:
- node_modules
- '%APPDATA%\npm-cache'
- '%LOCALAPPDATA%\electron\Cache'
- '%LOCALAPPDATA%\electron-builder\Cache'
install:
- ps: Install-Product node 12 x64
- npm install
build_script:
- npm run publish:gh
test: off
branches:
only:
- master

View File

@@ -1,24 +1,26 @@
{
"presets": [
"@babel/preset-typescript",
[
"@babel/preset-env",
{
"corejs": "3",
"useBuiltIns": "usage"
}
],
[
"minify",
{
"builtIns": false,
"evaluate": false,
"mangle": false
}
]
// [
// "minify",
// {
// "builtIns": false,
// "evaluate": false,
// "mangle": false
// }
// ]
],
"plugins": [
"@babel/plugin-syntax-dynamic-import",
"@babel/plugin-transform-modules-umd",
"@babel/plugin-transform-runtime"
"@babel/plugin-transform-runtime",
"@babel/plugin-proposal-class-properties"
]
}

107
.eslintrc
View File

@@ -1,9 +1,15 @@
{
"extends": "standard",
"root": true,
"extends": [
"standard"
],
"plugins": [
"html"
],
"parser": "babel-eslint",
"parser": "@babel/eslint-parser",
"parserOptions": {
// "requireConfigFile": false
},
"rules": {
"no-new": "off",
"camelcase": "off",
@@ -16,9 +22,98 @@
"no-multiple-empty-lines": [1, {"max": 2}],
"comma-dangle": [2, "always-multiline"],
"standard/no-callback-literal": "off",
"prefer-const": "off"
"prefer-const": "off",
"no-labels": "off",
"node/no-callback-literal": "off"
},
"settings": {
"html/html-extensions": [".html", ".vue"]
}
"ignorePatterns": ["vendors", "*.min.js", "dist"],
"overrides": [
{
"files": [ "*.vue" ],
"rules": {
"no-new": "off",
"camelcase": "off",
"no-return-assign": "off",
"space-before-function-paren": ["error", "never"],
"no-var": "error",
"no-fallthrough": "off",
"prefer-promise-reject-errors": "off",
"eqeqeq": "off",
"no-multiple-empty-lines": [1, {"max": 2}],
"comma-dangle": [2, "always-multiline"],
"standard/no-callback-literal": "off",
"prefer-const": "off",
"no-labels": "off",
"node/no-callback-literal": "off",
"vue/multi-word-component-names": "off",
"@typescript-eslint/strict-boolean-expressions": "off",
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/space-before-function-paren": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/naming-convention": "off",
"@typescript-eslint/ban-ts-comment": "off",
"vue/max-attributes-per-line": "off",
"vue/singleline-html-element-content-newline": "off",
"vue/use-v-on-exact": "off",
"@typescript-eslint/restrict-template-expressions": "off",
// "no-undef": "off"
},
"parser": "vue-eslint-parser",
"extends": [
"plugin:vue/base",
// "plugin:vue/strongly-recommended"
"plugin:vue/vue3-recommended",
"standard-with-typescript",
],
"parserOptions": {
"sourceType": "module",
"parser": {
// Script parser for `<script>`
"js": "@typescript-eslint/parser",
// Script parser for `<script lang="ts">`
"ts": "@typescript-eslint/parser"
},
"extraFileExtensions": [".vue"]
}
},
{
"files": [ "*.ts" ],
"rules": {
"no-new": "off",
"camelcase": "off",
"no-return-assign": "off",
"space-before-function-paren": ["error", "never"],
"no-var": "error",
"no-fallthrough": "off",
"prefer-promise-reject-errors": "off",
"eqeqeq": "off",
"no-multiple-empty-lines": [1, {"max": 2}],
"comma-dangle": [2, "always-multiline"],
"standard/no-callback-literal": "off",
"prefer-const": "off",
"no-labels": "off",
"node/no-callback-literal": "off",
"@typescript-eslint/strict-boolean-expressions": "off",
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/space-before-function-paren": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/restrict-template-expressions": [1, {
"allowBoolean": true
}],
"@typescript-eslint/naming-convention": "off",
"@typescript-eslint/return-await": "off",
"@typescript-eslint/ban-ts-comment": "off",
"multiline-ternary": "off",
"@typescript-eslint/comma-dangle": "off",
},
"parser": "@typescript-eslint/parser",
"extends": [
"standard-with-typescript"
],
"parserOptions": {
"project": "./src/**/tsconfig.json"
}
}
]
}

View File

@@ -1,25 +0,0 @@
---
name: 功能请求(请先查看常见问题及搜索issue列表中有无你要提的问题)
about: 为这个项目提出一个想法
title: 例如添加xxx功能、优化xxx功能
labels: ''
assignees: ''
---
**解决方案检查**
<!-- 请确保你已从以下渠道寻找过解决方案,然后将 [ ] 替换成 [x] -->
- [ ] 我已阅读常见问题(<https://github.com/lyswhut/lx-music-desktop/blob/master/FAQ.md>)
- [ ] 我已搜索issue列表(<https://github.com/lyswhut/lx-music-desktop/issues?utf8=✓&q=>)
**描述您想要的解决方案**
<!-- 简洁明了地描述您要发生的事情。 -->
**描述您考虑过的替代方案**
<!-- 对您考虑过的所有替代解决方案或功能的简洁明了的描述。 -->
**其他内容**
<!-- 在此处添加有关功能请求的任何其他上下文或屏幕截图(直接把图片拖到编辑框即可添加图片)。 -->

40
.github/ISSUE_TEMPLATE/----.yml vendored Normal file
View File

@@ -0,0 +1,40 @@
name: ✨功能请求
description: 为这个项目提出一个想法请先查看常见问题及搜索issue列表中有无你要提的问题
title: "[Feature]: "
body:
- type: checkboxes
id: check-answer
attributes:
label: 解决方案检查
description: 请确保你已完成以下所有操作
options:
- label: 我已阅读常见问题(<https://lyswhut.github.io/lx-music-doc/desktop/faq>),但没有找到解决方案
required: true
- label: 我已搜索issue列表(<https://github.com/lyswhut/lx-music-desktop/issues?utf8=✓&q=>),但没有发现类似的问题
required: true
- type: textarea
id: problem-description
attributes:
label: 问题描述
description: 请添加清晰简洁的描述,说明你希望通过此功能请求解决的问题
validations:
required: true
- type: textarea
id: proposed-solution
attributes:
label: 描述你想要的解决方案
description: 简洁明了地描述你要发生的事情
validations:
required: true
- type: textarea
id: alternatives-considered
attributes:
label: 描述你考虑过的替代方案
description: 对你考虑过的所有替代解决方案或功能的简洁明了的描述
validations:
required: false
- type: textarea
id: additional-information
attributes:
label: 附加信息
description: 如果你的问题需要进一步解释,或者想要表达其他内容,请在此处添加更多信息。(直接把图片、视频拖到编辑框即可添加图片或视频)

View File

@@ -1,42 +0,0 @@
---
name: 报告Bug(请先查看常见问题及搜索issue列表中有无你要提的问题)
about: 创建报告以帮助我们改进
title: 例如:音乐无法播放
labels: ''
assignees: ''
---
**解决方案检查**
<!-- 请确保你已从以下渠道寻找过解决方案,然后将 [ ] 替换成 [x] -->
- [ ] 我已阅读常见问题(<https://github.com/lyswhut/lx-music-desktop/blob/master/FAQ.md>)
- [ ] 我已搜索issue列表(<https://github.com/lyswhut/lx-music-desktop/issues?utf8=✓&q=>)
**描述错误**
<!-- 清楚简洁地说明错误是什么。 -->
**重现**
重现行为的步骤:
1.转到“ ...”
2.点击“ ....”
3.向下滚动到“ ....”
4.看到错误
**预期行为**
<!-- 对您期望发生的事情的简洁明了的描述。 -->
**截图**
<!-- 如果适用,请添加屏幕截图以帮助解释您的问题(直接把图片拖到编辑框即可添加图片)。 -->
**环境:**
  -操作系统及版本:[例如Windows 10 64位 18362.156]
  -软件安装包及版本:[例如1.0.0 安装版]
**其他内容**
<!-- 在此处添加有关该问题的任何其他上下文。 -->

55
.github/ISSUE_TEMPLATE/--bug.yml vendored Normal file
View File

@@ -0,0 +1,55 @@
name: 🐞报告Bug
description: 报告bug请先查看常见问题及搜索issue列表中有无你要提的问题
title: "[Bug]: "
body:
- type: checkboxes
id: check-answer
attributes:
label: 解决方案检查
description: 请确保你已完成以下所有操作
options:
- label: 我已阅读常见问题(<https://lyswhut.github.io/lx-music-doc/desktop/faq>),并没有找到解决方案
required: true
- label: 我已搜索issue列表(<https://github.com/lyswhut/lx-music-desktop/issues?utf8=✓&q=>),并没有发现类似的问题
required: true
- type: textarea
id: expected-behavior
attributes:
label: 预期行为
description: 对期望发生的事情的清晰简明描述
validations:
required: true
- type: textarea
id: actual-behavior
attributes:
label: 实际行为
description: 对实际发生的事情的清晰简明描述
validations:
required: true
- type: input
id: version
attributes:
label: Lx Music 版本
description: 你使用什么版本的LX Music
placeholder: 1.15.0
validations:
required: true
- type: input
id: last-known-working-version
attributes:
label: 最后正常的版本
description: 如果有,请在此处填写最后正常的版本是多少?
placeholder: 1.15.0
- type: input
id: operating-system-version
attributes:
label: 操作系统版本
description: 您使用的是什么操作系统版本?在 Windows 上,单击开始按钮 > 设置 > 系统 > 关于;在 macOS 上,单击 Apple 菜单 > 关于本机;在 Linux 上,使用 lsb_release 或 uname -a
placeholder: "例如 Windows 10 版本 1909、macOS Catalina 10.15.7 或 Ubuntu 20.04"
validations:
required: true
- type: textarea
id: additional-information
attributes:
label: 附加信息
description: 如果你的问题需要进一步解释,或者你所遇到的问题不容易重现,请在此处添加更多信息。(直接把图片、视频拖到编辑框即可添加图片或视频)

243
.github/workflows/beta-pack.yml vendored Normal file
View File

@@ -0,0 +1,243 @@
name: Build Beta
on:
push:
branches:
- beta
jobs:
Windows:
name: Windows
runs-on: windows-latest
steps:
- name: Check out git repository
uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Cache file
uses: actions/cache@v3
with:
path: |
node_modules
%APPDATA%\npm-cache
%LOCALAPPDATA%\electron\Cache
%LOCALAPPDATA%\electron-builder\Cache
key: ${{ runner.os }}-build-caches-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-
- name: Install Dependencies
run: |
npm ci
- name: Build src code
run: npm run build:src
- name: Build Package Setup x64
run: npm run pack:win:setup:x64
- name: Upload Artifact Setup x64
uses: actions/upload-artifact@v3
with:
name: lx-music-desktop-x64-Setup
path: build/* x64 Setup.exe
- name: Build Package 7z x64
run: npm run pack:win:7z:x64
- name: Upload Artifact 7z x64
uses: actions/upload-artifact@v3
with:
name: lx-music-desktop-win_x64-green
path: build/*win_x64 green.7z
- name: Build Package Setup x86
run: npm run pack:win:setup:x86
- name: Upload Artifact Setup x86
uses: actions/upload-artifact@v3
with:
name: lx-music-desktop-x86-Setup
path: build/* x86 Setup.exe
- name: Build Package 7z x86
run: npm run pack:win:7z:x86
- name: Upload Artifact 7z x86
uses: actions/upload-artifact@v3
with:
name: lx-music-desktop-win_x86-green
path: build/*win_x86 green.7z
- name: Build Package Setup arm64
run: npm run pack:win:setup:arm64
- name: Upload Artifact Setup arm64
uses: actions/upload-artifact@v3
with:
name: lx-music-desktop-arm64-Setup
path: build/* arm64 Setup.exe
- name: Build Package 7z arm64
run: npm run pack:win:7z:arm64
- name: Upload Artifact 7z arm64
uses: actions/upload-artifact@v3
with:
name: lx-music-desktop-win_arm64-green
path: build/*win_arm64 green.7z
- name: Build Package Setup x86_64
run: npm run pack:win:setup:x86_64
- name: Upload Artifact Setup x86_64
uses: actions/upload-artifact@v3
with:
name: lx-music-desktop-x86_64-Setup
path: build/*x86_64 Setup.exe
- name: Generate file MD5
run: |
cd build
Get-FileHash *.exe,*.7z -Algorithm MD5 | Format-List
Mac:
name: Mac
runs-on: macos-latest
steps:
- name: Check out git repository
uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Cache file
uses: actions/cache@v3
with:
path: |
node_modules
$HOME/.cache/electron
$HOME/.cache/electron-builder
$HOME/.npm/_prebuilds
key: ${{ runner.os }}-build-caches-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-
- name: Install Dependencies
run: |
npm ci
- name: Build src code
run: npm run build:src
- name: Build Package dmg
run: |
npm run pack:mac:dmg
npm run pack:mac:dmg:arm64
env:
ELECTRON_CACHE: $HOME/.cache/electron
ELECTRON_BUILDERCACHE: $HOME/.cache/electron-builder
- name: Upload Artifact dmg
uses: actions/upload-artifact@v3
with:
name: lx-music-desktop-mac-dmg
path: |
build/*.dmg
!build/*-arm64.dmg
- name: Upload Artifact dmg
uses: actions/upload-artifact@v3
with:
name: lx-music-desktop-mac-dmg-arm64
path: build/*-arm64.dmg
- name: Generate file MD5
run: |
cd build
md5 *.dmg
Linux:
name: Linux
runs-on: ubuntu-latest
steps:
- name: Install package
run: sudo apt-get update && sudo apt-get install -y rpm libarchive-tools
- name: Check out git repository
uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Cache file
uses: actions/cache@v3
with:
path: |
node_modules
$HOME/.cache/electron
$HOME/.cache/electron-builder
$HOME/.npm/_prebuilds
key: ${{ runner.os }}-build-caches-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-
- name: Install Dependencies
run: |
npm ci
- name: Build src code
run: npm run build:src
- name: Build Package deb x64
run: npm run pack:linux:deb:x64
- name: Upload Artifact deb x64
uses: actions/upload-artifact@v3
with:
name: lx-music-desktop-deb-x64
path: build/* x64.deb
- name: Build Package deb arm64
run: npm run pack:linux:deb:arm64
- name: Upload Artifact deb arm64
uses: actions/upload-artifact@v3
with:
name: lx-music-desktop-deb-arm64
path: build/* arm64.deb
- name: Build Package deb armv7l
run: npm run pack:linux:deb:armv7l
- name: Upload Artifact deb armv7l
uses: actions/upload-artifact@v3
with:
name: lx-music-desktop-deb-armv7l
path: build/* armv7l.deb
- name: Build Package x64 appImage
run: npm run pack:linux:appImage
- name: Upload Artifact x64 appImage
uses: actions/upload-artifact@v3
with:
name: lx-music-desktop-x64-appImage
path: build/* x64.AppImage
- name: Build Package x64 rpm
run: npm run pack:linux:rpm
- name: Upload Artifact x64 rpm
uses: actions/upload-artifact@v3
with:
name: lx-music-desktop-x64-rpm
path: build/* x64.rpm
- name: Build Package x64 pacman
run: npm run pack:linux:pacman
- name: Upload Artifact x64 pacman
uses: actions/upload-artifact@v3
with:
name: lx-music-desktop-x64-pacman
path: build/* x64.pacman
- name: Generate file MD5
run: |
cd build
md5sum *.deb *.rpm *.pacman *.AppImage

153
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,153 @@
name: Build
on:
push:
branches:
- master
jobs:
Windows:
name: Windows
runs-on: windows-latest
steps:
- name: Check out git repository
uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Cache file
uses: actions/cache@v3
with:
path: |
node_modules
%APPDATA%\npm-cache
%LOCALAPPDATA%\electron\Cache
%LOCALAPPDATA%\electron-builder\Cache
key: ${{ runner.os }}-build-caches-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-
- name: Install Dependencies
run: |
npm ci
- name: Build src code
run: npm run build:src
- name: Release package
run: |
npm run publish:win:setup:x64:always
npm run publish:win:7z:x64
npm run publish:win:setup:x86
npm run publish:win:7z:x86
npm run publish:win:setup:arm64
npm run publish:win:7z:arm64
npm run publish:win:setup:x86_64
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BT_TOKEN: ${{ secrets.BT_TOKEN }}
- name: Generate file MD5
run: |
cd build
Get-FileHash *.exe,*.7z -Algorithm MD5 | Format-List
Mac:
name: Mac
runs-on: macos-latest
steps:
- name: Check out git repository
uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Cache file
uses: actions/cache@v3
with:
path: |
node_modules
$HOME/.cache/electron
$HOME/.cache/electron-builder
$HOME/.npm/_prebuilds
key: ${{ runner.os }}-build-caches-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-
- name: Install Dependencies
run: |
npm ci
- name: Build src code
run: npm run build:src
- name: Release package
run: |
npm run publish:mac:dmg:always
npm run publish:mac:dmg:arm64
env:
ELECTRON_CACHE: $HOME/.cache/electron
ELECTRON_BUILDERCACHE: $HOME/.cache/electron-builder
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BT_TOKEN: ${{ secrets.BT_TOKEN }}
- name: Generate file MD5
run: |
cd build
md5 *.dmg
Linux:
name: Linux
runs-on: ubuntu-latest
steps:
- name: Install package
run: sudo apt-get update && sudo apt-get install -y rpm libarchive-tools
- name: Check out git repository
uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Cache file
uses: actions/cache@v3
with:
path: |
node_modules
$HOME/.cache/electron
$HOME/.cache/electron-builder
$HOME/.npm/_prebuilds
key: ${{ runner.os }}-build-caches-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-
- name: Install Dependencies
run: |
npm ci
- name: Build src code
run: npm run build:src
- name: Release package
run: |
npm run publish:linux:deb:x64:always
npm run publish:linux:deb:arm64
npm run publish:linux:deb:armv7l
npm run publish:linux:appImage
npm run publish:linux:rpm
npm run publish:linux:pacman
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BT_TOKEN: ${{ secrets.BT_TOKEN }}
- name: Generate file MD5
run: |
cd build
md5sum *.deb *.rpm *.pacman *.AppImage

19
.ncurc.js Normal file
View File

@@ -0,0 +1,19 @@
module.exports = {
upgrade: true,
reject: [
'electron',
'chalk',
'del',
'comlink',
],
// target: 'newest',
// filter: [
// 'electron-builder',
// 'electron-updater',
// ],
// target: 'minor',
// filter: [
// 'electron',
// ],
}

View File

@@ -1,49 +0,0 @@
language: node_js
node_js: 12
matrix:
include:
- os: osx
osx_image: xcode10.2
env:
- ELECTRON_CACHE=$HOME/.cache/electron
- ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder
- os: linux
dist: trusty
sudo: required
addons:
apt:
packages:
- rpm
- bsdtar
cache:
directories:
- node_modules
- $HOME/.cache/electron
- $HOME/.cache/electron-builder
- $HOME/.npm/_prebuilds
notifications:
email: false
script:
- node --version
- npm --version
- |
if [ "$TRAVIS_OS_NAME" == "linux" ]; then
npm install && npm run publish:gh:linux
else
npm run publish:gh:mac
fi
before_cache:
- rm -rf $HOME/.cache/electron-builder/wine
# only run this script on pull requests and merges into
# the 'master' and 'prod' branches
branches:
only:
- master
- dev

29
.vscode/i18n-ally-custom-framework.yml vendored Normal file
View File

@@ -0,0 +1,29 @@
# .vscode/i18n-ally-custom-framework.yml
# An array of strings which contain Language Ids defined by VS Code
# You can check avaliable language ids here: https://code.visualstudio.com/docs/languages/overview#_language-id
languageIds:
- javascript
- typescript
- vue
# An array of RegExes to find the key usage. **The key should be captured in the first match group**.
# You should unescape RegEx strings in order to fit in the YAML file
# To help with this, you can use https://www.freeformatter.com/json-escape.html
usageMatchRegex:
# The following example shows how to detect `t("your.i18n.keys")`
# the `{key}` will be placed by a proper keypath matching regex,
# you can ignore it and use your own matching rules as well
- "[^\\w\\d]t\\(['\"`]({key})['\"`]"
# An array of strings containing refactor templates.
# The "$1" will be replaced by the keypath specified.
# Optional: uncomment the following two lines to use
# refactorTemplates:
# - i18n.get("$1")
# If set to true, only enables this custom framework (will disable all built-in frameworks)
monopoly: true

37
.vscode/javascript.code-snippets vendored Normal file
View File

@@ -0,0 +1,37 @@
{
// Place your lx-music-desktop-new 工作区 snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and
// description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope
// is left empty or omitted, the snippet gets applied to all languages. The prefix is what is
// used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders.
// Placeholders with the same ids are connected.
// Example:
// "Print to console": {
// "scope": "javascript,typescript",
// "prefix": "log",
// "body": [
// "console.log('$1');",
// "$2"
// ],
// "description": "Log output to console"
// }
"use i18n": {
"prefix": "ui18n",
"body": [
"import { useI18n } from '@renderer/plugins/i18n'",
"${1:const t = useI18n()}"
]
},
"list action": {
"prefix": "listacion",
"body": [
"import { $1 } from '@renderer/store/list/action'",
]
},
"import vue tools": {
"prefix": "imvt",
"body": [
"import { $1 } from '@common/utils/vueTools'",
]
}
}

17
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,17 @@
{
"i18n-ally.localesPaths": [
"src/lang"
],
// "i18n-ally.fullReloadOnChanged": true,
"i18n-ally.keystyle": "nested",
"i18n-ally.displayLanguage": "zh-cn",
"i18n-ally.sourceLanguage": "zh-cn",
"i18n-ally.translate.engines": [
"google-cn",
"google"
],
"i18n-ally.sortKeys": true,
"javascript.preferences.importModuleSpecifier": "non-relative",
"typescript.tsdk": "node_modules/typescript/lib",
"vue.codeActions.enabled": false
}

31
.vscode/typescript.code-snippets vendored Normal file
View File

@@ -0,0 +1,31 @@
{
// Place your lx-music-desktop-new 工作区 snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and
// description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope
// is left empty or omitted, the snippet gets applied to all languages. The prefix is what is
// used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders.
// Placeholders with the same ids are connected.
// Example:
// "Print to console": {
// "scope": "javascript,typescript",
// "prefix": "log",
// "body": [
// "console.log('$1');",
// "$2"
// ],
// "description": "Log output to console"
// }
"use i18n": {
"prefix": "ui18n",
"body": [
"import { useI18n } from '@renderer/plugins/i18n'",
"${1:const t = useI18n()}"
]
},
"import vue tools": {
"prefix": "imvt",
"body": [
"import { $1 } from '@common/utils/vueTools'",
]
}
}

View File

@@ -6,6 +6,870 @@ Project versioning adheres to [Semantic Versioning](http://semver.org/).
Commit convention is based on [Conventional Commits](http://conventionalcommits.org).
Change log format is based on [Keep a Changelog](http://keepachangelog.com/).
## [2.2.2](https://github.com/lyswhut/lx-music-desktop/compare/v2.2.1...v2.2.2) - 2023-05-01
### 修复
- 修复在低版本Linux amd64系统上无法启动的问题glibc版本要求过高导致的采用内置预编译二进制文件的方式解决
- 修复添加歌曲弹窗默认列表名字显示问题
## [2.2.1](https://github.com/lyswhut/lx-music-desktop/compare/v2.2.0...v2.2.1) - 2023-05-01
### 优化
- 优化对系统Media Session的支持现在切歌不会再会导致信息丢失的问题了
- 启用桌面歌词时,取消对歌词窗口的聚焦
- 增加kg歌单歌曲flac24bit显示@helloplhm-qwq
- 增加tx源热门评论图片显示@Folltoshe
- 优化更新弹窗弹出时机
- 优化搜索框背景配色,使其适应高透明主题
- 支持wy热门评论翻页
### 修复
- 修复启用全局快捷键时与Media Session注册冲突的问题启用全局快捷键时不再注册媒体控制快捷键
- 修复mg搜索不显示时长的问题@Folltoshe
- 修复mg评论加载失败的问题@Folltoshe
- 修复对存在错误时间标签的歌词的解析
### 其他
- 自定义源API utils对象新增`zlib.inflate``zlib.deflate`方法API版本更新到 v1.3.0
- 更新kg、tx、wy等平台排行榜列表
- 更新 electron 到 v22.3.7
## [2.2.0](https://github.com/lyswhut/lx-music-desktop/compare/v2.1.2...v2.2.0) - 2023-03-26
从v2.2.0起,我们发布了一个独立版的[数据同步服务](https://github.com/lyswhut/lx-music-sync-server#readme),如果你有服务器,可以将其部署到服务器上作为私人多端同步服务使用,详情看该项目说明
### 不兼容性变更说明
- 同步功能从这个版本起数据同步功能至少需要移动端v1.0.0的版本才能连接,连接的地址格式也略有改变,详情看[文档说明](https://lyswhut.github.io/lx-music-doc/desktop/faq/sync)
### 新增
- 重构数据同步功能,新增客户端模式
- 新增全屏时自动关闭歌词设置,默认开启,可以去设置-桌面歌词设置更改
- 新增设置-桌面歌词设置-重置窗口设置功能,点击时会重置桌面歌词窗口大小及位置
- 新增设置-其他-列表数据清理功能,点击时会清空已创建的所有列表及所有收藏的歌曲
### 优化
- 支持wy源flac hires歌曲类型的显示
- 快捷键调整音量时每次加减2%音量改为4%#1220
- 音量、播放模式等设置弹出式按钮在鼠标移到按钮上时将自动弹出设置内容,保留点击切换显示/隐藏
- 支持kg源搜索列表、排行榜flac hires歌曲类型的显示#1231, #1238 By @helloplhm-qwq, @Folltoshe
- 播放速率的粒度调整为0.01范围0.6-2.0x
### 修复
- 修复同步连接的处理问题
- 修复记住播放进度的情况下使用Scheme URL打开应用播放的歌曲进度没有被重置的问题
- 修复使用酷狗码无法打开某些类型的歌单的问题
- 修复tx源某些歌单因为歌曲信息缺失导致打开失败的问题
- 修复连续选择时的初始选择歌曲位置被意外改变的问题
### 其他
- 更新 Electron 到v22.3.4
## [2.1.2](https://github.com/lyswhut/lx-music-desktop/compare/v2.1.1...v2.1.2) - 2023-02-18
### 修复
- 修复处于最新版本时更新弹窗日志内容显示异常的问题
- 修复更新到最新版本后的首次启动时的更新日志未显示的问题
## [2.1.1](https://github.com/lyswhut/lx-music-desktop/compare/v2.1.0...v2.1.1) - 2023-02-18
### 修复
- 修复检查更新日志地址不正确的问题
## [2.1.0](https://github.com/lyswhut/lx-music-desktop/compare/v2.0.5...v2.1.0) - 2023-02-18
由于软件内功能在设计时只考虑简单便捷性,是否对新手友好并不是我们考虑的重点,功能的新增、变更会在更新日志中注明,不会在软件内做指引提示,
因此为了更愉快地使用本软件,我们建议在使用新版本时阅读一遍更新日志以了解软件的变更情况,同时若遇到问题可以去阅读常见问题找解决方案
### 新增
- 新增桌面歌词设置字体加粗设置,可以到设置-桌面歌词设置-加粗字体修改
- 新增是否自动下载更新设置,默认开启,可以去设置-软件更新更改
- 新增当前版本更新日志显示弹窗(建议大家阅读更新日志以了解当前版本的变化),在更新版本后将自动弹出
- 新增是否在更新版本的首次启动时显示更新日志弹窗设置,默认开启,可以去设置-软件更新更改
- 新增播放速率调整功能可以去播放详情页的控制按钮调整范围限制为x0.5至x2之间#13
- 添加wy、tx源感谢某位不愿透露姓名的大佬提供的C++算法源码,但由于作者不希望公开,所以将会以预构建二进制文件的形式加入代码仓库中)逐字歌词的支持
- 新增设置-下载设置-是否嵌入翻译歌词、罗马音歌词设置,默认关闭
- 添加启动时的数据库表及表结构完整性校验,若未通过校验,则会显示弹窗提示后将该数据库重命名添加`.bak`后缀后重建数据库启动。对于某些人遇到更新到v2.0.0后出现之前收藏的歌曲全部丢失或者歌曲无法添加到列表的问题,可以通过此特性自动重建数据库并重新迁移数据,不再需要手动去数据目录删除数据库
### 优化
- 微调了桌面歌词逐行字体阴影,使其看起来更匀称
- 调整了桌面歌词在启用滚动到顶部时的距离,现在滚动到顶部的歌词更靠边,不再受字体大小、歌词间距影响
- 优化更新弹窗内容的显示,添加了自动更新失败时的更新指引
- 为所有文本输入框添加右键快速粘贴的功能,右击输入框可以自动粘贴剪贴板的文字,若选中文字时将粘贴并替换选中文字
- 防止桌面歌词窗口在屏幕分辨率变小时,窗口位置跟随分辨率变化的问题,现在若屏幕分辨率变小后窗口位置仍会在原始分辨率的位置(添加这个机制是为了解决屏幕分辨率被临时调整时的位置更新问题,如运行某些低分辨率的全屏游戏、高分辨率外接屏幕休眠时),但若你的分辨率调整不是临时的,因窗口在原始位置导致看不到窗口可以开关桌面歌词即可重新自动调节回屏幕内
### 修复
- 修复播放下载列表的歌曲时,调整歌词偏移时间功能异常的问题
- 修复较旧Linux arm64系统下无法启动软件的问题将预构建模块的所需glibc版本降级到2.28#1161
- 修改列表响应式更新机制,尝试修复偶现的删除歌曲列表未更新的问题
- 修复某些kg歌单链接无法打开的问题
- 修复将桌面歌词放到屏幕边缘时,偶现的开启桌面歌词后出现歌词窗口位置出现少许偏移的问题,以及将歌词窗口调整到全屏大小后,重开桌面歌词窗口被缩小出现边距的问题
### 其他
- 更新Electron到v22.3.0
## [2.0.5](https://github.com/lyswhut/lx-music-desktop/compare/v2.0.4...v2.0.5) - 2023-01-18
这应该是LX今年的最后一个版本提前祝大家新年快乐~😘
### 修复
- 修复声音输出设备更改时后的自动暂停播放设置无效的问题
- 重写桌面歌词窗口坐标的计算逻辑修复桌面歌词移动到最边缘时某些情况下在启用歌词后会出现窗口偏移的问题远古bug了
- 修复随机播放模式下使用稍后播放功能播放我的列表的歌曲时,切换下一曲永远是当前歌曲的问题(#1147
- 修复macOS下的软件系统菜单中的退出功能不会完全退出软件的问题#1148
## [2.0.4](https://github.com/lyswhut/lx-music-desktop/compare/v2.0.3...v2.0.4) - 2023-01-15
### 修复
- 修复备份文件导入指引无法识别v2配置的问题
- 修复从搜索界面进入歌单详情后,若启用强迫症设置的清空功能会导致意外清空搜索框、搜索列表的问题
- 修复桌面歌词在启用卡拉OK歌词后字体边缘可能被截断的问题特别是纵向歌词某些字的边角被截断导致后面的阴影露出来或阴影不均匀的问题
- 修复桌面歌词启用歌词缩放后的阴影显示问题
- 修复Linux armv7l系统如树莓派下无法启动的问题与修复Linux arm64的方法一样采用内置预编译模块的方式修复
- 修复备份与恢复的列表导入列表信息设置逻辑问题与潜在导入问题
## [2.0.3](https://github.com/lyswhut/lx-music-desktop/compare/v2.0.2...v2.0.3) - 2023-01-08
### 修复
- 修复初始设置的桌面歌词窗口没有完全居右下角的问题
- 修复Linux arm64系统下无法启动的问题#1102
- 修复桌面歌词使用斜体出现截断的问题(#1106
- 修复某些情况下歌词的滚动问题
- 修复禁用切歌时歌曲播放完毕后的歌曲信息显示问题
- 修复修改播放设置-音频输出设置后,所做的更改没有被保存的问题
### 优化
- 点击打开歌单弹窗背景可以关闭弹窗(#1096
## [2.0.2](https://github.com/lyswhut/lx-music-desktop/compare/v2.0.1...v2.0.2) - 2023-01-02
若你更新v2.0.0后,出现之前收藏的歌曲全部丢失或者歌曲无法添加到列表播放的问题,可以按以下方式解决:
1. 根据你的平台类型,进入软件数据目录
- Windows`%APPDATA%/lx-music-desktop`
- Linux`$XDG_CONFIG_HOME/lx-music-desktop``~/.config/lx-music-desktop`
- macOS`~/Library/Application Support/lx-music-desktop`
2. 进入`LxDatas`目录退出LX删除`lx.data.db`文件,再启动软件即可
若以上操作仍然不行可以加交流群或者在GitHub开issue反馈
### 修复
- 修复无效的歌曲信息导致我的列表数据迁移失败的问题
## [2.0.1](https://github.com/lyswhut/lx-music-desktop/compare/v2.0.0...v2.0.1) - 2023-01-02
若你更新v2.0.0后,出现之前收藏的歌曲全部丢失或者歌曲无法添加到列表播放的问题,可以按以下方式解决:
1. 根据你的平台类型,进入软件数据目录
- Windows`%APPDATA%/lx-music-desktop`
- Linux`$XDG_CONFIG_HOME/lx-music-desktop``~/.config/lx-music-desktop`
- macOS`~/Library/Application Support/lx-music-desktop`
2. 进入`LxDatas`目录退出LX删除`lx.data.db`文件,再启动软件即可
若以上操作仍然不行可以加交流群或者在GitHub开issue反馈
### 优化
- 单次执行所有sql语句尝试解决某些情况下某些表没有成功创建的问题
## [2.0.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.22.3...v2.0.0) - 2023-01-01
### 不兼容性变更说明
- 数据迁移,升级此版本时,会使用旧版本的我的列表、下载设置、快捷键设置、自定义源等数据会自动迁移到新的数据格式版本,旧的数据仍然会保留,但下载列表的数据不做迁移
- 备份文件v2.0.0及以后版本导出的列表、配置不支持导入v2.0.0之前版本但v2.0.0之前版本导出的列表、配置支持导入v2.0.0以及以后版本移动端需v0.15.0起才支持导入PC端v2生成的备份数据
- 同步功能该功能不支持与移动端v1.0.0之前版本的使用需等待后面的新版移动端目前移动端v1的开发工作已在进行中
### 新增
- 新增自定义主题功能
- 新增歌单搜索功能
- 新增将本地歌曲添加到我的列表的支持,此功能可以在列表的右击菜单中使用(本地歌曲的歌词优先尝试读取相同路径下的同名歌词文件,若文件不存在则尝试读取歌曲文件内的歌词,若还是找不到歌词则尝试利用换源功能获取在线歌词,歌曲封面则是尝试读取歌曲文件内的封面,若不存在则利用换源功能获取在线封面)
- 启动软件时自动回到上次的界面,例如上次退出软件时在我的列表,下次启动软件时会自动进入我的列表
- 新增启动软件时自动播放音乐设置,默认关闭,可去设置-播放设置开启
- 新增“蛋雅深藍”、“近墨者黑”皮肤
- 新增下载歌词时是否同时下载歌词翻译、罗马音设置,默认关闭,可以去设置-下载设置开启(#344
- 新增下载时,若目录存在同名的文件时是否跳过下载此任务的设置(默认跳过,可以去设置-下载设置更改)
- 新增界面字体大小设置
- 桌面歌词新增竖排歌词显示功能(#971
- 桌面歌词新增歌词对齐方式、是否不允许歌词换行、歌词颜色、滚动对齐方式、歌词间距设置
- 桌面歌词新增歌曲频谱显示得益于主窗口与桌面歌词进程通信的改进可以将此功能以CPU使用率“相对较低”的方式带到桌面歌词中
- 桌面歌词新增在任务栏显示歌词进程设置(此设置用于在录屏软件无法捕获歌词窗口时的变通解决方法)(#1063
- 添加kg源罗马音歌词的支持感谢@helloplhm-qwq
- 支持打开波点音乐歌单(需在酷我源打开)
- 新增设置-基本设置-播放栏进度条样式设置(此版本默认使用迷你进度条样式,对于某些不喜欢该样式的人可以将其换成其他样式)
- 添加kg源评论图片展示感谢@helloplhm-qwq
### 优化(界面/交互/功能)
- 调整软件界面及配色,使其更加清爽
- 处于单曲循环、顺序播放、禁用切歌模式时,手动切歌将会按列表循环模式的逻辑处理切歌(#864
- 歌单右键菜单的“重复歌曲”扫描功能现在会将歌曲名字内的括号内容移除再对比,这可以有效找出歌曲的变体,例如:`突然的自我``突然的自我(Live)``突然的自我(女生版)``突然的自我(DJ版)`等都会被找出来(#987
- 允许更小的桌面歌词窗口高度,可以取消“不允许拖动到主屏幕之外”设置后,再启用“不允许歌词换行”、“置顶歌词”与“自动刷新置顶”等设置,把它拖动到任务栏上,当做任务栏歌词使用(具体可以按你想要的显示方式使用这些设置组合去调)
### 优化(程序)
- 优化程序启动性能,优化与程序交互的流畅度
- 重构整个程序重新梳理了程序逻辑使其更容易扩展及维护将大部分代码从JavaScript迁移到TypeScript
- 重写配置管理、列表管理功能列表、歌词数据从json文件迁移到sqlite3存储这应该能解决因为意外的字符编码导致的数据文件损坏问题
### 变更
- 列表右侧的操作按钮栏默认不再显示,歌曲的操作可以使用右键菜单代替,若想恢复它们的显示,可以去设置-列表设置-启用操作按钮栏开启
- 窗口大小设置时不再自动调整字体大小,想要调整字体大小可以使用新增的字体大小设置调整
### 修复
- 修复Linux、macOS下若程序路径存在百分号时会导致软件无法启动的问题#963
- 支持单行多时间标签歌词解析,修复某些歌词会出现时间标签的问题
### 移除
- 移除“信口雌黄”皮肤(由于该皮肤的配色有点刺眼),若你正在使用该皮肤,可以使用自定义主题功能恢复它
- 移除Linux deb x86包构建Electron/Chromium已不再支持 32-bit Linuxelectron/electron#34787
- 移除桌面歌词主题设置,改用桌面歌词字体颜色设置功能代替
### 其他
- 更新Electron到v19.1.9
## [1.22.3](https://github.com/lyswhut/lx-music-desktop/compare/v1.22.2...v1.22.3) - 2022-09-03
### 修复
- 修复因音源的域名到期导致的音源失效的问题
## [1.22.2](https://github.com/lyswhut/lx-music-desktop/compare/v1.22.1...v1.22.2) - 2022-08-18
### 优化
- 为tx、kw源添加 Flac 24bit 音质显示,注:由于之前没有记录此音质,所以之前收藏的歌曲信息中不包含它
### 修复
- 修复无法批量排序歌曲的问题
- 修复某些缺失的繁体中文翻译
- 修复企鹅音乐搜索失效的问题
### 其他
- 降级electron到v15.5.7
## [1.22.1](https://github.com/lyswhut/lx-music-desktop/compare/v1.22.0...v1.22.1) - 2022-07-09
### 优化
- 歌单列表添加歌单内歌曲数量显示目前只有kw、mg、wy、tx部分源支持显示
### 修复
- 修复处于不支持的源时,歌单、排行榜的右键下载菜单没有禁用的问题
- 修复若桌面歌词窗口与主窗口重叠时,鼠标划过重叠区域鼠标会闪烁的问题,注:此修复只对未启用“鼠标移入歌词区域时降低歌词透明度”时有效
- 修复tx源搜索失效的问题
### 其他
- 升级Electron到 v17.4.10
## [1.22.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.21.0...v1.22.0) - 2022-06-19
### 新增
- 新增设置-以全屏模式启动设置
- 新增设置-桌面歌词设置-鼠标移入歌词区域时降低歌词透明度(#883默认关闭此设置不支持linux此功能存在兼容性问题若鼠标移出后无法恢复到正常透明度可尝试再移入移出即可恢复
### 优化
- 添加歌曲到“我的列表”时,若按住`ctrl`Mac对应`Command`),则不会自动关闭添加窗口,这对想要将同一首(一批)歌曲添加到多个列表时会很有用
- 支持mg源逐字歌词的播放感谢 @mozbugbox 提供的帮助
- 添加歌曲列表更新操作的二次确认
- 添加导入文件错误时的指引提示
### 修复
- 修复若配置了`http_proxy`环境变量时,会意外使用此代理配置的问题
- 修复多选后切换列表后不会清空多选内容的问题
- 修复设置快捷键时的处理逻辑问题
- 修复在新建歌单输入框、歌单内歌曲搜索输入框会意外触发设置的全局快捷键的问题(#879
### 文档
桌面版文档已迁移到:<https://lyswhut.github.io/lx-music-doc/desktop>
### 其他
- 更新 Electron 到 v17.4.7
## [1.21.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.20.0...v1.21.0) - 2022-05-22
### 新增
- 新增设置-播放设置-显示歌词罗马音,默认关闭,注:目前只有网易源能获取到罗马音歌词(得益于 Binaryify/NeteaseCloudMusicApi/pull/1523如果你知道其他源的歌词罗马音获取方式欢迎PR或开issue交流
### 优化
- 同时删除一首歌以上时将需要二次确认删除
- 禁用透明窗口时右侧不再偏移5px距离在win7、Ubuntu等系统上测试发现不偏移也不影响滚动条的拖动了
- 删除未下载完成的任务时,只同时尝试删除已有下载进度的本地文件
- 在全屏状态下使用`Esc`键可以退出全屏(#827
### 修复
- 修复某些情况下歌曲播放出错时不会自动切歌的问题
- 修复关闭“显示切换动画”设置后,在应用启动时该设置没有被应用的问题
- 修复原始歌词存在偏移时,歌词偏移设置的重置未按预期工作的问题
- 修复长度大于一行的歌词在使用歌词调整播放进度时的时间不准问题
- 修复潜在歌单更新失败的问题
### 文档
- 将歌曲添加“稍后播放”后,它们会被放在一个优先级最高的特殊队列中,点击“下一曲”时会消耗该队列中的歌曲,并且无法通过“上一曲”功能播放该队列的上一首歌曲
- 在切歌时若不是通过“上一曲”、“下一曲”功能切歌(例如直接点击“排行榜列表”、“我的列表”中的歌曲切歌),“稍后播放”队列将会被清空
## [1.20.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.19.0...v1.20.0) - 2022-04-17
特别说明Scheme URL其实是支持Linux系统的但好像需要deb之类的安装包创建出`.desktop`文件才行。
### 新增
- 新增播放详情页歌词右键菜单,原来设置-播放详情页设置的字体重置已迁移到此菜单内
- 新增歌词偏移设置,可以在播放详情页歌词右键菜单中使用
- 新增设置-播放设置-播放错误时自动切换歌曲设置默认开启原来的行为若你不想在遇到音频加载失败、url获取失败等错误时自动切歌可以关闭此设置
- 新增设置-桌面歌词设置-自动刷新歌词置顶(当歌词置顶后仍被某些程序遮挡时可尝试启用此设置)
- 新增列表更新管理,可以在鼠标移入“我的列表”标题时出现的按钮中进入,这可以用来设置启动软件时需要自动从原平台更新的列表
### 优化
- 优化播放详情页背景显示,现在有背景图片的主题可以在播放详情页显示它的图片了
- 播放详情页在全屏状态下仍会显示退出播放详情页按钮,同时在其旁边添加退出全屏按钮
- 播放详情页在全屏状态下鼠标在空白处静止不动3秒后自动将其隐藏
### 修复
- 修复Linux无法全屏的问题
- 修复播放下载列表的歌曲时使用Windows任务栏缩略图工具栏控制按钮的收藏按钮收藏歌曲时的异常问题
- 修复启用搜索历史但不启用热门搜索时,搜索历史不显示的问题
- 修复窗口尺寸设置对应的字体大小在启动后不生效的问题
- 修复wy源搜索某些歌曲时第一页之后的歌曲无法加载的问题
- 修复使用Scheme URL搜索歌曲时不会自动关闭播放详情页若处于打开状态的问题
- 修复换源失败时的处理问题
- 修复启用代理时https请求可能被挂起或被转为http的问题
- 修复正在下载的歌曲暂停任务后,再开始会导致程序卡死的问题
### 变更
- 播放详情页的任意地方右键双击隐藏详情页的行为,“任意区域”改为在“非歌词区域”
### 移除
- 移除设置-播放详情页设置-歌词字体重置,此设置项已迁移到播放详情页的歌词菜单中
- 移除播放详情页使用+-快捷键调整字体大小的功能,改用歌词右键菜单的字体大小调整功能
## [1.19.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.18.0...v1.19.0) - 2022-03-20
### 新增
- 新增对播放详情页歌词大小、是否缩放、对齐方式的设置,可以去设置-播放详情页设置查看
- 新增播放详情页通过歌词调整播放进度,默认关闭,需要到设置-播放详情页设置开启,开启后在播放详情页拖动歌词时将会出现跳转当前行歌词播放的按钮
- 新增全屏状态按F11可以进入、退出全屏状态由于全屏时会隐藏控制栏按钮所以需要使用鼠标右键双击详情页的任意地方都可以来关闭播放详情页
- 新增动态主题“道法自然”,你可以预先设置一个亮色主题及暗色主题,此后将根据系统的亮、暗主题色自动切换为你预先设置的相应主题。注:鼠标 右击 此主题项即可打开亮、暗色主题设置窗口。
- 新增对kw源卡拉OK歌词的支持
### 优化
- 优化Windows任务栏缩略图工具栏控制按钮在浅色任务栏下的显示效果
- 添加音频可视化与音频输出设备冲突的提示
- 优化歌词的播放偏移
- 优化托盘菜单操作(#686
- 优化播放下载列表时的切歌性能
### 修复
- 修复“当前的声音输出设备被改变时暂停播放歌曲”设置无效的问题
- 修复桌面歌词没有处理停止播放状态的问题
- 修复AppImage包无法运行的问题
- 修复Windows任务栏缩略图工具栏控制按钮的歌曲收藏按钮状态更新问题
- 修复使用链接导入的歌单无法在我的列表打开原歌单详情页的问题
- 修复播放下载列表的歌曲时增删下载任务导致正在的歌曲序号改变时,不会更新到新增序号的问题
### 文档
添加LX中定义的快捷操作汇总说明到常见问题中这是目前可用的鼠标、键盘快捷操作它们都可以在更新日志中找到
- 鼠标右击播放栏的歌曲图片封面可以定位当前播放的歌曲
- 鼠标右击播放栏进度条上的LRC按钮可以锁定/解锁桌面歌词
- 歌曲搜索框、歌单链接输入框内鼠标右击可以将当前剪贴板上的文字粘贴到输入框内
- 鼠标右击搜索界面中的单条搜索历史可以将其移除
- 歌曲列表内的文字在选中后,鼠标右击可以复制已选中的文字,此功能只对搜索、歌单、排行榜、我的列表中的列表有效
- 鼠标在播放详情页内右键双击可以关闭播放详情页
- 鼠标左击播放栏上的歌曲名字可以将它复制
- 鼠标右击“道法自然英文Auto”主题可以打开亮、暗主题设置窗口
- 歌曲搜索框的候选内容可以用键盘上下方向键选择,按回车键搜索已选内容
- 在歌单详情页按退格键可以返回歌单列表
- 歌曲列表中可以使用Ctrl、Shift键进行多选这类似Windows下的文件选择详情看常见问题列表多选部分
- 在我的列表内可以使用Ctrl+f键打开搜索框进行列表内歌曲搜索搜索框按Esc键可以关闭搜索框搜索框内按上下方向键可以选择歌曲按回车键跳转到已选歌曲按Ctrl+回车可以跳转并播放已选歌曲
- 在我的列表按住Ctrl键可以进入列表拖动模式此时可以用鼠标拖动列表调整列表的位置
- 编辑列表名时按Esc键可以取消编辑
- 按F11可以进入、退出全屏状态
## [1.18.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.17.1...v1.18.0) - 2022-02-26
### 新增
- 新增“双击列表里的歌曲时自动切换到当前列表播放”设置,此功能仅对歌单、排行榜有效,默认关闭
- 新增打开收藏的在线列表的对应平台详情页功能,可以在我的列表-列表右键菜单中使用
- 新增定时暂停播放功能,由于此功能大多数人可能不常用,所以将其放在设置-基本设置中
- 新增任务栏缩略图工具栏控制按钮此功能仅在Windows平台可用按钮分别为收藏/取消收藏(将歌曲添加到“我的收藏”列表)、上一曲、播放/暂停、下一曲
- 新增设置-基本设置-软件字体设置此设置可用于设置主界面的字体已知的问题Windows 7 下可能会出现字体列表为空的情况,这是当前系统的 Powershell 版本小于5.1导致的,请自行尝试看常见解决)
- 新增Scheme URL对音乐搜索的调用支持详情看常见问题-Scheme URL支持
- 新增Scheme URL以url传参的方式调用详情看常见问题-Scheme URL支持
- 自定义源新增更新弹窗方法,同时自定义源管理新增是否允许源显示更新弹窗设置(出于防止滥用考虑),当源作者想要通知用户源已更新时,可以调用此方法弹窗告诉用户,调用说明看常见问题-自定义源部分
### 优化
- 过滤tx源某些不支持播放的歌曲解决播放此类内容会导致意外的问题
- 把歌曲的热门评论与最新评论拆分成两个列表显示
### 修复
- 修复排行榜名字右击菜单的播放功能在播放非激活的列表时的列表获取问题
- 修复修改列表名时无法使用`Ctrl`键的问题
- 修复wy源某些歌曲获取歌词翻译的问题处理
- 修复下载功能的歌词换源时会进入死循环的问题
- 修复某些歌曲无法下载的问题
- 修复windows平台下软件目录存在`portable`文件夹时,仍会创建`C:\Users\<user>\AppData\Roaming\lx-music-desktop\Dictionaries\en-US-9-0.bdic`文件的问题现在不会再创建文件但仍会创建空目录Electron的问题目前暂无解决方法
- 修复播放器的停止逻辑问题
### 其他
- 更新electron到v13.6.9
## [1.17.1](https://github.com/lyswhut/lx-music-desktop/compare/v1.17.0...v1.17.1) - 2022-01-28
### 优化
- 优化kw源英文与翻译歌词的匹配
### 修复
- 修复快捷键与默认按键行为冲突的问题现在若将某些有默认行为的按键如在列表中上、下箭头、Home、End等键可以使列表滚动设置为快捷键时将禁用其默认行为
- 修复列表的聚焦问题,现在在列表中使用上、下箭头、空格等键滚动列表时不会导致滚动到一定距离后丢失焦点的问题
### 其他
- 更新electron到v13.6.8
## [1.17.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.16.0...v1.17.0) - 2022-01-22
### 新增
- 新增“便携”功能在Windows平台下若程序目录下存在 portable 目录,则自动使用此目录作为数据存储目录
- 新增 Scheme URL 支持同时发布lx-music-script项目配合使用一个油猴脚本可以在浏览器中的官方平台网页直接调用LX MusicScheme URL的调用说明看Readme.md文档的Scheme URL支持部分
- 新增启动参数`-proxy-server``-proxy-bypass-list`详细介绍看Readme.md文档的启动参数部分
- 新增桌面歌词是否延迟滚动设置,默认开启,若你不想要桌面歌词延迟滚动可以去设置-桌面歌词设置关掉
### 优化
- 为可视化音频的频谱整体添加频谱均值加成,使频谱显示更有节奏感
- 优化程序初始化逻辑,修复无网络的情况下的初始化问题
- 我的列表-列表名的右击菜单更新已收藏的在线列表时将始终重新加载不再使用缓存解决在原平台更新歌单后在LX点击更新可能看到的还是在原平台更新前的歌单的问题
### 修复
- 修复代理不生效的问题
- 修复`openDevTools`选项无效的问题
- 修复播放状态的提示问题
- 修复tx源无搜索结果的问题
### 其他
- 更新 Electron 到 v13.6.7
## [1.16.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.15.3...v1.16.0) - 2022-01-01
这算是一个大版本,对主窗口部分的代码逻辑做了较大改动,但由于界面的改动不大,所以没有更新大版本号。
虽然经过一个月的测试与问题修复,但可能仍然存在未发现的问题,若你发现某些界面异常、某些行为与旧版本存在差异等问题,欢迎反馈!
另外祝大家元旦快乐~
### 新增
- 播放详情页新增音量控制条
- 播放详情页新增桌面歌词切换按钮
- 新增将我的列表保存为TXT、CSV格式可以去设置-备份与恢复中使用注意此类格式的备份目前不支持恢复到LX Music中
- 新增根据歌曲名、歌手名等字段对列表自动排序的功能,可以在我的列表右击列表名弹出的菜单中使用
- 新增将播放与下载的歌词转换为繁体中文选项,默认关闭,可在设置-播放设置中开启
- 现在已允许进入临时播放列表,即:使用歌单详情页、排行榜名称右键菜单的“播放”按钮播放歌曲时,可右击播放封面进入此临时列表
- 播放详情页新增音频可视化功能(实验性)
- 我的列表新增拖动调整位置功能按住Ctrl键Mac上对应Command键的时候将进入“拖动模式”此时可以拖动列表的位置来调整顺序
### 优化
- 优化列表性能,软件整体性能
- 调整Mac平台下的图标大小
- 同步功能添加对列表顺序调整的控制,确保手动调整位置后的列表与不同的电脑同步时,列表位置不会被还原
- 优化歌单详情、排行榜名右键的播放按钮的播放机制,现在不用等待整个列表(多页时)加载完成才能播放了
- 为播放详情页、桌面歌词添加延迟滚动,播放详情页略微减小已激活歌词的缩放大小及桌面歌词翻译大小
- 修改右边控制按钮为windows风格
- 更新了新年皮肤的背景与配色,欢迎体验~
### 修复
- 修复kw源某些歌曲的歌词提取异常的问题
### 变更
- 现在使用繁体中文语言时将不再自动转换歌词,转换行为将由上面新增的转换开关控制
### 移除
- 移除我的列表右键菜单的“上移、下移列表”功能,调整改用新增的拖动功能去调整位置
### 其他
- 升级vue到 3.x
## [1.15.3](https://github.com/lyswhut/lx-music-desktop/compare/v1.15.2...v1.15.3) - 2021-11-21
### 修复
- 修复设置-控制按钮位置选项与下载歌词编码格式选项命名冲突导致选项显示异常的问题
- 修复播放下载列表时存在失效的歌曲会导致切歌不准确的问题
- 修复潜在的音乐加载超时不会切歌的问题
- 修复因kw源歌词接口停用导致该源歌词获取失败的问题
## [1.15.2](https://github.com/lyswhut/lx-music-desktop/compare/v1.15.3...v1.15.2) - 2021-11-09
### 其他
- 降级electron到v13.4.0这修复了windows 7下播放歌曲时软件会崩溃的问题
## [1.15.1](https://github.com/lyswhut/lx-music-desktop/compare/v1.15.0...v1.15.1) - 2021-11-09
### 优化
- 优化我的列表、下载列表等列表的滚动流畅度
- 优化下载功能的批量添加、删除、暂停任务时的流畅度,现在进行这些操作应该不会再觉得卡顿了
- 支持启动软件时恢复播放下载列表里的歌曲
- 添加媒体播放进度条的信息设置
### 修复
- 修复某些情况下获取URL失败时会意外切歌的问题
- 修复了某些情况下会列表同步失败,导致连接断开无限重连或一直卡在 `syncing...` 的问题
- 修复列表数据过大导致同步失败的问题
### 其他
- 更新electron到v15.3.1(这修复了媒体控制失效的问题)
## [1.15.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.14.1...v1.15.0) - 2021-10-29
### 新增
- 添加黑色托盘图标
- 自定义源新增`version`字段,新增`utils.buffer.bufToString`方法
### 优化
- 大幅优化我的列表、下载、歌单、排行榜列表性能,现在即使同一列表内的歌曲很多时也不会卡顿了
- 优化列表同步代码逻辑
- 优化开关评论时的动画性能
- 优化进入、离开播放详情页的性能
- 兼容桌面歌词以触摸的方式移动、调整大小
- 调整图标尺寸
### 修复
- 修复kg源的歌单链接无法打开的问题
- 修复同一首歌的URL、歌词等同时需要换源时的处理问题
### 其他
- 更新 Electron 到 v15.3.0
## [1.14.1](https://github.com/lyswhut/lx-music-desktop/compare/v1.14.0...v1.14.1) - 2021-10-04
### 修复
- 修复我的列表搜索无法搜索小括号、中括号等字符的问题
- 修复v1.14.0出现的备份与恢复功能备份的数据无法恢复的问题同时兼容使用v1.14.0导出的存在问题的数据
## [1.14.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.13.0...v1.14.0) - 2021-10-02
### 新增
- 新增歌词简体中文转繁体中文,当软件语言被设置为繁体中文后,播放歌曲的歌词也将自动转成繁体中文显示
- 新增单个列表导入/导出功能,可以方便分享歌曲列表,可在右击“我的列表”里的列表名后弹出的菜单中使用
- 新增删除列表前的确认弹窗,防止误删列表
- 新增歌词文本选择复制功能,可在详情页进度条上方的歌词文本选择按钮进入歌词文本选择模式,选择完成后可鼠标右击或者使用系统快捷键复制
- 新增重复歌曲列表,可以方便移除我的列表中的重复歌曲,此列表会列出目标列表里歌曲名相同的歌曲,可在右击“我的列表”里的列表名后弹出的菜单中使用
### 修复
- 修复mg排行榜无法加载的问题
- 修复点击播放详情页的进度条跳进度时会出现偏移的问题
- 修复在有提示信息的地方长按鼠标按键时提示信息会闪烁的问题
- 修复下载歌曲时的歌词下载不尝试获取缓存歌词的问题
- 修复GNOME等桌面下每次打开应用时需重新设置歌词窗口置顶的问题
## [1.13.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.12.2...v1.13.0) - 2021-09-05
如果你喜欢并经常使用洛雪音乐并想要第一时间尝鲜洛雪的新功能可以加入测试企鹅群768786588
注意:测试版的功可能会不稳定,打算潜水的勿加。
### 新增
- 歌曲搜索框新增清理按钮,点击此按钮可以清理搜索框并返回初始搜索界面
- 新增“下载的歌词文件编码格式”设置,默认下载的歌词编码仍是`UTF-8`,对于某些在设备(如车机)上出现歌词中文乱码的用户可以尝试选择以`GBK`编码格式保存歌词文件
- 新增设置-桌面歌词-歌词字体设置此设置可用于设置桌面歌词的字体已知的问题Windows 7 下可能会出现字体列表为空的情况,这是当前系统的 Powershell 版本小于5.1导致的,请自行**尝试**看常见解决)
### 优化
- 支持网易源“我喜欢”歌单以注入token的方式打开。由于网易源的“我喜欢”歌单需要登录才能打开若你看不懂后半句就去阅读 常见问题-无法打开外部歌单),现若想要打开此类歌单,需要在歌单链接后面拼上 `###` 再加上有效的token拼接格式`[id|url]###token`例子最后面的xxxxxx替换成你的token`https://music.163.com/#/playlist?id=123456&userid=123456###xxxxxx`
- 软件内快捷键的最小化触发时,如果已启用托盘,则隐藏程序,否则最小化程序
### 修复
- 修复某些情况下同步功能会导致切歌混乱的问题
- 修复从电脑浏览器复制的企鹅歌单链接无法打开的问题
## [1.12.2](https://github.com/lyswhut/lx-music-desktop/compare/v1.12.1...v1.12.2) - 2021-08-11
### 修复
- 修复播放下载列表的歌曲时切歌的问题
- 修复播放下载列表的歌曲时歌词无法显示的问题
- 修复下载列表稍后播放功能无效的问题
- 修复同步服务器启动失败时,关闭同步服务不会清空失败信息的问题
## [1.12.1](https://github.com/lyswhut/lx-music-desktop/compare/v1.12.0...v1.12.1) - 2021-08-08
### 修复
- 修复随机播放下无法切歌的问题
## [1.12.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.11.0...v1.12.0) - 2021-08-08
### 新增
- 新增局域网同步功能实验性首次使用前建议先备份一次列表此功能需要配合PC端使用移动端与PC端处在同一个局域网路由器的网络下时可以多端实时同步歌曲列表使用问题请看"常见问题"。
### 优化
- 添加播放器对系统媒体控制与显示的兼容处理现在在windows下的锁屏界面可以正确显示当前播放的音乐信息及切换歌曲了
### 修复
- 修复导入kg歌单最多只能加载100、500首歌曲的问题。注现在可以加载1000+首歌曲的歌单但出于未知原因会导致部分歌曲无法加载可能是无版权导致的目前酷狗码仍然最多只能加载500首歌
- 修复某些情况下所显示的歌词、封面图片与当前正在播放的歌曲不一致的问题
## [1.11.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.10.2...v1.11.0) - 2021-07-18
### 新增
- 添加 win arm64 架构的安装包构建
- 新增“添加歌曲到列表时的位置”设置,可选项为列表的“顶部”与“底部”
### 优化
- 优化网络请求,尝试去解决无法连接服务器的问题
- 优化mg源打开歌单的链接兼容
### 修复
- 修复mg源搜索失效的问题
### 移除
- 因wy源的歌单列表已没有“最新”排序的选项所以现跟随移除wy源歌单列表按“最新”排序的按钮
### 变更
- 添加歌曲到列表时从原来的底部改为顶部,若你想要将你的列表歌曲顺序反转以适应这一变更,可先按住`shift`键的情况下点击列表的最后一首歌然后再点击列表的第一首歌完成倒序选中最后随便右击列表的任意一首歌在弹出的菜单中选择调整顺序在弹出框输入1后确定即可反转列表。
若你想要恢复原来的行为则可以去更改“添加歌曲到列表时的位置”设置项。
### 其他
- 更新electron到v13.1.7
## [1.10.2](https://github.com/lyswhut/lx-music-desktop/compare/v1.10.1...v1.10.2) - 2021-05-25
### 修复
- 修复企鹅音乐搜索歌曲没有结果的问题
## [1.10.1](https://github.com/lyswhut/lx-music-desktop/compare/v1.10.0...v1.10.1) - 2021-05-25
### 修复
- 修复企鹅音乐搜索歌曲没有结果的问题
- 修复播放在空的歌单列表点击播放全部时报错的问题
## [1.10.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.9.0...v1.10.0) - 2021-05-19
lx music移动端已经发布了使用习惯仍跟桌面版一样不过功能、界面仍比较简单有兴趣的可以去体检一下项目地址
https://github.com/lyswhut/lx-music-mobile#readme
### 新增
- 排行榜界面添加播放、收藏整个排行榜功能,可以右击排行榜名字后,在弹出的右键菜单中使用。注:收藏、播放存在分页的排行榜时需等待操作完成后才能切换排行榜,不然会导致操作中断。
- 新增Mac arm64位dmg包的构建
### 修复
- 修复全局快捷键对桌面歌词无效的问题
- 修复快捷键设置框内的提示问题
- 修复在当前正常播放的列表中使用稍后播放功能时,播放完后稍后播放的歌曲后不会恢复原来播放位置播放的问题
- 修复kw部分歌单无法打开的问题
- 修复wy源的歌曲音质匹配问题
- 修复mg源歌单标签、排行榜歌曲列表无法加载的问题
- 修复了一个歌曲下载失败时不会跳过任务的问题
### 其他
- 更新 Electron 到 12.0.8
## [1.9.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.8.2...v1.9.0) - 2021-04-24
### 新增
- 新增启动参数`-dhmkh`此参数将禁用Chromium的Hardware Media Key Handling特性用于解决漫步者部分型号耳机与本程序冲突导致耳机意外关机的问题
- 新增Windows arm64位免安装版的构建
- 新增黑色皮肤“黑灯瞎火”,有关于皮肤配色的建议欢迎反馈
- 新增自动换源下载功能默认关闭当无法从歌曲的原始源下载时将尝试切换到其他源下载此功能不100%保证换源后的歌曲版本与原版一致
### 优化
- 程序启动时对数据文件做读取校验数据出现损坏时自动备份损坏的数据若出现数据读取错误的弹窗并出现我的列表丢失时可到GitHub或加群反馈
- 当设置-代理启用,但主机地址为空的时,将不再使用代理配置进行网络连接,并且在离开设置界面时自动禁用代理
- 优化歌曲自动换源匹配
- 分离歌词与歌曲列表信息的保存,以减小列表列表文件损坏的几率
- 兼容打开咪咕移动端分享的歌单链接,添加打开歌单的信息显示
### 修复
- 修复备份与恢复功能在恢复数据时某些设置不立即生效的问题
- 修正设置页“搜索设置”部分内容的缩进显示问题
- 修复正在播放“稍后播放”的歌曲时,对“稍后播放”前播放的列表进行添加、删除操作会导致切歌的问题
## [1.8.2](https://github.com/lyswhut/lx-music-desktop/compare/v1.8.1...v1.8.2) - 2021-03-09
### 修复
- 修复歌曲ID存储变更导致酷狗图片获取失败的问题
- 修复收藏的在线列表id迁移保存出错的问题
## [1.8.1](https://github.com/lyswhut/lx-music-desktop/compare/v1.8.0...v1.8.1) - 2021-03-07
### 修复
- 修复歌词翻译的主题颜色适配问题
## [1.8.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.7.1...v1.8.0) - 2021-03-07
### 新增
- 新增设置-其他-列表缓存信息清理功能,注:此功能一般情况下不要使用
- 新增启动参数`-play`可以在启动软件时播放指定歌单使用方法看Readme.md的"启动参数"部分
- 新增逐字歌词播放,默认开启,可到设置界面关闭,注:本功能目前仅对酷狗源的歌曲有效
- 新增自定义源功能,源编写规则可以去常见问题查看
### 优化
- 允许播放除了搜索列表以外的所有歌曲,即原来没有播放按钮或者灰色的歌曲都可以去尝试点击播放。注:该功能的原理是尝试自动切换到其他源播放,所以不一定会播放成功,特别是对于那些独家的资源
- 优化单首歌曲的“添加到列表”弹窗歌曲列表状态的显示;现在在收藏单首歌曲时,若列表存在本歌曲则列表名字将变成灰色不可点击状态。总的来说,在添加单首歌曲时若列表名是灰色,则证明当前歌曲已在那个列表中
- 将歌词翻译放到原文的下方,同时新增当前播放翻译的高亮功能
### 移除
- 移除虾米源。注:虽然已移除该源,但仍可尝试去播放之前添加的歌曲,虽然不一定会成功
### 修复
- 修复音乐搜索列表的稍后播放功能无效的问题
- 修复搜索列表双击不支持播放的源时会导致切歌的问题
- 修复歌单列表加载失败时无法进入歌单打开界面的问题
- 修复mg源歌单列表无法加载的问题
- 修复kg跳转到官方歌曲详情页的歌曲无法播放的问题
- 修复我的列表的歌曲添加到其他列表时不排除当前列表的问题
- 修复在下载列表右击未下载完成的歌曲弹出的右击菜单中没有开始下载选项的问题
### 变更
- 歌词翻译显示功能修改为默认关闭,注:此变更仅影响首次安装软件的用户
### 其他
- 更新electron到v9.4.4
## [1.7.1](https://github.com/lyswhut/lx-music-desktop/compare/v1.7.0...v1.7.1) - 2021-01-30
### 修复
- 修复非透明模式下右侧滚动条无法拖动的问题
- 修复MAC下xm音乐滑块验证问题
## [1.7.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.6.1...v1.7.0) - 2021-01-30
### 新增
- 搜索界面新增搜索状态的提示
- 新增“稍后播放”功能,可在歌曲列表右键菜单使用
- 新增“记住播放进度”功能的控制,该功能默认不再开启,可到播放设置-记住播放进度开启
### 优化
- 优化播放歌曲换源匹配
- 优化设置界面设置项的展示
### 修复
- 修复快速切换歌曲时, 会出现播放的歌曲和界面展示的歌曲不一致的问题
- 修复了一个由版本更新日志显示导致的潜在远程代码执行攻击漏洞该漏洞影响v1.6.1及之前的所有版本,请务必更新到最新版本
- 修复xm搜索源验证问题
### 其他
- 更新electron到9.4.2
## [1.6.1](https://github.com/lyswhut/lx-music-desktop/compare/v1.6.0...v1.6.1) - 2021-01-13
### 优化
- 改进自动换源时的歌曲匹配
### 修复
- 修复某些情况下自动换源的时间过长时会终止换源自动切歌的问题
- 修复自动换源导致的搜索列表每页变成10条数据的问题
- 降级electron到9.3.3修复部分系统没有声音的问题
## [1.6.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.5.0...v1.6.0) - 2021-01-10
### 新增

461
FAQ.md
View File

@@ -1,27 +1,89 @@
# lx-music-desktop 常见问题
本文档已迁移到:<https://lyswhut.github.io/lx-music-doc/desktop/faq>
<!--
在阅读本常见问题后仍然无法解决你的问题请提交issue或者加企鹅群`830125506`反馈(无事勿加,入群先看群公告),反馈时请**注明**已阅读常见问题!
## ~~软件为什么没有桌面歌词与自定义列表功能~~
洛雪音乐的最初定位不是作为播放器开发的,它主要用于**查找歌曲**,软件的播放功能仅用于试听,不建议用作为常用播放器使用。
## 音乐播放列表机制
1. 默认情况下,播放搜索列表、歌单列表、排行榜列表的歌曲时会自动将该歌曲添加到“我的列表”的试听列表后再播放,这与手动将歌曲添加到试听列表,再去试听列表找到这首歌点播放是等价的
2. 如果你想要播放多首歌曲,需要使用多选功能(若不知道如何多选请看常见问题)多选后,将这些歌曲添加到“我的列表”播放,或使用稍后播放功能播放
3. 第2条适用于搜索列表、歌单列表、排行榜列表、我的列表中的歌曲
4. 对于歌单详情列表除了可以使用第2条的方式播放外你可以点击详情页上面的播放按钮临时播放当前歌单或点击收藏将当前歌单收藏到“我的列表”后再去播放
5. 对于排行榜详情列表除了可以使用第2条的方式播放外你可以在右击排行榜名字后弹出的菜单中播放或收藏整个排行榜这与第四条的歌单中的播放、与收藏按钮功能一致
6. v1.18.0及之后新增了“双击列表里的歌曲时自动切换到当前列表播放”设置,默认关闭,此功能仅对歌单、排行榜有效
7. 将歌曲添加“稍后播放”后,它们会被放在一个优先级最高的特殊队列中,点击“下一曲”时会消耗该队列中的歌曲,并且无法通过“上一曲”功能播放该队列的上一首歌曲
8. 在切歌时若不是通过“上一曲”、“下一曲”功能切歌(例如直接点击“排行榜列表”、“我的列表”中的歌曲切歌),“稍后播放”队列将会被清空
## 可用的鼠标、键盘快捷操作
- 鼠标右击播放栏的歌曲图片封面可以定位当前播放的歌曲
- 鼠标右击播放栏进度条上的`LRC`按钮可以锁定/解锁桌面歌词
- 歌曲搜索框、歌单链接输入框内鼠标右击可以将当前剪贴板上的文字粘贴到输入框内
- 鼠标右击搜索界面中的单条搜索历史可以将其移除
- 歌曲列表内的文字在选中后,鼠标右击可以复制已选中的文字,此功能只对搜索、歌单、排行榜、我的列表中的列表有效
- 鼠标在播放详情页内右键双击可以关闭播放详情页
- 鼠标左击播放栏上的歌曲名字可以将它复制
- 鼠标右击设置-主题设置的“道法自然英文Auto”主题可以打开亮、暗主题设置窗口
- 歌曲搜索框的候选内容可以用键盘上下方向键选择,按回车键搜索已选内容
- 在歌单详情页按退格键可以返回歌单列表
- 歌曲列表中可以使用`Ctrl``Shift`键进行多选这类似Windows下的文件选择详情看常见问题列表多选部分
- 在我的列表内可以使用`Ctrl + f`键打开搜索框进行列表内歌曲搜索,搜索框按`Esc`键可以关闭搜索框,搜索框内按上下方向键可以选择歌曲,按`回车`键跳转到已选歌曲,按`Ctrl + 回车`可以跳转并播放已选歌曲
- 在我的列表按住`Ctrl`键可以进入列表拖动模式,此时可以用鼠标拖动列表调整列表的位置
- 编辑列表名时按`Esc`键可以取消编辑
- `F11`可以进入、退出全屏状态v1.19.0新增)
- 在歌曲添加弹窗中,若按住`Ctrl`键后再点击列表名将不会自动关闭添加窗口这对想要将同一首一批歌曲添加到多个列表时会很有用v1.22.0新增)
在macOS上`Ctrl`键对应`Command`
## 歌曲无法试听与下载
该问题解决顺序如下:
### 所有歌曲都提示 `请求异常😮,可以多试几次,若还是不行就换一首吧。。。`
尝试更换网络,如切换到移动网络,若移动网络还是不行则尝试开关下手机的飞行模式后再试,<br>
若使用家庭网络的话可尝试将光猫断电5分钟左右再通电联网后播放。
### 提示 `getaddrinfo EAI_AGAIN ...` 或 `无法连接到服务器`
尝试在在浏览器打开这个地址`http://ts.tempmusics.tk`浏览器显示404是正常的如果不是404那就证明所在网络无法访问接口服务器。
若网页无法打开或打开来不是404则可能是DNS的问题可以尝试以下办法
1. 将DNS改成自动获取试试改完可能需要清理下系统DNS缓存才生效
2. 手动把DNS改一下不要用360的DNS可以把DNS改成`223.6.6.6``8.8.8.8`改完可能需要清理下系统DNS缓存才生效
改完DNS后可能需要重启软件才生效
### 通用解决方法
尝试按以下顺序解决:
1. 尝试更新到最新版本
2. 尝试切换其他歌曲(或直接搜索该歌曲),若全部歌曲都无法试听与下载则进行下一步
3. 尝试到 设置-音乐来源 切换到其他接口
4. 尝试切换网络,比如用手机开热点(目前存在某些网络无法访问接口服务器的情况
4. 尝试切换网络,比如用手机开热点(所有歌曲都提示请求异常时可通过此方法解决,或等一两天后再试
5. 若还不行请到这个链接查看详情:<https://github.com/lyswhut/lx-music-desktop/issues/5>
6. 若没有在第5条链接中的第一条评论中看到接口无法使用的说明则应该是你网络无法访问接口服务器的问题如果接口有问题我会在那里说明。
想要知道是不是自己网络的问题可以看看`http://ts.tempmusic.tk`能不能在浏览器打开浏览器显示404是正常的如果不是404那就证明所在网络无法访问接口服务器。
想要知道是不是自己网络的问题可以看看`http://ts.tempmusics.tk`能不能在浏览器打开浏览器显示404是正常的如果不是404那就证明所在网络无法访问接口服务器。
若网页无法打开或打来不是404则应该是DNS的问题可以尝试以下办法
1. 将DNS改成自动获取试试
2. 手动把DNS改一下不要用360的DNS可以把DNS改成`114.114.114.114``8.8.8.8`
2. 手动把DNS改一下不要用360的DNS可以把DNS改成`223.6.6.6``8.8.8.8`
### Windows版所有歌曲都提示 `音频加载错误5秒后切换下一首`
尝试关闭 Internet选项 的代理设置。
如果你不知道怎么做,可以尝试按以下步骤去做:
按<kbd>windows</kbd>+<kbd>r</kbd>键打开“运行”窗口,输入`inetcpl.cpl`后回车,在打开的 Internet选项 对话框中,切换到 连接 -> 局域网设置,在弹出的新窗口中把代理服务器下的勾去掉,如果自动配置下的勾也有被勾选,那么建议也去掉,最后按确定关闭所有弹窗。
> 来源:<https://github.com/lyswhut/lx-music-desktop/issues/873#issuecomment-1146945724>
## 列表多选
@@ -39,42 +101,139 @@
播放在线列表内的歌曲需要将它们都添加到我的列表才能播放,你可以全选列表内的歌曲然后添加到现有列表或者新创建的列表,然后去播放该列表内的歌曲。
从v1.10.0起,你可以右击排行榜名字的弹出菜单中直接播放或收藏整个排行榜的歌曲。
## 无法打开外部歌单
不支持源打开歌单,请**确认**你需要打开的歌单平台是否与软件标签所写的**歌单源**对应(不一样的话请通过右上角切换歌单源);<br>
不支持源打开歌单,请**确认**你需要打开的歌单平台是否与软件标签所写的**歌单源**对应(不一样的话请通过右上角切换歌单源);<br>
对于分享出来的歌单若打开失败可尝试先在浏览器中打开后再从浏览器地址栏复制URL地址到软件打开<br>
或者如果你知道歌单 id 也可以直接输入歌单 id 打开。<br>
注:网易源的“我喜欢”歌单无法在未登录的情况下打开,所以你需要手动创建一个歌单后将“我喜欢”里的歌曲移动到该歌单打开
### 打开网易源“我喜欢”歌单
由于网易源的“我喜欢”歌单需要登录才能打开从v1.13.0起提供了可以以注入token的方式打开网易源“我喜欢”歌单的功能现若想要打开此类歌单需要在歌单链接或id后面拼上 `###` 再加上有效的token拼接格式`[id|url]###token`例子最后面的xxxxxx替换成你的token
- `https://music.163.com/#/playlist?id=11332&userid=123456###xxxxxx`
- `11332###xxxxxx`
即:将 `歌单链接或者歌单ID``###``token` 这三者拼到一起。
#### `token`的获取方法
**注:`token`是你账号的临时身份令牌,不要随便泄露给他人**<br>
在浏览器打开登录网易云音乐并**登录**后,按`F12`,此时将会打开开发者窗口,然后按你使用的浏览器操作:
##### Chrome、360、QQ等浏览器
这些浏览器打开此窗口时界面可能是中文也可能是英文,英文的话按括号里的来
1. 点击窗口顶部`应用程序(application)`(若找不到此选项,则可能是被折叠起来了,看看顶部菜单的`>>`
2. 展开左侧 `Cookies`
3. 点击 `https://music.163.com`
4. 在右侧窗口找到 `名称(Name)``MUSIC_U` 的这行,这行的第二列(`值(Value)`)内的那串内容就是`token`,双击它进入编辑状态,然后按`ctrl + c`键就可以将它复制
##### 火狐浏览器
1. 点击窗口顶部`存储`
2. 展开左侧 `Cookie`
3. 点击 `https://music.163.com`
4. 在右侧窗口找到 `名称``MUSIC_U` 的这行,这行的最后一列(`值`)内的那串内容就是`token`,双击它进入编辑状态,然后按`ctrl + c`键就可以将它复制
## 更新已收藏的在线歌单
该功能仅对直接从歌单详情页点“收藏”按钮收藏的歌单有效,可右击已收藏的列表名从弹出的菜单中选择“更新”使用该功能,
需要注意的是:这将会覆盖本地的目标列表,歌曲将被替换成最新的在线列表。
## 调整我的列表的列表顺序
按住Ctrl键Mac上对应Command键的时候将进入“拖动模式”此时可以拖动列表的位置来调整顺序。
## 同步功能的使用(实验性,首次使用前建议先备份一次列表)
**注意:由于同步传输时的数据是明文传输,请在受信任的网络下使用此功能!**<br>
此功能需要配合移动端使用PC端与移动端处在同一个局域网路由器的网络下时可以多端实时同步歌曲列表使用方法
1. 在PC端的设置-数据同步开启同步功能(这时如果出现安全软件、防火墙等提示网络连接弹窗时需要点击允许)
2. 在移动端的设置-同步-同步服务器地址输入PC端显示的同步服务器地址如果显示可以多个则输入与**移动端上显示的本机地址**最相似的那个端口号与PC端的同步端口一致**输入完毕后需要按一下键盘上的回车键使输入的内容生效**
3. 输入完这两项后点击“启动同步”
4. 若连接成功对于首次同步时若两边的设备的列表不为空则PC端会弹出选择列表同步方式的弹窗同步方式的说明弹窗下面有介绍
#### 关于同步弹窗的说明
对于首次同步时若两边的设备的列表不为空则PC端会弹出选择列表同步方式的弹窗此弹窗内的同步方式仅针对**首次同步**<br>
第一次同步成功后,以后再同步时将会自动根据两边设备的列表内容合并同步,不信你可以在同步完成后断开两边的连接,然后在两边增删一些歌曲或列表后再同步试试看~😉
#### 连接同步服务失败的可能原因
- 此功能需要PC端与移动端都连接在同一个路由器下的网络才能使用
- 检查防火墙是否拦截了PC端的服务端口
- 路由器若开启了AP隔离则此功能无法使用
#### 连接同步服务失败的检查
1. 确保PC端的同步服务已启用成功若连接码、同步服务地址没有内容则证明服务启动失败此时看启用同步功能复选框后面的错误信息自行解决另外若你不知道端口号是什么意思就不要乱改或不要改得太大与太小
2. 在手机浏览器地址栏输入`http://x.x.x.x:23332/hello` **(注:将`x.x.x.x`换成PC端显示的同步服务地址`23332`为PC端的端口号** 后回车,若此地址可以打开并显示 `Hello~::^-^::`则证明移动端与PC端网络已互通
3. 若移动端无法打开第2步的地址则在PC端的浏览器地址栏输入并打开该地址若可以打开则要么是被LX Music PC端被电脑防火墙拦截要么PC端与移动端不在同一个网络下或者路由器开启了AP隔离一般在公共网络下会出现这种情况
## 界面异常(界面显示不完整)
### Windows 10、11界面异常、界面无法显示
尝试添加运行参数 `--disable-gpu-sandbox` 启动,例如:`.\lx-music-desktop.exe --disable-gpu-sandbox`,添加方法可自行百度“给快捷方式加参数”。
若以上方法无效,则尝试将 `--disable-gpu-sandbox` 逐个换成以下参数启动,直到恢复正常为止:
- `--no-sandbox`
- `-dha`
- `--disable-gpu`
:::caution
这些参数会禁用程序的某些安全特性或降低程序性能,没有遇到问题不要使用它们!
:::
对于界面无法显示,任务栏里也没看到图标,但是任务管理器里面看到进程的问题,还可尝试更换软件安装目录(对于安装版需要先卸载再换目录安装,绿色版直接剪切移动即可,只要目录换了就行),<br />
此方法的相关讨论看:<https://github.com/lyswhut/lx-music-desktop/issues/943#issuecomment-1217832186>
### Windows 7 下界面异常
由于软件默认使用了透明窗口根据Electron官方文档的[说明](https://electronjs.org/docs/api/frameless-window#%E5%B1%80%E9%99%90%E6%80%A7)
由于软件默认使用了透明窗口根据Electron官方文档的[说明](https://www.electronjs.org/docs/latest/tutorial/window-customization#limitations)
> 在 windows 操作系统上, 当 DWM 被禁用时, 透明窗口将无法工作。
因此,当 win7 没有使用**AERO**主题时界面将会显示异常开启AERO的方法请自行百度`win7开启aero效果`(开启后可看到任务栏变透明)。<br>
因此,当 win7 没有使用**Aero**主题时界面将会显示异常开启AERO的方法请自行百度`win7开启Aero效果`(开启后可看到任务栏变透明)。<br>
`0.14.0`版本起不再强制要求开启透明效果,若你实在不想开启(若非电脑配置太低,墙裂建议开启!),可通过添加运行参数`-dt`来运行程序即可,例如:`.\lx-music-desktop.exe -dt`,添加方法可自行百度“给快捷方式加参数”,该参数的作用是用来控制程序是否使用非透明窗口运行。
对于一些完全无法正常显示界面、开启了AERO后问题仍未解决的情况请阅读下面的 **软件启动后,界面无法显示** 解决
注:启用**Aero**主题后,若软件出现黑边框,则重启软件即可恢复正常
对于一些完全无法正常显示界面、开启了AERO后问题仍未解决的情况请阅读下面的 **Window 7 下软件启动后,界面无法显示** 解决。
### Linux 下界面异常
根据Electron里issue的[解决方案](https://github.com/electron/electron/issues/2170#issuecomment-736223269)<br>
若你遇到透明问题可尝试添加启动参数 `-dha` 来禁用硬件加速,例如:`.\lx-music-desktop.exe -dha`
## 软件启动后,界面无法显示
v1.6.0及之后的版本才支持`-dha`参数
## Windows 7 下软件启动后,界面无法显示
对于软件启动后,可以在任务栏看到软件,但软件界面在桌面上无任何显示,或者整个界面偶尔闪烁的情况。<br>
原始问题看:<https://github.com/electron/electron/issues/19569#issuecomment-522231083><br>
解决办法:下载`.NET Framework 4.7.1`或**更高**版本安装即可(建议安装最新版,若安装过程中遇到问题可尝试自行百度解决)。<br>
微软官方下载地址:<https://dotnet.microsoft.com/download/dotnet-framework><br>
下载`Runtime(运行时)`版即可,安装完成后可能需要重启才生效。
下载`Runtime(运行时)`版即可,安装完成后可能需要重启才生效**若出现闪烁的情况**,可阅读下面的**Windows 7 下整个界面闪烁**解决
若还是不行可尝试以下操作:
## Windows 7 下整个界面闪烁(消失又出现)
- 更新显卡驱动
- 添加启动参数`-dha`运行(添加的方法请自行百度“给快捷方式加参数”)
- 尝试将绿色版的软件放在**桌面**或**我的文档**运行
可尝试在关掉软件后,在桌面空白处鼠标右击,在弹出的菜单中选择**个性化**,在弹出的窗口中**切换到系统内置的Aero主题**,然后再启动软件看是否解决。
## Windows 7 下桌面歌词字体列表为空
Windows 7 系统系统需要安装 Powershell 5.1及以上版本才可正常获取系统字体列表。
想要查看当前 Powershell 版本可以在 Powershell 窗口输入命令:`Get-Host`
最新 Powershell 安装包可以去官方 [Github releases](https://github.com/PowerShell/PowerShell/releases) 页下载,安装过程中若出现错误,请自行按照提示或者百度/Google解决。
## 安装版安装失败,提示安装程序并未成功地运行完成
@@ -95,7 +254,7 @@
### Windows 7 系统桌面歌词显示异常
Windows 7 未开启 Aero 效果时桌面歌词会有问题,详情看面的 **Windows 7 下界面异常(界面显示不完整)** 方法解决。
Windows 7 未开启 Aero 效果时桌面歌词会有问题,详情看面的 **Windows 7 下界面异常** 方法解决。
### MAC OS 系统、桌面歌词有残留阴影
@@ -109,21 +268,17 @@ Windows 7 未开启 Aero 效果时桌面歌词会有问题,详情看下面的
`v1.2.1`以前的版本在 Ubuntu 18.10 下第一次开启桌面歌词时歌词窗口会变白,需要关闭后再开启,
`v1.2.1`及之后的版本已修复该问题。
其他 Linux 系统未测试,如有异常也是意料之中,目前不打算去处理 Linux 平台的桌面歌词问题。
其他 Linux 系统未测试,如有异常也是意料之中,目前不打算去处理 Linux 平台的桌面歌词问题,但你可以尝试按照`Linux 下界面异常`的解决方案去解决
## 歌曲下载失败
## 歌曲下载失败,提示 `ENOENT: no such file or directory, mkdir`
### 提示 `ENOENT: no such file or directory, mkdir`
更换下载歌曲目录即可解决(一般是设置的歌曲下载目录没有读写权限导致的)。
更换下载歌曲目录即可解决(一般是设置的歌曲下载目录没有读写入权限导致的)。
## 使用软件时导致耳机意外关机
### 提示 `请求异常` 或 `Fail`
尝试更换网络,如切换到移动网络
### 其他错误
按照前面的 "歌曲无法试听与下载" 方案解决。
据反馈,漫步者部分型号的耳机与本软件一起使用时将会导致耳机意外关机,
详情看:<https://github.com/lyswhut/lx-music-desktop/issues/457>
若出现该问题可尝试添加`-dhmkh`启动参数解决启动参数添加方法请自行百度“windows给快捷方式添加启动参数”
## 软件安装包说明
@@ -135,9 +290,9 @@ Windows 7 未开启 Aero 效果时桌面歌词会有问题,详情看下面的
**`.dmg`** 结尾的文件为 MAC 版本;
**`.AppImage`**、**`.deb`** 结尾的为 Linux 版本。
**`.AppImage`**、**`.deb`**、**`.rpm`**、**`.pacman`** 结尾的为 Linux 版本。
带有`x64`的为64位的系统版本`x86`的为32位的系统版本若两个都带有的则为集合版安装时会自动根据系统位数选择对应的版本安装。
带有`x64`的为64位的系统版本`x86`的为32位的系统版本若两个都带有的则为集合版安装时会自动根据系统位数选择对应的版本安装;带有`arm`的为arm架构系统的版本
## 软件更新
@@ -145,13 +300,13 @@ Windows 7 未开启 Aero 效果时桌面歌词会有问题,详情看下面的
若下载未完成时软件被关闭,下次启动软件会再次自动下载。<br>
若还是**更新失败**可能是无法访问GitHub导致的这时需要手动更新即下载最新安装包直接覆盖安装即可。<br>
注意:**绿色版**的软件自动更新功能**不可用**,建议使用安装版!!<br>
注意:**Mac版**、**Linux deb**版不支持自动更新!
注意:**Mac版**、**Linux**版不支持自动更新!
## 更新已收藏的在线歌单
### Windows 安装版在升级后,卸载了旧版本,但没有安装新版本
该功能仅对直接从歌单详情页点“收藏”按钮收藏的歌单有效,可右击已收藏的列表名从弹出的菜单中选择“同步”使用该功能,
出现这个问题的原因一般是你当初在安装本软件的时候是以管理员身份安装的,运行软件的时候没有以管理员身份运行,所以卸载后无法再装上。
需要注意的是:这将会覆盖本地的目标列表,歌曲将被替换成最新的在线列表
安装本软件时建议选择 `为当前用户安装`,并安装在当前用户目录或者安装在不需要管理员权限的目录(即其他分区下),不要选`为所有用户安装`
## 缺少`xxx.dll`
@@ -160,12 +315,252 @@ Windows 7 未开启 Aero 效果时桌面歌词会有问题,详情看下面的
- 以管理员权限打开`cmd`,输入`sfc /scannow`回车等待检查完成重启电脑
- 若上面的方法**修复、重启**电脑后仍然不行,就自行百度弹出的**错误信息**看下别人是怎么解决的
## MAC OS无法启动软件提示 lx-music-desktop 已损坏
这是因为软件没有签名,被系统阻止运行,<br>
在终端里输入 `sudo xattr -rd com.apple.quarantine /Applications/lx-music-desktop.app`,然后输入你的电脑密码即可
还可以参考:
- <http://www.pc6.com/edu/168719.html>
- <https://blog.csdn.net/for641/article/details/104811538>
## 数据存储路径
默认情况下,软件的数据存储在:
- Windows`%APPDATA%/lx-music-desktop`
- Linux`$XDG_CONFIG_HOME/lx-music-desktop``~/.config/lx-music-desktop`
- macOS`~/Library/Application/lx-music-desktop`
在Windows平台下若程序目录下存在`portable`目录则自动使用此目录作为数据存储目录v1.17.0新增)。
## 杀毒软件提示有病毒或恶意行为
本人只能保证我写的代码不包含任何**恶意代码**、**收集用户信息**的行为并且软件代码已开源请自行查阅软件安装包也是由CI拉取源代码构建构建日志[windows包](https://ci.appveyor.com/project/lyswhut/lx-music-desktop)、[Mac/Linux包](https://travis-ci.com/github/lyswhut/lx-music-desktop)<br>
本人只能保证我写的代码不包含任何**恶意代码**、**收集用户信息**的行为并且软件代码已开源请自行查阅软件安装包也是由CI拉取源代码构建构建日志[GitHub Actions](https://github.com/lyswhut/lx-music-desktop/actions)<br>
尽管如此但这不意味着软件是100%安全的,由于软件使用了第三方依赖,当这些依赖存在恶意行为时([供应链攻击](https://docs.microsoft.com/zh-cn/windows/security/threat-protection/intelligence/supply-chain-malware)),软件也将会受到牵连,所以我只能尽量选择使用较多人用、信任度较高的依赖。<br>
当然,以上说明建立的前提是在你所用的安装包是从**本项目主页上写的链接**下载的,或者有相关能力者还可以下载源代码自己构建安装包。
`v0.17.0`起,由于加入了音频输出设备切换功能,该功能调用了 [MediaDevices.enumerateDevices()](https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices/enumerateDevices),可能导致安全软件提示洛雪要访问摄像头(目前发现卡巴斯基会提示),但实际上没有用到摄像头,并且摄像头的提示灯也不会亮,你可以选择阻止访问。
最后,若出现杀毒软件报毒、存在恶意行为,请自行判断选择是否继续使用本软件!
## 启动参数
目前软件已支持的启动参数如下:
- `-search` 启动软件时自动在搜索框搜索指定的内容,例如:`-search="突然的自我 - 伍佰"`
- `-dha` 禁用硬件加速启动Disable Hardware Acceleration窗口显示有问题时可以尝试添加此参数启动v1.6.0起新增)
- `-dt` 以非透明模式启动Disable Transparent对于未开启AERO效果的win7系统可加此参数启动以确保界面正常显示该参数对桌面歌词无效原来的`-nt`参数已重命名为`-dt`v1.6.0起重命名)
- `-dhmkh` 禁用硬件媒体密钥处理Disable Hardware Media Key Handling此选项将禁用Chromium的Hardware Media Key Handling特性v1.9.0起新增)
- `-proxy-server` 设置代理服务器,代理应用的所有流量,例:`-proxy-server="127.0.0.1:1081"`不支持设置账号密码v1.17.0起新增)。注:应用内“设置-网络-代理设置”仅代理接口请求的流量,优先级更高
- `-proxy-bypass-list` 以分号分隔的主机列表绕过代理服务器,例:`-proxy-bypass-list="<local>;*.google.com;*foo.com;1.2.3.4:5678"`(与`-proxy-server`一起使用才有效v1.17.0起新增)。注:此设置对应用内接口请求无效
- `-play` 启动时播放指定列表的音乐,参数说明:
- `type`:播放类型,目前固定为`songList`
- `source`:播放源,可用值为`kw/kg/tx/wy/mg/myList`,其中`kw/kg/tx/wy/mg`对应各源的在线列表,`myList`为本地列表
- `link`要播放的在线列表歌单链接、或IDsource为`kw/kg/tx/wy/mg`之一(在线列表)时必传,举例:`./lx-music-desktop -play="type=songList&source=kw&link=歌单URL or ID"`注意如果传入URL时必须对URL进行编码后再传入
- `name`要播放的本地列表歌单名字source为`myList`时必传,举例:`./lx-music-desktop -play="type=songList&source=myList&name=默认列表"`
- `index`:从列表的哪个位置开始播放,选传,若不传默认播放第一首歌曲,举例:`./lx-music-desktop -play="type=songList&source=myList&name=默认列表&index=2"`
## Scheme URL支持
从v1.17.0起支持 Scheme URL可以使用此功能从浏览器等场景下调用LX Music我们开发了一个[油猴脚本](https://github.com/lyswhut/lx-music-script#readme)配套使用<br>
脚本安装地址:<https://greasyfork.org/zh-CN/scripts/438148><br>
以下是目前可用的Scheme URL调用方式
- URL统一以`lxmusic://`开头
- 若无特别说明,源的可用值为:`kw/kg/tx/wy/mg`
- 若无特别说明,音质的可用值为:`128k/320k/flac/flac24bit`
目前支持两种传参方式:
- 通过`data`传参以经过URL编码的JSON数据传参`lxmusic://music/play?data=xxxx`,其中`xxxx`为经过URL编码后的JSON数据支持复杂的参数调用
- 通过`URL`传参适用于简单传参的调用不需要转成JSON格式`lxmusic://music/search/xxxx`但仍然需要对数据进行URL编码只适应于简单参数调用v1.18.0新增)
### `data`方式传参
以经过URL编码的JSON数据传参`lxmusic://music/play?data=xxxx`,其中`xxxx`为经过URL编码后的JSON数据JSON数据内容取决于下表的参数部分
| 描述 | URL | 参数
| --- | --- | ---
| 打开歌单 | `songlist/open` | `source<String>`(源,必须)<br>`id<String/Number>`歌单ID可选<br>`url<String>`歌单URL可选其中ID与URL必需传一个
| 播放歌单 | `songlist/play` | `source<String>`(源,必须)<br>`id<String/Number>`歌单ID可选<br>`url<String>`歌单URL可选其中`id``url`必需传一个<br>`index<Number>`播放第几首歌可选从0开始
| 搜索歌曲 | `music/search` | `keywords<String/Number>`(要搜索的内容,必须)<br>`source<String>`(源,可选)
| 播放歌曲 | `music/play` | `name<String>`(歌曲名,必传)<br>`singer<String>`(艺术家名,必传)<br>`source<String>`(源,必传)<br>`songmid<String/Number>`歌曲ID必传<br>`img<String>`(歌曲图片链接,选传)<br>`albumId<String/Number>`歌曲专辑ID选传<br>`interval<String>`(格式化后的歌曲时长,选传,例:`03:55`<br>`albumName<String>`(歌曲专辑名称,选传)<br>`types<Object>`(歌曲可用音质数组,必传,<br>数组格式:`[{"type": "<音质>", size: "<格式化后的文件大小,选传>", hash: "<kg源必传>"}]`<br>例:`[{"type": "128k", size: "3.56M"}, {"type": "320k", size: null}]`<br><br>以下为平台特定参数:<br>`hash<String>`歌曲hashkg源必传<br>`strMediaMid<String>`歌曲strMediaMidtx源必传<br>`albumMid<String>`歌曲albumMidtx源专用选传<br>`copyrightId<String>`歌曲copyrightIdmg源必传<br>`lrcUrl<String>`歌曲lrcUrlmg源专用选传
### `URL`方式传参
由于URL传参只适用于简单传参场景所以目前只支持以下功能的调用
| 描述 | URL | 参数
| --- | --- | ---
| 搜索歌曲 | `music/search/{source}/{keywords}` | `source`(源,可选)<br>`keywords`(要搜索的内容,必须)<br>例:`music/search/kw/xxx``music/search/xxx`
| 打开歌单 | `songlist/open/{source}/{id/url}` | `source`(源,必须)<br>`id/url`歌单ID或歌单URL必须<br>例:`songlist/open/kw/123456`
## 自定义源脚本编写说明
文件请使用UTF-8编码格式编写脚本所用编程语言为JavaScript可以使用ES6+语法,脚本与应用的交互是使用类似事件收发的方式进行,这是一个基本的脚本例子:
```js
/**
* @name 测试音乐源
* @description 我只是一个测试音乐源哦
* @version 1.0.0
* @author xxx
* @homepage http://xxx
*/
const { EVENT_NAMES, request, on, send } = window.lx
const qualitys = {
kw: {
'128k': '128',
'320k': '320',
flac: 'flac',
},
}
const httpRequest = (url, options) => new Promise((resolve, reject) => {
request(url, options, (err, resp) => {
if (err) return reject(err)
resolve(resp.body)
})
})
const apis = {
kw: {
musicUrl({ songmid }, quality) {
return httpRequest('http://xxx').then(data => {
return data.url
})
},
},
}
// 注册应用API请求事件
// source 音乐源可能的值取决于初始化时传入的sources对象的源key值
// info 请求附加信息内容根据action变化
// action 请求操作类型目前只有musicUrl即获取音乐URL链接
// 当action为musicUrl时info的结构{type, musicInfo}
// info.type音乐质量可能的值有128k / 320k / flac取决于初始化时对应源传入的qualitys值中的一个
// info.musicInfo音乐信息对象里面有音乐ID、名字等信息
on(EVENT_NAMES.request, ({ source, action, info }) => {
// 回调必须返回 Promise 对象
switch (action) {
// action 为 musicUrl 时需要在 Promise 返回歌曲 url
case 'musicUrl':
return apis[source].musicUrl(info.musicInfo, qualitys[source][info.type]).catch(err => {
console.log(err)
return Promise.reject(err)
})
}
})
// 脚本初始化完成后需要发送inited事件告知应用
send(EVENT_NAMES.inited, {
status: true, // 初始化成功 or 失败
openDevTools: false, // 是否打开开发者工具,方便用于调试脚本
sources: { // 当前脚本支持的源
kw: { // 支持的源对象可用key值kw/kg/tx/wy/mg
name: '酷我音乐',
type: 'music', // 目前固定为 music
actions: ['musicUrl'], // 目前固定为 ['musicUrl']
qualitys: ['128k', '320k', 'flac', 'flac24bit'], // 当前脚本的该源所支持获取的Url音质有效的值有['128k', '320k', 'flac', 'flac24bit']
},
},
})
```
### 自定义源信息
文件的开头必须包含以下注释:
```js
/**
* @name 测试脚本
* @description 我只是一个测试脚本
* @version 1.0.0
* @author xxx
* @homepage http://xxx
*/
```
- `@name `源的名字建议不要过长24个字符以内
- `@description `源的描述建议不要过长36个字符以内可不填不填时必须保留 @description
- `@version`:源的版本号,可不填,不填时可以删除 @version
- `@author `:脚本作者名字,可不填,不填时可以删除 @author
- `@homepage `:脚本主页,可不填,不填时可以删除 @homepage
### `window.lx`
应用为脚本暴露的API对象。
#### `window.lx.version`
自定义源API版本API变更时此版本号将会更改新增于v1.14.0之后)
#### `window.lx.EVENT_NAMES`
常量事件名称对象,发送、注册事件时传入事件名时使用,可用值:
| 事件名 | 描述
| --- | ---
| `inited` | 脚本初始化完成后发送给应用的事件名,发送该事件时需要传入以下信息:`{status, sources, openDevTools}`<br>`status`:初始化结果(`true`成功,`false`失败)<br>`openDevTools`是否打开DevTools此选项可用于开发脚本时的调试<br>`sources`:支持的源信息对象,<br>`sources[kw/kg/tx/wy/mg].name`:源的名字(目前非必须)<br>`sources[kw/kg/tx/wy/mg].type`:源类型,目前固定值需为`music`<br>`sources[kw/kg/tx/wy/mg].actions`支持的actions由于目前只支持`musicUrl`,所以固定传`['musicUrl']`即可<br>`sources[kw/kg/tx/wy/mg].qualitys`:该源支持的音质列表,有效的值为`['128k', '320k', 'flac', 'flac24bit']`,该字段用于控制应用可用的音质类型
| `request` | 应用API请求事件名回调入参`handler({ source, action, info})`,回调必须返回`Promise`对象<br>`source`:音乐源,可能的值取决于初始化时传入的`sources`对象的源key值<br>`info`:请求附加信息,内容根据`action`变化<br>`action`:请求操作类型,目前只有`musicUrl`即获取音乐URL链接需要在 Promise 返回歌曲 url`info`的结构:`{type, musicInfo}``info.type`:音乐质量,可能的值有`128k` / `320k` / `flac` / `flac24bit`(取决于初始化时对应源传入的`qualitys`值中的一个),`info.musicInfo`音乐信息对象里面有音乐ID、名字等信息
| `updateAlert` | 显示源更新弹窗,发送该事件时的参数:`{log, updateUrl}`<br>`log`:更新日志,必传,字符串类型,内容可以使用`\n`换行最大长度1024超过此长度后将被截取超出的部分<br>`updateUrl`更新地址用于引导用户去该地址更新源选传需为http协议的url地址最大长度1024<br>此事件每次运行脚本只能调用一次源版本v1.2.0新增)<br>例子:`lx.send(lx.EVENT_NAMES.updateAlert, { log: 'hello world', updateUrl: 'https://xxx.com' })`
#### `window.lx.on`
事件注册方法,应用主动与脚本通信时使用:
```js
/**
* @param event_name 事件名
* @param handler 事件处理回调 -- 注意:注册的回调必须返回 Promise 对象
*/
window.lx.on(event_name, handler)
```
**注意:** 注册的回调必须返回 `Promise` 对象。
#### `window.lx.send`
事件发送方法,脚本主动与应用通信时使用:
```js
/**
* @param event_name 事件名
* @param datas 要传给应用的数据
*/
window.lx.send(event_name, datas)
```
#### `window.lx.request`
HTTP请求方法用于发送HTTP请求此HTTP请求方法不受跨域规则限制
```js
/**
* @param url 请求的URL
* @param options 请求选项,可用选项有 method / headers / body / form / formData / timeout
* @param callback 请求结果的回调 入参err, resp, body
* @return 返回一个方法调用此方法可以终止HTTP请求
*/
const cancelHttp = window.lx.request(url, options, callback)
```
#### `window.lx.utils`
应用提供给脚本的工具方法:
- `window.lx.utils.buffer.from`对应Node.js的 `Buffer.from`
- `window.lx.utils.buffer.bufToString`Buffer转字符串 `bufToString(buffer, format)``format`对应Node.js `Buffer.toString`的参数v1.14.0之后新增)
- `window.lx.utils.crypto.aesEncrypt`AES加密 `aesEncrypt(buffer, mode, key, iv)`
- `window.lx.utils.crypto.md5`MD5加密 `md5(str)`
- `window.lx.utils.crypto.randomBytes`:生成随机字符串 `randomBytes(size)`
- `window.lx.utils.crypto.rsaEncrypt`RSA加密 `rsaEncrypt(buffer, key)`
目前仅提供以上工具方法如果需要其他方法可以开issue讨论。 -->

View File

@@ -2,8 +2,8 @@
<p align="center">
<a href="https://github.com/lyswhut/lx-music-desktop/releases"><img src="https://img.shields.io/github/release/lyswhut/lx-music-desktop" alt="Release version"></a>
<a href="https://ci.appveyor.com/project/lyswhut/lx-music-desktop"><img src="https://ci.appveyor.com/api/projects/status/flrsqd5ymp8fnte5?svg=true" alt="Build status"></a>
<a href="https://travis-ci.com/lyswhut/lx-music-desktop"><img src="https://travis-ci.com/lyswhut/lx-music-desktop.svg?branch=master" alt="Build status"></a>
<a href="https://github.com/lyswhut/lx-music-desktop/actions/workflows/release.yml"><img src="https://github.com/lyswhut/lx-music-desktop/workflows/Build/badge.svg" alt="Build status"></a>
<a href="https://github.com/lyswhut/lx-music-desktop/actions/workflows/beta-pack.yml"><img src="https://github.com/lyswhut/lx-music-desktop/workflows/Build%20Beta/badge.svg" alt="Build status"></a>
<a href="https://electronjs.org/releases/stable"><img src="https://img.shields.io/github/package-json/dependency-version/lyswhut/lx-music-desktop/dev/electron/master" alt="Electron version"></a>
<!-- <a href="https://github.com/lyswhut/lx-music-desktop/releases"><img src="https://img.shields.io/github/downloads/lyswhut/lx-music-desktop/latest/total" alt="Downloads"></a> -->
<a href="https://github.com/lyswhut/lx-music-desktop/tree/dev"><img src="https://img.shields.io/github/package-json/v/lyswhut/lx-music-desktop/dev" alt="Dev branch version"></a>
@@ -36,8 +36,8 @@
所用技术栈:
- Electron 9
- Vue 2
- Electron 15+
- Vue 3
已支持的平台:
@@ -47,12 +47,49 @@
软件变化请查看:[更新日志](https://github.com/lyswhut/lx-music-desktop/blob/master/CHANGELOG.md)<br>
软件下载请转到:[发布页面](https://github.com/lyswhut/lx-music-desktop/releases)<br>
或者到网盘下载网盘内有MAC、windows版`https://www.lanzoux.com/b0bf2cfa/` 密码:`glqw`<br>
使用常见问题请转至:[常见问题](https://github.com/lyswhut/lx-music-desktop/blob/master/FAQ.md)
或者到网盘下载网盘内有MAC、windows版`https://www.lanzoui.com/b0bf2cfa/` 密码:`glqw`(若链接无法打开请百度:蓝奏云链接打不开)<br>
使用常见问题请转至:[常见问题](https://lyswhut.github.io/lx-music-doc/desktop/faq)
目前本项目的原始发布地址只有**GitHub**及**蓝奏网盘**,其他渠道均为第三方转载发布,与本项目无关!
#### Scheme URL支持
从v1.17.0起支持 Scheme URL可以使用此功能从浏览器等场景下调用LX Music我们开发了一个[油猴脚本](https://github.com/lyswhut/lx-music-script#readme)配套使用,<br>
脚本安装地址:<https://greasyfork.org/zh-CN/scripts/438148><br>
若你想自己调用LX Music可以看[Scheme URL支持](https://lyswhut.github.io/lx-music-doc/desktop/scheme-url)
#### 数据同步服务
从v2.2.0起,我们发布了一个独立版的[数据同步服务](https://github.com/lyswhut/lx-music-sync-server#readme),如果你有服务器,可以将其部署到服务器上作为私人多端同步服务使用,详情看该项目说明
#### 启动参数
目前软件已支持的启动参数如下:
- `-proxy-server` 设置代理服务器,代理应用的所有流量
- `-proxy-bypass-list` 以分号分隔的主机列表绕过代理服务器
- `-play` 启动时播放指定列表的音乐
- `-search` 启动软件时自动在搜索框搜索指定的内容
- `-dha` 禁用硬件加速启动Disable Hardware Acceleration
- `-dt` 以非透明模式启动Disable Transparent
- `-dhmkh` 禁用硬件媒体密钥处理Disable Hardware Media Key Handling
启动参数的详细说明请看[启动参数说明](https://lyswhut.github.io/lx-music-doc/desktop/run-params)
#### 数据存储路径
默认情况下,软件的数据存储在:
- Windows`%APPDATA%/lx-music-desktop`
- Linux`$XDG_CONFIG_HOME/lx-music-desktop``~/.config/lx-music-desktop`
- macOS`~/Library/Application Support/lx-music-desktop`
在Windows平台下若程序目录下存在`portable`目录则自动使用此目录作为数据存储目录v1.17.0新增)。
### 源码使用方法
环境要求Node.js 12.x+
环境要求Node.js 16+
```bash
# 开发模式
@@ -62,7 +99,7 @@ npm run dev
npm run pack:dir
# 构建安装包Windows版
npm run pack
npm run pack:win
# 构建安装包Mac版
npm run pack:mac
@@ -76,17 +113,23 @@ npm run pack:linux
<p><a href="https://github.com/lyswhut/lx-music-desktop"><img width="100%" src="https://github.com/lyswhut/lx-music-desktop/blob/master/doc/images/app.png" alt="lx-music UI"></a></p>
### 启动参数
目前软件已支持的启动参数如下:
- `-search` 启动软件时自动在搜索框搜索指定的内容,例如:`-search="突然的自我 - 伍佰"`
- `-dha` 禁用硬件加速启动Disable Hardware Acceleration窗口显示有问题时可以尝试添加此参数启动
- `-dt` 以非透明模式启动Disable Transparent对于未开启AERO效果的win7系统可加此参数启动以确保界面正常显示原来的`-nt`参数已重命名为`-dt`
### 常见问题
常见问题已移至:<https://github.com/lyswhut/lx-music-desktop/blob/master/FAQ.md>
常见问题已移至:<https://lyswhut.github.io/lx-music-doc/desktop/faq>
### 贡献代码
本项目欢迎PR但为了PR能顺利合并需要注意以下几点
- 对于添加新功能的PR建议在PR前先创建issue说明以确认该功能是否确实需要
- 对于修复Bug PR请提供修复前后的说明及重现方式
- 其他类型的PR则适当附上说明
贡献代码步骤:
1. 参照[源码使用方法](https://lyswhut.github.io/lx-music-doc/desktop/use-source-code)设置开发环境
2. 克隆本仓库代码并切换到`dev`分支开发
3. 提交PR
### 项目协议
@@ -104,4 +147,5 @@ npm run pack:linux
若你使用了本项目,将代表你接受以上协议。
音乐平台不易,请尊重版权,支持正版。<br>
若对此有疑问请 mail to: lyswhut+qq.com (请将`+`替换成`@`)
本项目仅用于对技术可行性的探索及研究,不接受任何商业(包括但不限于广告等)合作及捐赠。<br>
若对此有疑问请 mail to: lyswhut+qq.com (请将`+`替换成`@`)<br>

View File

@@ -0,0 +1,25 @@
const fs = require('fs').promises
// https://github.com/electron-userland/electron-builder/issues/4630
// https://github.com/electron-userland/electron-builder/issues/4630#issuecomment-782020139
module.exports = async(context) => {
const { electronPlatformName, appOutDir } = context
if (electronPlatformName !== 'darwin') return
const {
productFilename,
info: {
_metadata: { macLanguagesInfoPlistStrings },
},
} = context.packager.appInfo
const resPath = `${appOutDir}/${productFilename}.app/Contents/Resources`
// 创建APP语言包文件
return await Promise.all(
Object.entries(macLanguagesInfoPlistStrings).map(([lang, config]) => {
let infos = Object.entries(config).map(([k, v]) => `"${k}" = "${v}";`).join('\n')
return fs.writeFile(`${resPath}/${lang}.lproj/InfoPlist.strings`, infos)
}),
)
}

View File

@@ -0,0 +1,75 @@
const fs = require('fs')
const fsPromises = require('fs').promises
const path = require('path')
const { Arch } = require('electron-builder')
const better_sqlite3_fileNameMap = {
[Arch.x64]: 'electron-v110-linux-x64',
[Arch.arm64]: 'electron-v110-linux-arm64',
[Arch.armv7l]: 'electron-v110-linux-arm',
}
const qrc_decode_fileNameMap = {
win32: {
[Arch.x64]: 'electron-v110-win32-x64',
[Arch.ia32]: 'electron-v110-win32-ia32',
[Arch.arm64]: 'electron-v110-win32-arm64',
},
linux: {
[Arch.x64]: 'electron-v110-linux-x64',
[Arch.arm64]: 'electron-v110-linux-arm64',
[Arch.armv7l]: 'electron-v110-linux-arm',
},
darwin: {
[Arch.x64]: 'electron-v110-darwin-x64',
[Arch.arm64]: 'electron-v110-darwin-arm64',
},
}
const replaceSqliteLib = async(arch) => {
// console.log(await fs.readdir(path.join(context.appOutDir, './resources/')))
// if (context.electronPlatformName != 'linux' || context.arch != Arch.arm64) return
// https://github.com/lyswhut/lx-music-desktop/issues/1102
// https://github.com/lyswhut/lx-music-desktop/issues/1161
console.log('replace sqlite lib...')
const filePath = path.join(__dirname, `./lib/better_sqlite3_${better_sqlite3_fileNameMap[arch]}.node`)
const targetPath = path.join(__dirname, '../node_modules/better-sqlite3/build/Release/better_sqlite3.node')
await fsPromises.unlink(targetPath).catch(_ => _)
await fsPromises.copyFile(filePath, targetPath)
}
const replaceQrcDecodeLib = async(platform, arch) => {
console.log('replace qrc_decode lib...', platform, qrc_decode_fileNameMap[platform][arch])
const filePath = path.join(__dirname, `./lib/qrc_decode_${qrc_decode_fileNameMap[platform][arch]}.node`)
const targetPath = path.join(__dirname, '../build/Release/qrc_decode.node')
const targetDir = path.dirname(targetPath)
if (fs.existsSync(targetDir)) await fsPromises.unlink(targetPath).catch(_ => _)
else await fsPromises.mkdir(targetDir, { recursive: true })
await fsPromises.copyFile(filePath, targetPath)
}
module.exports = async(context) => {
const { electronPlatformName, arch } = context
await replaceQrcDecodeLib(electronPlatformName, arch)
if (electronPlatformName !== 'linux' || process.env.FORCE) return
const bindingFilePath = path.join(__dirname, '../node_modules/better-sqlite3/binding.gyp')
const bindingBakFilePath = path.join(__dirname, '../node_modules/better-sqlite3/binding.gyp.bak')
switch (arch) {
case Arch.x64:
case Arch.arm64:
case Arch.armv7l:
if (fs.existsSync(bindingFilePath)) {
// console.log('rename binding file...')
await fsPromises.rename(bindingFilePath, bindingBakFilePath)
}
await replaceSqliteLib(arch)
break
default:
if (fs.existsSync(bindingFilePath)) return
// console.log('restore binding file...')
await fsPromises.rename(bindingBakFilePath, bindingFilePath)
break
}
}

View File

@@ -2,7 +2,8 @@ const isDev = process.env.NODE_ENV === 'development'
module.exports = {
modules: {
localIdentName: isDev ? '[folder]-[name]--[local]--[hash:base64:5]' : '[hash:base64:5]',
localIdentName: isDev ? '[path][name]__[local]--[hash:base64:5]' : '[hash:base64:5]',
exportLocalsConvention: 'camelCase',
},
sourceMap: isDev,
}

View File

@@ -1,11 +1,23 @@
const path = require('path')
const ESLintPlugin = require('eslint-webpack-plugin')
const isDev = process.env.NODE_ENV === 'development'
module.exports = {
target: 'electron-main',
output: {
filename: '[name].js',
libraryTarget: 'commonjs2',
path: path.join(__dirname, '../../dist/electron'),
library: {
type: 'commonjs2',
},
path: path.join(__dirname, '../../dist'),
},
externals: {
'font-list': 'font-list',
'better-sqlite3': 'better-sqlite3',
bufferutil: 'bufferutil',
'utf-8-validate': 'utf-8-validate',
'qrc_decode.node': isDev ? path.join(__dirname, '../../build/Release/qrc_decode.node') : path.join('../build/Release/qrc_decode.node'),
},
resolve: {
alias: {
@@ -14,29 +26,22 @@ module.exports = {
'@lyric': path.join(__dirname, '../../src/renderer-lyric'),
'@common': path.join(__dirname, '../../src/common'),
},
extensions: ['*', '.js', '.json', '.node'],
extensions: ['.tsx', '.ts', '.js', '.mjs', '.json', '.node'],
},
module: {
rules: [
{
test: /\.js$/,
use: {
loader: 'eslint-loader',
options: {
formatter: require('eslint-formatter-friendly'),
},
},
exclude: /node_modules/,
enforce: 'pre',
test: /\.node$/,
use: 'node-loader',
},
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/,
},
// {
// test: /\.js$/,
// loader: 'babel-loader',
// exclude: /node_modules/,
// },
],
},
performance: {
maxEntrypointSize: 300000,
},
plugins: [
new ESLintPlugin(),
],
}

View File

@@ -1,7 +1,6 @@
const path = require('path')
const { merge } = require('webpack-merge')
const webpack = require('webpack')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const baseConfig = require('./webpack.config.base')
@@ -9,27 +8,21 @@ const baseConfig = require('./webpack.config.base')
module.exports = merge(baseConfig, {
mode: 'development',
entry: {
main: path.join(__dirname, '../../src/main/index.dev.js'),
main: path.join(__dirname, '../../src/main/index-dev.ts'),
// 'dbService.worker': path.join(__dirname, '../../src/main/worker/dbService/index.ts'),
},
devtool: 'eval-source-map',
plugins: [
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: '"development"',
},
__static: `"${path.join(__dirname, '../../src/static').replace(/\\/g, '\\\\')}"`,
}),
new webpack.NoEmitOnErrorsPlugin(),
new FriendlyErrorsPlugin({
onErrors(severity, errors) { // Silent warning from electron-debug
if (severity != 'warning') return
for (let i = errors.length - 1; i > -1; i--) {
const error = errors[i]
if (error.file == './node_modules/electron-debug/index.js') errors.splice(i, 1)
}
// You can listen to errors transformed and prioritized by the plugin
// severity can be 'error' or 'warning'
},
webpackStaticPath: `"${path.join(__dirname, '../../src/static').replace(/\\/g, '\\\\')}"`,
webpackUserApiPath: `"${path.join(__dirname, '../../src/main/modules/userApi').replace(/\\/g, '\\\\')}"`,
}),
],
performance: {
maxEntrypointSize: 1024 * 1024 * 50,
maxAssetSize: 1024 * 1024 * 30,
},
})

View File

@@ -1,29 +1,49 @@
const path = require('path')
const { merge } = require('webpack-merge')
const webpack = require('webpack')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const baseConfig = require('./webpack.config.base')
const { dependencies } = require('../../package.json')
// const { dependencies } = require('../../package.json')
const buildConfig = require('../webpack-build-config')
module.exports = merge(baseConfig, {
mode: 'production',
entry: {
main: path.join(__dirname, '../../src/main/index.js'),
main: path.join(__dirname, '../../src/main/index.ts'),
// 'dbService.worker': path.join(__dirname, '../../src/main/worker/dbService/index.ts'),
},
externals: [
...Object.keys(dependencies || {}),
],
node: {
__dirname: false,
__filename: false,
},
plugins: [
new CopyWebpackPlugin({
patterns: [
{
from: path.join(__dirname, '../../src/main/modules/userApi/renderer/user-api.html'),
to: path.join(__dirname, '../../dist/userApi/renderer/user-api.html'),
},
{
from: path.join(__dirname, '../../src/common/theme/images/*').replace(/\\/g, '/'),
to: path.join(__dirname, '../../dist/theme_images/[name][ext]'),
},
],
}),
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: '"production"',
},
}),
],
performance: {
maxEntrypointSize: 1024 * 1024 * 10,
maxAssetSize: 1024 * 1024 * 20,
},
optimization: {
minimize: buildConfig.minimize,
},
})

View File

@@ -5,21 +5,25 @@ const del = require('del')
const webpack = require('webpack')
const Spinnies = require('spinnies')
const mainConfig = require('./main/webpack.config.prod')
const rendererConfig = require('./renderer/webpack.config.prod')
const rendererLyricConfig = require('./renderer-lyric/webpack.config.prod')
const mainConfig = './main/webpack.config.prod'
const rendererConfig = './renderer/webpack.config.prod'
const rendererLyricConfig = './renderer-lyric/webpack.config.prod'
const rendererScriptConfig = './renderer-scripts/webpack.config.prod'
const errorLog = chalk.bgRed.white(' ERROR ') + ' '
const okayLog = chalk.bgGreen.white(' OKAY ') + ' '
const { Worker, isMainThread, parentPort } = require('worker_threads')
function build() {
del.sync(['dist/electron/**', 'build/**'])
del.sync(['dist/**', 'build/**'])
const spinners = new Spinnies({ color: 'blue' })
spinners.add('main', { text: 'main building' })
spinners.add('renderer', { text: 'renderer building' })
spinners.add('renderer-lyric', { text: 'renderer-lyric building' })
spinners.add('renderer-scripts', { text: 'renderer-scripts building' })
let results = ''
// m.on('success', () => {
@@ -63,11 +67,35 @@ function build() {
console.error(`\n${err}\n`)
process.exit(1)
}),
pack(rendererScriptConfig).then(result => {
results += result + '\n\n'
spinners.succeed('renderer-scripts', { text: 'renderer-scripts build success!' })
}).catch(err => {
spinners.fail('renderer-scripts', { text: 'renderer-scripts build fail :(' })
console.log(`\n ${errorLog}failed to build renderer-scripts process`)
console.error(`\n${err}\n`)
process.exit(1)
}),
]).then(handleSuccess)
}
function pack(config) {
return new Promise((resolve, reject) => {
const worker = new Worker(__filename)
const subChannel = new MessageChannel()
worker.postMessage({ port: subChannel.port1, config }, [subChannel.port1])
subChannel.port2.on('message', ({ status, message }) => {
switch (status) {
case 'success': return resolve(message)
case 'error': return reject(message)
}
})
})
}
function runPack(config) {
return new Promise((resolve, reject) => {
config = require(config)
config.mode = 'production'
webpack(config, (err, stats) => {
if (err) reject(err.stack || err)
@@ -95,5 +123,22 @@ function pack(config) {
})
}
build()
if (isMainThread) build()
else {
parentPort.once('message', ({ port, config }) => {
// assert(port instanceof MessagePort)
runPack(config).then((result) => {
port.postMessage({
status: 'success',
message: result,
})
}).catch((err) => {
port.postMessage({
status: 'error',
message: err,
})
}).finally(() => {
port.close()
})
})
}

View File

@@ -0,0 +1,2 @@
const { Arch } = require('electron-builder')
require('./build-before-pack')({ electronPlatformName: process.platform, arch: Arch[process.arch] })

View File

@@ -1,7 +1,8 @@
const path = require('path')
const VueLoaderPlugin = require('vue-loader/lib/plugin')
const { VueLoaderPlugin } = require('vue-loader')
const HTMLPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const ESLintPlugin = require('eslint-webpack-plugin')
const vueLoaderConfig = require('../vue-loader.config')
const { mergeCSSLoader } = require('../utils')
@@ -11,36 +12,47 @@ const isDev = process.env.NODE_ENV === 'development'
module.exports = {
target: 'electron-renderer',
entry: {
'renderer-lyric': path.join(__dirname, '../../src/renderer-lyric/main.js'),
'renderer-lyric': path.join(__dirname, '../../src/renderer-lyric/main.ts'),
},
output: {
filename: '[name].js',
libraryTarget: 'commonjs2',
path: path.join(__dirname, '../../dist/electron'),
publicPath: './',
library: {
type: 'commonjs2',
},
path: path.join(__dirname, '../../dist'),
publicPath: 'auto',
},
resolve: {
alias: {
'@': path.join(__dirname, '../../src'),
'@main': path.join(__dirname, '../../src/main'),
'@renderer': path.join(__dirname, '../../src/renderer'),
'@lyric': path.join(__dirname, '../../src/renderer-lyric'),
'@static': path.join(__dirname, '../../src/static'),
'@common': path.join(__dirname, '../../src/common'),
},
extensions: ['*', '.js', '.json', '.vue', '.node'],
extensions: ['.tsx', '.ts', '.js', '.json', '.vue', '.node'],
},
module: {
rules: [
{
test: /\.(vue|js)$/,
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/,
},
{
test: /\.tsx?$/,
exclude: /node_modules/,
use: {
loader: 'eslint-loader',
loader: 'ts-loader',
options: {
formatter: require('eslint-formatter-friendly'),
appendTsSuffixTo: [/\.vue$/],
},
},
exclude: /node_modules/,
enforce: 'pre',
},
{
test: /\.node$/,
use: 'node-loader',
},
{
test: /\.vue$/,
@@ -48,9 +60,8 @@ module.exports = {
options: vueLoaderConfig,
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/,
test: /\.pug$/,
loader: 'pug-plain-loader',
},
{
test: /\.css$/,
@@ -65,62 +76,63 @@ module.exports = {
},
}),
},
{
test: /\.styl(:?us)?$/,
oneOf: mergeCSSLoader({
loader: 'stylus-loader',
options: {
sourceMap: true,
},
}),
},
{
test: /\.pug$/,
oneOf: [
// Use pug-plain-loader handle .vue file
{
resourceQuery: /vue/,
use: ['pug-plain-loader'],
},
// Use pug-loader handle .pug file
{
use: ['pug-loader'],
},
],
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: 'imgs/[name]--[folder].[ext]',
exclude: path.join(__dirname, '../../src/renderer/assets/svgs'),
type: 'asset',
parser: {
dataUrlCondition: {
maxSize: 10000,
},
},
generator: {
filename: 'imgs/[name]-[contenthash:8][ext]',
},
},
{
test: /\.svg$/,
include: path.join(__dirname, '../../src/renderer/assets/svgs'),
use: [
{
loader: 'svg-sprite-loader',
options: {
symbolId: 'icon-[name]',
},
},
'svg-transform-loader',
'svgo-loader',
],
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: 'media/[name]--[folder].[ext]',
type: 'asset',
parser: {
dataUrlCondition: {
maxSize: 10000,
},
},
generator: {
filename: 'media/[name]-[contenthash:8][ext]',
},
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: 'fonts/[name]--[folder].[ext]',
type: 'asset',
parser: {
dataUrlCondition: {
maxSize: 10000,
},
},
generator: {
filename: 'fonts/[name]-[contenthash:8][ext]',
},
},
],
},
performance: {
maxEntrypointSize: 300000,
},
plugins: [
new HTMLPlugin({
filename: 'lyric.html',
template: path.join(__dirname, '../../src/renderer-lyric/index.pug'),
template: path.join(__dirname, '../../src/renderer-lyric/index.html'),
isProd: process.env.NODE_ENV == 'production',
browser: process.browser,
__dirname,
@@ -132,5 +144,9 @@ module.exports = {
filename: isDev ? '[name].css' : '[name].[contenthash:8].css',
chunkFilename: isDev ? '[id].css' : '[id].[contenthash:8].css',
}),
new ESLintPlugin({
extensions: ['js', 'vue'],
formatter: require('eslint-formatter-friendly'),
}),
],
}

View File

@@ -1,6 +1,5 @@
const path = require('path')
const webpack = require('webpack')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const { merge } = require('webpack-merge')
@@ -10,15 +9,14 @@ module.exports = merge(baseConfig, {
mode: 'development',
devtool: 'eval-source-map',
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoEmitOnErrorsPlugin(),
new FriendlyErrorsPlugin(),
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: '"development"',
ELECTRON_DISABLE_SECURITY_WARNINGS: 'true',
},
__static: `"${path.join(__dirname, '../../src/static').replace(/\\/g, '\\\\')}"`,
__VUE_OPTIONS_API__: 'true',
__VUE_PROD_DEVTOOLS__: 'false',
staticPath: `"${path.join(__dirname, '../../src/static').replace(/\\/g, '\\\\')}"`,
}),
],
performance: {

View File

@@ -1,46 +1,43 @@
const path = require('path')
// const path = require('path')
const webpack = require('webpack')
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin')
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
const TerserPlugin = require('terser-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const { merge } = require('webpack-merge')
const baseConfig = require('./webpack.config.base')
const buildConfig = require('../webpack-build-config')
const { dependencies } = require('../../package.json')
// const { dependencies } = require('../../package.json')
let whiteListedModules = ['vue']
// let whiteListedModules = ['vue']
// let whiteListedModules = ['vue', 'vue-router', 'vuex', 'vue-i18n']
module.exports = merge(baseConfig, {
mode: 'production',
devtool: false,
externals: [
...Object.keys(dependencies || {}).filter(d => !whiteListedModules.includes(d)),
// ...Object.keys(dependencies || {}).filter(d => !whiteListedModules.includes(d)),
],
plugins: [
new CopyWebpackPlugin({
patterns: [
{
from: path.join(__dirname, '../../src/static'),
to: path.join(__dirname, '../../dist/electron/static'),
},
],
}),
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: '"production"',
},
__VUE_OPTIONS_API__: 'true',
__VUE_PROD_DEVTOOLS__: 'false',
}),
],
optimization: {
chunkIds: 'named',
minimize: buildConfig.minimize,
minimizer: [
new TerserPlugin(),
new OptimizeCSSAssetsPlugin({}),
new CssMinimizerPlugin(),
],
},
performance: {
maxEntrypointSize: 1024 * 1024 * 10,
maxAssetSize: 1024 * 1024 * 20,
hints: 'warning',
},
node: {

View File

@@ -0,0 +1,57 @@
const path = require('path')
const ESLintPlugin = require('eslint-webpack-plugin')
module.exports = {
target: 'electron-renderer',
entry: {
'user-api-preload': path.join(__dirname, '../../src/main/modules/userApi/renderer/preload.js'),
},
output: {
filename: '[name].js',
library: {
type: 'commonjs2',
},
path: path.join(__dirname, '../../dist'),
publicPath: 'auto',
},
resolve: {
alias: {
'@': path.join(__dirname, '../../src'),
'@main': path.join(__dirname, '../../src/main'),
'@renderer': path.join(__dirname, '../../src/renderer'),
'@lyric': path.join(__dirname, '../../src/renderer-lyric'),
'@static': path.join(__dirname, '../../src/static'),
'@common': path.join(__dirname, '../../src/common'),
},
extensions: ['.tsx', '.ts', '.js', '.json', '.vue', '.node'],
},
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/,
},
{
test: /\.tsx?$/,
exclude: /node_modules/,
use: {
loader: 'ts-loader',
options: {
appendTsSuffixTo: [/\.vue$/],
},
},
},
{
test: /\.node$/,
use: 'node-loader',
},
],
},
plugins: [
new ESLintPlugin({
extensions: ['js'],
formatter: require('eslint-formatter-friendly'),
}),
],
}

View File

@@ -0,0 +1,24 @@
const path = require('path')
const webpack = require('webpack')
const { merge } = require('webpack-merge')
const baseConfig = require('./webpack.config.base')
module.exports = merge(baseConfig, {
mode: 'development',
devtool: 'eval-source-map',
plugins: [
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: '"development"',
ELECTRON_DISABLE_SECURITY_WARNINGS: 'true',
},
staticPath: `"${path.join(__dirname, '../../src/static').replace(/\\/g, '\\\\')}"`,
}),
],
performance: {
hints: false,
},
})

View File

@@ -0,0 +1,45 @@
// const path = require('path')
const webpack = require('webpack')
const TerserPlugin = require('terser-webpack-plugin')
const { merge } = require('webpack-merge')
const baseConfig = require('./webpack.config.base')
const buildConfig = require('../webpack-build-config')
// const { dependencies } = require('../../package.json')
// let whiteListedModules = ['vue']
// let whiteListedModules = ['vue', 'vue-router', 'vuex', 'vue-i18n']
module.exports = merge(baseConfig, {
mode: 'production',
devtool: false,
externals: [
// ...Object.keys(dependencies || {}).filter(d => !whiteListedModules.includes(d)),
],
plugins: [
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: '"production"',
},
}),
],
optimization: {
minimize: buildConfig.minimize,
minimizer: [
new TerserPlugin(),
],
},
performance: {
maxEntrypointSize: 1024 * 1024 * 10,
maxAssetSize: 1024 * 1024 * 20,
hints: 'warning',
},
node: {
__dirname: false,
__filename: false,
},
})

View File

@@ -1,7 +1,8 @@
const path = require('path')
const VueLoaderPlugin = require('vue-loader/lib/plugin')
const { VueLoaderPlugin } = require('vue-loader')
const HTMLPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const ESLintPlugin = require('eslint-webpack-plugin')
const vueLoaderConfig = require('../vue-loader.config')
const { mergeCSSLoader } = require('../utils')
@@ -11,36 +12,47 @@ const isDev = process.env.NODE_ENV === 'development'
module.exports = {
target: 'electron-renderer',
entry: {
renderer: path.join(__dirname, '../../src/renderer/main.js'),
renderer: path.join(__dirname, '../../src/renderer/main.ts'),
},
output: {
filename: '[name].js',
libraryTarget: 'commonjs2',
path: path.join(__dirname, '../../dist/electron'),
publicPath: './',
library: {
type: 'commonjs2',
},
path: path.join(__dirname, '../../dist'),
publicPath: 'auto',
},
resolve: {
alias: {
'@': path.join(__dirname, '../../src'),
'@main': path.join(__dirname, '../../src/main'),
'@renderer': path.join(__dirname, '../../src/renderer'),
'@lyric': path.join(__dirname, '../../src/renderer-lyric'),
'@static': path.join(__dirname, '../../src/static'),
'@common': path.join(__dirname, '../../src/common'),
},
extensions: ['*', '.js', '.json', '.vue', '.node'],
extensions: ['.tsx', '.ts', '.js', '.json', '.vue', '.node'],
},
module: {
rules: [
{
test: /\.(vue|js)$/,
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/,
},
{
test: /\.tsx?$/,
exclude: /node_modules/,
use: {
loader: 'eslint-loader',
loader: 'ts-loader',
options: {
formatter: require('eslint-formatter-friendly'),
appendTsSuffixTo: [/\.vue$/],
},
},
exclude: /node_modules/,
enforce: 'pre',
},
{
test: /\.node$/,
use: 'node-loader',
},
{
test: /\.vue$/,
@@ -48,9 +60,8 @@ module.exports = {
options: vueLoaderConfig,
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/,
test: /\.pug$/,
loader: 'pug-plain-loader',
},
{
test: /\.css$/,
@@ -65,62 +76,63 @@ module.exports = {
},
}),
},
{
test: /\.styl(:?us)?$/,
oneOf: mergeCSSLoader({
loader: 'stylus-loader',
options: {
sourceMap: true,
},
}),
},
{
test: /\.pug$/,
oneOf: [
// Use pug-plain-loader handle .vue file
{
resourceQuery: /vue/,
use: ['pug-plain-loader'],
},
// Use pug-loader handle .pug file
{
use: ['pug-loader'],
},
],
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: 'imgs/[name]--[folder].[ext]',
exclude: path.join(__dirname, '../../src/renderer/assets/svgs'),
type: 'asset',
parser: {
dataUrlCondition: {
maxSize: 10000,
},
},
generator: {
filename: 'imgs/[name]-[contenthash:8][ext]',
},
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: 'media/[name]--[folder].[ext]',
test: /\.svg$/,
include: path.join(__dirname, '../../src/renderer/assets/svgs'),
use: [
{
loader: 'svg-sprite-loader',
options: {
symbolId: 'icon-[name]',
},
},
'svg-transform-loader',
'svgo-loader',
],
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)$/,
type: 'asset',
parser: {
dataUrlCondition: {
maxSize: 10000,
},
},
generator: {
filename: 'media/[name]-[contenthash:8][ext]',
},
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: 'fonts/[name]--[folder].[ext]',
type: 'asset',
parser: {
dataUrlCondition: {
maxSize: 10000,
},
},
generator: {
filename: 'fonts/[name]-[contenthash:8][ext]',
},
},
],
},
performance: {
maxEntrypointSize: 300000,
},
plugins: [
new HTMLPlugin({
filename: 'index.html',
template: path.join(__dirname, '../../src/renderer/index.pug'),
template: path.join(__dirname, '../../src/renderer/index.html'),
isProd: process.env.NODE_ENV == 'production',
browser: process.browser,
__dirname,
@@ -132,5 +144,9 @@ module.exports = {
filename: isDev ? '[name].css' : '[name].[contenthash:8].css',
chunkFilename: isDev ? '[id].css' : '[id].[contenthash:8].css',
}),
new ESLintPlugin({
extensions: ['js', 'vue'],
formatter: require('eslint-formatter-friendly'),
}),
],
}

View File

@@ -1,6 +1,5 @@
const path = require('path')
const webpack = require('webpack')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const { merge } = require('webpack-merge')
@@ -10,15 +9,15 @@ module.exports = merge(baseConfig, {
mode: 'development',
devtool: 'eval-source-map',
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoEmitOnErrorsPlugin(),
new FriendlyErrorsPlugin(),
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: '"development"',
ELECTRON_DISABLE_SECURITY_WARNINGS: 'true',
},
__static: `"${path.join(__dirname, '../../src/static').replace(/\\/g, '\\\\')}"`,
// ENVIRONMENT: 'process.env',
__VUE_OPTIONS_API__: 'true',
__VUE_PROD_DEVTOOLS__: 'false',
staticPath: `"${path.join(__dirname, '../../src/static').replace(/\\/g, '\\\\')}"`,
}),
],
performance: {

View File

@@ -1,29 +1,30 @@
const path = require('path')
const webpack = require('webpack')
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin')
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
const TerserPlugin = require('terser-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const { merge } = require('webpack-merge')
const baseConfig = require('./webpack.config.base')
const buildConfig = require('../webpack-build-config')
const { dependencies } = require('../../package.json')
// const { dependencies } = require('../../package.json')
let whiteListedModules = ['vue']
// let whiteListedModules = ['vue', 'vue-router', 'vuex', 'vue-i18n']
module.exports = merge(baseConfig, {
mode: 'production',
devtool: false,
externals: [
...Object.keys(dependencies || {}).filter(d => !whiteListedModules.includes(d)),
// ...Object.keys(dependencies || {}).filter(d => !whiteListedModules.includes(d)),
],
plugins: [
new CopyWebpackPlugin({
patterns: [
{
from: path.join(__dirname, '../../src/static'),
to: path.join(__dirname, '../../dist/electron/static'),
to: path.join(__dirname, '../../dist/static'),
},
],
}),
@@ -31,16 +32,25 @@ module.exports = merge(baseConfig, {
'process.env': {
NODE_ENV: '"production"',
},
// ENVIRONMENT: 'process.env',
__VUE_OPTIONS_API__: 'true',
__VUE_PROD_DEVTOOLS__: 'false',
}),
],
optimization: {
chunkIds: 'named',
minimize: buildConfig.minimize,
minimizer: [
new TerserPlugin(),
new OptimizeCSSAssetsPlugin({}),
new CssMinimizerPlugin(),
],
splitChunks: {
chunks: 'initial',
minChunks: 2,
},
},
performance: {
maxEntrypointSize: 1024 * 1024 * 10,
maxAssetSize: 1024 * 1024 * 20,
hints: 'warning',
},
node: {

View File

@@ -13,10 +13,14 @@ const webpackHotMiddleware = require('webpack-hot-middleware')
const mainConfig = require('./main/webpack.config.dev')
const rendererConfig = require('./renderer/webpack.config.dev')
const rendererLyricConfig = require('./renderer-lyric/webpack.config.dev')
const rendererScriptConfig = require('./renderer-scripts/webpack.config.dev')
const { Arch } = require('electron-builder')
const replaceLib = require('./build-before-pack')
let electronProcess = null
let manualRestart = false
let hotMiddleware
let hotMiddlewareRenderer
let hotMiddlewareRendererLyric
function startRenderer() {
@@ -24,7 +28,7 @@ function startRenderer() {
// rendererConfig.entry.renderer = [path.join(__dirname, 'dev-client')].concat(rendererConfig.entry.renderer)
// rendererConfig.mode = 'development'
const compiler = webpack(rendererConfig)
hotMiddleware = webpackHotMiddleware(compiler, {
hotMiddlewareRenderer = webpackHotMiddleware(compiler, {
log: false,
heartbeat: 2500,
})
@@ -32,37 +36,37 @@ function startRenderer() {
compiler.hooks.compilation.tap('compilation', compilation => {
// console.log(Object.keys(compilation.hooks))
HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync('html-webpack-plugin-after-emit', (data, cb) => {
hotMiddleware.publish({ action: 'reload' })
hotMiddlewareRenderer.publish({ action: 'reload' })
cb()
})
})
compiler.hooks.done.tap('done', stats => {
// logStats('Renderer', 'Compile done')
// logStats('Renderer', stats)
})
// compiler.hooks.done.tap('done', stats => {
// // logStats('Renderer', 'Compile done')
// // logStats('Renderer', stats)
// })
const server = new WebpackDevServer(
compiler,
{
contentBase: path.join(__dirname, '../'),
quiet: true,
hot: true,
historyApiFallback: true,
clientLogLevel: 'warning',
overlay: {
errors: true,
},
before(app, ctx) {
app.use(hotMiddleware)
ctx.middleware.waitUntilValid(() => {
resolve()
})
},
const server = new WebpackDevServer({
port: 9080,
hot: true,
historyApiFallback: true,
static: {
directory: path.join(__dirname, '../src/common/theme/images'),
publicPath: '/theme_images',
},
)
client: {
logging: 'warn',
overlay: true,
},
setupMiddlewares(middlewares, devServer) {
devServer.app.use(hotMiddlewareRenderer)
devServer.middleware.waitUntilValid(resolve)
server.listen(9080)
return middlewares
},
}, compiler)
server.start()
})
}
@@ -71,7 +75,7 @@ function startRendererLyric() {
// rendererConfig.entry.renderer = [path.join(__dirname, 'dev-client')].concat(rendererConfig.entry.renderer)
// rendererConfig.mode = 'development'
const compiler = webpack(rendererLyricConfig)
hotMiddleware = webpackHotMiddleware(compiler, {
hotMiddlewareRendererLyric = webpackHotMiddleware(compiler, {
log: false,
heartbeat: 2500,
})
@@ -79,37 +83,51 @@ function startRendererLyric() {
compiler.hooks.compilation.tap('compilation', compilation => {
// console.log(Object.keys(compilation.hooks))
HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync('html-webpack-plugin-after-emit', (data, cb) => {
hotMiddleware.publish({ action: 'reload' })
hotMiddlewareRendererLyric.publish({ action: 'reload' })
cb()
})
})
compiler.hooks.done.tap('done', stats => {
// logStats('Renderer', 'Compile done')
// logStats('Renderer', stats)
})
// compiler.hooks.done.tap('done', stats => {
// // logStats('Renderer', 'Compile done')
// // logStats('Renderer', stats)
// })
const server = new WebpackDevServer(
compiler,
{
contentBase: path.join(__dirname, '../'),
quiet: true,
hot: true,
historyApiFallback: true,
clientLogLevel: 'warning',
overlay: {
errors: true,
},
before(app, ctx) {
app.use(hotMiddleware)
ctx.middleware.waitUntilValid(() => {
resolve()
})
},
const server = new WebpackDevServer({
port: 9081,
hot: true,
historyApiFallback: true,
// static: {
// directory: path.join(__dirname, '../'),
// },
client: {
logging: 'warn',
overlay: true,
},
)
setupMiddlewares(middlewares, devServer) {
devServer.app.use(hotMiddlewareRenderer)
devServer.middleware.waitUntilValid(resolve)
return middlewares
},
}, compiler)
server.listen(9081)
server.start()
})
}
function startRendererScripts() {
return new Promise((resolve, reject) => {
// mainConfig.entry.main = [path.join(__dirname, '../src/main/index.dev.js')].concat(mainConfig.entry.main)
// mainConfig.mode = 'development'
const compiler = webpack(rendererScriptConfig)
compiler.watch({}, (err, stats) => {
if (err) {
console.log(err)
return
}
resolve()
})
})
}
@@ -120,7 +138,8 @@ function startMain() {
const compiler = webpack(mainConfig)
compiler.hooks.watchRun.tapAsync('watch-run', (compilation, done) => {
hotMiddleware.publish({ action: 'compiling' })
hotMiddlewareRenderer.publish({ action: 'compiling' })
hotMiddlewareRendererLyric.publish({ action: 'compiling' })
done()
})
@@ -152,7 +171,7 @@ function startElectron() {
let args = [
'--inspect=5858',
// 'NODE_ENV=development',
path.join(__dirname, '../dist/electron/main.js'),
path.join(__dirname, '../dist/main.js'),
]
// detect yarn or npm and process commandline args accordingly
@@ -176,9 +195,20 @@ function startElectron() {
})
}
const logs = [
'Manifest version 2 is deprecated, and support will be removed in 2023',
'"Extension server error: Operation failed: Permission denied", source: devtools://devtools/bundled',
// https://github.com/electron/electron/issues/32133
'"Electron sandbox_bundle.js script failed to run"',
'"TypeError: object null is not iterable (cannot read property Symbol(Symbol.iterator))",',
]
function electronLog(data, color) {
let log = data.toString()
if (/[0-9A-z]+/.test(log)) {
// 抑制某些无关的报错日志
if (color == 'red' && typeof log === 'string' && logs.some(l => log.includes(l))) return
console.log(chalk[color](log))
}
}
@@ -189,16 +219,28 @@ function init() {
spinners.add('main', { text: 'main compiling' })
spinners.add('renderer', { text: 'renderer compiling' })
spinners.add('renderer-lyric', { text: 'renderer-lyric compiling' })
spinners.add('renderer-scripts', { text: 'renderer-scripts compiling' })
function handleSuccess(name) {
spinners.succeed(name, { text: name + ' compile success!' })
}
function handleFail(name) {
spinners.fail(name, { text: name + ' compile fail!' })
}
replaceLib({ electronPlatformName: process.platform, arch: Arch[process.arch] })
Promise.all([
startRenderer().then(() => handleSuccess('renderer')).catch(() => handleFail('renderer')),
startRendererLyric().then(() => handleSuccess('renderer-lyric')).catch(() => handleFail('renderer-lyric')),
startRenderer().then(() => handleSuccess('renderer')).catch((err) => {
console.error(err.message)
return handleFail('renderer')
}),
startRendererLyric().then(() => handleSuccess('renderer-lyric')).catch((err) => {
console.error(err.message)
return handleFail('renderer-lyric')
}),
startRendererScripts().then(() => handleSuccess('renderer-scripts')).catch((err) => {
console.error(err.message)
return handleFail('renderer-scripts')
}),
startMain().then(() => handleSuccess('main')).catch(() => handleFail('main')),
]).then(startElectron).catch(err => {
console.error(err)

View File

@@ -2,8 +2,6 @@ const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const cssLoaderConfig = require('./css-loader.config')
const chalk = require('chalk')
const isDev = process.env.NODE_ENV === 'development'
// merge css-loader
exports.mergeCSSLoader = beforeLoader => {
const loader = [
@@ -14,7 +12,7 @@ exports.mergeCSSLoader = beforeLoader => {
{
loader: MiniCssExtractPlugin.loader,
options: {
hmr: isDev,
esModule: false,
},
},
{
@@ -30,7 +28,7 @@ exports.mergeCSSLoader = beforeLoader => {
{
loader: MiniCssExtractPlugin.loader,
options: {
hmr: isDev,
esModule: false,
},
},
'css-loader',

View File

@@ -0,0 +1,3 @@
module.exports = {
minimize: false,
}

View File

@@ -1,19 +1,13 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
// This is the line you want to add
"allowSyntheticDefaultImports": true,
"baseUrl": ".",
"baseUrl": "./",
"paths": {
"@main": ["src/main"],
"@renderer": ["src/renderer"],
"@lyric": ["src/renderer-lyric"],
"@static": ["src/static"],
"@common": ["src/common"],
"@main/*": ["src/main/*"],
"@renderer/*": ["src/renderer/*"],
"@lyric/*": ["src/renderer-lyric/*"],
"@static/*": ["src/static/*"],
"@common/*": ["src/common/*"],
}
},
"include": ["src/**/*"],
"exclude": ["node_modules/**/*"]
"exclude": ["node_modules", "build", "dist"]
}

38233
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,89 +1,121 @@
{
"name": "lx-music-desktop",
"version": "1.6.0",
"description": "一个免费的音乐下载助手",
"main": "./dist/electron/main.js",
"version": "2.3.0-beta.3",
"description": "一个免费的音乐查找助手",
"main": "./dist/main.js",
"productName": "lx-music-desktop",
"scripts": {
"pack": "node build-config/pack.js && npm run pack:win",
"pack:win": "npm run pack:win:setup:x86_64 && npm run pack:win:7z",
"pack:win:setup:x86_64": "cross-env TARGET=win_安装版 ARCH=x86_64 electron-builder -w=nsis --x64 --ia32",
"pack:win:setup:x64": "cross-env TARGET=win_安装版 ARCH=x64 electron-builder -w=nsis --x64",
"pack:win:setup:x86": "cross-env TARGET=win_安装版 ARCH=x86 electron-builder -w=nsis --ia32",
"pack": "node build-config/pack.js && npm run pack:win:setup:x64",
"pack:win": "node build-config/pack.js && npm run pack:win:setup:x64 && npm run pack:win:setup:x86 && npm run pack:win:setup:arm64 && npm run pack:win:setup:x86_64 && npm run pack:win:7z",
"pack:win:setup:x86_64": "cross-env TARGET=Setup ARCH=x86_64 electron-builder -w=nsis --x64 --ia32 -p never",
"pack:win:setup:x64": "cross-env TARGET=Setup ARCH=x64 electron-builder -w=nsis --x64 -p never",
"pack:win:setup:x86": "cross-env TARGET=Setup ARCH=x86 electron-builder -w=nsis --ia32 -p never",
"pack:win:setup:arm64": "cross-env TARGET=Setup ARCH=arm64 electron-builder -w=nsis --arm64 -p never",
"pack:win:portable": "npm run pack:win:portable:x86_64 && npm run pack:win:portable:x64 && npm run pack:win:portable:x86",
"pack:win:portable:x86_64": "cross-env TARGET=便携版 ARCH=x86_64 electron-builder -w=portable --x64 --ia32",
"pack:win:portable:x64": "cross-env TARGET=便携版 ARCH=x64 electron-builder -w=portable --x64",
"pack:win:portable:x86": "cross-env TARGET=便携版 ARCH=x86 electron-builder -w=portable --ia32",
"pack:win:portable:x86_64": "cross-env TARGET=portable ARCH=x86_64 electron-builder -w=portable --x64 --ia32 -p never",
"pack:win:portable:x64": "cross-env TARGET=portable ARCH=x64 electron-builder -w=portable --x64 -p never",
"pack:win:portable:x86": "cross-env TARGET=portable ARCH=x86 electron-builder -w=portable --ia32 -p never",
"pack:win:7z": "npm run pack:win:7z:x64 && npm run pack:win:7z:x86",
"pack:win:7z:x64": "cross-env TARGET=win_绿色版 ARCH=x64 electron-builder -w=7z --x64",
"pack:win:7z:x86": "cross-env TARGET=win_绿色版 ARCH=x86 electron-builder -w=7z --ia32",
"pack:win:7z:x64": "cross-env TARGET=green ARCH=win_x64 electron-builder -w=7z --x64 -p never",
"pack:win:7z:x86": "cross-env TARGET=green ARCH=win_x86 electron-builder -w=7z --ia32 -p never",
"pack:win:7z:arm64": "cross-env TARGET=green ARCH=win_arm64 electron-builder -w=7z --arm64 -p never",
"pack:linux": "node build-config/pack.js && npm run pack:linux:deb && npm run pack:linux:appImage && npm run pack:linux:rpm && npm run pack:linux:pacman",
"pack:linux:appImage": "cross-env ARCH=x64 electron-builder -l=AppImage -p never",
"pack:linux:deb": "npm run pack:linux:deb:x64 && npm run pack:linux:deb:arm64 && npm run pack:linux:deb:armv7l",
"pack:linux:deb:x64": "cross-env ARCH=x64 electron-builder -l=deb --x64 -p never",
"pack:linux:deb:arm64": "cross-env ARCH=arm64 electron-builder -l=deb --arm64 -p never",
"pack:linux:deb:armv7l": "cross-env ARCH=armv7l electron-builder -l=deb --armv7l -p never",
"pack:linux:rpm": "cross-env ARCH=x64 electron-builder -l=rpm --x64 -p never",
"pack:linux:pacman": "cross-env ARCH=x64 electron-builder -l=pacman --x64 -p never",
"pack:mac": "node build-config/pack.js && npm run pack:mac:dmg && npm run pack:mac:dmg:arm64",
"pack:mac:dmg": "cross-env electron-builder -m=dmg -p never",
"pack:mac:dmg:arm64": "cross-env electron-builder -m=dmg --arm64 -p never",
"pack:dir": "node build-config/pack.js && electron-builder --dir",
"publish": "node publish",
"publish:gh": "node build-config/pack.js && npm run publish:win",
"publish:win": "npm run publish:win:7z && npm run publish:win:setup",
"publish:win:setup": "cross-env TARGET=Setup ARCH=x86_64 electron-builder -w=nsis --x64 --ia32 -p onTagOrDraft",
"publish:win:setup:x64:always": "cross-env TARGET=Setup ARCH=x64 electron-builder -w=nsis --x64 -p always",
"publish:win:setup:x64": "cross-env TARGET=Setup ARCH=x64 electron-builder -w=nsis --x64 -p always",
"publish:win:setup:x86": "cross-env TARGET=Setup ARCH=x86 electron-builder -w=nsis --ia32 -p onTagOrDraft",
"publish:win:setup:arm64": "cross-env TARGET=Setup ARCH=arm64 electron-builder -w=nsis --arm64 -p onTagOrDraft",
"publish:win:setup:x86_64": "cross-env TARGET=Setup ARCH=x86_64 electron-builder -w=nsis --x64 --ia32 -p onTagOrDraft",
"publish:win:portable": "npm run publish:win:portable:x86_64 && npm run publish:win:portable:x64 && npm run publish:win:portable:x86",
"publish:win:portable:x86_64": "cross-env TARGET=portable ARCH=x86_64 electron-builder -w=portable --x64 --ia32 -p onTagOrDraft",
"publish:win:portable:x64": "cross-env TARGET=portable ARCH=x64 electron-builder -w=portable --x64 -p onTagOrDraft",
"publish:win:portable:x86": "cross-env TARGET=portable ARCH=x86 electron-builder -w=portable --ia32 -p onTagOrDraft",
"publish:win:7z": "npm run publish:win:7z:x64 && npm run publish:win:7z:x86",
"publish:win:7z:x64": "cross-env TARGET=green ARCH=win_x64 electron-builder -w=7z --x64 -p always",
"publish:win:7z:x64": "cross-env TARGET=green ARCH=win_x64 electron-builder -w=7z --x64 -p onTagOrDraft",
"publish:win:7z:x86": "cross-env TARGET=green ARCH=win_x86 electron-builder -w=7z --ia32 -p onTagOrDraft",
"publish:gh:mac": "node build-config/pack.js && npm run publish:mac",
"publish:mac": "npm run publish:mac:dmg",
"publish:win:7z:arm64": "cross-env TARGET=green ARCH=win_arm64 electron-builder -w=7z --arm64 -p onTagOrDraft",
"publish:mac:dmg:always": "electron-builder -m=dmg -p always",
"publish:mac:dmg": "electron-builder -m=dmg -p onTagOrDraft",
"publish:gh:linux": "node build-config/pack.js && npm run publish:linux",
"publish:linux": "npm run publish:linux:deb && npm run publish:linux:appImage && npm run publish:linux:rpm && npm run publish:linux:pacman",
"publish:linux:appImage": "cross-env ARCH=x64 electron-builder -l=AppImage -p onTagOrDraft",
"publish:linux:deb": "npm run publish:linux:deb:x64 && npm run publish:linux:deb:x86 && npm run publish:linux:deb:arm64",
"publish:mac:dmg:arm64": "electron-builder -m=dmg --arm64 -p onTagOrDraft",
"publish:linux:deb:x64:always": "cross-env ARCH=x64 electron-builder -l=deb --x64 -p always",
"publish:linux:deb:x64": "cross-env ARCH=x64 electron-builder -l=deb --x64 -p onTagOrDraft",
"publish:linux:deb:x86": "cross-env ARCH=x86 electron-builder -l=deb --ia32 -p onTagOrDraft",
"publish:linux:deb:arm64": "cross-env ARCH=arm64 electron-builder -l=deb --arm64 -p onTagOrDraft",
"publish:linux:deb:armv7l": "cross-env ARCH=armv7l electron-builder -l=deb --armv7l -p onTagOrDraft",
"publish:linux:appImage": "cross-env ARCH=x64 electron-builder -l=AppImage -p onTagOrDraft",
"publish:linux:rpm": "cross-env ARCH=x64 electron-builder -l=rpm --x64 -p onTagOrDraft",
"publish:linux:pacman": "cross-env ARCH=x64 electron-builder -l=pacman --x64 -p onTagOrDraft",
"pack:linux": "node build-config/pack.js && npm run pack:linux:deb && npm run pack:linux:appImage && npm run pack:linux:rpm && npm run pack:linux:pacman",
"pack:linux:appImage": "cross-env ARCH=x64 electron-builder -l=AppImage",
"pack:linux:deb": "npm run pack:linux:deb:x64 && npm run pack:linux:deb:x86 && npm run pack:linux:deb:arm64",
"pack:linux:deb:x64": "cross-env ARCH=x64 electron-builder -l=deb --x64",
"pack:linux:deb:x86": "cross-env ARCH=x86 electron-builder -l=deb --ia32",
"pack:linux:deb:arm64": "cross-env ARCH=arm64 electron-builder -l=deb --arm64",
"pack:linux:rpm": "cross-env ARCH=x64 electron-builder -l=rpm --x64",
"pack:linux:pacman": "cross-env ARCH=x64 electron-builder -l=pacman --x64",
"pack:mac": "node build-config/pack.js && electron-builder -m=dmg",
"pack:dir": "node build-config/pack.js && electron-builder --dir",
"dev": "node build-config/runner-dev.js",
"clean:electron": "rimraf dist/electron",
"dev": "cross-env NODE_OPTIONS=--max-http-header-size=200000 node build-config/runner-dev.js",
"clean:electron": "rimraf dist",
"clean": "rimraf dist && rimraf build",
"build:main": "cross-env NODE_ENV=production webpack --config build-config/main/webpack.config.prod.js --progress --hide-modules",
"build:renderer": "cross-env NODE_ENV=production webpack --config build-config/renderer/webpack.config.prod.js --progress --hide-modules",
"build:renderer-lyric": "cross-env NODE_ENV=production webpack --config build-config/renderer-lyric/webpack.config.prod.js --progress --hide-modules",
"build": "npm run clean:electron && npm run build:main && npm run build:renderer && npm run build:renderer-lyric",
"lint": "eslint --ext .js,.vue -f ./node_modules/eslint-formatter-friendly src",
"lint:fix": "eslint --ext .js,.vue -f ./node_modules/eslint-formatter-friendly --fix src"
"build:theme": "node src/common/theme/createThemes.js",
"build:src": "node build-config/pack.js",
"build:main": "cross-env NODE_ENV=production webpack --config build-config/main/webpack.config.prod.js --progress",
"build:renderer": "cross-env NODE_ENV=production webpack --config build-config/renderer/webpack.config.prod.js --progress",
"build:renderer-lyric": "cross-env NODE_ENV=production webpack --config build-config/renderer-lyric/webpack.config.prod.js --progress",
"build:renderer-scripts": "cross-env NODE_ENV=production webpack --config build-config/renderer-scripts/webpack.config.prod.js --progress",
"build": "npm run clean:electron && npm run build:main && npm run build:renderer && npm run build:renderer-lyric && npm run build:renderer-scripts",
"lint": "eslint --ext .ts,.js,.vue -f node_modules/eslint-formatter-friendly src",
"lint:fix": "eslint --ext .ts,.js,.vue -f node_modules/eslint-formatter-friendly --fix src",
"postinstall": "electron-builder install-app-deps",
"dp": "cross-env ELECTRON_GET_USE_PROXY=true GLOBAL_AGENT_HTTPS_PROXY=http://127.0.0.1:1081 npm run pack",
"up": "cross-env ELECTRON_GET_USE_PROXY=true GLOBAL_AGENT_HTTPS_PROXY=http://127.0.0.1:1081 npm i"
},
"browserslist": [
"Electron 9.3.4"
"Electron 22.3.0"
],
"engines": {
"node": ">= 12"
"node": ">= 16",
"npm": ">=8.5.2"
},
"build": {
"appId": "cn.toside.music.desktop",
"beforePack": "./build-config/build-before-pack.js",
"afterPack": "./build-config/build-after-pack.js",
"protocols": {
"name": "lx-music-protocol",
"schemes": [
"lxmusic"
]
},
"directories": {
"buildResources": "./resources",
"output": "./build"
},
"files": [
"dist/electron/**/*"
"!node_modules/**/*",
"node_modules/font-list",
"node_modules/better-sqlite3/lib",
"node_modules/better-sqlite3/package.json",
"node_modules/better-sqlite3/build/Release/better_sqlite3.node",
"node_modules/node-gyp-build",
"node_modules/bufferutil",
"node_modules/utf-8-validate",
"build/Release/qrc_decode.node",
"dist/**/*"
],
"asar": {
"smartUnpack": false
},
"extraResources": [
"./licenses"
],
"win": {
"icon": "./resources/icons/256x256.ico",
"icon": "./resources/icons/icon.ico",
"legalTrademarks": "lyswhut",
"artifactName": "${productName} v${version} ${env.ARCH} ${env.TARGET}.${ext}"
},
"mac": {
"icon": "./resources/icons/512x512.icns",
"icon": "./resources/icons/icon.icns",
"category": "public.app-category.music"
},
"linux": {
@@ -92,7 +124,12 @@
"icon": "./resources/icons",
"category": "Utility;AudioVideo;Audio;Player;Music;",
"desktop": {
"Name[zh_CN]": "洛雪音乐助手"
"Name": "LX Music",
"Name[zh_CN]": "LX Music",
"Name[zh_TW]": "LX Music",
"Encoding": "UTF-8",
"MimeType": "x-scheme-handler/lxmusic",
"StartupNotify": "false"
}
},
"nsis": {
@@ -132,15 +169,23 @@
"provider": "github",
"owner": "lyswhut",
"repo": "lx-music-desktop"
},
{
"package": "lx-music-desktop",
"repo": "lx-music-desktop",
"user": "lyswhut",
"provider": "bintray"
}
]
},
"macLanguagesInfoPlistStrings": {
"en": {
"CFBundleDisplayName": "LX Music",
"CFBundleName": "LX Music"
},
"zh_CN": {
"CFBundleDisplayName": "LX Music",
"CFBundleName": "LX Music"
},
"zh_TW": {
"CFBundleDisplayName": "LX Music",
"CFBundleName": "LX Music"
}
},
"repository": {
"type": "git",
"url": "git+https://github.com/lyswhut/lx-music-desktop.git"
@@ -148,7 +193,7 @@
"keywords": [
"music-player",
"electron-app",
"vuejs2"
"vuejs3"
],
"author": {
"name": "lyswhut",
@@ -160,82 +205,107 @@
},
"homepage": "https://github.com/lyswhut/lx-music-desktop#readme",
"devDependencies": {
"@babel/core": "^7.12.10",
"@babel/core": "^7.21.8",
"@babel/eslint-parser": "^7.21.8",
"@babel/plugin-proposal-class-properties": "^7.18.6",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-transform-modules-umd": "^7.12.1",
"@babel/plugin-transform-runtime": "^7.12.10",
"@babel/polyfill": "^7.12.1",
"@babel/preset-env": "^7.12.11",
"babel-eslint": "^10.1.0",
"babel-loader": "^8.2.2",
"babel-minify-webpack-plugin": "^0.3.1",
"babel-preset-minify": "^0.5.1",
"cfonts": "^2.9.1",
"chalk": "^4.1.0",
"changelog-parser": "^2.8.0",
"copy-webpack-plugin": "^6.4.0",
"core-js": "^3.8.2",
"@babel/plugin-transform-modules-umd": "^7.18.6",
"@babel/plugin-transform-runtime": "^7.21.4",
"@babel/preset-env": "^7.21.5",
"@babel/preset-typescript": "^7.21.5",
"@types/better-sqlite3": "^7.6.4",
"@types/needle": "^3.2.0",
"@types/tunnel": "^0.0.3",
"@typescript-eslint/eslint-plugin": "^5.59.2",
"@typescript-eslint/parser": "^5.59.2",
"@volar/vue-language-plugin-pug": "^1.6.4",
"babel-loader": "^9.1.2",
"browserslist": "^4.21.5",
"chalk": "^4.1.2",
"changelog-parser": "^3.0.1",
"copy-webpack-plugin": "^11.0.0",
"core-js": "^3.30.2",
"cross-env": "^7.0.3",
"css-loader": "^4.3.0",
"del": "^6.0.0",
"electron": "^9.4.0",
"electron-builder": "^22.9.1",
"css-loader": "^6.7.3",
"css-minimizer-webpack-plugin": "^5.0.0",
"del": "^6.1.1",
"electron": "^22.3.8",
"electron-builder": "^24.3.0",
"electron-debug": "^3.2.0",
"electron-devtools-installer": "^3.1.1",
"eslint": "^7.17.0",
"eslint-config-standard": "^14.1.1",
"eslint-formatter-friendly": "^7.0.0",
"eslint-loader": "^4.0.2",
"eslint-plugin-html": "^6.1.1",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.1.0",
"file-loader": "^6.2.0",
"friendly-errors-webpack-plugin": "^1.7.0",
"html-webpack-plugin": "^4.5.1",
"less": "^3.12.2",
"less-loader": "^7.2.1",
"markdown-it": "^12.0.4",
"mini-css-extract-plugin": "^0.12.0",
"optimize-css-assets-webpack-plugin": "^5.0.4",
"postcss-loader": "^4.1.0",
"postcss-pxtorem": "^5.1.1",
"pug": "^3.0.0",
"pug-loader": "^2.4.0",
"electron-devtools-installer": "^3.2.0",
"electron-to-chromium": "^1.4.385",
"electron-updater": "^6.1.0",
"eslint": "^8.40.0",
"eslint-config-standard": "^17.0.0",
"eslint-config-standard-with-typescript": "^34.0.1",
"eslint-formatter-friendly": "github:lyswhut/eslint-friendly-formatter#2170d1320e2fad13615a9dcf229669f0bb473a53",
"eslint-plugin-html": "^7.1.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-n": "^15.7.0",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-vue": "^9.11.1",
"eslint-webpack-plugin": "^4.0.1",
"html-webpack-plugin": "^5.5.1",
"less": "^4.1.3",
"less-loader": "^11.1.0",
"mini-css-extract-plugin": "^2.7.5",
"node-loader": "^2.0.0",
"postcss": "^8.4.23",
"postcss-loader": "^7.3.0",
"postcss-pxtorem": "^6.0.0",
"pug": "^3.0.2",
"pug-plain-loader": "^1.1.0",
"raw-loader": "^4.0.2",
"rimraf": "^3.0.2",
"spinnies": "^0.5.1",
"stylus": "^0.54.8",
"stylus-loader": "^4.3.1",
"terser-webpack-plugin": "^4.2.3",
"url-loader": "^4.1.1",
"vue-loader": "^15.9.6",
"vue-template-compiler": "^2.6.12",
"webpack": "^4.44.2",
"webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.1",
"webpack-hot-middleware": "^2.25.0",
"webpack-merge": "^5.7.3"
"rimraf": "^5.0.0",
"spinnies": "github:lyswhut/spinnies#233305c58694aa3b053e3ab9af9049993f918b9d",
"svg-sprite-loader": "^6.0.11",
"svg-transform-loader": "^2.0.13",
"svgo-loader": "^4.0.0",
"terser": "^5.17.1",
"terser-webpack-plugin": "^5.3.8",
"ts-loader": "^9.4.2",
"typescript": "^5.0.4",
"vue-eslint-parser": "^9.2.1",
"vue-loader": "^17.1.0",
"vue-template-compiler": "^2.7.14",
"webpack": "^5.82.0",
"webpack-cli": "^5.1.0",
"webpack-dev-server": "^4.15.0",
"webpack-hot-middleware": "github:lyswhut/webpack-hot-middleware#329c4375134b89d39da23a56a94db651247c74a1",
"webpack-merge": "^5.8.0"
},
"dependencies": {
"crypto-js": "^4.0.0",
"dnscache": "^1.0.2",
"electron-log": "^4.3.1",
"electron-store": "^6.0.1",
"electron-updater": "^4.3.5",
"iconv-lite": "^0.6.2",
"image-size": "^0.9.3",
"js-htmlencode": "^0.3.0",
"lrc-file-parser": "^1.0.5",
"needle": "^2.6.0",
"node-id3": "^0.2.2",
"request": "^2.88.2",
"vue": "^2.6.12",
"vue-i18n": "^8.22.3",
"vue-router": "^3.4.9",
"vuex": "^3.6.0",
"vuex-router-sync": "^5.0.0"
"@simonwep/pickr": "^1.8.2",
"better-sqlite3": "^8.3.0",
"bufferutil": "^4.0.7",
"comlink": "~4.3.1",
"crypto-js": "^4.1.1",
"electron-log": "^4.4.8",
"electron-store": "^8.1.0",
"font-list": "^1.4.5",
"iconv-lite": "^0.6.3",
"image-size": "^1.0.2",
"jschardet": "^3.0.0",
"long": "^5.2.3",
"music-metadata": "^8.1.4",
"needle": "github:lyswhut/needle#93299ac841b7e9a9f82ca7279b88aaaeda404060",
"node-id3": "^0.2.6",
"sortablejs": "^1.15.0",
"tunnel": "^0.0.6",
"utf-8-validate": "^6.0.3",
"vue": "^3.2.47",
"vue-router": "^4.1.6",
"ws": "^8.13.0"
},
"overrides": {
"got": "^11",
"json5": "latest",
"minimatch": "latest",
"svg-sprite-loader": {
"postcss": "latest"
},
"svg-baker": {
"postcss": "latest"
},
"http-cache-semantics": "latest"
}
}

View File

@@ -15,7 +15,7 @@ module.exports = {
'*-height', '*-width',
'flex', '::-webkit-scrollbar',
'top', 'left', 'bottom', 'right',
'border-radius',
'border-radius', 'gap',
],
selectorBlackList: ['html', 'ignore-to-rem'],
replace: true,

View File

@@ -1,20 +1,7 @@
### 新增
- 我的列表右键菜单新增列表排序功能,可调整单曲、多选后的歌曲的顺序。注意:多选排序还将会按照选中歌曲时的顺序排序
- 添加鼠标提示的自动关闭功能鼠标长时间目前是10秒不动时鼠标提示将会自动关闭
- 添加鼠标指向歌曲封面的提示(对于进度条左边的歌曲封面,你可能不知道的操作->右击在“我的列表”定位当前播放的歌曲)
- 隐藏播放详情页按钮添加快速隐藏详情页提示(你可能不知道的操作->在播放详情页内的任意非窗口可拖动区域右键双击可以快速隐藏详情页)
- 添加桌面歌词字体、透明度调整按钮微调提示(你可能不知道的操作->对于字体、透明度可右击微调)
- 我的列表右键菜单添加搜索当前歌曲功能
- 新增`-dha`参数添加此启动参数将禁用硬件加速启动Disable Hardware Acceleration窗口显示有问题时可以尝试添加此参数启动Linux系统的界面显示有问题时可尝试添加此参数启动若不行可尝试添加`-dt`参数启动
- 新增播放自动换源功能~
- 新增音效设置实验性功能支持10段均衡器设置、内置的一些环境混响音效、3D立体环绕音效
### 变更
### 其他
- `-nt`参数更名为`-dt`Disable Transparent目前原来的`-nt`参数仍然可用,但将在后续的版本中移除
### 修复
- 修复恢复上次播放的歌曲时在随机播放模式下不把恢复播放的歌曲放入已播放队列的问题(该问题会导致随机模式下会导致未播放完整个列表前就会再次随机到该歌曲,以及无法通过上一曲切回该歌曲)
- 修复音乐嵌入的封面在 Mac 系统无法显示的问题
- 修复`-dt`(原来的`-nt`)启动参数不真正生效的问题
- 更新 electron 到 v22.3.8

View File

@@ -9,12 +9,12 @@ const version_bak = JSON.stringify(version, null, 2)
const parseChangelog = require('changelog-parser')
const changelogPath = jp('../../CHANGELOG.md')
const md_renderer = markdownStr => new (require('markdown-it'))({
html: true,
linkify: true,
typographer: true,
breaks: true,
}).render(markdownStr)
// const md_renderer = markdownStr => new (require('markdown-it'))({
// html: true,
// linkify: true,
// typographer: true,
// breaks: true,
// }).render(markdownStr)
const getPrevVer = () => parseChangelog(changelogPath).then(res => {
if (!res.versions.length) throw new Error('CHANGELOG 无法解析到版本号')
@@ -28,7 +28,7 @@ const updateChangeLog = async(newVerNum, newChangeLog) => {
fs.writeFileSync(changelogPath, changeLog.replace(new RegExp('(## [?0.1.1]?)'), log + '\n$1'), 'utf-8')
}
const renderChangeLog = md => md_renderer(md)
// const renderChangeLog = md => md_renderer(md)
module.exports = async newVerNum => {
@@ -38,13 +38,13 @@ module.exports = async newVerNum => {
newVerNum = verArr.join('.')
}
const newMDChangeLog = fs.readFileSync(jp('../changeLog.md'), 'utf-8')
const newChangeLog = renderChangeLog(newMDChangeLog)
// const newChangeLog = renderChangeLog(newMDChangeLog)
version.history.unshift({
version: version.version,
desc: version.desc,
})
version.version = newVerNum
version.desc = newChangeLog
version.desc = newMDChangeLog.replace(/(?:^|(\n))#{1,6} (.+)\n/g, '$1$2').trim()
pkg.version = newVerNum
console.log(chalk.blue('new version: ') + chalk.green(newVerNum))
@@ -58,7 +58,7 @@ module.exports = async newVerNum => {
return {
pkg_bak,
version_bak,
changeLog: newChangeLog,
// changeLog: newChangeLog,
}
}

File diff suppressed because one or more lines are too long

BIN
resources/icons/128x128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
resources/icons/16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

BIN
resources/icons/256x256.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

BIN
resources/icons/32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 901 B

BIN
resources/icons/48x48.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 17 KiB

BIN
resources/icons/64x64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
resources/icons/icon.icns Normal file

Binary file not shown.

BIN
resources/icons/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
resources/icons/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -1,56 +0,0 @@
module.exports = {
windowSizeList: [
{
id: 0,
name: 'smaller',
width: 828,
height: 530,
fontSize: '14px',
},
{
id: 1,
name: 'small',
width: 920,
height: 590,
fontSize: '16px',
},
{
id: 2,
name: 'medium',
width: 1018,
height: 650,
fontSize: '16px',
},
{
id: 3,
name: 'big',
width: 1114,
height: 708,
fontSize: '17px',
},
{
id: 4,
name: 'larger',
width: 1202,
height: 766,
fontSize: '17px',
},
{
id: 5,
name: 'oversized',
width: 1382,
height: 886,
fontSize: '18px',
},
{
id: 6,
name: 'huge',
width: 1686,
height: 1062,
fontSize: '19px',
},
],
navigationUrlWhiteList: [
/^https:\/\/www\.xiami\.com/,
],
}

86
src/common/config.ts Normal file
View File

@@ -0,0 +1,86 @@
export interface WindowSize {
id: number
name: string
width: number
height: number
}
export const windowSizeList: WindowSize[] = [
{
id: 0,
name: 'smaller',
width: 828,
height: 540,
},
{
id: 1,
name: 'small',
width: 920,
height: 600,
},
{
id: 2,
name: 'medium',
width: 1020,
height: 660,
},
{
id: 3,
name: 'big',
width: 1114,
height: 718,
},
{
id: 4,
name: 'larger',
width: 1202,
height: 776,
},
{
id: 5,
name: 'oversized',
width: 1385,
height: 896,
},
{
id: 6,
name: 'huge',
width: 1700,
height: 1070,
},
]
export const navigationUrlWhiteList: RegExp[] = []
// 基础黑白色
// export const commonColorNames = [
// '--color-000', '--color-050', '--color-100', '--color-200', '--color-300', '--color-400',
// '--color-500', '--color-600', '--color-700', '--color-800', '--color-900',
// ] as const
// export const commonLightColorValues = [
// 'rgb(255, 255, 255)',
// 'rgb(217,217,217)',
// 'rgb(184,184,184)',
// 'rgb(156,156,156)',
// 'rgb(133,133,133)',
// 'rgb(113,113,113)',
// 'rgb(96,96,96)',
// 'rgb(82,82,82)',
// 'rgb(70,70,70)',
// 'rgb(60,60,60)',
// 'rgb(51,51,51)',
// ] as const
// export const commonDarkColorValues = [
// 'rgb(11, 11, 11)',
// 'rgb(60,60,60)',
// 'rgb(99,99,99)',
// 'rgb(130,130,130)',
// 'rgb(155,155,155)',
// 'rgb(175,175,175)',
// 'rgb(191,191,191)',
// 'rgb(204,204,204)',
// 'rgb(214,214,214)',
// 'rgb(222,222,222)',
// 'rgb(229,229,229)',
// ] as const

99
src/common/constants.ts Normal file
View File

@@ -0,0 +1,99 @@
export const URL_SCHEME_RXP = /^lxmusic:\/\//
export const STORE_NAMES = {
APP_SETTINGS: 'config_v2',
DATA: 'data',
SYNC: 'sync',
HOTKEY: 'hot_key',
USER_API: 'user_api',
LRC_RAW: 'lyrics',
LRC_EDITED: 'lyrics_edited',
THEME: 'theme',
SOUND_EFFECT: 'sound_effect',
} as const
export const APP_EVENT_NAMES = {
winMainName: 'win_main',
winLyricName: 'win_lyric',
trayName: 'tray',
} as const
export const LIST_IDS = {
DEFAULT: 'default',
LOVE: 'love',
TEMP: 'temp',
DOWNLOAD: 'download',
PLAY_LATER: null,
} as const
export const DATA_KEYS = {
viewPrevState: 'viewPrevState',
playInfo: 'playInfo',
searchHistoryList: 'searchHistoryList',
listScrollPosition: 'listScrollPosition',
listPrevSelectId: 'listPrevSelectId',
listUpdateInfo: 'listUpdateInfo',
ignoreVersion: 'ignoreVersion',
leaderboardSetting: 'leaderboardSetting',
songListSetting: 'songListSetting',
searchSetting: 'searchSetting',
lastStartInfo: 'lastStartInfo',
} as const
export const DEFAULT_SETTING = {
leaderboard: {
source: 'kw',
boardId: 'kw__16',
},
songList: {
source: 'kg',
sortId: '5',
tagId: '',
},
search: {
temp_source: 'kw',
source: 'all',
type: 'music',
},
viewPrevState: {
url: '/search',
query: {},
},
}
export const DOWNLOAD_STATUS = {
RUN: 'run',
WAITING: 'waiting',
PAUSE: 'pause',
ERROR: 'error',
COMPLETED: 'completed',
} as const
export const QUALITYS = ['flac24bit', 'flac', 'wav', 'ape', '320k', '192k', '128k'] as const
export const SYNC_CODE = {
helloMsg: 'Hello~::^-^::~v3~',
idPrefix: 'OjppZDo6',
authMsg: 'lx-music auth::',
authFailed: 'Auth failed',
missingAuthCode: 'Missing auth code',
getServiceIdFailed: 'Get service id failed',
connectServiceFailed: 'Connect service failed',
connecting: 'Connecting...',
unknownServiceAddress: 'Unknown service address',
msgBlockedIp: 'Blocked IP',
msgConnect: 'lx-music connect',
msgAuthFailed: 'Auth failed',
} as const
export const SYNC_CLOSE_CODE = {
normal: 1000,
failed: 4100,
} as const

View File

@@ -1,89 +0,0 @@
const { player: hotKeyPlayer, common: hotKeyCommon, desktop_lyric: hotKeyDesktopLyric } = require('./hotKey')
module.exports = {
local: {
enable: true,
keys: {
'mod+f5': {
type: hotKeyPlayer.toggle_play.type,
name: hotKeyPlayer.toggle_play.name,
action: hotKeyPlayer.toggle_play.action,
},
'mod+arrowleft': {
type: hotKeyPlayer.prev.type,
name: hotKeyPlayer.prev.name,
action: hotKeyPlayer.prev.action,
},
'mod+arrowright': {
type: hotKeyPlayer.next.type,
name: hotKeyPlayer.next.name,
action: hotKeyPlayer.next.action,
},
f1: {
type: hotKeyCommon.focusSearchInput.type,
name: hotKeyCommon.focusSearchInput.name,
action: hotKeyCommon.focusSearchInput.action,
},
},
},
global: {
enable: false,
keys: {
MediaPlayPause: {
type: hotKeyPlayer.toggle_play.type,
name: null,
action: hotKeyPlayer.toggle_play.action,
},
MediaPreviousTrack: {
type: hotKeyPlayer.prev.type,
name: null,
action: hotKeyPlayer.prev.action,
},
MediaNextTrack: {
type: hotKeyPlayer.next.type,
name: null,
action: hotKeyPlayer.next.action,
},
'mod+alt+f5': {
type: hotKeyPlayer.toggle_play.type,
name: hotKeyPlayer.toggle_play.name,
action: hotKeyPlayer.toggle_play.action,
},
'mod+alt+arrowleft': {
type: hotKeyPlayer.prev.type,
name: hotKeyPlayer.prev.name,
action: hotKeyPlayer.prev.action,
},
'mod+alt+arrowright': {
type: hotKeyPlayer.next.type,
name: hotKeyPlayer.next.name,
action: hotKeyPlayer.next.action,
},
'mod+alt+arrowup': {
type: hotKeyPlayer.volume_up.type,
name: hotKeyPlayer.volume_up.name,
action: hotKeyPlayer.volume_up.action,
},
'mod+alt+arrowdown': {
type: hotKeyPlayer.volume_down.type,
name: hotKeyPlayer.volume_down.name,
action: hotKeyPlayer.volume_down.action,
},
'mod+alt+0': {
type: hotKeyDesktopLyric.toggle_visible.type,
name: hotKeyDesktopLyric.toggle_visible.name,
action: hotKeyDesktopLyric.toggle_visible.action,
},
'mod+alt+-': {
type: hotKeyDesktopLyric.toggle_lock.type,
name: hotKeyDesktopLyric.toggle_lock.name,
action: hotKeyDesktopLyric.toggle_lock.action,
},
'mod+alt+=': {
type: hotKeyDesktopLyric.toggle_always_top.type,
name: hotKeyDesktopLyric.toggle_always_top.name,
action: hotKeyDesktopLyric.toggle_always_top.action,
},
},
},
}

View File

@@ -0,0 +1,93 @@
import { HOTKEY_PLAYER, HOTKEY_COMMON, HOTKEY_DESKTOP_LYRIC } from './hotKey'
const local: LX.HotKeyConfig = {
enable: true,
keys: {
'mod+f5': {
type: HOTKEY_PLAYER.toggle_play.type,
name: HOTKEY_PLAYER.toggle_play.name,
action: HOTKEY_PLAYER.toggle_play.action,
},
'mod+arrowleft': {
type: HOTKEY_PLAYER.prev.type,
name: HOTKEY_PLAYER.prev.name,
action: HOTKEY_PLAYER.prev.action,
},
'mod+arrowright': {
type: HOTKEY_PLAYER.next.type,
name: HOTKEY_PLAYER.next.name,
action: HOTKEY_PLAYER.next.action,
},
f1: {
type: HOTKEY_COMMON.focusSearchInput.type,
name: HOTKEY_COMMON.focusSearchInput.name,
action: HOTKEY_COMMON.focusSearchInput.action,
},
},
}
const global: LX.HotKeyConfig = {
enable: false,
keys: {
// MediaPlayPause: {
// type: HOTKEY_PLAYER.toggle_play.type,
// name: '',
// action: HOTKEY_PLAYER.toggle_play.action,
// },
// MediaPreviousTrack: {
// type: HOTKEY_PLAYER.prev.type,
// name: '',
// action: HOTKEY_PLAYER.prev.action,
// },
// MediaNextTrack: {
// type: HOTKEY_PLAYER.next.type,
// name: '',
// action: HOTKEY_PLAYER.next.action,
// },
'mod+alt+f5': {
type: HOTKEY_PLAYER.toggle_play.type,
name: HOTKEY_PLAYER.toggle_play.name,
action: HOTKEY_PLAYER.toggle_play.action,
},
'mod+alt+arrowleft': {
type: HOTKEY_PLAYER.prev.type,
name: HOTKEY_PLAYER.prev.name,
action: HOTKEY_PLAYER.prev.action,
},
'mod+alt+arrowright': {
type: HOTKEY_PLAYER.next.type,
name: HOTKEY_PLAYER.next.name,
action: HOTKEY_PLAYER.next.action,
},
'mod+alt+arrowup': {
type: HOTKEY_PLAYER.volume_up.type,
name: HOTKEY_PLAYER.volume_up.name,
action: HOTKEY_PLAYER.volume_up.action,
},
'mod+alt+arrowdown': {
type: HOTKEY_PLAYER.volume_down.type,
name: HOTKEY_PLAYER.volume_down.name,
action: HOTKEY_PLAYER.volume_down.action,
},
'mod+alt+0': {
type: HOTKEY_DESKTOP_LYRIC.toggle_visible.type,
name: HOTKEY_DESKTOP_LYRIC.toggle_visible.name,
action: HOTKEY_DESKTOP_LYRIC.toggle_visible.action,
},
'mod+alt+-': {
type: HOTKEY_DESKTOP_LYRIC.toggle_lock.type,
name: HOTKEY_DESKTOP_LYRIC.toggle_lock.name,
action: HOTKEY_DESKTOP_LYRIC.toggle_lock.action,
},
'mod+alt+=': {
type: HOTKEY_DESKTOP_LYRIC.toggle_always_top.type,
name: HOTKEY_DESKTOP_LYRIC.toggle_always_top.name,
action: HOTKEY_DESKTOP_LYRIC.toggle_always_top.action,
},
},
}
export default {
local,
global,
}

View File

@@ -1,106 +0,0 @@
const path = require('path')
const os = require('os')
const defaultSetting = {
version: '1.0.38',
player: {
togglePlayMethod: 'listLoop',
highQuality: false,
isShowTaskProgess: true,
volume: 1,
isMute: false,
mediaDeviceId: 'default',
isMediaDeviceRemovedStopPlay: false,
isShowLyricTransition: true,
},
desktopLyric: {
enable: false,
isLock: false,
isAlwaysOnTop: false,
width: 380,
height: 420,
x: null,
y: null,
theme: 0,
isLockScreen: true,
style: {
fontSize: 120,
opacity: 95,
isZoomActiveLrc: true,
},
},
list: {
isShowAlbumName: true,
isShowSource: true,
prevSelectListId: 'default',
isSaveScrollLocation: true,
},
download: {
enable: false,
savePath: path.join(os.homedir(), 'Desktop'),
fileName: '歌名 - 歌手',
maxDownloadNum: 3,
isDownloadLrc: false,
isEmbedPic: true,
isEmbedLyric: false,
},
leaderboard: {
source: 'kw',
tabId: 'kw__16',
},
songList: {
source: 'kg',
sortId: '5',
tagInfo: {
name: '默认',
id: null,
},
},
odc: {
isAutoClearSearchInput: false,
isAutoClearSearchList: false,
},
search: {
searchSource: 'all',
tempSearchSource: 'kw',
isShowHotSearch: false,
isShowHistorySearch: false,
isFocusSearchBox: false,
},
network: {
proxy: {
enable: false,
host: '',
port: '',
username: '',
password: '',
},
},
tray: {
isShow: false,
isToTray: false,
themeId: 0,
},
windowSizeId: 2,
themeId: 0,
langId: null,
sourceId: 'kw',
apiSource: 'temp',
sourceNameType: 'alias',
isShowAnimation: true,
randomAnimate: true,
ignoreVersion: null,
isAgreePact: false,
controlBtnPosition: process.platform === 'darwin' ? 'left' : 'right',
}
const overwriteSetting = {
}
// 使用新年皮肤
if (new Date().getMonth() < 2) defaultSetting.themeId = 9
exports.defaultSetting = defaultSetting
exports.overwriteSetting = overwriteSetting

View File

@@ -0,0 +1,156 @@
import { join } from 'path'
import { homedir } from 'os'
const isMac = process.platform == 'darwin'
const isWin = process.platform == 'win32'
const defaultSetting: LX.AppSetting = {
version: '2.1.0',
'common.windowSizeId': 3,
'common.fontSize': 16,
'common.startInFullscreen': false,
'common.langId': null,
'common.apiSource': 'temp',
'common.sourceNameType': 'alias',
'common.font': '',
'common.isShowAnimation': true,
'common.randomAnimate': true,
'common.isAgreePact': false,
'common.controlBtnPosition': isMac ? 'left' : 'right',
'common.playBarProgressStyle': 'mini',
'common.tryAutoUpdate': true,
'common.showChangeLog': true,
'player.startupAutoPlay': false,
'player.togglePlayMethod': 'listLoop',
'player.highQuality': false,
'player.isShowTaskProgess': true,
'player.volume': 1,
'player.isMute': false,
'player.playbackRate': 1,
'player.mediaDeviceId': 'default',
'player.isMediaDeviceRemovedStopPlay': false,
'player.isShowLyricTranslation': false,
'player.isShowLyricRoma': false,
'player.isS2t': false,
'player.isPlayLxlrc': isWin,
'player.isSavePlayTime': false,
'player.audioVisualization': false,
'player.waitPlayEndStop': true,
'player.waitPlayEndStopTime': '',
'player.autoSkipOnError': true,
'player.soundEffect.convolution.fileName': '',
'player.soundEffect.convolution.mainGain': 10,
'player.soundEffect.convolution.sendGain': 0,
'player.soundEffect.biquadFilter.hz31': 0,
'player.soundEffect.biquadFilter.hz62': 0,
'player.soundEffect.biquadFilter.hz125': 0,
'player.soundEffect.biquadFilter.hz250': 0,
'player.soundEffect.biquadFilter.hz500': 0,
'player.soundEffect.biquadFilter.hz1000': 0,
'player.soundEffect.biquadFilter.hz2000': 0,
'player.soundEffect.biquadFilter.hz4000': 0,
'player.soundEffect.biquadFilter.hz8000': 0,
'player.soundEffect.biquadFilter.hz16000': 0,
'player.soundEffect.panner.enable': false,
'player.soundEffect.panner.soundR': 5,
'player.soundEffect.panner.speed': 25,
'playDetail.isZoomActiveLrc': false,
'playDetail.isShowLyricProgressSetting': false,
'playDetail.style.fontSize': 100,
'playDetail.style.align': 'center',
'desktopLyric.enable': false,
'desktopLyric.isLock': false,
'desktopLyric.isAlwaysOnTop': false,
'desktopLyric.isAlwaysOnTopLoop': false,
'desktopLyric.isShowTaskbar': false,
'desktopLyric.audioVisualization': false,
'desktopLyric.fullscreenHide': true,
'desktopLyric.width': 450,
'desktopLyric.height': 300,
'desktopLyric.x': null,
'desktopLyric.y': null,
'desktopLyric.isLockScreen': true,
'desktopLyric.isDelayScroll': true,
'desktopLyric.scrollAlign': 'center',
'desktopLyric.isHoverHide': false,
'desktopLyric.direction': 'horizontal',
'desktopLyric.style.align': 'center',
'desktopLyric.style.font': '',
'desktopLyric.style.fontSize': 20,
'desktopLyric.style.lineGap': 15,
'desktopLyric.style.lyricUnplayColor': 'rgba(255, 255, 255, 1)',
'desktopLyric.style.lyricPlayedColor': 'rgba(7, 197, 86, 1)',
'desktopLyric.style.lyricShadowColor': 'rgba(0, 0, 0, 0.18)',
// 'desktopLyric.style.fontWeight': false,
'desktopLyric.style.opacity': 95,
'desktopLyric.style.ellipsis': false,
'desktopLyric.style.isZoomActiveLrc': false,
'desktopLyric.style.isFontWeightFont': true,
'desktopLyric.style.isFontWeightLine': true,
'desktopLyric.style.isFontWeightExtended': true,
'list.isClickPlayList': false,
'list.isShowSource': true,
'list.isSaveScrollLocation': true,
'list.addMusicLocationType': 'top',
'list.actionButtonsVisible': false,
'download.enable': false,
'download.savePath': join(homedir(), 'Desktop'),
'download.fileName': '歌名 - 歌手',
'download.maxDownloadNum': 3,
'download.skipExistFile': true,
'download.isDownloadLrc': false,
'download.isDownloadTLrc': false,
'download.isDownloadRLrc': false,
'download.lrcFormat': 'utf8',
'download.isEmbedPic': true,
'download.isEmbedLyric': false,
'download.isEmbedLyricT': false,
'download.isEmbedLyricR': false,
'download.isUseOtherSource': false,
'search.isShowHotSearch': false,
'search.isShowHistorySearch': false,
'search.isFocusSearchBox': false,
'network.proxy.enable': false,
'network.proxy.host': '',
'network.proxy.port': '',
'network.proxy.username': '',
'network.proxy.password': '',
'tray.enable': false,
// 'tray.isToTray': false,
'tray.themeId': 0,
'sync.mode': 'server',
'sync.enable': false,
'sync.server.port': '23332',
'sync.server.maxSsnapshotNum': 5,
'sync.client.host': '',
'theme.id': 'blue_plus',
// 'theme.id': 'green',
'theme.lightId': 'green',
'theme.darkId': 'black',
'odc.isAutoClearSearchInput': false,
'odc.isAutoClearSearchList': false,
}
// 使用新年皮肤
if (new Date().getMonth() < 2) {
defaultSetting['theme.id'] = 'happy_new_year'
defaultSetting['desktopLyric.style.lyricPlayedColor'] = 'rgba(255, 57, 71, 1)'
}
export default defaultSetting

View File

@@ -1,6 +1,12 @@
const { log } = require('./utils')
import { log } from './utils'
process.on('uncaughtException', function(err) {
const ignoreErrorMessage = [
'Possible side-effect in debug-evaluate',
'Unexpected end of input',
]
process.on('uncaughtException', err => {
if (ignoreErrorMessage.includes(err.message)) return
console.error('An uncaught error occurred!')
console.error(err)
log.error(err)

View File

@@ -1,83 +1,101 @@
const names = require('@main/events/_name')
import { APP_EVENT_NAMES } from './constants'
const keyName = {
common: APP_EVENT_NAMES.winMainName,
player: APP_EVENT_NAMES.winMainName,
desktop_lyric: APP_EVENT_NAMES.winLyricName,
}
const hotKey = {
common: {
min: {
name: 'min',
action: 'min',
type: '',
},
min_toggle: {
name: 'toggle_min',
action: 'toggle_min',
type: '',
},
hide_toggle: {
name: 'toggle_hide',
action: 'toggle_hide',
type: '',
},
close: {
name: 'toggle_close',
action: 'toggle_close',
type: '',
},
focusSearchInput: {
name: 'focus_search_input',
action: 'focus_search_input',
type: '',
},
},
player: {
toggle_play: {
name: 'toggle_play',
action: 'toggle_play',
type: '',
},
next: {
name: 'next',
action: 'next',
type: '',
},
prev: {
name: 'prev',
action: 'prev',
type: '',
},
volume_up: {
name: 'volume_up',
action: 'volume_up',
type: '',
},
volume_down: {
name: 'volume_down',
action: 'volume_down',
type: '',
},
volume_mute: {
name: 'volume_mute',
action: 'volume_mute',
type: '',
},
},
desktop_lyric: {
toggle_visible: {
name: 'toggle_visible',
action: 'toggle_visible',
type: '',
},
toggle_lock: {
name: 'toggle_lock',
action: 'toggle_lock',
type: '',
},
toggle_always_top: {
name: 'toggle_always_top',
action: 'toggle_always_top',
type: '',
},
},
}
const keyName = {
player: names.mainWindow.name,
desktop_lyric: names.winLyric.name,
}
for (const type of Object.keys(hotKey)) {
let item = hotKey[type]
for (const key of Object.keys(item)) {
item[key].action = `${type}_${item[key].action}`
item[key].name = `${type}_${item[key].name}`
item[key].type = keyName[type]
for (const type of Object.keys(hotKey) as Array<keyof typeof hotKey>) {
let keys = hotKey[type]
for (const key of Object.keys(keys) as Array<keyof typeof keys>) {
const keyInfo: LX.HotKey = keys[key]
keyInfo.action = `${type}_${keyInfo.action}`
keyInfo.name = `${type}_${keyInfo.name}`
keyInfo.type = keyName[type] as keyof typeof hotKey
}
}
exports.common = hotKey.common
exports.player = hotKey.player
exports.desktop_lyric = hotKey.desktop_lyric
export const HOTKEY_COMMON = hotKey.common
export const HOTKEY_PLAYER = hotKey.player
export const HOTKEY_DESKTOP_LYRIC = hotKey.desktop_lyric

View File

@@ -1,37 +0,0 @@
const { ipcMain, ipcRenderer } = require('electron')
const names = require('./ipcNames')
exports.mainOn = (event, callback) => {
ipcMain.on(event, callback)
}
exports.mainOnce = (event, callback) => {
ipcMain.once(event, callback)
}
exports.mainHandle = (name, callback) => {
ipcMain.handle(name, callback)
}
exports.mainHandleOnce = (name, callback) => {
ipcMain.handleOnce(name, callback)
}
exports.mainSend = (window, name, params) => {
window.webContents.send(name, params)
}
exports.rendererSend = (name, params) => {
ipcRenderer.send(name, params)
}
exports.rendererSendSync = (name, params) => ipcRenderer.sendSync(name, params)
exports.rendererInvoke = (name, params) => ipcRenderer.invoke(name, params)
exports.rendererOn = (name, callback) => {
ipcRenderer.on(name, callback)
}
exports.rendererOnce = (name, callback) => {
ipcRenderer.once(name, callback)
}
exports.NAMES = names

View File

@@ -1,79 +0,0 @@
const names = {
mainWindow: {
focus: 'focus',
close: 'close',
min: 'min',
max: 'max',
set_app_name: 'set_app_name',
clear_cache: 'clear_cache',
get_cache_size: 'get_cache_size',
get_env_params: 'get_env_params',
set_music_meta: 'set_music_meta',
progress: 'progress',
change_tray: 'change_tray',
quit_update: 'quit_update',
update_available: 'update_available',
update_error: 'update_error',
update_progress: 'update_progress',
update_downloaded: 'update_downloaded',
update_not_available: 'update_not_available',
set_ignore_mouse_events: 'set_ignore_mouse_events',
set_app_setting: 'set_app_setting',
set_window_size: 'set_window_size',
show_save_dialog: 'show_save_dialog',
handle_request: 'handle_request',
cancel_request: 'cancel_request',
handle_xm_verify_open: 'handle_xm_verify_open',
handle_xm_verify_close: 'handle_xm_verify_close',
select_dir: 'select_dir',
restart_window: 'restart_window',
handle_kw_decode_lyric: 'handle_kw_decode_lyric',
get_lyric_info: 'get_lyric_info',
set_lyric_info: 'set_lyric_info',
set_config: 'set_config',
set_hot_key_config: 'set_hot_key_config',
key_down: 'key_down',
quit: 'quit',
min_toggle: 'min_toggle',
hide_toggle: 'hide_toggle',
get_data_path: 'get_data_path',
show_dialog: 'show_dialog',
get_setting: 'get_setting',
get_playlist: 'get_playlist',
save_playlist: 'save_playlist',
get_data: 'get_data',
save_data: 'save_data',
get_hot_key: 'get_hot_key',
},
winLyric: {
close: 'close',
set_lyric_info: 'set_lyric_info',
get_lyric_info: 'get_lyric_info',
set_lyric_config: 'set_lyric_config',
get_lyric_config: 'get_lyric_config',
set_win_bounds: 'set_win_bounds',
key_down: 'key_down',
},
hotKey: {
enable: 'enable',
status: 'status',
set_config: 'set_config',
},
}
for (const item of Object.keys(names)) {
let name = names[item]
for (const key of Object.keys(name)) {
name[key] = `${item}_${name[key]}`
}
}
exports.mainWindow = names.mainWindow
exports.winLyric = names.winLyric
exports.hotKey = names.hotKey

183
src/common/ipcNames.ts Normal file
View File

@@ -0,0 +1,183 @@
const modules = {
common: {
get_env_params: 'get_env_params',
deeplink: 'deeplink',
clear_env_params_deeplink: 'clear_env_params_deeplink',
system_theme_change: 'system_theme_change',
theme_change: 'theme_change',
get_system_fonts: 'get_system_fonts',
get_app_setting: 'get_app_setting',
set_app_setting: 'set_app_setting',
},
player: {
invoke_play_music: 'play_music',
invoke_play_next: 'play_next',
invoke_play_prev: 'play_prev',
invoke_toggle_play: 'toggle_play',
player_play: 'player_play',
player_pause: 'player_pause',
player_stop: 'player_stop',
player_error: 'player_error',
list_data_overwire: 'list_data_overwire',
list_get: 'list_get',
list_add: 'list_add',
list_remove: 'list_remove',
list_update: 'list_update',
list_update_position: 'list_update_position',
list_music_get: 'list_music_get',
list_music_add: 'list_music_add',
list_music_move: 'list_music_move',
list_music_remove: 'list_music_remove',
list_music_update: 'list_music_update',
list_music_update_position: 'list_music_update_position',
list_music_overwrite: 'list_music_overwrite',
list_music_clear: 'list_music_clear',
list_music_check_exist: 'list_music_check_exist',
list_music_get_list_ids: 'list_music_get_list_ids',
},
winMain: {
focus: 'focus',
close: 'close',
min: 'min',
max: 'max',
fullscreen: 'fullscreen',
set_app_name: 'set_app_name',
clear_cache: 'clear_cache',
get_cache_size: 'get_cache_size',
inited: 'inited',
show_save_dialog: 'show_save_dialog',
show_select_dialog: 'show_select_dialog',
show_dialog: 'show_dialog',
open_dev_tools: 'open_dev_tools',
progress: 'progress',
change_tray: 'change_tray',
quit_update: 'quit_update',
update_check: 'update_check',
update_download_update: 'update_download_update',
update_available: 'update_available',
update_error: 'update_error',
update_progress: 'update_progress',
update_downloaded: 'update_downloaded',
update_not_available: 'update_not_available',
set_ignore_mouse_events: 'set_ignore_mouse_events',
set_window_size: 'set_window_size',
handle_request: 'handle_request',
cancel_request: 'cancel_request',
restart_window: 'restart_window',
// lang_s2t: 'lang_s2t',
handle_kw_decode_lyric: 'handle_kw_decode_lyric',
handle_tx_decode_lyric: 'handle_tx_decode_lyric',
get_lyric_info: 'get_lyric_info',
set_lyric_info: 'set_lyric_info',
set_config: 'set_config',
set_hot_key_config: 'set_hot_key_config',
on_config_change: 'on_config_change',
key_down: 'key_down',
quit: 'quit',
min_toggle: 'min_toggle',
hide_toggle: 'hide_toggle',
get_other_source: 'get_other_source',
save_other_source: 'save_other_source',
clear_other_source: 'clear_other_source',
get_other_source_count: 'get_other_source_count',
get_data: 'get_data',
save_data: 'save_data',
get_sound_effect_eq_preset: 'get_sound_effect_eq_preset',
save_sound_effect_eq_preset: 'save_sound_effect_eq_preset',
get_sound_effect_convolution_preset: 'get_sound_effect_convolution_preset',
save_sound_effect_convolution_preset: 'save_sound_effect_convolution_preset',
get_hot_key: 'get_hot_key',
import_user_api: 'import_user_api',
remove_user_api: 'remove_user_api',
set_user_api: 'set_user_api',
get_user_api_list: 'get_user_api_list',
request_user_api: 'request_user_api',
request_user_api_cancel: 'request_user_api_cancel',
get_user_api_status: 'get_user_api_status',
user_api_status: 'user_api_status',
user_api_show_update_alert: 'user_api_show_update_alert',
user_api_set_allow_update_alert: 'user_api_set_allow_update_alert',
get_palyer_lyric: 'get_lyric',
// save_lyric: 'save_lyric',
// clear_lyric: 'clear_lyric',
get_lyric_raw: 'get_lyric_raw',
save_lyric_raw: 'save_lyric_raw',
clear_lyric_raw: 'clear_lyric_raw',
get_lyric_raw_count: 'get_lyric_raw_count',
get_lyric_edited: 'get_lyric_edited',
save_lyric_edited: 'save_lyric_edited',
remove_lyric_edited: 'remove_lyric_edited',
clear_lyric_edited: 'clear_lyric_edited',
get_lyric_edited_count: 'get_lyric_edited_count',
get_music_url: 'get_music_url',
save_music_url: 'save_music_url',
clear_music_url: 'clear_music_url',
get_music_url_count: 'get_music_url_count',
sync_action: 'sync_action',
process_new_desktop_lyric_client: 'process_new_desktop_lyric_client',
player_action_set_buttons: 'player_action_set_buttons',
// player_action_set_thumbnail_clip: 'player_action_set_thumbnail_clip',
player_action_on_button_click: 'player_action_on_button_click',
get_themes: 'get_themes',
save_theme: 'save_theme',
remove_theme: 'remove_theme',
download_list_get: 'download_list_get',
download_list_add: 'download_list_add',
download_list_update: 'download_list_update',
download_list_remove: 'download_list_remove',
download_list_clear: 'download_list_clear',
},
winLyric: {
close: 'close',
set_config: 'set_config',
get_config: 'get_config',
on_config_change: 'on_config_change',
main_window_inited: 'main_window_inited',
set_win_bounds: 'set_win_bounds',
key_down: 'key_down',
request_main_window_channel: 'request_main_window_channel',
provide_main_window_channel: 'provide_main_window_channel',
},
hotKey: {
enable: 'enable',
status: 'status',
set_config: 'set_config',
},
}
for (const moduleName of Object.keys(modules) as Array<keyof typeof modules>) {
let eventNames = modules[moduleName]
for (const eventName of Object.keys(eventNames) as Array<keyof typeof eventNames>) {
eventNames[eventName] = `${moduleName}_${eventName as string}` as never
}
}
// for (const moduleName of Object.keys(modules) as Array<keyof typeof modules>) {
// let eventNames = modules[moduleName]
// for (const eventName of Object.keys(eventNames)) {
// eventNames[eventName] = `${moduleName}_${eventName}`
// }
// }
export const CMMON_EVENT_NAME = modules.common
export const PLAYER_EVENT_NAME = modules.player
export const WIN_MAIN_RENDERER_EVENT_NAME = modules.winMain
export const WIN_LYRIC_RENDERER_EVENT_NAME = modules.winLyric
export const HOTKEY_RENDERER_EVENT_NAME = modules.hotKey

54
src/common/mainIpc.ts Normal file
View File

@@ -0,0 +1,54 @@
import { ipcMain } from 'electron'
export function mainOn(name: string, listener: LX.IpcMainEventListener): void
export function mainOn<T>(name: string, listener: LX.IpcMainEventListenerParams<T>): void
export function mainOn<T>(name: string, listener: LX.IpcMainEventListenerParams<T>): void {
ipcMain.on(name, (event, params) => {
listener({ event, params })
})
}
export function mainOnce(name: string, listener: LX.IpcMainEventListener): void
export function mainOnce<T>(name: string, listener: LX.IpcMainEventListenerParams<T>): void
export function mainOnce<T>(name: string, listener: LX.IpcMainEventListenerParams<T>): void {
ipcMain.once(name, (event, params) => {
listener({ event, params })
})
}
export const mainOff = (name: string, listener: (...args: any[]) => void) => {
ipcMain.removeListener(name, listener)
}
export const mainOffAll = (name: string) => {
ipcMain.removeAllListeners(name)
}
export function mainHandle(name: string, listener: LX.IpcMainInvokeEventListener): void
export function mainHandle<T>(name: string, listener: LX.IpcMainInvokeEventListenerParams<T>): void
export function mainHandle<V>(name: string, listener: LX.IpcMainInvokeEventListenerValue<V>): void
export function mainHandle<T, V>(name: string, listener: LX.IpcMainInvokeEventListenerParamsValue<T, V>): void
export function mainHandle<T, V>(name: string, listener: LX.IpcMainInvokeEventListenerParamsValue<T, V>): void {
ipcMain.handle(name, async(event, params) => {
return await listener({ event, params })
})
}
export function mainHandleOnce(name: string, listener: LX.IpcMainInvokeEventListener): void
export function mainHandleOnce<T>(name: string, listener: LX.IpcMainInvokeEventListenerParams<T>): void
export function mainHandleOnce<V>(name: string, listener: LX.IpcMainInvokeEventListenerValue<V>): void
export function mainHandleOnce<T, V>(name: string, listener: LX.IpcMainInvokeEventListenerParamsValue<T, V>): void
export function mainHandleOnce<T, V>(name: string, listener: LX.IpcMainInvokeEventListenerParamsValue<T, V>): void {
ipcMain.handleOnce(name, async(event, params) => {
return await listener({ event, params })
})
}
export const mainHandleRemove = (name: string) => {
ipcMain.removeHandler(name)
}
export function mainSend(window: Electron.BrowserWindow, name: string): void
export function mainSend<T>(window: Electron.BrowserWindow, name: string, params: T): void
export function mainSend<T>(window: Electron.BrowserWindow, name: string, params?: T): void {
window.webContents.send(name, params)
}

45
src/common/rendererIpc.ts Normal file
View File

@@ -0,0 +1,45 @@
import { ipcRenderer } from 'electron'
export function rendererSend(name: string): void
export function rendererSend<T>(name: string, params: T): void
export function rendererSend<T>(name: string, params?: T): void {
ipcRenderer.send(name, params)
}
export function rendererSendSync(name: string): void
export function rendererSendSync<T>(name: string, params: T): void
export function rendererSendSync<T>(name: string, params?: T): void {
ipcRenderer.sendSync(name, params)
}
export async function rendererInvoke(name: string): Promise<void>
export async function rendererInvoke<V>(name: string): Promise<V>
export async function rendererInvoke<T>(name: string, params: T): Promise<void>
export async function rendererInvoke<T, V>(name: string, params: T): Promise<V>
export async function rendererInvoke <T, V>(name: string, params?: T): Promise<V> {
return await ipcRenderer.invoke(name, params)
}
export function rendererOn(name: string, listener: LX.IpcRendererEventListener): void
export function rendererOn<T>(name: string, listener: LX.IpcRendererEventListenerParams<T>): void
export function rendererOn<T>(name: string, listener: LX.IpcRendererEventListenerParams<T>): void {
ipcRenderer.on(name, (event, params) => {
listener({ event, params })
})
}
export function rendererOnce(name: string, listener: LX.IpcRendererEventListener): void
export function rendererOnce<T>(name: string, listener: LX.IpcRendererEventListenerParams<T>): void
export function rendererOnce<T>(name: string, listener: LX.IpcRendererEventListenerParams<T>): void {
ipcRenderer.once(name, (event, params) => {
listener({ event, params })
})
}
export const rendererOff = (name: string, listener: (...args: any[]) => any) => {
ipcRenderer.removeListener(name, listener)
}
export const rendererOffAll = (name: string) => {
ipcRenderer.removeAllListeners(name)
}

View File

@@ -0,0 +1,73 @@
/* eslint-disable */
// https://github.com/PimpTrizkit/PJs/wiki/12.-Shade,-Blend-and-Convert-a-Web-Color-(pSBC.js)#micro-functions-version-4
/**
* Blend color (Lighten or Darken)
* @param {number} p 混合百分比 范围 0.0 - 1.0
* @param {string} c0 rgb(a) color1
* @param {string} c1 rgb(a) color2
* @returns color
*/
exports.RGB_Linear_Blend=(p,c0,c1)=>{
var i=parseInt,r=Math.round,P=1-p,[a,b,c,d]=c0.split(","),[e,f,g,h]=c1.split(","),x=d||h,j=x?","+(!d?h:!h?d:r((parseFloat(d)*P+parseFloat(h)*p)*1000)/1000+")"):")";
return"rgb"+(x?"a(":"(")+r(i(a[3]=="a"?a.slice(5):a.slice(4))*P+i(e[3]=="a"?e.slice(5):e.slice(4))*p)+","+r(i(b)*P+i(f)*p)+","+r(i(c)*P+i(g)*p)+j;
}
/**
* Blend color (Lighten or Darken)
* @param {number} p 混合百分比 范围 0.0 - 1.0
* @param {string} c0 rgb(a) color1
* @param {string} c1 rgb(a) color2
* @returns color
*/
exports.RGB_Log_Blend=(p,c0,c1)=>{
var i=parseInt,r=Math.round,P=1-p,[a,b,c,d]=c0.split(","),[e,f,g,h]=c1.split(","),x=d||h,j=x?","+(!d?h:!h?d:r((parseFloat(d)*P+parseFloat(h)*p)*1000)/1000+")"):")";
return"rgb"+(x?"a(":"(")+r((P*i(a[3]=="a"?a.slice(5):a.slice(4))**2+p*i(e[3]=="a"?e.slice(5):e.slice(4))**2)**0.5)+","+r((P*i(b)**2+p*i(f)**2)**0.5)+","+r((P*i(c)**2+p*i(g)**2)**0.5)+j;
}
/**
* Shade color (Lighten or Darken)
* @param {number} p Shade 百分比范围为 -1.0 - 1.0 负为黑色,正为白色
* @param {string} c0 rgb(a) color
* @returns color
*/
exports.RGB_Linear_Shade=(p,c0)=>{
var i=parseInt,r=Math.round,[a,b,c,d]=c0.split(","),n=p<0,t=n?0:255*p,P=n?1+p:1-p;
return"rgb"+(d?"a(":"(")+r(i(a[3]=="a"?a.slice(5):a.slice(4))*P+t)+","+r(i(b)*P+t)+","+r(i(c)*P+t)+(d?","+d:")");
}
/**
* Shade color (Lighten or Darken)
* @param {number} p Shade 百分比范围为 -1.0 - 1.0 负为黑色,正为白色
* @param {string} c0 rgb(a) color
* @returns color
*/
exports.RGB_Log_Shade=(p,c0)=>{
var i=parseInt,r=Math.round,[a,b,c,d]=c0.split(","),n=p<0,t=n?0:p*255**2,P=n?1+p:1-p;
return"rgb"+(d?"a(":"(")+r((P*i(a[3]=="a"?a.slice(5):a.slice(4))**2+t)**0.5)+","+r((P*i(b)**2+t)**0.5)+","+r((P*i(c)**2+t)**0.5)+(d?","+d:")");
}
/**
* 修改透明度
* @param {number} p 透明度 -1.0 - 1.0
* @param {string} color
* @returns color
*/
exports.RGB_Alpha_Shade = (p, color) => {
var i = parseInt
var n = p < 0
var [r, g, b, a] = color.split(",")
r = r[3] == 'a' ? r.slice(5) : r.slice(4)
if (a) {
a = parseFloat(a)
a = a - (n ? (1 - a) * p : a * p)
a = n ? Math.max(0, a) : Math.min(1, a)
} else {
a = 1 - p
a = Math.min(1, a)
}
return `rgba(${i(r)}, ${i(g)}, ${i(b)}, ${a.toFixed(2)})`
}

View File

@@ -0,0 +1,369 @@
//! 更新默认主题配置后,需要执行 npm run build:theme 重新构建index.json
const fs = require('fs')
const path = require('path')
const { createThemeColors } = require('./utils')
const defaultThemes = [
{
id: 'green',
name: '绿意盎然',
isDark: false,
config: {
primary: 'rgb(77, 175, 124)',
font: 'rgb(33, 33, 33)',
'--color-app-background': 'var(--color-primary-light-600-alpha-700)',
'--color-main-background': 'rgba(255, 255, 255, 1)',
'--color-nav-font': 'var(--color-primary)',
'--background-image': 'none',
'--background-image-position': 'center',
'--background-image-size': 'cover',
'--color-btn-hide': '#3bc2b2',
'--color-btn-min': '#85c43b',
'--color-btn-close': '#fab4a0',
'--color-badge-primary': 'var(--color-primary)',
'--color-badge-secondary': '#4baed5',
'--color-badge-tertiary': '#e7aa36',
},
},
{
id: 'blue',
name: '蓝田生玉',
isDark: false,
config: {
primary: 'rgb(52, 152, 219)',
font: 'rgb(33, 33, 33)',
'--color-app-background': 'var(--color-primary-light-600-alpha-700)',
'--color-main-background': 'rgba(255, 255, 255, 1)',
'--color-nav-font': 'var(--color-primary)',
'--background-image': 'none',
'--background-image-position': 'center',
'--background-image-size': 'cover',
'--color-btn-hide': '#3bc2b2',
'--color-btn-min': '#85c43b',
'--color-btn-close': '#fab4a0',
'--color-badge-primary': 'var(--color-primary)',
'--color-badge-secondary': '#5cbf9b',
'--color-badge-tertiary': '#5cbf9b',
},
},
{
id: 'blue_plus',
name: '蛋雅深蓝',
isDark: false,
config: {
primary: 'rgb(77, 131, 175)',
font: 'rgb(33, 33, 33)',
'--color-app-background': 'var(--color-primary-light-600-alpha-600)',
'--color-main-background': 'rgba(255, 255, 255, 1)',
'--color-nav-font': 'var(--color-primary)',
'--background-image': 'none',
'--background-image-position': 'center',
'--background-image-size': 'cover',
'--color-btn-hide': '#3bc2b2',
'--color-btn-min': '#85c43b',
'--color-btn-close': '#fab4a0',
'--color-badge-primary': 'var(--color-primary)',
'--color-badge-secondary': 'rgba(66.6, 150.7, 171, 1)',
'--color-badge-tertiary': 'rgba(54, 196, 231, 1)',
},
},
{
id: 'orange',
name: '橙黄橘绿',
isDark: false,
config: {
primary: 'rgb(245, 171, 53)',
font: 'rgb(33, 33, 33)',
'--color-app-background': 'var(--color-primary-light-600-alpha-700)',
'--color-main-background': 'rgba(255, 255, 255, 1)',
'--color-nav-font': 'var(--color-primary)',
'--background-image': 'none',
'--background-image-position': 'center',
'--background-image-size': 'cover',
'--color-btn-hide': '#3bc2b2',
'--color-btn-min': '#85c43b',
'--color-btn-close': '#fab4a0',
'--color-badge-primary': 'var(--color-primary)',
'--color-badge-secondary': '#9ed458',
'--color-badge-tertiary': '#9ed458',
},
},
{
id: 'red',
name: '热情似火',
isDark: false,
config: {
primary: 'rgb(214, 69, 65)',
font: 'rgb(33, 33, 33)',
'--color-app-background': 'var(--color-primary-light-600-alpha-700)',
'--color-main-background': 'rgba(255, 255, 255, 1)',
'--color-nav-font': 'var(--color-primary)',
'--background-image': 'none',
'--background-image-position': 'center',
'--background-image-size': 'cover',
'--color-btn-hide': '#3bc2b2',
'--color-btn-min': '#85c43b',
'--color-btn-close': '#fab4a0',
'--color-badge-primary': 'var(--color-primary)',
'--color-badge-secondary': '#dfbb6b',
'--color-badge-tertiary': '#dfbb6b',
},
},
{
id: 'pink',
name: '粉装玉琢',
isDark: false,
config: {
primary: 'rgb(241, 130, 141)',
font: 'rgb(33, 33, 33)',
'--color-app-background': 'var(--color-primary-light-600-alpha-700)',
'--color-main-background': 'rgba(255, 255, 255, 1)',
'--color-nav-font': 'var(--color-primary)',
'--background-image': 'none',
'--background-image-position': 'center',
'--background-image-size': 'cover',
'--color-btn-hide': '#3bc2b2',
'--color-btn-min': '#85c43b',
'--color-btn-close': '#fab4a0',
'--color-badge-primary': 'var(--color-primary)',
'--color-badge-secondary': '#f5b684',
'--color-badge-tertiary': '#f5b684',
},
},
{
id: 'purple',
name: '重斤球紫',
isDark: false,
config: {
primary: 'rgb(155, 89, 182)',
font: 'rgb(33, 33, 33)',
'--color-app-background': 'var(--color-primary-light-600-alpha-700)',
'--color-main-background': 'rgba(255, 255, 255, 1)',
'--color-nav-font': 'var(--color-primary)',
'--background-image': 'none',
'--background-image-position': 'center',
'--background-image-size': 'cover',
'--color-btn-hide': '#3bc2b2',
'--color-btn-min': '#85c43b',
'--color-btn-close': '#fab4a0',
'--color-badge-primary': 'var(--color-primary)',
'--color-badge-secondary': '#e5a39f',
'--color-badge-tertiary': '#e5a39f',
},
},
{
id: 'grey',
name: '灰常美丽',
isDark: false,
config: {
primary: 'rgb(108, 122, 137)',
font: 'rgb(33, 33, 33)',
'--color-app-background': 'var(--color-primary-light-600-alpha-700)',
'--color-main-background': 'rgba(255, 255, 255, 1)',
'--color-nav-font': 'var(--color-primary)',
'--background-image': 'none',
'--background-image-position': 'center',
'--background-image-size': 'cover',
'--color-btn-hide': '#3bc2b2',
'--color-btn-min': '#85c43b',
'--color-btn-close': '#fab4a0',
'--color-badge-primary': 'var(--color-primary)',
'--color-badge-secondary': '#b19b9f',
'--color-badge-tertiary': '#b19b9f',
},
},
{
id: 'ming',
name: '青出于黑',
isDark: false,
config: {
primary: 'rgb(51, 110, 123)',
font: 'rgb(33, 33, 33)',
'--color-app-background': 'var(--color-primary-light-600-alpha-700)',
'--color-main-background': 'rgba(255, 255, 255, 1)',
'--color-nav-font': 'var(--color-primary)',
'--background-image': 'none',
'--background-image-position': 'center',
'--background-image-size': 'cover',
'--color-btn-hide': '#3bc2b2',
'--color-btn-min': '#85c43b',
'--color-btn-close': '#fab4a0',
'--color-badge-primary': 'var(--color-primary)',
'--color-badge-secondary': '#6376a2',
'--color-badge-tertiary': '#6376a2',
},
},
{
id: 'blue2',
name: '清热板蓝',
isDark: false,
config: {
primary: 'rgb(79, 98, 208)',
font: 'rgb(33, 33, 33)',
'--color-app-background': 'var(--color-primary-light-600-alpha-700)',
'--color-main-background': 'rgba(255, 255, 255, 1)',
'--color-nav-font': 'var(--color-primary)',
'--background-image': 'none',
'--background-image-position': 'center',
'--background-image-size': 'cover',
'--color-btn-hide': '#3bc2b2',
'--color-btn-min': '#85c43b',
'--color-btn-close': '#fab4a0',
'--color-badge-primary': 'var(--color-primary)',
'--color-badge-secondary': '#b080db',
'--color-badge-tertiary': '#b080db',
},
},
{
id: 'black',
name: '黑灯瞎火',
isDark: true,
config: {
primary: 'rgb(150, 150, 150)',
font: 'rgb(229, 229, 229)',
'--color-app-background': 'rgba(0, 0, 0, 0)',
'--color-main-background': 'rgba(19, 19, 19, 0.9)',
'--color-nav-font': 'var(--color-primary)',
'--background-image': 'url(./theme_images/landingMoon.png)',
'--background-image-position': 'center',
'--background-image-size': 'cover',
'--color-btn-hide': '#3bc2b2',
'--color-btn-min': '#85c43b',
'--color-btn-close': '#fab4a0',
'--color-badge-primary': 'var(--color-primary-dark-200)',
'--color-badge-secondary': 'var(--color-primary)',
'--color-badge-tertiary': 'var(--color-primary-dark-300)',
},
},
{
id: 'mid_autumn',
name: '月里嫦娥',
isDark: false,
config: {
primary: 'rgb(74, 55, 82)',
font: 'rgb(33, 33, 33)',
'--color-app-background': 'rgba(255, 255, 255, 0)',
'--color-main-background': 'rgba(255, 255, 255, 0.9)',
'--color-nav-font': 'var(--color-primary-light-600)',
'--background-image': 'url(./theme_images/jqbg.jpg)',
'--background-image-position': 'center',
'--background-image-size': 'cover',
'--color-btn-hide': '#3bc2b2',
'--color-btn-min': '#85c43b',
'--color-btn-close': '#fab4a0',
'--color-badge-primary': 'var(--color-primary)',
'--color-badge-secondary': '#af9479',
'--color-badge-tertiary': '#af9479',
},
},
{
id: 'naruto',
name: '木叶之村',
isDark: false,
config: {
primary: 'rgb(87, 144, 167)',
font: 'rgb(33, 33, 33)',
'--color-app-background': 'rgba(255, 255, 255, 0.15)',
'--color-main-background': 'rgba(255, 255, 255, 0.8)',
'--color-nav-font': 'var(--color-primary)',
'--background-image': 'url(./theme_images/myzcbg.jpg)',
'--background-image-position': 'center',
'--background-image-size': 'cover',
'--color-btn-hide': '#3bc2b2',
'--color-btn-min': '#85c43b',
'--color-btn-close': '#fab4a0',
'--color-badge-primary': 'var(--color-primary)',
'--color-badge-secondary': 'var(--color-primary-light-100)',
'--color-badge-tertiary': 'var(--color-primary-light-100)',
},
},
{
id: 'china_ink',
name: '近墨者黑',
isDark: false,
config: {
primary: 'rgba(47, 47, 47, 1)',
font: 'rgb(33, 33, 33)',
'--color-app-background': 'rgba(255, 255, 255, 0)',
'--color-main-background': 'rgba(255, 255, 255, 0.8)',
'--color-nav-font': 'var(--color-primary)',
'--background-image': 'url(./theme_images/china_ink.jpg)',
'--background-image-position': 'center',
'--background-image-size': 'cover',
'--color-btn-hide': 'rgba(183, 212, 208, 1)',
'--color-btn-min': 'rgba(200, 214, 183, 1)',
'--color-btn-close': 'rgba(218, 195, 188, 1)',
'--color-badge-primary': 'rgba(137, 70, 70, 1)',
'--color-badge-secondary': 'rgba(67, 139, 65, 1)',
'--color-badge-tertiary': 'rgba(132, 135, 65, 1)',
},
},
{
id: 'happy_new_year',
name: '新年快乐',
isDark: false,
config: {
primary: 'rgb(192, 57, 43)',
font: 'rgb(33, 33, 33)',
'--color-app-background': 'rgba(255, 255, 255, 0.15)',
'--color-main-background': 'rgba(255, 255, 255, 0.8)',
'--color-nav-font': 'var(--color-primary)',
'--background-image': 'url(./theme_images/xnkl.png)',
'--background-image-position': 'center',
'--background-image-size': 'cover',
'--color-btn-hide': '#3bc2b2',
'--color-btn-min': '#85c43b',
'--color-btn-close': '#fab4a0',
'--color-badge-primary': '#7fb575',
'--color-badge-secondary': '#dfbb6b',
'--color-badge-tertiary': 'var(--color-primary-light-100)',
},
},
]
const themes = defaultThemes.map(({ config: { primary, font, ...extInfo }, ...themeInfo }) => {
return {
...themeInfo,
isCustom: false,
config: {
themeColors: createThemeColors(primary, font, themeInfo.isDark),
extInfo,
},
}
})
fs.writeFileSync(path.join(__dirname, 'index.json'), JSON.stringify(themes, null, 2))

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

Before

Width:  |  Height:  |  Size: 353 KiB

After

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 KiB

3842
src/common/theme/index.json Normal file

File diff suppressed because it is too large Load Diff

75
src/common/theme/utils.js Normal file
View File

@@ -0,0 +1,75 @@
const { RGB_Linear_Shade, RGB_Alpha_Shade } = require('./colorUtils')
exports.createThemeColors = (rgbaColor, fontRgbaColor, isDark) => {
const colors = {
'--color-primary': rgbaColor,
}
let preColor = rgbaColor
for (let i = 1; i < 11; i += 1) {
preColor = RGB_Linear_Shade(isDark ? 0.2 : -0.1, preColor)
colors[`--color-primary-dark-${i * 100}`] = preColor
for (let j = 1; j < 10; j += 1) {
colors[`--color-primary-dark-${i * 100}-alpha-${j * 100}`] = RGB_Alpha_Shade(0.1 * j, preColor)
colors[`--color-primary-alpha-${j * 100}`] = RGB_Alpha_Shade(0.1 * j, rgbaColor)
}
}
preColor = rgbaColor
for (let i = 1; i < 10; i += 1) {
preColor = RGB_Linear_Shade(isDark ? -0.1 : 0.2, preColor)
colors[`--color-primary-light-${i * 100}`] = preColor
for (let j = 1; j < 10; j += 1) {
colors[`--color-primary-light-${i * 100}-alpha-${j * 100}`] = RGB_Alpha_Shade(0.1 * j, preColor)
}
}
preColor = RGB_Linear_Shade(isDark ? -0.2 : 1, preColor)
colors[`--color-primary-light-${1000}`] = preColor
for (let j = 1; j < 10; j += 1) {
colors[`--color-primary-light-${1000}-alpha-${j * 100}`] = RGB_Alpha_Shade(0.1 * j, preColor)
}
colors['--color-theme'] = isDark ? colors['--color-primary-light-900'] : rgbaColor
return { ...colors, ...createFontColors(fontRgbaColor, isDark) }
}
const createFontColors = (rgbaColor, isDark) => {
// rgb(238, 238, 238)
// let prec = 'rgb(255, 255, 255)'
rgbaColor ??= isDark ? 'rgb(229, 229, 229)' : 'rgb(33, 33, 33)'
if (isDark) return createFontDarkColors(rgbaColor)
let colors = {
'--color-1000': rgbaColor,
}
let step = isDark ? -0.05 : 0.05
for (let i = 1; i < 21; i += 1) {
colors[`--color-${String(1000 - 50 * i).padStart(3, '0')}`] = RGB_Linear_Shade(step * i, rgbaColor)
}
// console.log(colors)
return colors
}
const createFontDarkColors = (rgbaColor) => {
// rgb(238, 238, 238)
// let prec = 'rgb(255, 255, 255)'
let colors = {
'--color-1000': rgbaColor,
}
const step = -0.05
let preColor = rgbaColor
for (let i = 1; i < 21; i += 1) {
preColor = RGB_Linear_Shade(step, preColor)
colors[`--color-${String(1000 - 50 * i).padStart(3, '0')}`] = preColor
}
// console.log(colors)
return colors
}
// console.log(createFontColors('rgb(33, 33, 33)', false))
// console.log(createFontColors('rgb(255, 255, 255)', true))
// console.log(createFontDarkColors('rgb(255, 255, 255)'))

16
src/common/tsconfig.json Normal file
View File

@@ -0,0 +1,16 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"module": "esnext",
"moduleResolution": "nodenext",
"typeRoots": [ /* Specify multiple folders that act like './node_modules/@types'. */
"./types"
],
},
// "include": [
// "**/*.ts",
// "**/*.js",
// "**/*.vue",
// "**/*.json",
// ],
}

624
src/common/types/app_setting.d.ts vendored Normal file
View File

@@ -0,0 +1,624 @@
import type { I18n } from '@/lang/i18n'
declare global {
declare namespace LX {
type AddMusicLocationType = 'top' | 'bottom'
interface AppSetting {
version: string
/**
* 窗口大小id
*/
'common.windowSizeId': number
/**
* 窗口大小id
*/
'common.fontSize': number
/**
* 是否以全屏启动
*/
'common.startInFullscreen': boolean
/**
* 语言id
*/
'common.langId': I18n['locale'] | null
/**
* api id
*/
'common.apiSource': string
/**
* 音源名称类型,原名、别名
*/
'common.sourceNameType': 'alias' | 'real'
/**
* 显示的字体
*/
'common.font': string
/**
* 是否启用动画
*/
'common.isShowAnimation': boolean
/**
* 是否启用随机弹窗动画
*/
'common.randomAnimate': boolean
/**
* 是否同意软件协议
*/
'common.isAgreePact': boolean
/**
* 控制按钮位置,左边、右边
*/
'common.controlBtnPosition': 'left' | 'right'
/**
* 播放栏进度条样式
*/
'common.playBarProgressStyle': 'mini' | 'full' | 'middle'
/**
* 尝试自动更新
*/
'common.tryAutoUpdate': boolean
/**
* 更新版本后是否显示变更日志
*/
'common.showChangeLog': boolean
/**
* 启动时自动播放歌曲
*/
'player.startupAutoPlay': boolean
/**
* 切歌模式
*/
'player.togglePlayMethod': 'listLoop' | 'random' | 'list' | 'singleLoop' | 'none'
/**
* 是否优先播放320k音质
*/
'player.highQuality': boolean
/**
* 是否显示任务栏进度条
*/
'player.isShowTaskProgess': boolean
/**
* 音量大小
*/
'player.volume': number
/**
* 是否静音
*/
'player.isMute': boolean
/**
* 播放速率
*/
'player.playbackRate': number
/**
* 音频输出设备id
*/
'player.mediaDeviceId': string
/**
* 是否在音频输出设备更改时暂停播放
*/
'player.isMediaDeviceRemovedStopPlay': boolean
/**
* 是否显示歌词翻译
*/
'player.isShowLyricTranslation': boolean
/**
* 是否显示歌词罗马音
*/
'player.isShowLyricRoma': boolean
/**
* 是否将歌词从简体转换为繁体
*/
'player.isS2t': boolean
/**
* 是否播放卡拉OK歌词
*/
'player.isPlayLxlrc': boolean
/**
* 启动软件时是否恢复上次播放进度
*/
'player.isSavePlayTime': boolean
/**
* 是否启用音频可视化
*/
'player.audioVisualization': boolean
/**
* 定时暂停播放-是否等待歌曲播放完毕再暂停
*/
'player.waitPlayEndStop': boolean
/**
* 定时暂停播放-倒计时时间
*/
'player.waitPlayEndStopTime': string
/**
* 环境音效文件名
*/
'player.soundEffect.convolution.fileName': string | null
/**
* 环境音效原始输出增益
*/
'player.soundEffect.convolution.mainGain': number
/**
* 环境音效输出增益
*/
'player.soundEffect.convolution.sendGain': number
/**
* 均衡器 31hz 值
*/
'player.soundEffect.biquadFilter.hz31': number
/**
* 均衡器 62hz 值
*/
'player.soundEffect.biquadFilter.hz62': number
/**
* 均衡器 125hz 值
*/
'player.soundEffect.biquadFilter.hz125': number
/**
* 均衡器 250hz 值
*/
'player.soundEffect.biquadFilter.hz250': number
/**
* 均衡器 500hz 值
*/
'player.soundEffect.biquadFilter.hz500': number
/**
* 均衡器 1000hz 值
*/
'player.soundEffect.biquadFilter.hz1000': number
/**
* 均衡器 2000hz 值
*/
'player.soundEffect.biquadFilter.hz2000': number
/**
* 均衡器 4000hz 值
*/
'player.soundEffect.biquadFilter.hz4000': number
/**
* 均衡器 8000hz 值
*/
'player.soundEffect.biquadFilter.hz8000': number
/**
* 均衡器 16000hz 值
*/
'player.soundEffect.biquadFilter.hz16000': number
/**
* 3D立体环绕是否启用
*/
'player.soundEffect.panner.enable': boolean
/**
* 3D立体环绕声音距离
*/
'player.soundEffect.panner.soundR': number
/**
* 3D立体环绕速度
*/
'player.soundEffect.panner.speed': number
/**
* 是否启用音频加载失败时自动切歌
*/
'player.autoSkipOnError': boolean
/**
* 播放详情页-是否缩放当前播放的歌词行
*/
'playDetail.isZoomActiveLrc': boolean
/**
* 播放详情页-是否允许通过歌词调整播放进度
*/
'playDetail.isShowLyricProgressSetting': boolean
/**
* 播放详情页-歌词字体大小
*/
'playDetail.style.fontSize': number
/**
* 播放详情页-歌词对齐方式
*/
'playDetail.style.align': 'center' | 'left' | 'right'
/**
* 是否启用桌面歌词
*/
'desktopLyric.enable': boolean
/**
* 是否锁定桌面歌词
*/
'desktopLyric.isLock': boolean
/**
* 是在置顶桌面
*/
'desktopLyric.isAlwaysOnTop': boolean
/**
* 是否自动刷新歌词置顶
*/
'desktopLyric.isAlwaysOnTopLoop': boolean
/**
* 是否将歌词进程显示在任务栏
*/
'desktopLyric.isShowTaskbar': boolean
/**
* 是否启用音频可视化
*/
'desktopLyric.audioVisualization': boolean
/**
* 是否在全屏时隐藏歌词
*/
'desktopLyric.fullscreenHide': boolean
/**
* 桌面歌词窗口宽度
*/
'desktopLyric.width': number
/**
* 桌面歌词窗口高度
*/
'desktopLyric.height': number
/**
* 桌面歌词窗口x坐标
*/
'desktopLyric.x': number | null
/**
* 桌面歌词窗口y坐标
*/
'desktopLyric.y': number | null
/**
* 是否允许桌面歌词窗口拖出主屏幕之外
*/
'desktopLyric.isLockScreen': boolean
/**
* 是否延迟桌面歌词滚动
*/
'desktopLyric.isDelayScroll': boolean
/**
* 歌词滚动位置
*/
'desktopLyric.scrollAlign': 'top' | 'center'
/**
* 是否在鼠标划过桌面歌词窗口时降低歌词透明度
*/
'desktopLyric.isHoverHide': boolean
/**
* 歌词方向
*/
'desktopLyric.direction': 'horizontal' | 'vertical'
/**
* 歌词对齐方式
*/
'desktopLyric.style.align': 'center' | 'left' | 'right'
/**
* 桌面歌词字体
*/
'desktopLyric.style.font': string
/**
* 桌面歌词字体大小
*/
'desktopLyric.style.fontSize': number
/**
* 歌词间距大小
*/
'desktopLyric.style.lineGap': number
/**
* 桌面歌词未播放字体颜色
*/
'desktopLyric.style.lyricUnplayColor': string
/**
* 桌面歌词已播放字体颜色
*/
'desktopLyric.style.lyricPlayedColor': string
/**
* 桌面歌词字体阴影颜色
*/
'desktopLyric.style.lyricShadowColor': string
/**
* 桌面歌词加粗字体
*/
// 'desktopLyric.style.fontWeight': boolean
/**
* 桌面歌词字体透明度
*/
'desktopLyric.style.opacity': number
/**
* 桌面歌词是否允许换行
*/
'desktopLyric.style.ellipsis': boolean
/**
* 是否缩放当前正在播放的桌面歌词
*/
'desktopLyric.style.isZoomActiveLrc': boolean
/**
* 是否加粗逐字歌词字体
*/
'desktopLyric.style.isFontWeightFont': boolean
/**
* 是否加粗逐行歌词字体
*/
'desktopLyric.style.isFontWeightLine': boolean
/**
* 是否加粗翻译、罗马音字体
*/
'desktopLyric.style.isFontWeightExtended': boolean
/**
* 是否启用双击列表里的歌曲时自动切换到当前列表播放(仅对歌单、排行榜有效)
*/
'list.isClickPlayList': boolean
/**
* 是否显示歌曲来源(仅对我的列表有效)
*/
'list.isShowSource': boolean
/**
* 是否自动恢复列表滚动位置(仅对我的列表有效)
*/
'list.isSaveScrollLocation': boolean
/**
* 添加歌曲到我的列表时的方式
*/
'list.addMusicLocationType': LX.AddMusicLocationType
/**
* 是否显示列表操作按钮列
*/
'list.actionButtonsVisible': boolean
/**
* 是否启用下载功能
*/
'download.enable': boolean
/**
* 下载路径
*/
'download.savePath': string
/**
* 文件命名方式
*/
'download.fileName': '歌名 - 歌手' | '歌手 - 歌名' | '歌名'
/**
* 最大并发下载数
*/
'download.maxDownloadNum': number
/**
* 存在同名文件时跳过下载
*/
'download.skipExistFile': boolean
/**
* 是否下载lrc文件
*/
'download.isDownloadLrc': boolean
/**
* 是否下载翻译歌词文件
*/
'download.isDownloadTLrc': boolean
/**
* 是否下载罗马音歌词文件
*/
'download.isDownloadRLrc': boolean
/**
* 保存lrc时的文本编码格式
*/
'download.lrcFormat': 'utf8' | 'gbk'
/**
* 是否在音频文件中嵌入歌曲封面
*/
'download.isEmbedPic': boolean
/**
* 是否在音频文件中嵌入歌词
*/
'download.isEmbedLyric': boolean
/**
* 是否在音频文件中嵌入翻译歌词
*/
'download.isEmbedLyricT': boolean
/**
* 是否在音频文件中嵌入罗马音歌词
*/
'download.isEmbedLyricR': boolean
/**
* 歌曲源不可用时,是否启用换源下载
*/
'download.isUseOtherSource': boolean
/**
* 主题id
*/
'theme.id': string
/**
* 亮色主题id
*/
'theme.lightId': string
/**
* 暗色主题id
*/
'theme.darkId': string
/**
* 是否显示热门搜索
*/
'search.isShowHotSearch': boolean
/**
* 是否显示搜索历史
*/
'search.isShowHistorySearch': boolean
/**
* 软件启动时是否自动聚焦搜索框
*/
'search.isFocusSearchBox': boolean
/**
* 是否启用代理
*/
'network.proxy.enable': boolean
/**
* 代理服务器地址
*/
'network.proxy.host': string
/**
* 代理服务器端口号
*/
'network.proxy.port': string
/**
* 代理服务器用户名
*/
'network.proxy.username': string
/**
* 代理服务器密码
*/
'network.proxy.password': string
/**
* 是否启用托盘
*/
'tray.enable': boolean
/**
* 是否关闭时是否最小化到托盘
*/
// 'tray.isToTray': boolean
/**
* 托盘主题id
*/
'tray.themeId': number
/**
* 同步服务模式
*/
'sync.mode': 'server' | 'client'
/**
* 是否启用同步服务
*/
'sync.enable': boolean
/**
* 同步服务端口号
*/
'sync.server.port': '23332' | string
/**
* 最大备份快照数
*/
'sync.server.maxSsnapshotNum': number
/**
* 同步服务地址
*/
'sync.client.host': string
/**
* 是否在离开搜索界面时自动清空搜索框
*/
'odc.isAutoClearSearchInput': boolean
/**
* 是否在离开搜索界面时自动清空搜索结果列表
*/
'odc.isAutoClearSearchList': boolean
}
}
}

110
src/common/types/common.d.ts vendored Normal file
View File

@@ -0,0 +1,110 @@
// import './app_setting'
declare namespace LX {
interface CmdParams {
/**
* 搜索,启动软件时自动在搜索框搜索指定的内容,例如:-search="突然的自我 - 伍佰"
*/
search?: string
/**
* 禁用硬件加速启动
*/
dha?: boolean
/**
* 以非透明模式启动
*/
dt?: boolean
/**
* 禁用硬件媒体密钥处理
*/
dhmkh?: boolean
/**
* 设置代理服务器,代理应用的所有流量,例:-proxy-server="127.0.0.1:1081"不支持设置账号密码v1.17.0起新增)。注:应用内“设置-网络-代理设置”仅代理接口请求的流量,优先级更高
*/
'proxy-server'?: string
/**
* 以分号分隔的主机列表绕过代理服务器,例:-proxy-bypass-list="<local>;*.google.com;*foo.com;1.2.3.4:5678"(与-proxy-server一起使用才有效v1.17.0起新增)。注:此设置对应用内接口请求无效
*/
'proxy-bypass-list'?: string
/**
* 启动时播放指定列表的音乐
*/
play?: string
[key: string]: boolean | number | string
}
type OnlineSource = 'kw' | 'kg' | 'tx' | 'wy' | 'mg'
type Source = OnlineSource | 'local'
type Quality = '128k' | '320k' | 'flac' | 'flac24bit' | '192k' | 'ape' | 'wav'
type QualityList = Partial<Record<LX.Source, LX.Quality[]>>
interface EnvParams {
deeplink?: string | null
cmdParams: CmdParams
workAreaSize?: Electron.Size
}
interface HotKey {
name: string
action: string
type: keyof typeof keyName
}
interface HotKeyDownInfo {
type: 'local' | 'global'
key: string
}
interface HotKeyConfig {
enable: boolean
keys: Record<string, HotKey>
}
interface HotKeyConfigAll {
local: HotKeyConfig
global: HotKeyConfig
}
interface RegisterKeyInfo {
key: string
info: HotKey
}
type HotKeyState = Map<string, {
status: boolean
info: HotKey
}>
interface HotKeyActionWrap<T, D> {
action: T
data: D
source?: string
}
type HotKeyActions = HotKeyActionWrap<'config', HotKeyConfigAll>
| HotKeyActionWrap<'enable', boolean>
| HotKeyActionWrap<'register', RegisterKeyInfo>
| HotKeyActionWrap<'unregister', string>
interface HotKeyEvent {
type: string
key: string
}
interface TaskBarButtonFlags {
empty: boolean
collect: boolean
play: boolean
next: boolean
prev: boolean
}
type UpdateStatus = 'downloaded' | 'downloading' | 'error' | 'checking' | 'idle'
interface VersionInfo {
version: string
desc: string
}
}

9
src/common/types/config_files.d.ts vendored Normal file
View File

@@ -0,0 +1,9 @@
declare namespace LX {
namespace ConfigFile {
interface MyListInfoPart {
type: 'playListPart_v2'
data: LX.List.MyDefaultListInfoFull | LX.List.MyLoveListInfoFull | LX.List.UserListInfoFull
}
}
}

90
src/common/types/desktop_lyric.d.ts vendored Normal file
View File

@@ -0,0 +1,90 @@
declare namespace LX {
namespace DesktopLyric {
interface Config {
'desktopLyric.enable': LX.AppSetting['desktopLyric.enable']
'desktopLyric.isLock': LX.AppSetting['desktopLyric.isLock']
'desktopLyric.isAlwaysOnTop': LX.AppSetting['desktopLyric.isAlwaysOnTop']
'desktopLyric.isAlwaysOnTopLoop': LX.AppSetting['desktopLyric.isAlwaysOnTopLoop']
'desktopLyric.isShowTaskbar': LX.AppSetting['desktopLyric.isShowTaskbar']
'desktopLyric.audioVisualization': LX.AppSetting['desktopLyric.audioVisualization']
'desktopLyric.width': LX.AppSetting['desktopLyric.width']
'desktopLyric.height': LX.AppSetting['desktopLyric.height']
'desktopLyric.x': LX.AppSetting['desktopLyric.x']
'desktopLyric.y': LX.AppSetting['desktopLyric.y']
'desktopLyric.isLockScreen': LX.AppSetting['desktopLyric.isLockScreen']
'desktopLyric.isDelayScroll': LX.AppSetting['desktopLyric.isDelayScroll']
'desktopLyric.scrollAlign': LX.AppSetting['desktopLyric.scrollAlign']
'desktopLyric.isHoverHide': LX.AppSetting['desktopLyric.isHoverHide']
'desktopLyric.direction': LX.AppSetting['desktopLyric.direction']
'desktopLyric.style.align': LX.AppSetting['desktopLyric.style.align']
'desktopLyric.style.font': LX.AppSetting['desktopLyric.style.font']
'desktopLyric.style.fontSize': LX.AppSetting['desktopLyric.style.fontSize']
'desktopLyric.style.lineGap': LX.AppSetting['desktopLyric.style.lineGap']
'desktopLyric.style.lyricUnplayColor': LX.AppSetting['desktopLyric.style.lyricUnplayColor']
'desktopLyric.style.lyricPlayedColor': LX.AppSetting['desktopLyric.style.lyricPlayedColor']
'desktopLyric.style.lyricShadowColor': LX.AppSetting['desktopLyric.style.lyricShadowColor']
// 'desktopLyric.style.fontWeight': LX.AppSetting['desktopLyric.style.fontWeight']
'desktopLyric.style.opacity': LX.AppSetting['desktopLyric.style.opacity']
'desktopLyric.style.ellipsis': LX.AppSetting['desktopLyric.style.ellipsis']
'desktopLyric.style.isFontWeightFont': LX.AppSetting['desktopLyric.style.isFontWeightFont']
'desktopLyric.style.isFontWeightLine': LX.AppSetting['desktopLyric.style.isFontWeightLine']
'desktopLyric.style.isFontWeightExtended': LX.AppSetting['desktopLyric.style.isFontWeightExtended']
'desktopLyric.style.isZoomActiveLrc': LX.AppSetting['desktopLyric.style.isZoomActiveLrc']
'common.langId': LX.AppSetting['common.langId']
'player.isShowLyricTranslation': LX.AppSetting['player.isShowLyricTranslation']
'player.isShowLyricRoma': LX.AppSetting['player.isShowLyricRoma']
'player.isPlayLxlrc': LX.AppSetting['player.isPlayLxlrc']
'player.playbackRate': LX.AppSetting['player.playbackRate']
}
type WinMainActions = 'get_info' | 'get_status' | 'get_analyser_data_array'
interface LyricActionBase <A> {
action: A
}
interface LyricActionData<A, D> extends LyricActionBase<A> {
data: D
}
type LyricAction<A, D = undefined> = D extends undefined ? LyricActionBase<A> : LyricActionData<A, D>
type LyricActions = LyricAction<'set_info', {
id: string | null
singer: string
name: string
album: string
lrc: string | null
tlrc: string | null
rlrc: string | null
lxlrc: string | null
// pic: string | null
isPlay: boolean
line: number
played_time: number
}>
| LyricAction<'set_status', {
isPlay: boolean
line: number
played_time: number
}>
| LyricAction<'set_lyric', {
lrc: string | null
tlrc: string | null
rlrc: string | null
lxlrc: string | null
}>
| LyricAction<'set_offset', number>
| LyricAction<'set_playbackRate', number>
| LyricAction<'set_play', number>
| LyricAction<'set_pause'>
| LyricAction<'set_stop'>
| LyricAction<'send_analyser_data_array', Uint8Array>
interface NewBounds {
x: number
y: number
w: number
h: number
}
}
}

69
src/common/types/download_list.d.ts vendored Normal file
View File

@@ -0,0 +1,69 @@
import { type Message } from '@/lang'
// interface DownloadList {
// }
declare global {
namespace LX {
namespace Download {
type DownloadTaskStatus = 'run'
| 'waiting'
| 'pause'
| 'error'
| 'completed'
type FileExt = 'mp3' | 'flac' | 'wav' | 'ape'
interface ProgressInfo {
progress: number
speed: string
downloaded: number
total: number
}
interface DownloadTaskActionBase <A> {
action: A
}
interface DownloadTaskActionData<A, D> extends DownloadTaskActionBase<A> {
data: D
}
type DownloadTaskAction<A, D = undefined> = D extends undefined ? DownloadTaskActionBase<A> : DownloadTaskActionData<A, D>
type DownloadTaskActions = DownloadTaskAction<'start'>
| DownloadTaskAction<'complete'>
| DownloadTaskAction<'refreshUrl'>
| DownloadTaskAction<'statusText', string>
| DownloadTaskAction<'progress', ProgressInfo>
| DownloadTaskAction<'error', {
error?: keyof Message
message?: string
}>
interface ListItem {
id: string
isComplate: boolean
status: DownloadTaskStatus
statusText: string
downloaded: number
total: number
progress: number
speed: string
metadata: {
musicInfo: LX.Music.MusicInfoOnline
url: string | null
quality: LX.Quality
ext: FileExt
fileName: string
filePath: string
}
}
interface saveDownloadMusicInfo {
list: ListItem[]
addMusicLocationType: LX.AddMusicLocationType
}
}
}
}

24
src/common/types/ipc_main.d.ts vendored Normal file
View File

@@ -0,0 +1,24 @@
declare namespace LX {
interface IpcMainEvent {
event: Electron.IpcMainEvent
}
interface IpcMainEventParams<T> {
event: Electron.IpcMainEvent
params: T
}
type IpcMainEventListener = (params: LX.IpcMainEvent) => void
type IpcMainEventListenerParams<T> = (params: LX.IpcMainEventParams<T>) => void
interface IpcMainInvokeEvent {
event: Electron.IpcMainInvokeEvent
}
interface IpcMainInvokeEventParams<T> {
event: Electron.IpcMainInvokeEvent
params: T
}
type IpcMainInvokeEventListener = (params: LX.IpcMainInvokeEvent) => Promise<void>
type IpcMainInvokeEventListenerParams<T> = (params: LX.IpcMainInvokeEventParams<T>) => Promise<void>
type IpcMainInvokeEventListenerValue<V> = (params: LX.IpcMainInvokeEvent) => Promise<V>
type IpcMainInvokeEventListenerParamsValue<T, V> = (params: LX.IpcMainInvokeEventParams<T>) => Promise<V>
}

11
src/common/types/ipc_renderer.d.ts vendored Normal file
View File

@@ -0,0 +1,11 @@
declare namespace LX {
interface IpcRendererEvent {
event: Electron.IpcRendererEvent
}
interface IpcRendererEventParams<T> {
event: Electron.IpcRendererEvent
params: T
}
type IpcRendererEventListener = (params: LX.IpcRendererEvent) => any
type IpcRendererEventListenerParams<T> = (params: LX.IpcRendererEventParams<T>) => any
}

144
src/common/types/list.d.ts vendored Normal file
View File

@@ -0,0 +1,144 @@
declare namespace LX {
namespace List {
interface UserListInfo {
id: string
name: string
// list: LX.Music.MusicInfo[]
source?: LX.OnlineSource
sourceListId?: string
// position?: number
locationUpdateTime: number | null
}
interface MyDefaultListInfo {
id: 'default'
name: 'list__name_default'
// name: '试听列表'
// list: LX.Music.MusicInfo[]
}
interface MyLoveListInfo {
id: 'love'
name: 'list__name_love'
// name: '我的收藏'
// list: LX.Music.MusicInfo[]
}
interface MyTempListInfo {
id: 'temp'
name: '临时列表'
// list: LX.Music.MusicInfo[]
// TODO: save default lists info
meta: {
id?: string
}
}
type MyListInfo = MyDefaultListInfo | MyLoveListInfo | UserListInfo
interface MyAllList {
defaultList: MyDefaultListInfo
loveList: MyLoveListInfo
userList: UserListInfo[]
tempList: MyTempListInfo
}
type SearchHistoryList = string[]
type ListPositionInfo = Record<string, number>
type ListUpdateInfo = Record<string, {
updateTime: number
isAutoUpdate: boolean
}>
type ListSaveType = 'myList' | 'downloadList'
type ListSaveInfo = {
type: 'myList'
data: Partial<MyAllList>
} | {
type: 'downloadList'
data: LX.Download.ListItem[]
}
type ListActionDataOverwrite = MakeOptional<LX.List.ListDataFull, 'tempList'>
interface ListActionAdd {
position: number
listInfos: UserListInfo[]
}
type ListActionRemove = string[]
type ListActionUpdate = UserListInfo[]
interface ListActionUpdatePosition {
/**
* 列表id
*/
ids: string[]
/**
* 位置
*/
position: number
}
interface ListActionMusicAdd {
id: string
musicInfos: LX.Music.MusicInfo[]
addMusicLocationType: LX.AddMusicLocationType
}
interface ListActionMusicMove {
fromId: string
toId: string
musicInfos: LX.Music.MusicInfo[]
addMusicLocationType: LX.AddMusicLocationType
}
interface ListActionCheckMusicExistList {
listId: string
musicInfoId: string
}
interface ListActionMusicRemove {
listId: string
ids: string[]
}
type ListActionMusicUpdate = Array<{
id: string
musicInfo: LX.Music.MusicInfo
}>
interface ListActionMusicUpdatePosition {
listId: string
position: number
ids: string[]
}
interface ListActionMusicOverwrite {
listId: string
musicInfos: LX.Music.MusicInfo[]
}
type ListActionMusicClear = string[]
interface MyDefaultListInfoFull extends MyDefaultListInfo {
list: LX.Music.MusicInfo[]
}
interface MyLoveListInfoFull extends MyLoveListInfo {
list: LX.Music.MusicInfo[]
}
interface UserListInfoFull extends UserListInfo {
list: LX.Music.MusicInfo[]
}
interface MyTempListInfoFull extends MyTempListInfo {
list: LX.Music.MusicInfo[]
}
interface ListDataFull {
defaultList: LX.Music.MusicInfo[]
loveList: LX.Music.MusicInfo[]
userList: UserListInfoFull[]
tempList: LX.Music.MusicInfo[]
}
}
}

Some files were not shown because too many files have changed in this diff Show More