Merge branch 'dev' of github.com:lyswhut/lx-music-desktop into dev
commit
431605e793
|
@ -1,7 +1,8 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
upgrade: true,
|
upgrade: true,
|
||||||
reject: [
|
reject: [
|
||||||
'vue-loader'
|
'vue-loader',
|
||||||
|
'webpack-dev-server',
|
||||||
// 'eslint-config-standard'
|
// 'eslint-config-standard'
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
21
CHANGELOG.md
21
CHANGELOG.md
|
@ -6,6 +6,27 @@ Project versioning adheres to [Semantic Versioning](http://semver.org/).
|
||||||
Commit convention is based on [Conventional Commits](http://conventionalcommits.org).
|
Commit convention is based on [Conventional Commits](http://conventionalcommits.org).
|
||||||
Change log format is based on [Keep a Changelog](http://keepachangelog.com/).
|
Change log format is based on [Keep a Changelog](http://keepachangelog.com/).
|
||||||
|
|
||||||
|
## [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.2](https://github.com/lyswhut/lx-music-desktop/compare/v1.12.1...v1.12.2) - 2021-08-11
|
||||||
|
|
||||||
### 修复
|
### 修复
|
||||||
|
|
63
FAQ.md
63
FAQ.md
|
@ -19,7 +19,7 @@
|
||||||
若网页无法打开或打开来不是404,则可能是DNS的问题,可以尝试以下办法:
|
若网页无法打开或打开来不是404,则可能是DNS的问题,可以尝试以下办法:
|
||||||
|
|
||||||
1. 将DNS改成自动获取试试(注:改完可能需要清理下系统DNS缓存才生效)
|
1. 将DNS改成自动获取试试(注:改完可能需要清理下系统DNS缓存才生效)
|
||||||
2. 手动把DNS改一下,不要用360的DNS,可以把DNS改成`114.114.114.114`、`8.8.8.8`(注:改完可能需要清理下系统DNS缓存才生效)
|
2. 手动把DNS改一下,不要用360的DNS,可以把DNS改成`223.6.6.6`、`8.8.8.8`(注:改完可能需要清理下系统DNS缓存才生效)
|
||||||
|
|
||||||
改完DNS后可能需要重启软件才生效
|
改完DNS后可能需要重启软件才生效
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
若网页无法打开或打来不是404,则应该是DNS的问题,可以尝试以下办法:
|
若网页无法打开或打来不是404,则应该是DNS的问题,可以尝试以下办法:
|
||||||
|
|
||||||
1. 将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`
|
||||||
|
|
||||||
## 列表多选
|
## 列表多选
|
||||||
|
|
||||||
|
@ -64,6 +64,35 @@
|
||||||
|
|
||||||
注:网易源的“我喜欢”歌单无法在未登录的情况下打开,所以你需要手动创建一个歌单后将“我喜欢”里的歌曲移动到该歌单打开
|
注:网易源的“我喜欢”歌单无法在未登录的情况下打开,所以你需要手动创建一个歌单后将“我喜欢”里的歌曲移动到该歌单打开
|
||||||
|
|
||||||
|
### 打开网易源“我喜欢”歌单
|
||||||
|
|
||||||
|
由于网易源的“我喜欢”歌单需要登录才能打开,从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`键就可以将它复制
|
||||||
|
|
||||||
## 更新已收藏的在线歌单
|
## 更新已收藏的在线歌单
|
||||||
|
|
||||||
该功能仅对直接从歌单详情页点“收藏”按钮收藏的歌单有效,可右击已收藏的列表名从弹出的菜单中选择“更新”使用该功能,
|
该功能仅对直接从歌单详情页点“收藏”按钮收藏的歌单有效,可右击已收藏的列表名从弹出的菜单中选择“更新”使用该功能,
|
||||||
|
@ -81,12 +110,16 @@
|
||||||
3. 输入完这两项后点击“启动同步”
|
3. 输入完这两项后点击“启动同步”
|
||||||
4. 若连接成功,对于首次同步时,若两边的设备的列表不为空,则PC端会弹出选择列表同步方式的弹窗,同步方式的说明弹窗下面有介绍
|
4. 若连接成功,对于首次同步时,若两边的设备的列表不为空,则PC端会弹出选择列表同步方式的弹窗,同步方式的说明弹窗下面有介绍
|
||||||
|
|
||||||
对于连接同步服务失败的可能原因:
|
#### 关于同步弹窗的说明
|
||||||
|
|
||||||
|
对于首次同步时,若两边的设备的列表不为空,则PC端会弹出选择列表同步方式的弹窗,此弹窗内的同步方式仅针对**首次同步**,<br>
|
||||||
|
第一次同步成功后,以后再同步时将会自动根据两边设备的列表内容合并同步,不信你可以在同步完成后断开两边的连接,然后在两边增删一些歌曲或列表后再同步试试看~😉
|
||||||
|
|
||||||
|
#### 连接同步服务失败的可能原因
|
||||||
|
|
||||||
- 此功能需要PC端与移动端都连接在同一个路由器下的网络才能使用
|
- 此功能需要PC端与移动端都连接在同一个路由器下的网络才能使用
|
||||||
- 路由器若开启了AP隔离,则此功能无法使用
|
|
||||||
- 检查防火墙是否拦截了PC端的服务端口
|
- 检查防火墙是否拦截了PC端的服务端口
|
||||||
|
- 路由器若开启了AP隔离,则此功能无法使用
|
||||||
|
|
||||||
## 界面异常(界面显示不完整)
|
## 界面异常(界面显示不完整)
|
||||||
|
|
||||||
|
@ -123,6 +156,14 @@
|
||||||
- 添加启动参数`-dha`运行(添加的方法请自行百度“给快捷方式加参数”)
|
- 添加启动参数`-dha`运行(添加的方法请自行百度“给快捷方式加参数”)
|
||||||
- 尝试将绿色版的软件放在**桌面**或**我的文档**运行
|
- 尝试将绿色版的软件放在**桌面**或**我的文档**运行
|
||||||
|
|
||||||
|
## Windows 7 下桌面歌词字体列表为空
|
||||||
|
|
||||||
|
Windows 7 系统系统需要安装 Powershell 5.1及以上版本才可正常获取系统字体列表。
|
||||||
|
|
||||||
|
想要查看当前 Powershell 版本可以在 Powershell 窗口输入命令:`Get-Host`
|
||||||
|
|
||||||
|
最新 Powershell 安装包可以去官方 [Github releases](https://github.com/PowerShell/PowerShell/releases) 页下载,安装过程中若出现错误,请自行按照提示或者百度/Google解决。
|
||||||
|
|
||||||
## 安装版安装失败,提示安装程序并未成功地运行完成
|
## 安装版安装失败,提示安装程序并未成功地运行完成
|
||||||
|
|
||||||
对于部分电脑出现安装失败的问题,可以做出以下尝试:
|
对于部分电脑出现安装失败的问题,可以做出以下尝试:
|
||||||
|
@ -178,9 +219,9 @@ Windows 7 未开启 Aero 效果时桌面歌词会有问题,详情看上面的
|
||||||
|
|
||||||
以 **`.dmg`** 结尾的文件为 MAC 版本;
|
以 **`.dmg`** 结尾的文件为 MAC 版本;
|
||||||
|
|
||||||
以 **`.AppImage`**、**`.deb`** 结尾的为 Linux 版本。
|
以 **`.AppImage`**、**`.deb`**、**`.rpm`**、**`.pacman`** 结尾的为 Linux 版本。
|
||||||
|
|
||||||
带有`x64`的为64位的系统版本,带`x86`的为32位的系统版本;若两个都带有的则为集合版,安装时会自动根据系统位数选择对应的版本安装。
|
带有`x64`的为64位的系统版本,带`x86`的为32位的系统版本;若两个都带有的则为集合版,安装时会自动根据系统位数选择对应的版本安装;带有`arm`的为arm架构系统的版本。
|
||||||
|
|
||||||
## 软件更新
|
## 软件更新
|
||||||
|
|
||||||
|
@ -188,13 +229,13 @@ Windows 7 未开启 Aero 效果时桌面歌词会有问题,详情看上面的
|
||||||
若下载未完成时软件被关闭,下次启动软件会再次自动下载。<br>
|
若下载未完成时软件被关闭,下次启动软件会再次自动下载。<br>
|
||||||
若还是**更新失败**,可能是无法访问GitHub导致的,这时需要手动更新,即下载最新安装包直接覆盖安装即可。<br>
|
若还是**更新失败**,可能是无法访问GitHub导致的,这时需要手动更新,即下载最新安装包直接覆盖安装即可。<br>
|
||||||
注意:**绿色版**的软件自动更新功能**不可用**,建议使用安装版!!<br>
|
注意:**绿色版**的软件自动更新功能**不可用**,建议使用安装版!!<br>
|
||||||
注意:**Mac版**、**Linux deb**版不支持自动更新!
|
注意:**Mac版**、**Linux**版不支持自动更新!
|
||||||
|
|
||||||
## 更新已收藏的在线歌单
|
### Windows 安装版在升级后,卸载了旧版本,但没有安装新版本
|
||||||
|
|
||||||
该功能仅对直接从歌单详情页点“收藏”按钮收藏的歌单有效,可右击已收藏的列表名从弹出的菜单中选择“同步”使用该功能,
|
出现这个问题的原因一般是你当初在安装本软件的时候是以管理员身份安装的,运行软件的时候没有以管理员身份运行,所以卸载后无法再装上。
|
||||||
|
|
||||||
需要注意的是:这将会覆盖本地的目标列表,歌曲将被替换成最新的在线列表。
|
安装本软件时建议选择 `为当前用户安装`,并安装在当前用户目录或者安装在不需要管理员权限的目录(即其他分区下),不要选`为所有用户安装`。
|
||||||
|
|
||||||
## 缺少`xxx.dll`
|
## 缺少`xxx.dll`
|
||||||
|
|
||||||
|
|
|
@ -29,11 +29,10 @@ module.exports = {
|
||||||
exclude: /node_modules/,
|
exclude: /node_modules/,
|
||||||
enforce: 'pre',
|
enforce: 'pre',
|
||||||
},
|
},
|
||||||
// {
|
{
|
||||||
// test: /\.js$/,
|
test: /\.node$/,
|
||||||
// loader: 'babel-loader',
|
use: 'node-loader',
|
||||||
// exclude: /node_modules/,
|
},
|
||||||
// },
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
performance: {
|
performance: {
|
||||||
|
|
|
@ -15,6 +15,7 @@ module.exports = merge(baseConfig, {
|
||||||
},
|
},
|
||||||
externals: [
|
externals: [
|
||||||
...Object.keys(dependencies || {}),
|
...Object.keys(dependencies || {}),
|
||||||
|
// 'font-list',
|
||||||
],
|
],
|
||||||
node: {
|
node: {
|
||||||
__dirname: false,
|
__dirname: false,
|
||||||
|
|
|
@ -44,6 +44,10 @@ module.exports = {
|
||||||
exclude: /node_modules/,
|
exclude: /node_modules/,
|
||||||
enforce: 'pre',
|
enforce: 'pre',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
test: /\.node$/,
|
||||||
|
use: 'node-loader',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
test: /\.vue$/,
|
test: /\.vue$/,
|
||||||
loader: 'vue-loader',
|
loader: 'vue-loader',
|
||||||
|
@ -72,15 +76,6 @@ module.exports = {
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
{
|
|
||||||
test: /\.styl(:?us)?$/,
|
|
||||||
oneOf: mergeCSSLoader({
|
|
||||||
loader: 'stylus-loader',
|
|
||||||
options: {
|
|
||||||
sourceMap: true,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
test: /\.pug$/,
|
test: /\.pug$/,
|
||||||
oneOf: [
|
oneOf: [
|
||||||
|
|
|
@ -44,6 +44,10 @@ module.exports = {
|
||||||
exclude: /node_modules/,
|
exclude: /node_modules/,
|
||||||
enforce: 'pre',
|
enforce: 'pre',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
test: /\.node$/,
|
||||||
|
use: 'node-loader',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
test: /\.vue$/,
|
test: /\.vue$/,
|
||||||
loader: 'vue-loader',
|
loader: 'vue-loader',
|
||||||
|
@ -72,15 +76,6 @@ module.exports = {
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
{
|
|
||||||
test: /\.styl(:?us)?$/,
|
|
||||||
oneOf: mergeCSSLoader({
|
|
||||||
loader: 'stylus-loader',
|
|
||||||
options: {
|
|
||||||
sourceMap: true,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
test: /\.pug$/,
|
test: /\.pug$/,
|
||||||
oneOf: [
|
oneOf: [
|
||||||
|
|
|
@ -16,7 +16,8 @@ const rendererLyricConfig = require('./renderer-lyric/webpack.config.dev')
|
||||||
|
|
||||||
let electronProcess = null
|
let electronProcess = null
|
||||||
let manualRestart = false
|
let manualRestart = false
|
||||||
let hotMiddleware
|
let hotMiddlewareRenderer
|
||||||
|
let hotMiddlewareRendererLyric
|
||||||
|
|
||||||
|
|
||||||
function startRenderer() {
|
function startRenderer() {
|
||||||
|
@ -24,7 +25,7 @@ function startRenderer() {
|
||||||
// rendererConfig.entry.renderer = [path.join(__dirname, 'dev-client')].concat(rendererConfig.entry.renderer)
|
// rendererConfig.entry.renderer = [path.join(__dirname, 'dev-client')].concat(rendererConfig.entry.renderer)
|
||||||
// rendererConfig.mode = 'development'
|
// rendererConfig.mode = 'development'
|
||||||
const compiler = webpack(rendererConfig)
|
const compiler = webpack(rendererConfig)
|
||||||
hotMiddleware = webpackHotMiddleware(compiler, {
|
hotMiddlewareRenderer = webpackHotMiddleware(compiler, {
|
||||||
log: false,
|
log: false,
|
||||||
heartbeat: 2500,
|
heartbeat: 2500,
|
||||||
})
|
})
|
||||||
|
@ -32,15 +33,15 @@ function startRenderer() {
|
||||||
compiler.hooks.compilation.tap('compilation', compilation => {
|
compiler.hooks.compilation.tap('compilation', compilation => {
|
||||||
// console.log(Object.keys(compilation.hooks))
|
// console.log(Object.keys(compilation.hooks))
|
||||||
HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync('html-webpack-plugin-after-emit', (data, cb) => {
|
HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync('html-webpack-plugin-after-emit', (data, cb) => {
|
||||||
hotMiddleware.publish({ action: 'reload' })
|
hotMiddlewareRenderer.publish({ action: 'reload' })
|
||||||
cb()
|
cb()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
compiler.hooks.done.tap('done', stats => {
|
// compiler.hooks.done.tap('done', stats => {
|
||||||
// logStats('Renderer', 'Compile done')
|
// // logStats('Renderer', 'Compile done')
|
||||||
// logStats('Renderer', stats)
|
// // logStats('Renderer', stats)
|
||||||
})
|
// })
|
||||||
|
|
||||||
const server = new WebpackDevServer(
|
const server = new WebpackDevServer(
|
||||||
compiler,
|
compiler,
|
||||||
|
@ -54,7 +55,7 @@ function startRenderer() {
|
||||||
errors: true,
|
errors: true,
|
||||||
},
|
},
|
||||||
before(app, ctx) {
|
before(app, ctx) {
|
||||||
app.use(hotMiddleware)
|
app.use(hotMiddlewareRenderer)
|
||||||
ctx.middleware.waitUntilValid(() => {
|
ctx.middleware.waitUntilValid(() => {
|
||||||
resolve()
|
resolve()
|
||||||
})
|
})
|
||||||
|
@ -71,7 +72,7 @@ function startRendererLyric() {
|
||||||
// rendererConfig.entry.renderer = [path.join(__dirname, 'dev-client')].concat(rendererConfig.entry.renderer)
|
// rendererConfig.entry.renderer = [path.join(__dirname, 'dev-client')].concat(rendererConfig.entry.renderer)
|
||||||
// rendererConfig.mode = 'development'
|
// rendererConfig.mode = 'development'
|
||||||
const compiler = webpack(rendererLyricConfig)
|
const compiler = webpack(rendererLyricConfig)
|
||||||
hotMiddleware = webpackHotMiddleware(compiler, {
|
hotMiddlewareRendererLyric = webpackHotMiddleware(compiler, {
|
||||||
log: false,
|
log: false,
|
||||||
heartbeat: 2500,
|
heartbeat: 2500,
|
||||||
})
|
})
|
||||||
|
@ -79,15 +80,15 @@ function startRendererLyric() {
|
||||||
compiler.hooks.compilation.tap('compilation', compilation => {
|
compiler.hooks.compilation.tap('compilation', compilation => {
|
||||||
// console.log(Object.keys(compilation.hooks))
|
// console.log(Object.keys(compilation.hooks))
|
||||||
HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync('html-webpack-plugin-after-emit', (data, cb) => {
|
HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync('html-webpack-plugin-after-emit', (data, cb) => {
|
||||||
hotMiddleware.publish({ action: 'reload' })
|
hotMiddlewareRendererLyric.publish({ action: 'reload' })
|
||||||
cb()
|
cb()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
compiler.hooks.done.tap('done', stats => {
|
// compiler.hooks.done.tap('done', stats => {
|
||||||
// logStats('Renderer', 'Compile done')
|
// // logStats('Renderer', 'Compile done')
|
||||||
// logStats('Renderer', stats)
|
// // logStats('Renderer', stats)
|
||||||
})
|
// })
|
||||||
|
|
||||||
const server = new WebpackDevServer(
|
const server = new WebpackDevServer(
|
||||||
compiler,
|
compiler,
|
||||||
|
@ -101,7 +102,7 @@ function startRendererLyric() {
|
||||||
errors: true,
|
errors: true,
|
||||||
},
|
},
|
||||||
before(app, ctx) {
|
before(app, ctx) {
|
||||||
app.use(hotMiddleware)
|
app.use(hotMiddlewareRendererLyric)
|
||||||
ctx.middleware.waitUntilValid(() => {
|
ctx.middleware.waitUntilValid(() => {
|
||||||
resolve()
|
resolve()
|
||||||
})
|
})
|
||||||
|
@ -120,7 +121,8 @@ function startMain() {
|
||||||
const compiler = webpack(mainConfig)
|
const compiler = webpack(mainConfig)
|
||||||
|
|
||||||
compiler.hooks.watchRun.tapAsync('watch-run', (compilation, done) => {
|
compiler.hooks.watchRun.tapAsync('watch-run', (compilation, done) => {
|
||||||
hotMiddleware.publish({ action: 'compiling' })
|
hotMiddlewareRenderer.publish({ action: 'compiling' })
|
||||||
|
hotMiddlewareRendererLyric.publish({ action: 'compiling' })
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
40
package.json
40
package.json
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "lx-music-desktop",
|
"name": "lx-music-desktop",
|
||||||
"version": "1.12.2",
|
"version": "1.13.0",
|
||||||
"description": "一个免费的音乐查找助手",
|
"description": "一个免费的音乐查找助手",
|
||||||
"main": "./dist/electron/main.js",
|
"main": "./dist/electron/main.js",
|
||||||
"productName": "lx-music-desktop",
|
"productName": "lx-music-desktop",
|
||||||
|
@ -70,7 +70,7 @@
|
||||||
"up": "cross-env ELECTRON_GET_USE_PROXY=true GLOBAL_AGENT_HTTPS_PROXY=http://localhost:1081 npm i"
|
"up": "cross-env ELECTRON_GET_USE_PROXY=true GLOBAL_AGENT_HTTPS_PROXY=http://localhost:1081 npm i"
|
||||||
},
|
},
|
||||||
"browserslist": [
|
"browserslist": [
|
||||||
"Electron 13.1.7"
|
"Electron 13.3.0"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 14"
|
"node": ">= 14"
|
||||||
|
@ -83,6 +83,9 @@
|
||||||
"files": [
|
"files": [
|
||||||
"dist/electron/**/*"
|
"dist/electron/**/*"
|
||||||
],
|
],
|
||||||
|
"asar": {
|
||||||
|
"smartUnpack": false
|
||||||
|
},
|
||||||
"extraResources": [
|
"extraResources": [
|
||||||
"./licenses"
|
"./licenses"
|
||||||
],
|
],
|
||||||
|
@ -163,37 +166,37 @@
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/lyswhut/lx-music-desktop#readme",
|
"homepage": "https://github.com/lyswhut/lx-music-desktop#readme",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.15.0",
|
"@babel/core": "^7.15.5",
|
||||||
"@babel/plugin-proposal-class-properties": "^7.14.5",
|
"@babel/plugin-proposal-class-properties": "^7.14.5",
|
||||||
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
|
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
|
||||||
"@babel/plugin-transform-modules-umd": "^7.14.5",
|
"@babel/plugin-transform-modules-umd": "^7.14.5",
|
||||||
"@babel/plugin-transform-runtime": "^7.15.0",
|
"@babel/plugin-transform-runtime": "^7.15.0",
|
||||||
"@babel/polyfill": "^7.12.1",
|
"@babel/polyfill": "^7.12.1",
|
||||||
"@babel/preset-env": "^7.15.0",
|
"@babel/preset-env": "^7.15.4",
|
||||||
"babel-eslint": "^10.1.0",
|
"babel-eslint": "^10.1.0",
|
||||||
"babel-loader": "^8.2.2",
|
"babel-loader": "^8.2.2",
|
||||||
"babel-preset-minify": "^0.5.1",
|
"babel-preset-minify": "^0.5.1",
|
||||||
"browserslist": "^4.16.7",
|
"browserslist": "^4.16.8",
|
||||||
"cfonts": "^2.9.3",
|
"cfonts": "^2.9.3",
|
||||||
"chalk": "^4.1.2",
|
"chalk": "^4.1.2",
|
||||||
"changelog-parser": "^2.8.0",
|
"changelog-parser": "^2.8.0",
|
||||||
"copy-webpack-plugin": "^9.0.1",
|
"copy-webpack-plugin": "^9.0.1",
|
||||||
"core-js": "^3.16.1",
|
"core-js": "^3.17.2",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"css-loader": "^6.2.0",
|
"css-loader": "^6.2.0",
|
||||||
"css-minimizer-webpack-plugin": "^3.0.2",
|
"css-minimizer-webpack-plugin": "^3.0.2",
|
||||||
"del": "^6.0.0",
|
"del": "^6.0.0",
|
||||||
"electron": "^13.1.9",
|
"electron": "^13.3.0",
|
||||||
"electron-builder": "^22.11.7",
|
"electron-builder": "^22.11.7",
|
||||||
"electron-debug": "^3.2.0",
|
"electron-debug": "^3.2.0",
|
||||||
"electron-devtools-installer": "^3.2.0",
|
"electron-devtools-installer": "^3.2.0",
|
||||||
"electron-to-chromium": "^1.3.801",
|
"electron-to-chromium": "^1.3.830",
|
||||||
"eslint": "^7.32.0",
|
"eslint": "^7.32.0",
|
||||||
"eslint-config-standard": "^16.0.3",
|
"eslint-config-standard": "^16.0.3",
|
||||||
"eslint-formatter-friendly": "^7.0.0",
|
"eslint-formatter-friendly": "^7.0.0",
|
||||||
"eslint-loader": "^4.0.2",
|
"eslint-loader": "^4.0.2",
|
||||||
"eslint-plugin-html": "^6.1.2",
|
"eslint-plugin-html": "^6.1.2",
|
||||||
"eslint-plugin-import": "^2.24.0",
|
"eslint-plugin-import": "^2.24.2",
|
||||||
"eslint-plugin-node": "^11.1.0",
|
"eslint-plugin-node": "^11.1.0",
|
||||||
"eslint-plugin-promise": "^5.1.0",
|
"eslint-plugin-promise": "^5.1.0",
|
||||||
"eslint-plugin-standard": "^4.1.0",
|
"eslint-plugin-standard": "^4.1.0",
|
||||||
|
@ -204,7 +207,8 @@
|
||||||
"less-loader": "^10.0.1",
|
"less-loader": "^10.0.1",
|
||||||
"less-plugin-clean-css": "^1.5.1",
|
"less-plugin-clean-css": "^1.5.1",
|
||||||
"markdown-it": "^12.2.0",
|
"markdown-it": "^12.2.0",
|
||||||
"mini-css-extract-plugin": "^2.2.0",
|
"mini-css-extract-plugin": "^2.2.2",
|
||||||
|
"node-loader": "^2.0.0",
|
||||||
"postcss": "^8.3.6",
|
"postcss": "^8.3.6",
|
||||||
"postcss-loader": "^6.1.1",
|
"postcss-loader": "^6.1.1",
|
||||||
"postcss-pxtorem": "^6.0.0",
|
"postcss-pxtorem": "^6.0.0",
|
||||||
|
@ -214,35 +218,33 @@
|
||||||
"raw-loader": "^4.0.2",
|
"raw-loader": "^4.0.2",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"spinnies": "^0.5.1",
|
"spinnies": "^0.5.1",
|
||||||
"stylus": "^0.54.8",
|
"terser-webpack-plugin": "^5.2.3",
|
||||||
"stylus-loader": "^6.1.0",
|
|
||||||
"terser-webpack-plugin": "^5.1.4",
|
|
||||||
"url-loader": "^4.1.1",
|
"url-loader": "^4.1.1",
|
||||||
"vue-loader": "^15.9.8",
|
"vue-loader": "^15.9.8",
|
||||||
"vue-template-compiler": "^2.6.14",
|
"vue-template-compiler": "^2.6.14",
|
||||||
"webpack": "^5.50.0",
|
"webpack": "^5.52.0",
|
||||||
"webpack-cli": "^4.7.2",
|
"webpack-cli": "^4.8.0",
|
||||||
"webpack-dev-server": "^3.11.2",
|
"webpack-dev-server": "^3.11.2",
|
||||||
"webpack-hot-middleware": "^2.25.0",
|
"webpack-hot-middleware": "^2.25.0",
|
||||||
"webpack-merge": "^5.8.0"
|
"webpack-merge": "^5.8.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"bufferutil": "^4.0.3",
|
||||||
"crypto-js": "^4.1.1",
|
"crypto-js": "^4.1.1",
|
||||||
"electron-log": "^4.4.1",
|
"electron-log": "^4.4.1",
|
||||||
"bufferutil": "^4.0.3",
|
|
||||||
"eiows": "^3.6.1",
|
|
||||||
"electron-store": "^8.0.0",
|
"electron-store": "^8.0.0",
|
||||||
"electron-updater": "^4.3.9",
|
"electron-updater": "^4.3.9",
|
||||||
|
"font-list": "git+https://github.com/lyswhut/node-font-list.git#c6caf4060e471afe143a4aca30d554644522966d",
|
||||||
"http-terminator": "^3.0.0",
|
"http-terminator": "^3.0.0",
|
||||||
"iconv-lite": "^0.6.3",
|
"iconv-lite": "^0.6.3",
|
||||||
"image-size": "^1.0.0",
|
"image-size": "^1.0.0",
|
||||||
"koa": "^2.13.1",
|
"koa": "^2.13.1",
|
||||||
"long": "^4.0.0",
|
"long": "^4.0.0",
|
||||||
"lrc-file-parser": "^1.1.2",
|
"lrc-file-parser": "^1.1.2",
|
||||||
"needle": "^2.8.0",
|
"needle": "^3.0.0",
|
||||||
"node-id3": "^0.2.3",
|
"node-id3": "^0.2.3",
|
||||||
"request": "^2.88.2",
|
"request": "^2.88.2",
|
||||||
"socket.io": "^4.1.3",
|
"socket.io": "^4.2.0",
|
||||||
"utf-8-validate": "^5.0.5",
|
"utf-8-validate": "^5.0.5",
|
||||||
"vue": "^2.6.14",
|
"vue": "^2.6.14",
|
||||||
"vue-i18n": "^8.25.0",
|
"vue-i18n": "^8.25.0",
|
||||||
|
|
|
@ -1,6 +1,18 @@
|
||||||
|
如果你喜欢并经常使用洛雪音乐,并想要第一时间尝鲜洛雪的新功能,可以加入测试企鹅群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`
|
||||||
|
- 软件内快捷键的最小化触发时,如果已启用托盘,则隐藏程序,否则最小化程序
|
||||||
|
|
||||||
### 修复
|
### 修复
|
||||||
|
|
||||||
- 修复播放下载列表的歌曲时切歌的问题
|
- 修复某些情况下同步功能会导致切歌混乱的问题
|
||||||
- 修复播放下载列表的歌曲时歌词无法显示的问题
|
- 修复从电脑浏览器复制的企鹅歌单链接无法打开的问题
|
||||||
- 修复下载列表稍后播放功能无效的问题
|
|
||||||
- 修复同步服务器启动失败时,关闭同步服务不会清空失败信息的问题
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -2,7 +2,7 @@ const path = require('path')
|
||||||
const os = require('os')
|
const os = require('os')
|
||||||
|
|
||||||
const defaultSetting = {
|
const defaultSetting = {
|
||||||
version: '1.0.43',
|
version: '1.0.45',
|
||||||
player: {
|
player: {
|
||||||
togglePlayMethod: 'listLoop',
|
togglePlayMethod: 'listLoop',
|
||||||
highQuality: false,
|
highQuality: false,
|
||||||
|
@ -26,6 +26,7 @@ const defaultSetting = {
|
||||||
theme: 0,
|
theme: 0,
|
||||||
isLockScreen: true,
|
isLockScreen: true,
|
||||||
style: {
|
style: {
|
||||||
|
font: '',
|
||||||
fontSize: 120,
|
fontSize: 120,
|
||||||
opacity: 95,
|
opacity: 95,
|
||||||
isZoomActiveLrc: true,
|
isZoomActiveLrc: true,
|
||||||
|
@ -44,6 +45,7 @@ const defaultSetting = {
|
||||||
fileName: '歌名 - 歌手',
|
fileName: '歌名 - 歌手',
|
||||||
maxDownloadNum: 3,
|
maxDownloadNum: 3,
|
||||||
isDownloadLrc: false,
|
isDownloadLrc: false,
|
||||||
|
lrcFormat: 'utf8',
|
||||||
isEmbedPic: true,
|
isEmbedPic: true,
|
||||||
isEmbedLyric: false,
|
isEmbedLyric: false,
|
||||||
isUseOtherSource: false,
|
isUseOtherSource: false,
|
||||||
|
|
|
@ -22,6 +22,7 @@ const names = {
|
||||||
set_app_setting: 'set_app_setting',
|
set_app_setting: 'set_app_setting',
|
||||||
set_window_size: 'set_window_size',
|
set_window_size: 'set_window_size',
|
||||||
show_save_dialog: 'show_save_dialog',
|
show_save_dialog: 'show_save_dialog',
|
||||||
|
get_system_fonts: 'get_system_fonts',
|
||||||
|
|
||||||
handle_request: 'handle_request',
|
handle_request: 'handle_request',
|
||||||
cancel_request: 'cancel_request',
|
cancel_request: 'cancel_request',
|
||||||
|
|
|
@ -47,8 +47,16 @@ exports.createWindow = async userApi => {
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
contextIsolation: true,
|
contextIsolation: true,
|
||||||
worldSafeExecuteJavaScript: true,
|
// worldSafeExecuteJavaScript: true,
|
||||||
nodeIntegration: false,
|
nodeIntegration: false,
|
||||||
|
|
||||||
|
spellcheck: false,
|
||||||
|
autoplayPolicy: 'document-user-activation-required',
|
||||||
|
enableWebSQL: false,
|
||||||
|
disableDialogs: true,
|
||||||
|
webgl: false,
|
||||||
|
images: false,
|
||||||
|
|
||||||
preload: path.join(dir, 'renderer/preload.js'),
|
preload: path.join(dir, 'renderer/preload.js'),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -19,6 +19,7 @@ require('./playList')
|
||||||
require('./data')
|
require('./data')
|
||||||
require('./lyric')
|
require('./lyric')
|
||||||
require('./musicUrl')
|
require('./musicUrl')
|
||||||
|
require('./systemFonts')
|
||||||
|
|
||||||
require('./kw_decodeLyric')
|
require('./kw_decodeLyric')
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
const { mainHandle, NAMES: { mainWindow: ipcMainWindowNames } } = require('@common/ipc')
|
||||||
|
const { getFonts } = require('@main/utils/fontManage')
|
||||||
|
|
||||||
|
mainHandle(ipcMainWindowNames.get_system_fonts, getFonts)
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
// const { getAvailableFontFamilies } = require('electron-font-manager')
|
||||||
|
|
||||||
|
|
||||||
|
// exports.getAvailableFontFamilies = getAvailableFontFamilies
|
||||||
|
|
||||||
|
|
||||||
|
const fontList = require('font-list')
|
||||||
|
|
||||||
|
exports.getFonts = fontList.getFonts
|
|
@ -39,6 +39,7 @@ export default {
|
||||||
y: -1,
|
y: -1,
|
||||||
theme: 0,
|
theme: 0,
|
||||||
style: {
|
style: {
|
||||||
|
font: '',
|
||||||
fontSize: 125,
|
fontSize: 125,
|
||||||
opacity: 80,
|
opacity: 80,
|
||||||
isZoomActiveLrc: true,
|
isZoomActiveLrc: true,
|
||||||
|
|
|
@ -21,6 +21,7 @@ export default {
|
||||||
default() {
|
default() {
|
||||||
return {
|
return {
|
||||||
style: {
|
style: {
|
||||||
|
font: '',
|
||||||
fontSize: 125,
|
fontSize: 125,
|
||||||
opacity: 80,
|
opacity: 80,
|
||||||
isZoomActiveLrc: true,
|
isZoomActiveLrc: true,
|
||||||
|
@ -77,6 +78,7 @@ export default {
|
||||||
computed: {
|
computed: {
|
||||||
lrcStyles() {
|
lrcStyles() {
|
||||||
return {
|
return {
|
||||||
|
fontFamily: this.lrcConfig.style.font,
|
||||||
fontSize: this.lrcConfig.style.fontSize / 100 + 'rem',
|
fontSize: this.lrcConfig.style.fontSize / 100 + 'rem',
|
||||||
opacity: this.lrcConfig.style.opacity / 100,
|
opacity: this.lrcConfig.style.opacity / 100,
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,6 +123,7 @@ export default {
|
||||||
setting: {
|
setting: {
|
||||||
handler(n, o) {
|
handler(n, o) {
|
||||||
saveSetting(n)
|
saveSetting(n)
|
||||||
|
global.appSetting = n
|
||||||
},
|
},
|
||||||
deep: true,
|
deep: true,
|
||||||
},
|
},
|
||||||
|
@ -287,7 +288,7 @@ export default {
|
||||||
})
|
})
|
||||||
|
|
||||||
rendererOn(NAMES.mainWindow.set_config, (event, config) => {
|
rendererOn(NAMES.mainWindow.set_config, (event, config) => {
|
||||||
console.log(config)
|
// console.log(config)
|
||||||
// this.setDesktopLyricConfig(config)
|
// this.setDesktopLyricConfig(config)
|
||||||
// console.log('set_config', JSON.stringify(this.setting) === JSON.stringify(config))
|
// console.log('set_config', JSON.stringify(this.setting) === JSON.stringify(config))
|
||||||
this.setSetting(Object.assign({}, this.setting, config))
|
this.setSetting(Object.assign({}, this.setting, config))
|
||||||
|
|
|
@ -268,7 +268,7 @@ export default {
|
||||||
'setting.player.togglePlayMethod'(n) {
|
'setting.player.togglePlayMethod'(n) {
|
||||||
audio.loop = n === 'singleLoop'
|
audio.loop = n === 'singleLoop'
|
||||||
if (this.playedList.length) this.clearPlayedList()
|
if (this.playedList.length) this.clearPlayedList()
|
||||||
if (n == 'random' && !this.playMusicInfo.isTempPlay) this.setPlayedList(this.playMusicInfo)
|
if (n == 'random' && this.playMusicInfo && !this.playMusicInfo.isTempPlay) this.setPlayedList(this.playMusicInfo)
|
||||||
},
|
},
|
||||||
'setting.player.isMute'(n) {
|
'setting.player.isMute'(n) {
|
||||||
audio.muted = n
|
audio.muted = n
|
||||||
|
|
|
@ -9,6 +9,10 @@ div(:class="$style.container")
|
||||||
@keyup.40.prevent="handleKeyDown"
|
@keyup.40.prevent="handleKeyDown"
|
||||||
@keyup.38.prevent="handleKeyUp"
|
@keyup.38.prevent="handleKeyUp"
|
||||||
@contextmenu="handleContextMenu")
|
@contextmenu="handleContextMenu")
|
||||||
|
transition(enter-active-class="animated zoomIn" leave-active-class="animated zoomOut")
|
||||||
|
button(type="button" @click="handleClearList" v-show="text")
|
||||||
|
svg(version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' height='100%' viewBox='0 0 24 24' space='preserve')
|
||||||
|
use(xlink:href='#icon-window-close')
|
||||||
button(type="button" @click="handleSearch")
|
button(type="button" @click="handleSearch")
|
||||||
slot
|
slot
|
||||||
svg(version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' height='100%' viewBox='0 0 30.239 30.239' space='preserve')
|
svg(version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' height='100%' viewBox='0 0 30.239 30.239' space='preserve')
|
||||||
|
@ -144,6 +148,11 @@ export default {
|
||||||
this.text = `${this.text.substring(0, dom_input.selectionStart)}${str}${this.text.substring(dom_input.selectionEnd, this.text.length)}`
|
this.text = `${this.text.substring(0, dom_input.selectionStart)}${str}${this.text.substring(dom_input.selectionEnd, this.text.length)}`
|
||||||
this.$emit('input', this.text)
|
this.$emit('input', this.text)
|
||||||
},
|
},
|
||||||
|
handleClearList() {
|
||||||
|
this.text = ''
|
||||||
|
this.$emit('input', this.text)
|
||||||
|
this.sendEvent('submit')
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -210,14 +219,17 @@ export default {
|
||||||
// background-color: @color-search-form-background;
|
// background-color: @color-search-form-background;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
outline: none;
|
outline: none;
|
||||||
border-top-right-radius: 3px;
|
|
||||||
border-bottom-right-radius: 3px;
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
padding: 6px 7px;
|
padding: 6px 7px;
|
||||||
color: @color-btn;
|
color: @color-btn;
|
||||||
transition: background-color .2s ease;
|
transition: background-color .2s ease;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
border-top-right-radius: 3px;
|
||||||
|
border-bottom-right-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: @color-theme-hover;
|
background-color: @color-theme-hover;
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,8 +45,8 @@ export default {
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
label() {
|
label() {
|
||||||
if (!this.value) return ''
|
if (this.value == null) return ''
|
||||||
if (!this.itemName) return this.value
|
if (this.itemName == null) return this.value
|
||||||
const item = this.list.find(l => l[this.itemKey] == this.value)
|
const item = this.list.find(l => l[this.itemKey] == this.value)
|
||||||
if (!item) return ''
|
if (!item) return ''
|
||||||
return item[this.itemName]
|
return item[this.itemName]
|
||||||
|
|
|
@ -25,6 +25,14 @@ eventHub.$on(baseName.bindKey, () => {
|
||||||
// console.log(event, key)
|
// console.log(event, key)
|
||||||
if (!window.isEditingHotKey && appHotKeyConfig.local.enable && appHotKeyConfig.local.keys[key]) {
|
if (!window.isEditingHotKey && appHotKeyConfig.local.enable && appHotKeyConfig.local.keys[key]) {
|
||||||
if (type == 'up') return
|
if (type == 'up') return
|
||||||
|
|
||||||
|
// 软件内快捷键的最小化触发时
|
||||||
|
// 如果已启用托盘,则隐藏程序,否则最小化程序 https://github.com/lyswhut/lx-music-desktop/issues/603
|
||||||
|
if (appHotKeyConfig.local.keys[key].action == hotKeyNamesCommon.min.action && global.appSetting.tray.isToTray) {
|
||||||
|
eventHub.$emit(hotKeyNamesCommon.hide_toggle.action)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
eventHub.$emit(appHotKeyConfig.local.keys[key].action)
|
eventHub.$emit(appHotKeyConfig.local.keys[key].action)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"lists_rename": "Rename",
|
"lists_rename": "Rename",
|
||||||
"lists_moveup": "Move Up",
|
"lists_moveup": "Move Up",
|
||||||
"lists_movedown": "Move Down",
|
"lists_movedown": "Move Down",
|
||||||
"lists_sync": "Sync",
|
"lists_sync": "Update",
|
||||||
"lists_remove": "Remove",
|
"lists_remove": "Remove",
|
||||||
"list_play": "Play",
|
"list_play": "Play",
|
||||||
"list_play_later": "Play later",
|
"list_play_later": "Play later",
|
||||||
|
|
|
@ -51,6 +51,8 @@
|
||||||
"desktop_lyric": "Desktop Lyric Settings",
|
"desktop_lyric": "Desktop Lyric Settings",
|
||||||
"desktop_lyric_always_on_top": "Make the lyrics always above other windows",
|
"desktop_lyric_always_on_top": "Make the lyrics always above other windows",
|
||||||
"desktop_lyric_enable": "Display lyrics",
|
"desktop_lyric_enable": "Display lyrics",
|
||||||
|
"desktop_lyric_font": "Lyric font",
|
||||||
|
"desktop_lyric_font_default": "Default",
|
||||||
"desktop_lyric_lock": "Lock lyrics",
|
"desktop_lyric_lock": "Lock lyrics",
|
||||||
"desktop_lyric_lock_screen": "It is not allowed to drag the lyrics window out of the main screen",
|
"desktop_lyric_lock_screen": "It is not allowed to drag the lyrics window out of the main screen",
|
||||||
"download": "Download",
|
"download": "Download",
|
||||||
|
@ -59,6 +61,9 @@
|
||||||
"download_embed_pic": "Embedding cover",
|
"download_embed_pic": "Embedding cover",
|
||||||
"download_enable": "Whether to enable download function",
|
"download_enable": "Whether to enable download function",
|
||||||
"download_lyric": "Lyrics download",
|
"download_lyric": "Lyrics download",
|
||||||
|
"download_lyric_format": "Downloaded lyrics file encoding format",
|
||||||
|
"download_lyric_format_gbk": "GBK (Try to select this format when Chinese garbled characters appear on some devices)",
|
||||||
|
"download_lyric_format_utf8": "UTF-8",
|
||||||
"download_lyric_title": "Select whether to download the lyrics file",
|
"download_lyric_title": "Select whether to download the lyrics file",
|
||||||
"download_name": "Music file naming",
|
"download_name": "Music file naming",
|
||||||
"download_name1": "Title - Artist",
|
"download_name1": "Title - Artist",
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"lists_rename": "重命名",
|
"lists_rename": "重命名",
|
||||||
"lists_moveup": "上移",
|
"lists_moveup": "上移",
|
||||||
"lists_movedown": "下移",
|
"lists_movedown": "下移",
|
||||||
"lists_sync": "同步",
|
"lists_sync": "更新",
|
||||||
"lists_remove": "删除",
|
"lists_remove": "删除",
|
||||||
"list_play": "播放",
|
"list_play": "播放",
|
||||||
"list_play_later": "稍后播放",
|
"list_play_later": "稍后播放",
|
||||||
|
|
|
@ -51,6 +51,8 @@
|
||||||
"desktop_lyric": "桌面歌词设置",
|
"desktop_lyric": "桌面歌词设置",
|
||||||
"desktop_lyric_always_on_top": "使歌词总是在其他窗口之上",
|
"desktop_lyric_always_on_top": "使歌词总是在其他窗口之上",
|
||||||
"desktop_lyric_enable": "显示歌词",
|
"desktop_lyric_enable": "显示歌词",
|
||||||
|
"desktop_lyric_font": "歌词字体",
|
||||||
|
"desktop_lyric_font_default": "默认",
|
||||||
"desktop_lyric_lock": "锁定歌词",
|
"desktop_lyric_lock": "锁定歌词",
|
||||||
"desktop_lyric_lock_screen": "不允许歌词窗口拖出主屏幕之外",
|
"desktop_lyric_lock_screen": "不允许歌词窗口拖出主屏幕之外",
|
||||||
"download": "下载设置",
|
"download": "下载设置",
|
||||||
|
@ -59,6 +61,9 @@
|
||||||
"download_embed_pic": "封面嵌入",
|
"download_embed_pic": "封面嵌入",
|
||||||
"download_enable": "是否启用下载功能",
|
"download_enable": "是否启用下载功能",
|
||||||
"download_lyric": "歌词下载",
|
"download_lyric": "歌词下载",
|
||||||
|
"download_lyric_format": "下载的歌词文件编码格式",
|
||||||
|
"download_lyric_format_gbk": "GBK(在某些设备上出现中文乱码时可尝试选择此格式)",
|
||||||
|
"download_lyric_format_utf8": "UTF-8",
|
||||||
"download_lyric_title": "是否同时下载歌词文件",
|
"download_lyric_title": "是否同时下载歌词文件",
|
||||||
"download_name": "文件命名方式",
|
"download_name": "文件命名方式",
|
||||||
"download_name1": "歌名 - 歌手",
|
"download_name1": "歌名 - 歌手",
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"lists_rename": "重命名",
|
"lists_rename": "重命名",
|
||||||
"lists_moveup": "上移",
|
"lists_moveup": "上移",
|
||||||
"lists_movedown": "下移",
|
"lists_movedown": "下移",
|
||||||
"lists_sync": "同步",
|
"lists_sync": "更新",
|
||||||
"lists_remove": "刪除",
|
"lists_remove": "刪除",
|
||||||
"list_play": "播放",
|
"list_play": "播放",
|
||||||
"list_play_later": "稍後播放",
|
"list_play_later": "稍後播放",
|
||||||
|
|
|
@ -51,6 +51,8 @@
|
||||||
"desktop_lyric": "桌面歌詞設置",
|
"desktop_lyric": "桌面歌詞設置",
|
||||||
"desktop_lyric_always_on_top": "使歌詞總是在其他窗口之上",
|
"desktop_lyric_always_on_top": "使歌詞總是在其他窗口之上",
|
||||||
"desktop_lyric_enable": "顯示歌詞",
|
"desktop_lyric_enable": "顯示歌詞",
|
||||||
|
"desktop_lyric_font": "歌詞字體",
|
||||||
|
"desktop_lyric_font_default": "默認",
|
||||||
"desktop_lyric_lock": "鎖定歌詞",
|
"desktop_lyric_lock": "鎖定歌詞",
|
||||||
"desktop_lyric_lock_screen": "不允許歌詞窗口拖出主屏幕之外",
|
"desktop_lyric_lock_screen": "不允許歌詞窗口拖出主屏幕之外",
|
||||||
"download": "下載設置",
|
"download": "下載設置",
|
||||||
|
@ -59,6 +61,9 @@
|
||||||
"download_embed_pic": "封面嵌入",
|
"download_embed_pic": "封面嵌入",
|
||||||
"download_enable": "是否啟用下載功能",
|
"download_enable": "是否啟用下載功能",
|
||||||
"download_lyric": "歌詞下載",
|
"download_lyric": "歌詞下載",
|
||||||
|
"download_lyric_format": "下載的歌詞文件編碼格式",
|
||||||
|
"download_lyric_format_gbk": "GBK(在某些設備上出現中文亂碼時可嘗試選擇此格式)",
|
||||||
|
"download_lyric_format_utf8": "UTF-8",
|
||||||
"download_lyric_title": "是否同時下載歌詞文件",
|
"download_lyric_title": "是否同時下載歌詞文件",
|
||||||
"download_name": "文件命名方式",
|
"download_name": "文件命名方式",
|
||||||
"download_name1": "歌名 - 歌手",
|
"download_name1": "歌名 - 歌手",
|
||||||
|
|
|
@ -26,6 +26,7 @@ Vue.config.productionTip = false
|
||||||
Vue.config.devtools = process.env.NODE_ENV === 'development'
|
Vue.config.devtools = process.env.NODE_ENV === 'development'
|
||||||
|
|
||||||
getSetting().then(({ setting, version }) => {
|
getSetting().then(({ setting, version }) => {
|
||||||
|
global.appSetting = setting
|
||||||
// Set language automatically
|
// Set language automatically
|
||||||
if (!window.i18n.availableLocales.includes(setting.langId)) {
|
if (!window.i18n.availableLocales.includes(setting.langId)) {
|
||||||
let langId = null
|
let langId = null
|
||||||
|
|
|
@ -307,7 +307,7 @@ const saveMeta = function(downloadInfo, filePath, isUseOtherSource, isEmbedPic,
|
||||||
* @param {*} downloadInfo
|
* @param {*} downloadInfo
|
||||||
* @param {*} filePath
|
* @param {*} filePath
|
||||||
*/
|
*/
|
||||||
const downloadLyric = (downloadInfo, filePath) => {
|
const downloadLyric = (downloadInfo, filePath, lrcFormat) => {
|
||||||
const promise = getLyric(downloadInfo.musicInfo).then(lrcInfo => {
|
const promise = getLyric(downloadInfo.musicInfo).then(lrcInfo => {
|
||||||
return lrcInfo.lyric
|
return lrcInfo.lyric
|
||||||
? Promise.resolve({ lyric: lrcInfo.lyric, tlyric: lrcInfo.tlyric || '' })
|
? Promise.resolve({ lyric: lrcInfo.lyric, tlyric: lrcInfo.tlyric || '' })
|
||||||
|
@ -319,7 +319,7 @@ const downloadLyric = (downloadInfo, filePath) => {
|
||||||
promise.then(lrcs => {
|
promise.then(lrcs => {
|
||||||
if (lrcs.lyric) {
|
if (lrcs.lyric) {
|
||||||
lrcs.lyric = fixKgLyric(lrcs.lyric)
|
lrcs.lyric = fixKgLyric(lrcs.lyric)
|
||||||
saveLrc(filePath.replace(/(mp3|flac|ape|wav)$/, 'lrc'), lrcs.lyric)
|
saveLrc(filePath.replace(/(mp3|flac|ape|wav)$/, 'lrc'), lrcs.lyric, lrcFormat)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -436,7 +436,7 @@ const actions = {
|
||||||
dispatch('startTask')
|
dispatch('startTask')
|
||||||
|
|
||||||
saveMeta.call(_this, downloadInfo, downloadInfo.filePath, rootState.setting.download.isUseOtherSource, rootState.setting.download.isEmbedPic, rootState.setting.download.isEmbedLyric)
|
saveMeta.call(_this, downloadInfo, downloadInfo.filePath, rootState.setting.download.isUseOtherSource, rootState.setting.download.isEmbedPic, rootState.setting.download.isEmbedLyric)
|
||||||
if (rootState.setting.download.isDownloadLrc) downloadLyric(downloadInfo, downloadInfo.filePath)
|
if (rootState.setting.download.isDownloadLrc) downloadLyric(downloadInfo, downloadInfo.filePath, rootState.setting.download.lrcFormat)
|
||||||
console.log('on complate')
|
console.log('on complate')
|
||||||
},
|
},
|
||||||
onError(err) {
|
onError(err) {
|
||||||
|
|
|
@ -82,20 +82,29 @@ const mutations = {
|
||||||
setSyncListData(state, { defaultList, loveList, userList }) {
|
setSyncListData(state, { defaultList, loveList, userList }) {
|
||||||
state.defaultList.list.splice(0, state.defaultList.list.length, ...defaultList.list)
|
state.defaultList.list.splice(0, state.defaultList.list.length, ...defaultList.list)
|
||||||
state.loveList.list.splice(0, state.loveList.list.length, ...loveList.list)
|
state.loveList.list.splice(0, state.loveList.list.length, ...loveList.list)
|
||||||
|
for (let index = 0; index < userList.length; index++) {
|
||||||
|
const list = userList[index]
|
||||||
|
const targetList = allList[list.id]
|
||||||
|
if (targetList) {
|
||||||
|
userList.splice(index, 1, targetList)
|
||||||
|
targetList.name = list.name
|
||||||
|
targetList.list.splice(0, targetList.list.length, ...list.list)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log()
|
||||||
state.userList = userList
|
state.userList = userList
|
||||||
allListInit(state.defaultList, state.loveList, state.userList)
|
allListInit(state.defaultList, state.loveList, state.userList)
|
||||||
},
|
},
|
||||||
setList(state, { id, list, name, location, source, sourceListId, isSync }) {
|
setList(state, { id, list, name, location, source, sourceListId, isSync }) {
|
||||||
if (!isSync) {
|
|
||||||
window.eventHub.$emit(eventSyncName.send_action_list, {
|
|
||||||
action: 'set_list',
|
|
||||||
data: { id, list, name, location, source, sourceListId },
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const targetList = allList[id]
|
const targetList = allList[id]
|
||||||
if (targetList) {
|
if (targetList) {
|
||||||
if (name && targetList.name === name) {
|
if (name && targetList.name === name) {
|
||||||
|
if (!isSync) {
|
||||||
|
window.eventHub.$emit(eventSyncName.send_action_list, {
|
||||||
|
action: 'set_list',
|
||||||
|
data: { id, list, name, location, source, sourceListId },
|
||||||
|
})
|
||||||
|
}
|
||||||
targetList.list.splice(0, targetList.list.length, ...list)
|
targetList.list.splice(0, targetList.list.length, ...list)
|
||||||
targetList.location = location
|
targetList.location = location
|
||||||
return
|
return
|
||||||
|
@ -103,6 +112,12 @@ const mutations = {
|
||||||
|
|
||||||
id += '_' + Math.random()
|
id += '_' + Math.random()
|
||||||
}
|
}
|
||||||
|
if (!isSync) {
|
||||||
|
window.eventHub.$emit(eventSyncName.send_action_list, {
|
||||||
|
action: 'set_list',
|
||||||
|
data: { id, list, name, location, source, sourceListId },
|
||||||
|
})
|
||||||
|
}
|
||||||
let newList = {
|
let newList = {
|
||||||
name,
|
name,
|
||||||
id,
|
id,
|
||||||
|
|
|
@ -3,6 +3,7 @@ import path from 'path'
|
||||||
import { shell, clipboard } from 'electron'
|
import { shell, clipboard } from 'electron'
|
||||||
import crypto from 'crypto'
|
import crypto from 'crypto'
|
||||||
import { rendererSend, rendererInvoke, NAMES } from '../../common/ipc'
|
import { rendererSend, rendererInvoke, NAMES } from '../../common/ipc'
|
||||||
|
import iconv from 'iconv-lite'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取两个数之间的随机整数,大于等于min,小于max
|
* 获取两个数之间的随机整数,大于等于min,小于max
|
||||||
|
@ -276,11 +277,22 @@ export const setMeta = (filePath, meta) => {
|
||||||
* 保存歌词文件
|
* 保存歌词文件
|
||||||
* @param {*} filePath
|
* @param {*} filePath
|
||||||
* @param {*} lrc
|
* @param {*} lrc
|
||||||
|
* @param {*} format
|
||||||
*/
|
*/
|
||||||
export const saveLrc = (filePath, lrc) => {
|
export const saveLrc = (filePath, lrc, format) => {
|
||||||
fs.writeFile(filePath, lrc, 'utf8', err => {
|
switch (format) {
|
||||||
if (err) console.log(err)
|
case 'gbk':
|
||||||
})
|
fs.writeFile(filePath, iconv.encode(lrc, 'gbk', { addBOM: true }), err => {
|
||||||
|
if (err) console.log(err)
|
||||||
|
})
|
||||||
|
break
|
||||||
|
case 'utf8':
|
||||||
|
default:
|
||||||
|
fs.writeFile(filePath, lrc, 'utf8', err => {
|
||||||
|
if (err) console.log(err)
|
||||||
|
})
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -26,7 +26,7 @@ export default {
|
||||||
|
|
||||||
// https://y.qq.com/n/yqq/playlist/7217720898.html
|
// https://y.qq.com/n/yqq/playlist/7217720898.html
|
||||||
// https://i.y.qq.com/n2/m/share/details/taoge.html?platform=11&appshare=android_qq&appversion=9050006&id=7217720898&ADTAG=qfshare
|
// https://i.y.qq.com/n2/m/share/details/taoge.html?platform=11&appshare=android_qq&appversion=9050006&id=7217720898&ADTAG=qfshare
|
||||||
listDetailLink1: /^.+(?:\?|&)id=(\d+)(?:&.*$|#.*$|$)/,
|
listDetailLink1: /^.+(?:(?:\?|&)id=|ryqq\/playlist\/)(\d+)(?:&.*$|#.*$|$)/,
|
||||||
listDetailLink2: /^.+\/(\d+)\.html(?:\?.*|&.*$|#.*$|$)/,
|
listDetailLink2: /^.+\/(\d+)\.html(?:\?.*|&.*$|#.*$|$)/,
|
||||||
},
|
},
|
||||||
tagsUrl: 'https://u.y.qq.com/cgi-bin/musicu.fcg?loginUin=0&hostUin=0&format=json&inCharset=utf-8&outCharset=utf-8¬ice=0&platform=wk_v15.json&needNewCode=0&data=%7B%22tags%22%3A%7B%22method%22%3A%22get_all_categories%22%2C%22param%22%3A%7B%22qq%22%3A%22%22%7D%2C%22module%22%3A%22playlist.PlaylistAllCategoriesServer%22%7D%7D',
|
tagsUrl: 'https://u.y.qq.com/cgi-bin/musicu.fcg?loginUin=0&hostUin=0&format=json&inCharset=utf-8&outCharset=utf-8¬ice=0&platform=wk_v15.json&needNewCode=0&data=%7B%22tags%22%3A%7B%22method%22%3A%22get_all_categories%22%2C%22param%22%3A%7B%22qq%22%3A%22%22%7D%2C%22module%22%3A%22playlist.PlaylistAllCategoriesServer%22%7D%7D',
|
||||||
|
|
|
@ -17,6 +17,7 @@ export default {
|
||||||
limit_list: 30,
|
limit_list: 30,
|
||||||
limit_song: 100000,
|
limit_song: 100000,
|
||||||
successCode: 200,
|
successCode: 200,
|
||||||
|
cookie: 'MUSIC_U=',
|
||||||
sortList: [
|
sortList: [
|
||||||
{
|
{
|
||||||
name: '最热',
|
name: '最热',
|
||||||
|
@ -63,6 +64,11 @@ export default {
|
||||||
if (this._requestObj_listDetail) this._requestObj_listDetail.cancelHttp()
|
if (this._requestObj_listDetail) this._requestObj_listDetail.cancelHttp()
|
||||||
if (tryNum > 2) return Promise.reject(new Error('try max num'))
|
if (tryNum > 2) return Promise.reject(new Error('try max num'))
|
||||||
|
|
||||||
|
if (/###/.test(id)) {
|
||||||
|
const [url, token] = id.split('###')
|
||||||
|
id = url
|
||||||
|
this.cookie = `MUSIC_U=${token}`
|
||||||
|
}
|
||||||
if ((/[?&:/]/.test(id))) {
|
if ((/[?&:/]/.test(id))) {
|
||||||
if (this.regExps.listDetailLink.test(id)) {
|
if (this.regExps.listDetailLink.test(id)) {
|
||||||
id = id.replace(this.regExps.listDetailLink, '$1')
|
id = id.replace(this.regExps.listDetailLink, '$1')
|
||||||
|
@ -76,7 +82,10 @@ export default {
|
||||||
|
|
||||||
this._requestObj_listDetail = httpFetch('https://music.163.com/api/linux/forward', {
|
this._requestObj_listDetail = httpFetch('https://music.163.com/api/linux/forward', {
|
||||||
method: 'post',
|
method: 'post',
|
||||||
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36',
|
headers: {
|
||||||
|
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36',
|
||||||
|
Cookie: this.cookie,
|
||||||
|
},
|
||||||
form: linuxapi({
|
form: linuxapi({
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
url: 'https://music.163.com/api/v3/playlist/detail',
|
url: 'https://music.163.com/api/v3/playlist/detail',
|
||||||
|
|
|
@ -91,6 +91,10 @@ div(:class="$style.main")
|
||||||
material-checkbox(id="setting_desktop_lyric_alwaysOnTop" v-model="current_setting.desktopLyric.isAlwaysOnTop" :label="$t('view.setting.desktop_lyric_always_on_top')")
|
material-checkbox(id="setting_desktop_lyric_alwaysOnTop" v-model="current_setting.desktopLyric.isAlwaysOnTop" :label="$t('view.setting.desktop_lyric_always_on_top')")
|
||||||
div(:class="$style.gapTop")
|
div(:class="$style.gapTop")
|
||||||
material-checkbox(id="setting_desktop_lyric_lockScreen" v-model="current_setting.desktopLyric.isLockScreen" :label="$t('view.setting.desktop_lyric_lock_screen')")
|
material-checkbox(id="setting_desktop_lyric_lockScreen" v-model="current_setting.desktopLyric.isLockScreen" :label="$t('view.setting.desktop_lyric_lock_screen')")
|
||||||
|
dd
|
||||||
|
h3#desktop_lyric_font {{$t('view.setting.desktop_lyric_font')}}
|
||||||
|
div
|
||||||
|
material-selection(:list="fontList" :class="$style.gapLeft" v-model="current_setting.desktopLyric.style.font" item-key="id" item-name="label")
|
||||||
|
|
||||||
dt#search {{$t('view.setting.search')}}
|
dt#search {{$t('view.setting.search')}}
|
||||||
dd
|
dd
|
||||||
|
@ -130,7 +134,7 @@ div(:class="$style.main")
|
||||||
p
|
p
|
||||||
material-btn(:class="$style.btn" min @click="handleChangeSavePath") {{$t('view.setting.download_path_change_btn')}}
|
material-btn(:class="$style.btn" min @click="handleChangeSavePath") {{$t('view.setting.download_path_change_btn')}}
|
||||||
dd
|
dd
|
||||||
h3#download_name {{$t('view.setting.download_use_other_source')}}
|
h3#download_use_other_source {{$t('view.setting.download_use_other_source')}}
|
||||||
div
|
div
|
||||||
material-checkbox(id="setting_download_isUseOtherSource" v-model="current_setting.download.isUseOtherSource" :label="$t('view.setting.is_enable')")
|
material-checkbox(id="setting_download_isUseOtherSource" v-model="current_setting.download.isUseOtherSource" :label="$t('view.setting.is_enable')")
|
||||||
div
|
div
|
||||||
|
@ -149,6 +153,11 @@ div(:class="$style.main")
|
||||||
h3#download_lyric {{$t('view.setting.download_lyric')}}
|
h3#download_lyric {{$t('view.setting.download_lyric')}}
|
||||||
div
|
div
|
||||||
material-checkbox(id="setting_download_isDownloadLrc" v-model="current_setting.download.isDownloadLrc" :label="$t('view.setting.is_enable')")
|
material-checkbox(id="setting_download_isDownloadLrc" v-model="current_setting.download.isDownloadLrc" :label="$t('view.setting.is_enable')")
|
||||||
|
dd
|
||||||
|
h3#download_lyric {{$t('view.setting.download_lyric_format')}}
|
||||||
|
div
|
||||||
|
material-checkbox(v-for="item in lrcFormatList" :key="item.id" :class="$style.gapLeft" :id="`setting_download_lrcFormat_${item.id}`"
|
||||||
|
name="setting_basic_control_btn_position" need v-model="current_setting.download.lrcFormat" :value="item.id" :label="item.name")
|
||||||
|
|
||||||
dt#sync {{$t('view.setting.sync')}}
|
dt#sync {{$t('view.setting.sync')}}
|
||||||
dd
|
dd
|
||||||
|
@ -278,6 +287,17 @@ div(:class="$style.main")
|
||||||
| ,或到 GitHub 提交
|
| ,或到 GitHub 提交
|
||||||
span.hover.underline(:tips="$t('view.setting.click_open')" @click="handleOpenUrl('https://github.com/lyswhut/lx-music-desktop/issues')") issue
|
span.hover.underline(:tips="$t('view.setting.click_open')" @click="handleOpenUrl('https://github.com/lyswhut/lx-music-desktop/issues')") issue
|
||||||
|
|
||||||
|
br
|
||||||
|
p.small
|
||||||
|
| 如果你喜欢并经常使用洛雪音乐,并想要第一时间尝鲜洛雪的新功能
|
||||||
|
span(style="text-decoration: line-through;") (当小白鼠)
|
||||||
|
| ,
|
||||||
|
p
|
||||||
|
| 可以加入测试企鹅群
|
||||||
|
span.hover(:tips="$t('view.setting.click_open')" @click="handleOpenUrl('https://qm.qq.com/cgi-bin/qm/qr?k=zR6aYosQoKb07g4FGFZdO9n9zL1dhFpE&jump_from=webapi')") 768786588
|
||||||
|
| ,注意:测试版的功可能会不稳定,
|
||||||
|
strong 打算潜水的勿加
|
||||||
|
|
||||||
br
|
br
|
||||||
p.small 由于软件开发的初衷仅是为了对新技术的学习与研究,因此软件直至停止维护都将会一直保持纯净。
|
p.small 由于软件开发的初衷仅是为了对新技术的学习与研究,因此软件直至停止维护都将会一直保持纯净。
|
||||||
|
|
||||||
|
@ -413,6 +433,18 @@ export default {
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
lrcFormatList() {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
name: this.$t('view.setting.download_lyric_format_utf8'),
|
||||||
|
id: 'utf8',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: this.$t('view.setting.download_lyric_format_gbk'),
|
||||||
|
id: 'gbk',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
trayThemeList() {
|
trayThemeList() {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
|
@ -440,6 +472,9 @@ export default {
|
||||||
? this.sync.status.devices.map(d => `${d.deviceName} (${d.clientId.substring(0, 5)})`).join(', ')
|
? this.sync.status.devices.map(d => `${d.deviceName} (${d.clientId.substring(0, 5)})`).join(', ')
|
||||||
: ''
|
: ''
|
||||||
},
|
},
|
||||||
|
fontList() {
|
||||||
|
return [{ id: '', label: this.$t('view.setting.desktop_lyric_font_default') }, ...this.systemFontList]
|
||||||
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -461,6 +496,7 @@ export default {
|
||||||
y: -1,
|
y: -1,
|
||||||
theme: '',
|
theme: '',
|
||||||
style: {
|
style: {
|
||||||
|
font: '',
|
||||||
fontSize: 125,
|
fontSize: 125,
|
||||||
opacity: 80,
|
opacity: 80,
|
||||||
isZoomActiveLrc: true,
|
isZoomActiveLrc: true,
|
||||||
|
@ -483,6 +519,7 @@ export default {
|
||||||
savePath: '',
|
savePath: '',
|
||||||
fileName: '歌名 - 歌手',
|
fileName: '歌名 - 歌手',
|
||||||
isDownloadLrc: false,
|
isDownloadLrc: false,
|
||||||
|
lrcFormat: 'utf8',
|
||||||
isEmbedPic: true,
|
isEmbedPic: true,
|
||||||
isEmbedLyric: true,
|
isEmbedLyric: true,
|
||||||
},
|
},
|
||||||
|
@ -651,6 +688,7 @@ export default {
|
||||||
devices: [],
|
devices: [],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
systemFontList: [],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
@ -724,6 +762,7 @@ export default {
|
||||||
if (!window.currentWindowSizeId) window.currentWindowSizeId = this.setting.windowSizeId
|
if (!window.currentWindowSizeId) window.currentWindowSizeId = this.setting.windowSizeId
|
||||||
// this.initTOC()
|
// this.initTOC()
|
||||||
this.getCacheSize()
|
this.getCacheSize()
|
||||||
|
this.getSystemFonts()
|
||||||
this.getMediaDevice()
|
this.getMediaDevice()
|
||||||
this.current_hot_key = window.appHotKeyConfig
|
this.current_hot_key = window.appHotKeyConfig
|
||||||
this.initHotKeyConfig()
|
this.initHotKeyConfig()
|
||||||
|
@ -1232,6 +1271,13 @@ export default {
|
||||||
handleRefreshSyncCode() {
|
handleRefreshSyncCode() {
|
||||||
rendererInvoke(NAMES.mainWindow.sync_generate_code)
|
rendererInvoke(NAMES.mainWindow.sync_generate_code)
|
||||||
},
|
},
|
||||||
|
getSystemFonts() {
|
||||||
|
rendererInvoke(NAMES.mainWindow.get_system_fonts).then(fonts => {
|
||||||
|
this.systemFontList = fonts.map(f => ({ id: f, label: f.replace(/(^"|"$)/g, '') }))
|
||||||
|
}).catch(() => {
|
||||||
|
this.systemFontList = []
|
||||||
|
})
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in New Issue