diff --git a/CHANGELOG.md b/CHANGELOG.md index f5a75b06..999b087d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,34 @@ 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/). +## [1.2.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.1.1...v1.2.0) - 2020-09-30 + +提前祝大家中秋&国庆快乐~ + +### 新增 + +- 播放控制栏开启/关闭桌面歌词按钮 新增右击按钮时锁定/解锁桌面歌词功能 + +### 优化 + +- 优化我的列表滚动条位置的保存逻辑 +- 更新设置-备份与恢复功能的描述 +- 优化软件内鼠标悬停的提示界面 + +### 修复 + +- 修复桌面歌词窗口不允许拖出桌面之外的位置计算偏移Bug +- 修复网易云KTV嗨榜无法加载的问题 +- 修复初始化搜索历史列表功能 +- 修复重启软件后试听列表与收藏列表无法恢复上次的滚动位置的问题 +- 修复歌曲封面无法嵌入的Bug +- 修复酷狗歌词格式问题 +- 修复关闭切换动画时从搜索候选列表点击内容无效的问题 + +### 其他 + +- 更新 Electron 到 v10.1.3 + ## [1.1.1](https://github.com/lyswhut/lx-music-desktop/compare/v1.1.0...v1.1.1) - 2020-09-19 ### 修复 diff --git a/package-lock.json b/package-lock.json index c63a03d6..fc783b32 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "lx-music-desktop", - "version": "1.1.0", + "version": "1.1.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -3129,8 +3129,8 @@ }, "@types/anymatch": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", - "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", + "resolved": "https://registry.npm.taobao.org/@types/anymatch/download/@types/anymatch-1.3.1.tgz", + "integrity": "sha1-M2utwb7sudrMOL6izzKt9ieoQho=", "dev": true }, "@types/color-name": { @@ -3172,9 +3172,9 @@ } }, "@types/html-minifier-terser": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz", - "integrity": "sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA==", + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/@types/html-minifier-terser/download/@types/html-minifier-terser-5.1.1.tgz?cache=0&sync_timestamp=1600891737510&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fhtml-minifier-terser%2Fdownload%2F%40types%2Fhtml-minifier-terser-5.1.1.tgz", + "integrity": "sha1-PJ7pgPGhDWAhrmYyyj55yi7E+1A=", "dev": true }, "@types/json-schema": { @@ -3220,20 +3220,20 @@ }, "@types/source-list-map": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "resolved": "https://registry.npm.taobao.org/@types/source-list-map/download/@types/source-list-map-0.1.2.tgz", + "integrity": "sha1-AHiDYGP/rxdBI0m7o2QIfgrALsk=", "dev": true }, "@types/tapable": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", - "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==", + "resolved": "https://registry.npm.taobao.org/@types/tapable/download/@types/tapable-1.0.6.tgz", + "integrity": "sha1-qcpLcKGLJwzLK8Cqr+/R1Ia36nQ=", "dev": true }, "@types/uglify-js": { "version": "3.9.3", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.3.tgz", - "integrity": "sha512-KswB5C7Kwduwjj04Ykz+AjvPcfgv/37Za24O2EDzYNbwyzOo8+ydtvzUfZ5UMguiVu29Gx44l1A6VsPPcmYu9w==", + "resolved": "https://registry.npm.taobao.org/@types/uglify-js/download/@types/uglify-js-3.9.3.tgz", + "integrity": "sha1-2U7WCOKVvFQkyWAOa4VlQHtrS2s=", "dev": true, "requires": { "source-map": "^0.6.1" @@ -3241,16 +3241,16 @@ "dependencies": { "source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true } } }, "@types/webpack": { "version": "4.41.22", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.22.tgz", - "integrity": "sha512-JQDJK6pj8OMV9gWOnN1dcLCyU9Hzs6lux0wBO4lr1+gyEhIBR9U3FMrz12t2GPkg110XAxEAw2WHF6g7nZIbRQ==", + "resolved": "https://registry.npm.taobao.org/@types/webpack/download/@types/webpack-4.41.22.tgz", + "integrity": "sha1-/5dYoXxr1JnkWbkeeFOYSMMtBzE=", "dev": true, "requires": { "@types/anymatch": "*", @@ -3263,16 +3263,16 @@ "dependencies": { "source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true } } }, "@types/webpack-sources": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-1.4.2.tgz", - "integrity": "sha512-77T++JyKow4BQB/m9O96n9d/UUHWLQHlcqXb9Vsf4F1+wKNrrlWNFPDLKNT92RJnCSL6CieTc+NDXtCVZswdTw==", + "resolved": "https://registry.npm.taobao.org/@types/webpack-sources/download/@types/webpack-sources-1.4.2.tgz", + "integrity": "sha1-XT1N6gQAineakBNf+W+1wMnmKSw=", "dev": true, "requires": { "@types/node": "*", @@ -3282,8 +3282,8 @@ "dependencies": { "source-map": { "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz", + "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=", "dev": true } } @@ -3901,8 +3901,8 @@ }, "array-includes": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "resolved": "https://registry.npm.taobao.org/array-includes/download/array-includes-3.1.1.tgz", + "integrity": "sha1-zdZ+aFK9+cEhVGB4ZzIlXtJFk0g=", "dev": true, "requires": { "define-properties": "^1.1.3", @@ -3933,8 +3933,8 @@ }, "array.prototype.flat": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", - "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "resolved": "https://registry.npm.taobao.org/array.prototype.flat/download/array.prototype.flat-1.2.3.tgz", + "integrity": "sha1-DegrQmsDGNv9uUAInjiwQ9N/bHs=", "dev": true, "requires": { "define-properties": "^1.1.3", @@ -5492,8 +5492,8 @@ }, "camel-case": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz", - "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==", + "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-4.1.1.tgz", + "integrity": "sha1-H8QchU8A4vfQE53+uhVC1olv5Uc=", "dev": true, "requires": { "pascal-case": "^3.1.1", @@ -5800,8 +5800,8 @@ }, "clean-css": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "resolved": "https://registry.npm.taobao.org/clean-css/download/clean-css-4.2.3.tgz", + "integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=", "dev": true, "requires": { "source-map": "~0.6.0" @@ -5809,8 +5809,8 @@ "dependencies": { "source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true } } @@ -5963,8 +5963,8 @@ }, "commander": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "resolved": "https://registry.npm.taobao.org/commander/download/commander-4.1.1.tgz?cache=0&sync_timestamp=1598576153505&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-4.1.1.tgz", + "integrity": "sha1-n9YCvZNilOnp70aj9NaWQESxgGg=", "dev": true }, "commondir": { @@ -6787,8 +6787,8 @@ }, "css-what": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-2.1.3.tgz", + "integrity": "sha1-ptdgRXM2X+dGhsPzEcVlE9iChfI=", "dev": true }, "cssesc": { @@ -7032,68 +7032,31 @@ } }, "del": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", - "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/del/download/del-6.0.0.tgz?cache=0&sync_timestamp=1601076882347&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-6.0.0.tgz", + "integrity": "sha1-C0DQMyzqdD8WFPgYvk/rcXcUyVI=", "dev": true, "requires": { - "globby": "^10.0.1", - "graceful-fs": "^4.2.2", + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", "is-glob": "^4.0.1", "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.1", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", "slash": "^3.0.0" }, "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz", + "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=", "dev": true }, "slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz", + "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=", "dev": true } } @@ -7279,8 +7242,8 @@ }, "dom-converter": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "resolved": "https://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz", + "integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=", "dev": true, "requires": { "utila": "~0.4" @@ -7324,8 +7287,8 @@ }, "domhandler": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "resolved": "https://registry.npm.taobao.org/domhandler/download/domhandler-2.4.2.tgz?cache=0&sync_timestamp=1600893207828&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomhandler%2Fdownload%2Fdomhandler-2.4.2.tgz", + "integrity": "sha1-iAUJfpM9ZehVRvcm1g9euItE+AM=", "dev": true, "requires": { "domelementtype": "1" @@ -7343,8 +7306,8 @@ }, "dot-case": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz", - "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==", + "resolved": "https://registry.npm.taobao.org/dot-case/download/dot-case-3.0.3.tgz", + "integrity": "sha1-IdO1Lvqroupf2odbsaqBJFIc9Ko=", "dev": true, "requires": { "no-case": "^3.0.3", @@ -7414,9 +7377,9 @@ } }, "electron": { - "version": "10.1.2", - "resolved": "https://registry.npm.taobao.org/electron/download/electron-10.1.2.tgz?cache=0&sync_timestamp=1600129457400&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felectron%2Fdownload%2Felectron-10.1.2.tgz", - "integrity": "sha1-MLb9dmn42vCMViGaYd+gU/orDHA=", + "version": "10.1.3", + "resolved": "https://registry.npm.taobao.org/electron/download/electron-10.1.3.tgz?cache=0&sync_timestamp=1601355591502&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felectron%2Fdownload%2Felectron-10.1.3.tgz", + "integrity": "sha1-fiduNzvzAHi9TLEYSFCpEmjcDmw=", "dev": true, "requires": { "@electron/get": "^1.0.1", @@ -7426,7 +7389,7 @@ "dependencies": { "@types/node": { "version": "12.12.62", - "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-12.12.62.tgz?cache=0&sync_timestamp=1600365423347&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-12.12.62.tgz", + "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-12.12.62.tgz?cache=0&sync_timestamp=1600732787803&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-12.12.62.tgz", "integrity": "sha1-czkj1zZpGI01lQJT3RiiFXAIXSs=", "dev": true } @@ -7756,8 +7719,8 @@ }, "entities": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "resolved": "https://registry.npm.taobao.org/entities/download/entities-1.1.2.tgz", + "integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=", "dev": true }, "env-paths": { @@ -7854,9 +7817,9 @@ "dev": true }, "eslint": { - "version": "7.9.0", - "resolved": "https://registry.npm.taobao.org/eslint/download/eslint-7.9.0.tgz?cache=0&sync_timestamp=1599934532531&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-7.9.0.tgz", - "integrity": "sha1-UirszFw6GQF88MtG6/1mCnms8zc=", + "version": "7.10.0", + "resolved": "https://registry.npm.taobao.org/eslint/download/eslint-7.10.0.tgz?cache=0&sync_timestamp=1601156708085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-7.10.0.tgz", + "integrity": "sha1-SU7bPkdQ+3kRM8o3nnhqj2SMcrk=", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -7867,7 +7830,7 @@ "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", - "eslint-scope": "^5.1.0", + "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^1.3.0", "espree": "^7.3.0", @@ -8021,8 +7984,8 @@ }, "eslint-import-resolver-node": { "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "resolved": "https://registry.npm.taobao.org/eslint-import-resolver-node/download/eslint-import-resolver-node-0.3.4.tgz?cache=0&sync_timestamp=1592327223893&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-import-resolver-node%2Fdownload%2Feslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha1-hf+oGULCUBLYIxCW3fZ5wDBCxxc=", "dev": true, "requires": { "debug": "^2.6.9", @@ -8031,8 +7994,8 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" @@ -8128,8 +8091,8 @@ }, "eslint-module-utils": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", - "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "resolved": "https://registry.npm.taobao.org/eslint-module-utils/download/eslint-module-utils-2.6.0.tgz", + "integrity": "sha1-V569CU9Wr3eX0ZyYZsnJSGYpv6Y=", "dev": true, "requires": { "debug": "^2.6.9", @@ -8138,8 +8101,8 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" @@ -8172,8 +8135,8 @@ }, "p-limit": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1594559733720&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz", + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", "dev": true, "requires": { "p-try": "^1.0.0" @@ -8299,9 +8262,9 @@ } }, "eslint-plugin-import": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz", - "integrity": "sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==", + "version": "2.22.1", + "resolved": "https://registry.npm.taobao.org/eslint-plugin-import/download/eslint-plugin-import-2.22.1.tgz?cache=0&sync_timestamp=1601248464145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-import%2Fdownload%2Feslint-plugin-import-2.22.1.tgz", + "integrity": "sha1-CJbH5qDPRBCaLZe5WQPCu2iddwI=", "dev": true, "requires": { "array-includes": "^3.1.1", @@ -8309,7 +8272,7 @@ "contains-path": "^0.1.0", "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.3", + "eslint-import-resolver-node": "^0.3.4", "eslint-module-utils": "^2.6.0", "has": "^1.0.3", "minimatch": "^3.0.4", @@ -8321,8 +8284,8 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" @@ -8346,8 +8309,8 @@ }, "resolve": { "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz", + "integrity": "sha1-sllBtUloIxzC0bt2p5y38sC/hEQ=", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -8858,7 +8821,7 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1591174870850&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { @@ -10459,8 +10422,8 @@ }, "html-minifier-terser": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "resolved": "https://registry.npm.taobao.org/html-minifier-terser/download/html-minifier-terser-5.1.1.tgz", + "integrity": "sha1-ki6W8fO7YIMsJjS3mIQJY4mx8FQ=", "dev": true, "requires": { "camel-case": "^4.1.1", @@ -10473,9 +10436,9 @@ } }, "html-webpack-plugin": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.4.1.tgz", - "integrity": "sha512-nEtdEIsIGXdXGG7MjTTZlmhqhpHU9pJFc1OYxcP36c5/ZKP6b0BJMww2QTvJGQYA9aMxUnjDujpZdYcVOXiBCQ==", + "version": "4.5.0", + "resolved": "https://registry.npm.taobao.org/html-webpack-plugin/download/html-webpack-plugin-4.5.0.tgz?cache=0&sync_timestamp=1600690515859&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-4.5.0.tgz", + "integrity": "sha1-YlCXZQiGuX6l2uMxwyDjI49sEhw=", "dev": true, "requires": { "@types/html-minifier-terser": "^5.0.0", @@ -10491,8 +10454,8 @@ }, "htmlparser2": { "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "resolved": "https://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.10.1.tgz", + "integrity": "sha1-vWedw/WYl7ajS7EHSchVu1OpOS8=", "dev": true, "requires": { "domelementtype": "^1.3.1", @@ -10505,8 +10468,8 @@ "dependencies": { "readable-stream": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", "dev": true, "requires": { "inherits": "^2.0.3", @@ -11109,8 +11072,8 @@ }, "is-string": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "resolved": "https://registry.npm.taobao.org/is-string/download/is-string-1.0.5.tgz", + "integrity": "sha1-QEk+0ZjvP/R3uMf5L2ROyCpc06Y=", "dev": true }, "is-svg": { @@ -11736,8 +11699,8 @@ }, "lower-case": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", - "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", + "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-2.0.1.tgz", + "integrity": "sha1-Oe6zbjlhFcwF4pQi6uqeaSyUCMc=", "dev": true, "requires": { "tslib": "^1.10.0" @@ -12290,8 +12253,8 @@ }, "no-case": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", - "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", + "resolved": "https://registry.npm.taobao.org/no-case/download/no-case-3.0.3.tgz", + "integrity": "sha1-whtDTB/+SLOQh+hs+00lgunfGPg=", "dev": true, "requires": { "lower-case": "^2.0.1", @@ -12305,17 +12268,17 @@ "dev": true }, "node-id3": { - "version": "0.1.18", - "resolved": "https://registry.npmjs.org/node-id3/-/node-id3-0.1.18.tgz", - "integrity": "sha512-XWjPWER49KeWCvCBLsAlUFylLL1Dq8/l4c2AMENk/91HD/4Y5SMRHXhFo6RjfQvHoR+6olPJqg7JO6+Uw9ipag==", + "version": "0.1.19", + "resolved": "https://registry.npm.taobao.org/node-id3/download/node-id3-0.1.19.tgz", + "integrity": "sha1-cQAMuCna3HYQAKSBAV5T88ydqto=", "requires": { "iconv-lite": "0.5.1" }, "dependencies": { "iconv-lite": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.1.tgz", - "integrity": "sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q==", + "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.5.1.tgz?cache=0&sync_timestamp=1594184250387&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.5.1.tgz", + "integrity": "sha1-skJdPHsY9yGfLKZj0QO925FxjWQ=", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -12728,9 +12691,9 @@ } }, "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-4.0.0.tgz", + "integrity": "sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs=", "dev": true, "requires": { "aggregate-error": "^3.0.0" @@ -12781,8 +12744,8 @@ }, "param-case": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", - "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", + "resolved": "https://registry.npm.taobao.org/param-case/download/param-case-3.0.3.tgz", + "integrity": "sha1-S+Qfg5nv9iHFbuu4KaXkUdmAEjg=", "dev": true, "requires": { "dot-case": "^3.0.3", @@ -12834,8 +12797,8 @@ }, "pascal-case": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz", - "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==", + "resolved": "https://registry.npm.taobao.org/pascal-case/download/pascal-case-3.1.1.tgz", + "integrity": "sha1-WsGXUTPtYZKB6Ikglz0s0fJ53l8=", "dev": true, "requires": { "no-case": "^3.0.3", @@ -14267,8 +14230,8 @@ }, "p-limit": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1594559733720&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz", + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", "dev": true, "requires": { "p-try": "^1.0.0" @@ -14551,8 +14514,8 @@ }, "renderkid": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", - "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", + "resolved": "https://registry.npm.taobao.org/renderkid/download/renderkid-2.0.3.tgz", + "integrity": "sha1-OAF5wv9a4TZcUivy/Pz/AcW3QUk=", "dev": true, "requires": { "css-select": "^1.1.0", @@ -16101,9 +16064,9 @@ } }, "terser-webpack-plugin": { - "version": "4.2.1", - "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-4.2.1.tgz?cache=0&sync_timestamp=1600182300005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-4.2.1.tgz", - "integrity": "sha1-RLiO9NdEMSn7E2potew+gNY+xHE=", + "version": "4.2.2", + "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-4.2.2.tgz?cache=0&sync_timestamp=1600531951208&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-4.2.2.tgz", + "integrity": "sha1-2GIAxwAFO7pjeRP+QxC6G961Vo4=", "dev": true, "requires": { "cacache": "^15.0.5", @@ -16113,7 +16076,7 @@ "schema-utils": "^2.7.1", "serialize-javascript": "^5.0.1", "source-map": "^0.6.1", - "terser": "^5.3.1", + "terser": "^5.3.2", "webpack-sources": "^1.4.3" }, "dependencies": { @@ -16418,8 +16381,8 @@ }, "tsconfig-paths": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "resolved": "https://registry.npm.taobao.org/tsconfig-paths/download/tsconfig-paths-3.9.0.tgz", + "integrity": "sha1-CYVHpsREiAfo/Ljq4IEGTumjyQs=", "dev": true, "requires": { "@types/json5": "^0.0.29", @@ -16430,8 +16393,8 @@ "dependencies": { "json5": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", "dev": true, "requires": { "minimist": "^1.2.0" @@ -16960,9 +16923,9 @@ } }, "vue-router": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.3.tgz", - "integrity": "sha512-BADg1mjGWX18Dpmy6bOGzGNnk7B/ZA0RxuA6qedY/YJwirMfKXIDzcccmHbQI0A6k5PzMdMloc0ElHfyOoX35A==" + "version": "3.4.5", + "resolved": "https://registry.npm.taobao.org/vue-router/download/vue-router-3.4.5.tgz?cache=0&sync_timestamp=1601131068569&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-router%2Fdownload%2Fvue-router-3.4.5.tgz", + "integrity": "sha1-05bsA3s1kxvdHpt+3Yb5eI3BUXU=" }, "vue-style-loader": { "version": "4.1.2", diff --git a/package.json b/package.json index e161a9fe..c7a90d96 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lx-music-desktop", - "version": "1.1.1", + "version": "1.2.0", "description": "一个免费的音乐下载助手", "main": "./dist/electron/main.js", "productName": "lx-music-desktop", @@ -59,7 +59,7 @@ "lint:fix": "eslint --ext .js,.vue -f ./node_modules/eslint-formatter-friendly --fix src" }, "browserslist": [ - "Electron 10.1.2" + "Electron 10.1.3" ], "engines": { "node": ">= 12" @@ -175,23 +175,23 @@ "core-js": "^3.6.5", "cross-env": "^7.0.2", "css-loader": "^4.3.0", - "del": "^5.1.0", - "electron": "^10.1.2", + "del": "^6.0.0", + "electron": "^10.1.3", "electron-builder": "^22.8.1", "electron-debug": "^3.1.0", "electron-devtools-installer": "^3.1.1", - "eslint": "^7.9.0", + "eslint": "^7.10.0", "eslint-config-standard": "^14.1.1", "eslint-formatter-friendly": "^7.0.0", "eslint-loader": "^4.0.2", "eslint-plugin-html": "^6.1.0", - "eslint-plugin-import": "^2.22.0", + "eslint-plugin-import": "^2.22.1", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-standard": "^4.0.1", "file-loader": "^6.1.0", "friendly-errors-webpack-plugin": "^1.7.0", - "html-webpack-plugin": "^4.4.1", + "html-webpack-plugin": "^4.5.0", "less": "^3.12.2", "less-loader": "^7.0.1", "markdown-it": "^11.0.1", @@ -207,7 +207,7 @@ "spinnies": "^0.5.1", "stylus": "^0.54.8", "stylus-loader": "^3.0.2", - "terser-webpack-plugin": "^4.2.1", + "terser-webpack-plugin": "^4.2.2", "url-loader": "^4.1.0", "vue-loader": "^15.9.3", "vue-template-compiler": "^2.6.12", @@ -228,11 +228,11 @@ "js-htmlencode": "^0.3.0", "lrc-file-parser": "^1.0.5", "needle": "^2.5.2", - "node-id3": "^0.1.18", + "node-id3": "^0.1.19", "request": "^2.88.2", "vue": "^2.6.12", "vue-i18n": "^8.21.1", - "vue-router": "^3.4.3", + "vue-router": "^3.4.5", "vuex": "^3.5.1", "vuex-router-sync": "^5.0.0" } diff --git a/publish/changeLog.md b/publish/changeLog.md index 9a53de65..3be7f95e 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,3 +1,25 @@ +提前祝大家中秋&国庆快乐~ + +### 新增 + +- 播放控制栏开启/关闭桌面歌词按钮 新增右击按钮时锁定/解锁桌面歌词功能 + +### 优化 + +- 优化我的列表滚动条位置的保存逻辑 +- 更新设置-备份与恢复功能的描述 +- 优化软件内鼠标悬停的提示界面 + ### 修复 -- 修复某些情况下桌面歌词不会播放的问题 +- 修复桌面歌词窗口不允许拖出桌面之外的位置计算偏移Bug +- 修复网易云KTV嗨榜无法加载的问题 +- 修复初始化搜索历史列表功能 +- 修复重启软件后试听列表与收藏列表无法恢复上次的滚动位置的问题 +- 修复歌曲封面无法嵌入的Bug +- 修复酷狗歌词格式问题 +- 修复关闭切换动画时从搜索候选列表点击内容无效的问题 + +### 其他 + +- 更新 Electron 到 v10.1.3 diff --git a/publish/version.json b/publish/version.json index 9433c938..7d418cb2 100644 --- a/publish/version.json +++ b/publish/version.json @@ -1 +1 @@ -{"version":"1.1.1","desc":"

修复

\n\n","history":[{"version":"1.1.0","desc":"

新增

\n\n

修复

\n\n

优化

\n\n

移除

\n\n

其他

\n\n"},{"version":"1.0.1","desc":"

优化

\n\n

修复

\n\n"},{"version":"1.0.0","desc":"

新增

\n\n

优化

\n\n

修复

\n\n

更变

\n\n

其他

\n\n"},{"version":"0.18.2","desc":"

修复

\n\n"},{"version":"0.18.1","desc":"

优化

\n\n

修复

\n\n"},{"version":"0.18.0","desc":"

新增

\n\n

优化

\n\n

更变

\n\n

修复

\n\n

移除

\n\n

其他

\n

更新 Electron 到 8.2.5

\n"},{"version":"0.17.0","desc":"

新增

\n\n

优化

\n\n

修复

\n\n

其他

\n\n"},{"version":"0.16.0","desc":"

新增

\n\n

优化

\n\n

修复

\n\n

其他

\n\n"},{"version":"0.15.0","desc":"

洛雪提前祝大家新年快乐、身体健康、阖家幸福!

\n

修复

\n\n"},{"version":"0.14.1","desc":"

洛雪提前祝大家新年快乐、身体健康、阖家幸福!

\n

修复

\n\n"},{"version":"0.14.0","desc":"

洛雪提前祝大家新年快乐、身体健康、阖家幸福!

\n

新增

\n\n

优化

\n\n

修复

\n\n

其他

\n\n"},{"version":"0.13.1","desc":"

修复

\n\n

其他

\n\n"},{"version":"0.13.0","desc":"

新增

\n\n

优化

\n\n

修复

\n\n

移除

\n\n

其他

\n\n"},{"version":"0.12.1","desc":"

优化

\n\n

修复

\n\n

其他

\n\n"},{"version":"0.12.0","desc":"

由于新下载库仍然没有完成,但下载功能已经可用,so 移除之前使用的第三方下载库,暂时把新下载库的下载模块直接加入本程序,若出现下载问题欢迎反馈!

\n

新增

\n\n

优化

\n\n

修复

\n\n"},{"version":"0.11.0","desc":"

新增

\n\n

优化

\n\n"},{"version":"0.10.0","desc":"

优化

\n\n

修复

\n\n"},{"version":"0.9.1","desc":"

修复

\n\n"},{"version":"0.9.0","desc":"

新增

\n\n

修复

\n\n"},{"version":"0.8.2","desc":"

修复

\n\n"},{"version":"0.8.1","desc":"

修复

\n\n"},{"version":"0.8.0","desc":"

新增

\n\n

优化

\n\n

修复

\n\n"},{"version":"0.7.0","desc":"

新增

\n\n

优化

\n\n

修复

\n\n"},{"version":"0.6.2","desc":"

祝贺祖国成立70周年~!

\n

新增

\n\n

修复

\n\n"},{"version":"0.6.1","desc":"

新增

\n\n

优化

\n\n

修复

\n\n

移除

\n\n"},{"version":"0.6.0","desc":"

新增

\n\n

优化

\n\n

修复

\n\n"},{"version":"0.5.5","desc":"

新增

\n\n

修复

\n\n"},{"version":"0.5.4","desc":"

移除

\n\n"},{"version":"0.5.3","desc":"

优化

\n\n

修复

\n\n"},{"version":"0.5.2","desc":"

新增

\n\n

优化

\n\n

修复

\n\n

移除

\n\n"},{"version":"0.5.1","desc":"

新增

\n\n

修复

\n\n"},{"version":"0.5.0","desc":"

新增

\n\n

优化

\n\n

修复

\n\n"},{"version":"0.4.0","desc":"

新增

\n\n

移除

\n\n"},{"version":"0.3.5","desc":"

新增

\n\n

优化

\n\n

修复

\n\n"},{"version":"0.3.4","desc":"

优化

\n\n

修复

\n\n"},{"version":"0.3.3","desc":"

修复

\n\n"},{"version":"0.3.2","desc":"

新增

\n\n"},{"version":"0.3.1","desc":"

修复

\n\n"},{"version":"0.3.0","desc":"

新增

\n\n

修复

\n\n"},{"version":"0.2.3","desc":"

新增

\n\n

修复

\n\n

移除

\n\n"},{"version":"0.2.2","desc":"

修复

\n\n"},{"version":"0.2.1","desc":"

优化

\n\n

修复

\n\n"},{"version":"0.2.0","desc":"

新增

\n\n

修复

\n\n"},{"version":"0.1.6","desc":"

修复

\n\n"},{"version":"0.1.5","desc":"

新增

\n\n

优化

\n\n"},{"version":"0.1.4","desc":"

新增

\n\n

优化

\n\n"},{"version":"0.1.3","desc":"

新增

\n\n

修复

\n\n

移除

\n\n"},{"version":"0.1.2","desc":"

修复

\n\n"},{"version":"0.1.1","desc":"

新增

\n\n

优化

\n\n

修复

\n\n"},{"version":"0.1.0","desc":"0.1.0版本发布"}]} +{"version":"1.2.0","desc":"

提前祝大家中秋&国庆快乐~

\n

新增

\n\n

优化

\n\n

修复

\n\n

其他

\n\n","history":[{"version":"1.1.1","desc":"

修复

\n\n"},{"version":"1.1.0","desc":"

新增

\n\n

修复

\n\n

优化

\n\n

移除

\n\n

其他

\n\n"},{"version":"1.0.1","desc":"

优化

\n\n

修复

\n\n"},{"version":"1.0.0","desc":"

新增

\n\n

优化

\n\n

修复

\n\n

更变

\n\n

其他

\n\n"},{"version":"0.18.2","desc":"

修复

\n\n"},{"version":"0.18.1","desc":"

优化

\n\n

修复

\n\n"},{"version":"0.18.0","desc":"

新增

\n\n

优化

\n\n

更变

\n\n

修复

\n\n

移除

\n\n

其他

\n

更新 Electron 到 8.2.5

\n"},{"version":"0.17.0","desc":"

新增

\n\n

优化

\n\n

修复

\n\n

其他

\n\n"},{"version":"0.16.0","desc":"

新增

\n\n

优化

\n\n

修复

\n\n

其他

\n\n"},{"version":"0.15.0","desc":"

洛雪提前祝大家新年快乐、身体健康、阖家幸福!

\n

修复

\n\n"},{"version":"0.14.1","desc":"

洛雪提前祝大家新年快乐、身体健康、阖家幸福!

\n

修复

\n\n"},{"version":"0.14.0","desc":"

洛雪提前祝大家新年快乐、身体健康、阖家幸福!

\n

新增

\n\n

优化

\n\n

修复

\n\n

其他

\n\n"},{"version":"0.13.1","desc":"

修复

\n\n

其他

\n\n"},{"version":"0.13.0","desc":"

新增

\n\n

优化

\n\n

修复

\n\n

移除

\n\n

其他

\n\n"},{"version":"0.12.1","desc":"

优化

\n\n

修复

\n\n

其他

\n\n"},{"version":"0.12.0","desc":"

由于新下载库仍然没有完成,但下载功能已经可用,so 移除之前使用的第三方下载库,暂时把新下载库的下载模块直接加入本程序,若出现下载问题欢迎反馈!

\n

新增

\n\n

优化

\n\n

修复

\n\n"},{"version":"0.11.0","desc":"

新增

\n\n

优化

\n\n"},{"version":"0.10.0","desc":"

优化

\n\n

修复

\n\n"},{"version":"0.9.1","desc":"

修复

\n\n"},{"version":"0.9.0","desc":"

新增

\n\n

修复

\n\n"},{"version":"0.8.2","desc":"

修复

\n\n"},{"version":"0.8.1","desc":"

修复

\n\n"},{"version":"0.8.0","desc":"

新增

\n\n

优化

\n\n

修复

\n\n"},{"version":"0.7.0","desc":"

新增

\n\n

优化

\n\n

修复

\n\n"},{"version":"0.6.2","desc":"

祝贺祖国成立70周年~!

\n

新增

\n\n

修复

\n\n"},{"version":"0.6.1","desc":"

新增

\n\n

优化

\n\n

修复

\n\n

移除

\n\n"},{"version":"0.6.0","desc":"

新增

\n\n

优化

\n\n

修复

\n\n"},{"version":"0.5.5","desc":"

新增

\n\n

修复

\n\n"},{"version":"0.5.4","desc":"

移除

\n\n"},{"version":"0.5.3","desc":"

优化

\n\n

修复

\n\n"},{"version":"0.5.2","desc":"

新增

\n\n

优化

\n\n

修复

\n\n

移除

\n\n"},{"version":"0.5.1","desc":"

新增

\n\n

修复

\n\n"},{"version":"0.5.0","desc":"

新增

\n\n

优化

\n\n

修复

\n\n"},{"version":"0.4.0","desc":"

新增

\n\n

移除

\n\n"},{"version":"0.3.5","desc":"

新增

\n\n

优化

\n\n

修复

\n\n"},{"version":"0.3.4","desc":"

优化

\n\n

修复

\n\n"},{"version":"0.3.3","desc":"

修复

\n\n"},{"version":"0.3.2","desc":"

新增

\n\n"},{"version":"0.3.1","desc":"

修复

\n\n"},{"version":"0.3.0","desc":"

新增

\n\n

修复

\n\n"},{"version":"0.2.3","desc":"

新增

\n\n

修复

\n\n

移除

\n\n"},{"version":"0.2.2","desc":"

修复

\n\n"},{"version":"0.2.1","desc":"

优化

\n\n

修复

\n\n"},{"version":"0.2.0","desc":"

新增

\n\n

修复

\n\n"},{"version":"0.1.6","desc":"

修复

\n\n"},{"version":"0.1.5","desc":"

新增

\n\n

优化

\n\n"},{"version":"0.1.4","desc":"

新增

\n\n

优化

\n\n"},{"version":"0.1.3","desc":"

新增

\n\n

修复

\n\n

移除

\n\n"},{"version":"0.1.2","desc":"

修复

\n\n"},{"version":"0.1.1","desc":"

新增

\n\n

优化

\n\n

修复

\n\n"},{"version":"0.1.0","desc":"0.1.0版本发布"}]} diff --git a/src/common/ipcNames.js b/src/common/ipcNames.js index 9aac43ce..ecc44d9c 100644 --- a/src/common/ipcNames.js +++ b/src/common/ipcNames.js @@ -48,7 +48,6 @@ const names = { get_playlist: 'get_playlist', save_playlist: 'save_playlist', get_data: 'get_data', - set_data: 'set_data', save_data: 'save_data', get_hot_key: 'get_hot_key', }, diff --git a/src/common/utils.js b/src/common/utils.js index 47fee60c..ae274f99 100644 --- a/src/common/utils.js +++ b/src/common/utils.js @@ -173,10 +173,11 @@ exports.initSetting = () => { // 迁移列表滚动位置设置 ~0.18.3 if (setting.list.scroll) { let scroll = setting.list.scroll - electronStore_list.set('defaultList.location', scroll.locations.defaultList || 0) - electronStore_list.set('loveList.location', scroll.locations.loveList || 0) + electronStore_list.set('defaultList.location', scroll.locations.default || 0) + electronStore_list.set('loveList.location', scroll.locations.love || 0) electronStore_config.delete('setting.list.scroll') electronStore_config.set('setting.list.isSaveScrollLocation', scroll.enable) + delete setting.list.scroll } } diff --git a/src/main/modules/winLyric/event.js b/src/main/modules/winLyric/event.js index 513adc16..43de0f63 100644 --- a/src/main/modules/winLyric/event.js +++ b/src/main/modules/winLyric/event.js @@ -1,7 +1,7 @@ const { common: COMMON_EVENT_NAME, winLyric: WIN_LYRIC_EVENT_NAME, hotKey: HOT_KEY_EVENT_NAME, mainWindow: MAIN_WINDOW_EVENT_NAME } = require('../../events/_name') const { mainSend, NAMES: { winLyric: ipcWinLyricNames } } = require('../../../common/ipc') const { desktop_lyric } = require('../../../common/hotKey') -const { setLyricWindow } = require('./utils') +const { getLyricWindowBounds } = require('./utils') let isLock = null let isEnable = null @@ -27,6 +27,17 @@ const setLrcConfig = () => { isAlwaysOnTop = desktopLyric.isAlwaysOnTop global.modules.lyricWindow.setAlwaysOnTop(desktopLyric.isAlwaysOnTop, 'screen-saver') } + if (isLockScreen != desktopLyric.isLockScreen) { + isLockScreen = desktopLyric.isLockScreen + if (desktopLyric.isLockScreen) { + global.modules.lyricWindow.setBounds(getLyricWindowBounds(global.modules.lyricWindow.getBounds(), { + x: null, + y: null, + w: desktopLyric.width, + h: desktopLyric.height, + })) + } + } } if (isEnable != desktopLyric.enable) { isEnable = desktopLyric.enable @@ -36,17 +47,6 @@ const setLrcConfig = () => { global.lx_event.winLyric.close() } } - if (isLockScreen != desktopLyric.isLockScreen) { - isLockScreen = desktopLyric.isLockScreen - if (desktopLyric.isLockScreen) { - setLyricWindow({ - x: desktopLyric.x, - y: desktopLyric.y, - w: desktopLyric.width, - h: desktopLyric.height, - }) - } - } } global.lx_event.common.on(COMMON_EVENT_NAME.config, name => { if (WIN_LYRIC_EVENT_NAME.name === name) return diff --git a/src/main/modules/winLyric/index.js b/src/main/modules/winLyric/index.js index 3b2e150d..49cf2cb5 100644 --- a/src/main/modules/winLyric/index.js +++ b/src/main/modules/winLyric/index.js @@ -1,6 +1,7 @@ const { BrowserWindow } = require('electron') const { winLyric: WIN_LYRIC_EVENT_NAME } = require('../../events/_name') const { debounce } = require('../../../common/utils') +const { getLyricWindowBounds } = require('./utils') require('./event') require('./rendererEvent') @@ -67,29 +68,29 @@ const winEvent = lyricWindow => { }) } -let offset = 8 const createWindow = () => { if (global.modules.lyricWindow) return if (!global.appSetting.desktopLyric.enable) return // const windowSizeInfo = getWindowSizeInfo(global.appSetting) let { x, y, width, height, isAlwaysOnTop } = global.appSetting.desktopLyric let { width: screenWidth, height: screenHeight } = global.envParams.workAreaSize - screenWidth += offset * 2 - screenHeight += offset * 2 if (x == null) { - x = screenWidth - width - offset - y = screenHeight - height - offset + x = screenWidth - width + y = screenHeight - height } if (global.appSetting.desktopLyric.isLockScreen) { - x = Math.max(-offset, screenWidth < (width + x) ? screenWidth - width : x) - y = Math.max(-offset, screenHeight < (height + y) ? screenHeight - height : y) + let bounds = getLyricWindowBounds({ x, y, width, height }, { x: null, y: null, w: width, h: height }) + x = bounds.x + y = bounds.y + width = bounds.width + height = bounds.height } /** * Initial window options */ global.modules.lyricWindow = new BrowserWindow({ - height: Math.max(height > screenHeight ? screenHeight : height, 80), - width: Math.max(width > screenWidth ? screenWidth : width, 380), + height, + width, x, y, minWidth: 380, diff --git a/src/main/modules/winLyric/rendererEvent.js b/src/main/modules/winLyric/rendererEvent.js index 75d38dbc..ce8721a8 100644 --- a/src/main/modules/winLyric/rendererEvent.js +++ b/src/main/modules/winLyric/rendererEvent.js @@ -8,7 +8,7 @@ const { }, } = require('../../../common/ipc') const { winLyric: WIN_LYRIC_EVENT_NAME } = require('../../events/_name') -const { setLyricWindow } = require('./utils') +const { getLyricWindowBounds } = require('./utils') mainOn(ipcWinLyricNames.get_lyric_info, (event, action) => { if (!global.modules.mainWindow) return @@ -28,5 +28,5 @@ mainHandle(ipcWinLyricNames.get_lyric_config, async() => { }) mainOn(ipcWinLyricNames.set_win_bounds, (event, options) => { - setLyricWindow(options) + global.modules.lyricWindow.setBounds(getLyricWindowBounds(global.modules.lyricWindow.getBounds(), options)) }) diff --git a/src/main/modules/winLyric/utils.js b/src/main/modules/winLyric/utils.js index 48c891eb..a82c1a23 100644 --- a/src/main/modules/winLyric/utils.js +++ b/src/main/modules/winLyric/utils.js @@ -1,56 +1,68 @@ // 设置窗口位置、大小 -let bounds let winX let winY let wasW -let wasY +let wasH let offset = 8 -exports.setLyricWindow = ({ x = 0, y = 0, w = 0, h = 0 }) => { - if (!global.modules.lyricWindow) return - bounds = global.modules.lyricWindow.getBounds() - wasW = global.envParams.workAreaSize.width - wasY = global.envParams.workAreaSize.height + offset +let minWidth = 380 +let minHeight = 80 +exports.getLyricWindowBounds = (bounds, { x = 0, y = 0, w = 0, h = 0 }) => { + if (w < minWidth) w = minWidth + if (h < minHeight) h = minHeight + + if (global.appSetting.desktopLyric.isLockScreen) { + wasW = global.envParams.workAreaSize.width + offset + wasH = global.envParams.workAreaSize.height + offset + if (w > wasW + offset) w = wasW + offset + if (h > wasH + offset) h = wasH + offset + if (x == null) { + if (bounds.x > wasW - w) { + x = wasW - w - bounds.x + } else if (bounds.x < -offset) { + x = bounds.x + offset + } else { + x = 0 + } + if (bounds.y > wasH - h) { + y = wasH - h - bounds.y + } else if (bounds.y < -offset) { + y = bounds.y + offset + } else { + y = 0 + } + } + winX = bounds.x + x + winY = bounds.y + y + + if (x != 0) { + if (winX < -offset) { + winX = -offset + } else if (winX + w > wasW) { + winX = wasW - w + } + } + if (y != 0) { + if (winY < -offset) { + winY = -offset + } else if (winY + h > wasH) { + winY = wasH - h + } + } + + x = winX + y = winY + + if (x + w > wasW) w = wasW - x + if (y + h > wasH) h = wasH - y + } else { + y += bounds.y + x += bounds.x + } bounds.width = w bounds.height = h - if (bounds.width > wasW - offset) { - bounds.width = wasW - offset - } else if (bounds.width < 380) { - bounds.width = 380 - } - if (bounds.height > wasY) { - bounds.height = wasY + offset - } else if (bounds.height < 80) { - bounds.height = 80 - } - - if (global.appSetting.desktopLyric.isLockScreen) { - if (x != 0) { - winX = bounds.x + x - if (winX > wasW - bounds.width + offset) { - winX = wasW - bounds.width + offset - } else if (winX < -offset) { - winX = -offset - } - bounds.x = winX - } - if (y != 0) { - winY = bounds.y + y - if (winY > wasY - bounds.height) { - winY = wasY - bounds.height - } else if (winY < -offset) { - winY = -offset - } - bounds.y = winY - } - } else { - if (x != 0) { - bounds.x = bounds.x + x - } - if (y != 0) { - bounds.y = bounds.y + y - } - } - // console.log(bounds, x, y, w, h) - global.modules.lyricWindow.setBounds(bounds) + bounds.x = x + bounds.y = y + // console.log('util bounds', bounds) + return bounds } diff --git a/src/main/rendererEvents/data.js b/src/main/rendererEvents/data.js index 18cdf81a..f8e23c42 100644 --- a/src/main/rendererEvents/data.js +++ b/src/main/rendererEvents/data.js @@ -9,4 +9,4 @@ const electronStore_data = new Store({ mainHandle(ipcMainWindowNames.get_data, async(event, path) => electronStore_data.get(path)) -mainOn(ipcMainWindowNames.save_data, (event, { path, data }) => electronStore_data.get(path, data)) +mainOn(ipcMainWindowNames.save_data, (event, { path, data }) => electronStore_data.set(path, data)) diff --git a/src/main/rendererEvents/playList.js b/src/main/rendererEvents/playList.js index 32d15aa1..219046da 100644 --- a/src/main/rendererEvents/playList.js +++ b/src/main/rendererEvents/playList.js @@ -2,15 +2,15 @@ const Store = require('electron-store') const { mainOn, NAMES: { mainWindow: ipcMainWindowNames }, mainHandle } = require('../../common/ipc') -const electronStore_list = new Store({ - name: 'playList', -}) +let electronStore_list mainHandle(ipcMainWindowNames.get_playlist, async(event, isIgnoredError = false) => { - let electronStore_list = new Store({ - name: 'playList', - clearInvalidConfig: !isIgnoredError, - }) + if (!electronStore_list) { + electronStore_list = new Store({ + name: 'playList', + clearInvalidConfig: !isIgnoredError, + }) + } return { defaultList: electronStore_list.get('defaultList'), @@ -20,4 +20,4 @@ mainHandle(ipcMainWindowNames.get_playlist, async(event, isIgnoredError = false) } }) -mainOn(ipcMainWindowNames.save_playlist, (event, { type, data }) => electronStore_list.set(type, data)) +mainOn(ipcMainWindowNames.save_playlist, (event, { type, data }) => electronStore_list && electronStore_list.set(type, data)) diff --git a/src/renderer/App.vue b/src/renderer/App.vue index 7b94dfbd..d9b4d3b5 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -94,7 +94,7 @@ export default { }) }, 1000) this.saveSearchHistoryList = throttle(n => { - rendererSend(NAMES.mainWindow.set_data, { + rendererSend(NAMES.mainWindow.save_data, { path: 'searchHistoryList', data: n, }) @@ -292,7 +292,7 @@ export default { rendererInvoke(NAMES.mainWindow.get_data, 'searchHistoryList').then(historyList => { if (historyList == null) { historyList = [] - rendererInvoke(NAMES.mainWindow.set_data, { path: 'searchHistoryList', data: historyList }) + rendererSend(NAMES.mainWindow.save_data, { path: 'searchHistoryList', data: historyList }) } else { this.setSearchHistoryList(historyList) } diff --git a/src/renderer/components/core/Aside.vue b/src/renderer/components/core/Aside.vue index 73099a60..4bef41a1 100644 --- a/src/renderer/components/core/Aside.vue +++ b/src/renderer/components/core/Aside.vue @@ -1,10 +1,10 @@ diff --git a/src/renderer/components/core/Toolbar.vue b/src/renderer/components/core/Toolbar.vue index bd1be043..355d6d77 100644 --- a/src/renderer/components/core/Toolbar.vue +++ b/src/renderer/components/core/Toolbar.vue @@ -8,12 +8,12 @@ div(:class="$style.logo" v-if="setting.controlBtnPosition == 'left'") L X div(:class="$style.control" v-else) - button(type="button" :class="$style.min" :title="$t('core.toolbar.min')" @click="min") + button(type="button" :class="$style.min" :tips="$t('core.toolbar.min')" @click="min") svg(:class="$style.icon" version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' width='100%' viewBox='0 0 24 24' space='preserve') use(xlink:href='#icon-window-minimize') //- button(type="button" :class="$style.max" @click="max") - button(type="button" :class="$style.close" :title="$t('core.toolbar.close')" @click="close") + button(type="button" :class="$style.close" :tips="$t('core.toolbar.close')" @click="close") svg(:class="$style.icon" version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' width='100%' viewBox='0 0 24 24' space='preserve') use(xlink:href='#icon-window-close') diff --git a/src/renderer/components/material/DownloadModal.vue b/src/renderer/components/material/DownloadModal.vue index b2f01afd..d47d02d6 100644 --- a/src/renderer/components/material/DownloadModal.vue +++ b/src/renderer/components/material/DownloadModal.vue @@ -5,7 +5,7 @@ material-modal(:show="show" :bg-close="bgClose" @close="handleClose") | {{ info.name }} br | {{ info.singer }} - material-btn(:class="$style.btn" v-if="checkSource(type.type)" :title="!checkSource(type.type) && $t('material.download_modal.btn_tip')" :disabled="!checkSource(type.type)" :key="type.type" @click="handleClick(type.type)" v-for="type in info.types") {{getTypeName(type.type)}} {{ type.type.toUpperCase() }}{{ type.size && ` - ${type.size.toUpperCase()}` }} + material-btn(:class="$style.btn" v-if="checkSource(type.type)" :tips="!checkSource(type.type) && $t('material.download_modal.btn_tip')" :disabled="!checkSource(type.type)" :key="type.type" @click="handleClick(type.type)" v-for="type in info.types") {{getTypeName(type.type)}} {{ type.type.toUpperCase() }}{{ type.size && ` - ${type.size.toUpperCase()}` }} diff --git a/src/renderer/components/material/Input.vue b/src/renderer/components/material/Input.vue index 6928667a..958bbecf 100644 --- a/src/renderer/components/material/Input.vue +++ b/src/renderer/components/material/Input.vue @@ -1,6 +1,6 @@ @@ -24,21 +24,6 @@ export default { default: 'text', }, }, - data() { - return { - text: '', - } - }, - watch: { - value(n) { - this.text = n - }, - }, - methods: { - handleInput() { - - }, - }, } diff --git a/src/renderer/components/material/ListButtons.vue b/src/renderer/components/material/ListButtons.vue index aa588b26..2189b1b3 100644 --- a/src/renderer/components/material/ListButtons.vue +++ b/src/renderer/components/material/ListButtons.vue @@ -1,30 +1,30 @@ + + diff --git a/src/renderer/plugins/Tips/index.js b/src/renderer/plugins/Tips/index.js new file mode 100644 index 00000000..4e2aee98 --- /dev/null +++ b/src/renderer/plugins/Tips/index.js @@ -0,0 +1,55 @@ +import tips from './Tips' +import { debounce } from '../../utils' + +let instance +let prevTips + +const getTips = el => el.getAttribute('tips') + ? el.getAttribute('tips') + : el.parentNode === document.documentElement + ? null + : getTips(el.parentNode) + +const showTips = debounce(event => { + let msg = getTips(event.target) + if (!msg) return + prevTips = msg + instance = tips({ + message: msg, + position: { + top: event.y + 12, + left: event.x + 8, + }, + }) +}, 400) + +const hideTips = () => { + if (!instance) return + instance.cancel() + prevTips = null + instance = null +} + +const setTips = tips => { + if (!instance) return + instance.setTips(tips) +} + +const updateTips = event => { + if (!instance) return + setTimeout(() => { + let msg = getTips(event.target) + if (!msg || prevTips === msg) return + setTips(msg) + prevTips = msg + }) +} + +document.body.addEventListener('mousemove', event => { + hideTips() + showTips(event) +}) + +document.body.addEventListener('click', updateTips) + +document.body.addEventListener('contextmenu', updateTips) diff --git a/src/renderer/plugins/index.js b/src/renderer/plugins/index.js index bff0ea0f..e94f9bdc 100644 --- a/src/renderer/plugins/index.js +++ b/src/renderer/plugins/index.js @@ -1 +1,2 @@ // import './axios' +import './Tips' diff --git a/src/renderer/store/modules/download.js b/src/renderer/store/modules/download.js index e62bbeac..13e30e00 100644 --- a/src/renderer/store/modules/download.js +++ b/src/renderer/store/modules/download.js @@ -158,6 +158,9 @@ const getUrl = (downloadInfo, isRefresh) => { return url && !isRefresh ? Promise.resolve({ url }) : music[downloadInfo.musicInfo.source].getMusicUrl(downloadInfo.musicInfo, downloadInfo.type).promise } +// 修复 1.1.x版本 酷狗源歌词格式 +const fixKgLyric = lrc => /\[00:\d\d:\d\d.\d+\]/.test(lrc) ? lrc.replace(/(?:\[00:(\d\d:\d\d.\d+\]))/gm, '[$1') : lrc + /** * 设置歌曲meta信息 * @param {*} downloadInfo @@ -184,7 +187,8 @@ const saveMeta = (downloadInfo, filePath, isEmbedPic, isEmbedLyric) => { }) : Promise.resolve(), ] - Promise.all(tasks).then(([imgUrl, lyrics]) => { + Promise.all(tasks).then(([imgUrl, lyrics = {}]) => { + if (lyrics.lyric) lyrics.lyric = fixKgLyric(lyrics.lyric) setMeta(filePath, { title: downloadInfo.musicInfo.name, artist: downloadInfo.musicInfo.singer, @@ -205,7 +209,10 @@ const downloadLyric = (downloadInfo, filePath) => { ? Promise.resolve({ lyric: downloadInfo.musicInfo.lrc, tlyric: downloadInfo.musicInfo.tlrc || '' }) : music[downloadInfo.musicInfo.source].getLyric(downloadInfo.musicInfo).promise promise.then(lrcs => { - if (lrcs.lyric) saveLrc(filePath.replace(/(mp3|flac|ape|wav)$/, 'lrc'), lrcs.lyric) + if (lrcs.lyric) { + lrcs.lyric = fixKgLyric(lrcs.lyric) + saveLrc(filePath.replace(/(mp3|flac|ape|wav)$/, 'lrc'), lrcs.lyric) + } }) } diff --git a/src/renderer/store/modules/list.js b/src/renderer/store/modules/list.js index 04978ce3..e46f2782 100644 --- a/src/renderer/store/modules/list.js +++ b/src/renderer/store/modules/list.js @@ -54,8 +54,8 @@ const actions = { // mitations const mutations = { initList(state, { defaultList, loveList, userList }) { - if (defaultList != null) state.defaultList.list = defaultList.list - if (loveList != null) state.loveList.list = loveList.list + if (defaultList != null) Object.assign(state.defaultList, { list: defaultList.list, location: defaultList.location }) + if (loveList != null) Object.assign(state.loveList, { list: loveList.list, location: loveList.location }) if (userList != null) state.userList = userList allListInit(state.defaultList, state.loveList, state.userList) state.isInitedList = true diff --git a/src/renderer/store/mutations.js b/src/renderer/store/mutations.js index 8e23cb76..5cd60e33 100644 --- a/src/renderer/store/mutations.js +++ b/src/renderer/store/mutations.js @@ -55,6 +55,9 @@ export default { setVisibleDesktopLyric(state, val) { state.setting.desktopLyric.enable = val }, + setLockDesktopLyric(state, val) { + state.setting.desktopLyric.isLock = val + }, setMediaDeviceId(state, val) { state.setting.player.mediaDeviceId = val }, diff --git a/src/renderer/utils/music/kg/lyric.js b/src/renderer/utils/music/kg/lyric.js index 52b66612..e5398e24 100644 --- a/src/renderer/utils/music/kg/lyric.js +++ b/src/renderer/utils/music/kg/lyric.js @@ -21,12 +21,10 @@ const parseLyric = str => { let time = parseInt(result[2]) let ms = time % 1000 time /= 1000 - let h = parseInt(time / 3600).toString().padStart(2, '0') - time %= 3600 let m = parseInt(time / 60).toString().padStart(2, '0') time %= 60 let s = parseInt(time).toString().padStart(2, '0') - time = `${h}:${m}:${s}.${ms}` + time = `${m}:${s}.${ms}` if (tlyric) tlyric[i] = `[${time}]${tlyric[i++][0]}` return str.replace(result[1], time) }) diff --git a/src/renderer/utils/music/wy/leaderboard.js b/src/renderer/utils/music/wy/leaderboard.js index 02a9218e..dd6aa60d 100644 --- a/src/renderer/utils/music/wy/leaderboard.js +++ b/src/renderer/utils/music/wy/leaderboard.js @@ -16,7 +16,7 @@ const topList = [ { id: 'wy__991319590', bangid: '991319590', name: '云音乐说唱榜' }, { id: 'wy__180106', bangid: '180106', name: 'UK排行榜周榜' }, { id: 'wy__60198', bangid: '60198', name: '美国Billboard周榜' }, - { id: '21845217', bangid: '21845217', name: 'KTV嗨榜' }, + { id: 'wy__21845217', bangid: '21845217', name: 'KTV嗨榜' }, { id: 'wy__11641012', bangid: '11641012', name: 'iTunes榜' }, { id: 'wy__120001', bangid: '120001', name: 'Hit FM Top榜' }, { id: 'wy__60131', bangid: '60131', name: '日本Oricon周榜' }, diff --git a/src/renderer/views/Leaderboard.vue b/src/renderer/views/Leaderboard.vue index c95c7d72..7d90705f 100644 --- a/src/renderer/views/Leaderboard.vue +++ b/src/renderer/views/Leaderboard.vue @@ -7,11 +7,11 @@ div(:class="$style.listsSelect") //- h2(:class="$style.listsTitle") {{$t('core.aside.my_list')}} material-selection(:class="$style.select" :list="sources" item-key="id" item-name="name" v-model="source") - //- button(:class="$style.listsAdd" @click="handleShowNewList" :title="$t('view.list.lists_new_list_btn')") + //- button(:class="$style.listsAdd" @click="handleShowNewList" :tips="$t('view.list.lists_new_list_btn')") svg(version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' height='70%' viewBox='0 0 24 24' space='preserve') use(xlink:href='#icon-list-add') ul.scroll(:class="$style.listsContent" ref="dom_lists_list") - li(:class="[$style.listsItem, item.id == tabId ? $style.active : null]" :title="item.name" v-for="item in boardList" :key="item.id" @click="handleToggleList(item.id)") + li(:class="[$style.listsItem, item.id == tabId ? $style.active : null]" :tips="item.name" v-for="item in boardList" :key="item.id" @click="handleToggleList(item.id)") span(:class="$style.listsLabel") {{item.name}} div(:class="$style.list") material-song-list(v-model="selectedData" :rowWidth="{r1: '5%', r2: 'auto', r3: '22%', r4: '22%', r5: '9%', r6: '15%'}" @action="handleSongListAction" :source="source" :page="page" :limit="info.limit" :total="info.total" :noItem="$t('material.song_list.loding_list')" :list="list") diff --git a/src/renderer/views/List.vue b/src/renderer/views/List.vue index 79b75cba..251e2b2a 100644 --- a/src/renderer/views/List.vue +++ b/src/renderer/views/List.vue @@ -3,15 +3,15 @@ div(:class="$style.lists" ref="dom_lists") div(:class="$style.listHeader") h2(:class="$style.listsTitle") {{$t('core.aside.my_list')}} - button(:class="$style.listsAdd" @click="handleShowNewList" :title="$t('view.list.lists_new_list_btn')") + button(:class="$style.listsAdd" @click="handleShowNewList" :tips="$t('view.list.lists_new_list_btn')") svg(version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' height='70%' viewBox='0 0 24 24' space='preserve') use(xlink:href='#icon-list-add') ul.scroll(:class="$style.listsContent" ref="dom_lists_list") - li(:class="[$style.listsItem, defaultList.id == listId ? $style.active : null]" :title="defaultList.name" @click="handleListToggle(defaultList.id)") + li(:class="[$style.listsItem, defaultList.id == listId ? $style.active : null]" :tips="defaultList.name" @click="handleListToggle(defaultList.id)") span(:class="$style.listsLabel") {{defaultList.name}} - li(:class="[$style.listsItem, loveList.id == listId ? $style.active : null]" :title="loveList.name" @click="handleListToggle(loveList.id)") + li(:class="[$style.listsItem, loveList.id == listId ? $style.active : null]" :tips="loveList.name" @click="handleListToggle(loveList.id)") span(:class="$style.listsLabel") {{loveList.name}} - li.user-list(:class="[$style.listsItem, item.id == listId ? $style.active : null, listsData.rightClickItemIndex == index ? $style.clicked : null]" @contextmenu="handleListsItemRigthClick($event, index)" :title="item.name" v-for="(item, index) in userList" :key="item.id") + li.user-list(:class="[$style.listsItem, item.id == listId ? $style.active : null, listsData.rightClickItemIndex == index ? $style.clicked : null]" @contextmenu="handleListsItemRigthClick($event, index)" :tips="item.name" v-for="(item, index) in userList" :key="item.id") span(:class="$style.listsLabel" @click="handleListToggle(item.id, index + 2)") {{item.name}} input.key-bind(:class="$style.listsInput" @contextmenu.stop type="text" @keyup.enter="handleListsSave(index, $event)" @blur="handleListsSave(index, $event)" :value="item.name" :placeholder="item.name") transition(enter-active-class="animated-fast slideInLeft" leave-active-class="animated-fast fadeOut" @after-leave="handleListsNewAfterLeave") @@ -86,7 +86,6 @@ export default { // isShowEditBtn: false, isShowDownloadMultiple: false, delayShow: false, - routeLeaveLocation: null, isShowListAdd: false, isShowListAddMultiple: false, delayTimeout: null, @@ -289,18 +288,14 @@ export default { // }, beforeRouteLeave(to, from, next) { this.clearDelayTimeout() - this.routeLeaveLocation = (this.list.length && this.$refs.dom_scrollContent.scrollTop) || 0 + this.setListScroll({ id: this.listId, location: (this.list.length && this.$refs.dom_scrollContent.scrollTop) || 0 }) next() }, created() { this.listId = this.$route.query.id || this.defaultList.id this.setPrevSelectListId(this.listId) - this.handleScroll = throttle(e => { - if (this.routeLeaveLocation) { - this.setListScroll({ id: this.listId, location: this.routeLeaveLocation }) - } else { - this.setListScroll({ id: this.listId, location: e.target.scrollTop }) - } + this.handleSaveScroll = throttle((listId, location) => { + this.setListScroll({ id: listId, location }) }, 1000) this.listenEvent() }, @@ -310,6 +305,7 @@ export default { }, beforeDestroy() { this.unlistenEvent() + this.setListScroll({ id: this.listId, location: (this.list.length && this.$refs.dom_scrollContent.scrollTop) || 0 }) }, methods: { ...mapMutations(['setPrevSelectListId']), @@ -369,6 +365,9 @@ export default { this.restoreScroll(this.$route.query.scrollIndex, false) } }, + handleScroll(e) { + this.handleSaveScroll(this.listId, e.target.scrollTop) + }, clearDelayTimeout() { if (this.delayTimeout) { clearTimeout(this.delayTimeout) diff --git a/src/renderer/views/Search.vue b/src/renderer/views/Search.vue index 05380d14..ccfcb344 100644 --- a/src/renderer/views/Search.vue +++ b/src/renderer/views/Search.vue @@ -45,10 +45,10 @@ dl(:class="$style.noitemList" v-if="setting.search.isShowHistorySearch && historyList.length") dt(:class="$style.noitemListTitle") span {{$t('view.search.history_search')}} - span(:class="$style.historyClearBtn" @click="clearHistory" :title="$t('view.search.history_clear')") + span(:class="$style.historyClearBtn" @click="clearHistory" :tips="$t('view.search.history_clear')") svg(version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' height='100%' viewBox='0 0 512 512' space='preserve') use(xlink:href='#icon-eraser') - dd(:class="$style.noitemListItem" v-for="(item, index) in historyList" @contextmenu="removeHistory(index)" :key="index + item" @click="handleNoitemSearch(item)" :title="$t('view.search.history_remove')") {{item}} + dd(:class="$style.noitemListItem" v-for="(item, index) in historyList" @contextmenu="removeHistory(index)" :key="index + item" @click="handleNoitemSearch(item)" :tips="$t('view.search.history_remove')") {{item}} div(v-else :class="$style.noitem_list") p {{$t('view.search.no_item')}} material-download-modal(:show="isShowDownload" :musicInfo="musicInfo" @select="handleAddDownload" @close="isShowDownload = false") diff --git a/src/renderer/views/Setting.vue b/src/renderer/views/Setting.vue index b28b0829..2b79d302 100644 --- a/src/renderer/views/Setting.vue +++ b/src/renderer/views/Setting.vue @@ -6,7 +6,7 @@ div.scroll(:class="$style.setting") h3 {{$t('view.setting.basic_theme')}} div ul(:class="$style.theme") - li(v-for="theme in themes.list" :key="theme.id" :title="$t('store.state.theme_' + theme.class)" @click="current_setting.themeId = theme.id" :class="[theme.class, themes.active == theme.id ? $style.active : '']") + li(v-for="theme in themes.list" :key="theme.id" :tips="$t('store.state.theme_' + theme.class)" @click="current_setting.themeId = theme.id" :class="[theme.class, themes.active == theme.id ? $style.active : '']") span label {{$t('store.state.theme_' + theme.class)}} @@ -15,37 +15,37 @@ div.scroll(:class="$style.setting") div material-checkbox(id="setting_show_animate" v-model="current_setting.isShowAnimation" :label="$t('view.setting.is_show')") - dd(:title="$t('view.setting.basic_animation_title')") + dd(:tips="$t('view.setting.basic_animation_title')") h3 {{$t('view.setting.basic_animation')}} div material-checkbox(id="setting_animate" v-model="current_setting.randomAnimate" :label="$t('view.setting.is_enable')") - dd(:title="$t('view.setting.basic_source_title')") + dd(:tips="$t('view.setting.basic_source_title')") h3 {{$t('view.setting.basic_source')}} div div(v-for="item in apiSources" :key="item.id" :class="$style.gapTop") material-checkbox(:id="`setting_api_source_${item.id}`" name="setting_api_source" @change="handleAPISourceChange(item.id)" need v-model="current_setting.apiSource" :disabled="item.disabled" :value="item.id" :label="item.label") - dd(:title="$t('view.setting.basic_to_tray_title')") + dd(:tips="$t('view.setting.basic_to_tray_title')") h3 {{$t('view.setting.basic_to_tray')}} div material-checkbox(id="setting_to_tray" v-model="current_setting.tray.isShow" @change="handleTrayShowChange" :label="$t('view.setting.is_enable')") - dd(:title="$t('view.setting.basic_window_size_title')") + dd(:tips="$t('view.setting.basic_window_size_title')") h3 {{$t('view.setting.basic_window_size')}} div material-checkbox(v-for="(item, index) in windowSizeList" :id="`setting_window_size_${item.id}`" name="setting_window_size" @change="handleWindowSizeChange" :class="$style.gapLeft" need v-model="current_setting.windowSizeId" :value="item.id" :label="$t('view.setting.basic_window_size_' + item.name)" :key="item.id") - dd(:title="$t('view.setting.basic_lang_title')") + dd(:tips="$t('view.setting.basic_lang_title')") h3 {{$t('view.setting.basic_lang')}} div material-checkbox(v-for="item in languageList" :key="item.locale" :id="`setting_lang_${item.locale}`" name="setting_lang" @change="handleLangChange(item.locale)" :class="$style.gapLeft" need v-model="current_setting.langId" :value="item.locale" :label="item.name") - dd(:title="$t('view.setting.basic_sourcename_title')") + dd(:tips="$t('view.setting.basic_sourcename_title')") h3 {{$t('view.setting.basic_sourcename')}} div material-checkbox(v-for="item in sourceNameTypes" :key="item.id" :class="$style.gapLeft" :id="`setting_abasic_sourcename_${item.id}`" @@ -58,7 +58,7 @@ div.scroll(:class="$style.setting") name="setting_basic_control_btn_position" need v-model="current_setting.controlBtnPosition" :value="item.id" :label="item.name") dt {{$t('view.setting.play')}} - dd(:title="$t('view.setting.play_toggle_title')") + dd(:tips="$t('view.setting.play_toggle_title')") h3 {{$t('view.setting.play_toggle')}} div material-checkbox(:id="`setting_player_togglePlay_${item.value}`" :class="$style.gapLeft" :value="item.value" :key="item.value" @@ -67,19 +67,19 @@ div.scroll(:class="$style.setting") h3 {{$t('view.setting.play_lyric_transition')}} div material-checkbox(id="setting_player_lyric_transition" v-model="current_setting.player.isShowLyricTransition" :label="$t('view.setting.is_show')") - dd(:title="$t('view.setting.play_quality_title')") + dd(:tips="$t('view.setting.play_quality_title')") h3 {{$t('view.setting.play_quality')}} div material-checkbox(id="setting_player_highQuality" v-model="current_setting.player.highQuality" :label="$t('view.setting.is_enable')") - dd(:title="$t('view.setting.play_task_bar_title')") + dd(:tips="$t('view.setting.play_task_bar_title')") h3 {{$t('view.setting.play_task_bar')}} div material-checkbox(id="setting_player_showTaskProgess" v-model="current_setting.player.isShowTaskProgess" :label="$t('view.setting.is_enable')") - dd(:title="$t('view.setting.play_mediaDevice_remove_stop_play_title')") + dd(:tips="$t('view.setting.play_mediaDevice_remove_stop_play_title')") h3 {{$t('view.setting.play_mediaDevice_remove_stop_play')}} div material-checkbox(id="setting_player_isMediaDeviceRemovedStopPlay" v-model="current_setting.player.isMediaDeviceRemovedStopPlay" :label="$t('view.setting.is_enable')") - dd(:title="$t('view.setting.play_mediaDevice_title')") + dd(:tips="$t('view.setting.play_mediaDevice_title')") h3 {{$t('view.setting.play_mediaDevice')}} div material-selection(:list="mediaDevices" :class="$style.gapLeft" v-model="current_setting.player.mediaDeviceId" item-key="deviceId" item-name="label") @@ -94,44 +94,44 @@ div.scroll(:class="$style.setting") 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')") dt {{$t('view.setting.search')}} - dd(:title="$t('view.setting.search_hot_title')") + dd(:tips="$t('view.setting.search_hot_title')") h3 {{$t('view.setting.search_hot')}} div material-checkbox(id="setting_search_showHot_enable" v-model="current_setting.search.isShowHotSearch" :label="$t('view.setting.is_show')") - dd(:title="$t('view.setting.search_history_title')") + dd(:tips="$t('view.setting.search_history_title')") h3 {{$t('view.setting.search_history')}} div material-checkbox(id="setting_search_showHistory_enable" v-model="current_setting.search.isShowHistorySearch" :label="$t('view.setting.is_show')") - dd(:title="$t('view.setting.search_focus_search_box_title')") + dd(:tips="$t('view.setting.search_focus_search_box_title')") h3 {{$t('view.setting.search_focus_search_box')}} div material-checkbox(id="setting_search_focusSearchBox_enable" v-model="current_setting.search.isFocusSearchBox" :label="$t('view.setting.is_enable')") dt {{$t('view.setting.list')}} - dd(:title="$t('view.setting.list_source_title')") + dd(:tips="$t('view.setting.list_source_title')") h3 {{$t('view.setting.list_source')}} div material-checkbox(id="setting_list_showSource_enable" v-model="current_setting.list.isShowSource" :label="$t('view.setting.is_show')") - dd(:title="$t('view.setting.list_scroll_title')") + dd(:tips="$t('view.setting.list_scroll_title')") h3 {{$t('view.setting.list_scroll')}} div material-checkbox(id="setting_list_scroll_enable" v-model="current_setting.list.isSaveScrollLocation" :label="$t('view.setting.is_enable')") - //- dd(:title="播放列表是否显示专辑栏") + //- dd(:tips="播放列表是否显示专辑栏") h3 专辑栏 div material-checkbox(id="setting_list_showalbum" v-model="current_setting.list.isShowAlbumName" label="是否显示专辑栏") dt {{$t('view.setting.download')}} dd material-checkbox(id="setting_download_enable" v-model="current_setting.download.enable" :label="$t('view.setting.download_enable')") - dd(:title="$t('view.setting.download_path_title')") + dd(:tips="$t('view.setting.download_path_title')") h3 {{$t('view.setting.download_path')}} div p | {{$t('view.setting.download_path_label')}} - span.auto-hidden.hover(:title="$t('view.setting.download_path_open_label')" :class="$style.savePath" @click="handleOpenDir(current_setting.download.savePath)") {{current_setting.download.savePath}} + span.auto-hidden.hover(:tips="$t('view.setting.download_path_open_label')" :class="$style.savePath" @click="handleOpenDir(current_setting.download.savePath)") {{current_setting.download.savePath}} p material-btn(:class="$style.btn" min @click="handleChangeSavePath") {{$t('view.setting.download_path_change_btn')}} - dd(:title="$t('view.setting.download_name_title')") + dd(:tips="$t('view.setting.download_name_title')") h3 {{$t('view.setting.download_name')}} div material-checkbox(:id="`setting_download_musicName_${item.value}`" :class="$style.gapLeft" name="setting_download_musicName" :value="item.value" :key="item.value" need @@ -142,7 +142,7 @@ div.scroll(:class="$style.setting") material-checkbox(id="setting_download_isEmbedPic" v-model="current_setting.download.isEmbedPic" :label="$t('view.setting.download_embed_pic')") div(:class="$style.gapTop") material-checkbox(id="setting_download_isEmbedLyric" v-model="current_setting.download.isEmbedLyric" :label="$t('view.setting.download_embed_lyric')") - dd(:title="$t('view.setting.download_lyric_title')") + dd(:tips="$t('view.setting.download_lyric_title')") h3 {{$t('view.setting.download_lyric')}} div material-checkbox(id="setting_download_isDownloadLrc" v-model="current_setting.download.isDownloadLrc" :label="$t('view.setting.is_enable')") @@ -216,7 +216,7 @@ div.scroll(:class="$style.setting") div p | {{$t('view.setting.other_cache_label')}} - span.auto-hidden(:title="$t('view.setting.other_cache_label_title')") {{cacheSize}} + span.auto-hidden(:tips="$t('view.setting.other_cache_label_title')") {{cacheSize}} p material-btn(:class="$style.btn" min @click="clearCache") {{$t('view.setting.other_cache_clear_btn')}} dt {{$t('view.setting.update')}} @@ -236,25 +236,25 @@ div.scroll(:class="$style.setting") dd p.small | 本软件完全免费,代码已开源,开源地址: - span.hover.underline(:title="$t('view.setting.click_open')" @click="handleOpenUrl('https://github.com/lyswhut/lx-music-desktop#readme')") https://github.com/lyswhut/lx-music-desktop + span.hover.underline(:tips="$t('view.setting.click_open')" @click="handleOpenUrl('https://github.com/lyswhut/lx-music-desktop#readme')") https://github.com/lyswhut/lx-music-desktop p.small | 最新版网盘下载地址(网盘内有Windows、MAC版): - span.hover.underline(:title="$t('view.setting.click_open')" @click="handleOpenUrl('https://www.lanzoux.com/b0bf2cfa/')") 网盘地址 + span.hover.underline(:tips="$t('view.setting.click_open')" @click="handleOpenUrl('https://www.lanzoux.com/b0bf2cfa/')") 网盘地址 |   密码: - span.hover(:title="$t('view.setting.click_copy')" @click="clipboardWriteText('glqw')") glqw + span.hover(:tips="$t('view.setting.click_copy')" @click="clipboardWriteText('glqw')") glqw p.small | 软件的常见问题可转至: - span.hover.underline(:title="$t('view.setting.click_open')" @click="handleOpenUrl('https://github.com/lyswhut/lx-music-desktop/blob/master/FAQ.md')") 常见问题 + span.hover.underline(:tips="$t('view.setting.click_open')" @click="handleOpenUrl('https://github.com/lyswhut/lx-music-desktop/blob/master/FAQ.md')") 常见问题 p.small strong 仔细 仔细 仔细 | 地阅读常见问题后, p.small | 仍有问题可加企鹅群  - span.hover(:title="$t('view.setting.click_open')" @click="handleOpenUrl('https://jq.qq.com/?_wv=1027&k=51ECeq2')") 830125506 + span.hover(:tips="$t('view.setting.click_open')" @click="handleOpenUrl('https://jq.qq.com/?_wv=1027&k=51ECeq2')") 830125506 |  反馈 strong (为免满人,无事勿加,入群先看群公告) | ,或到 GitHub 提交  - span.hover.underline(:title="$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 感谢以前捐赠过的人❤️,现在软件不再接受捐赠,建议把你们的爱心用来支持正版音乐, @@ -264,7 +264,7 @@ div.scroll(:class="$style.setting") | 你已签署本软件的  material-btn(min @click="handleShowPact") 许可协议 | ,协议的在线版本在  - strong.hover.underline(:title="$t('view.setting.click_open')" @click="handleOpenUrl('https://github.com/lyswhut/lx-music-desktop#%E9%A1%B9%E7%9B%AE%E5%8D%8F%E8%AE%AE')") 这里 + strong.hover.underline(:tips="$t('view.setting.click_open')" @click="handleOpenUrl('https://github.com/lyswhut/lx-music-desktop#%E9%A1%B9%E7%9B%AE%E5%8D%8F%E8%AE%AE')") 这里 |  。 br @@ -605,6 +605,9 @@ export default { 'setting.desktopLyric.enable'(n) { this.current_setting.desktopLyric.enable = n }, + 'setting.desktopLyric.isLock'(n) { + this.current_setting.desktopLyric.isLock = n + }, 'setting.player.togglePlayMethod'(n) { this.current_setting.player.togglePlayMethod = n }, diff --git a/src/renderer/views/SongList.vue b/src/renderer/views/SongList.vue index 8a547035..93ae0b1b 100644 --- a/src/renderer/views/SongList.vue +++ b/src/renderer/views/SongList.vue @@ -31,7 +31,7 @@ div(:class="$style.left" :style="{ backgroundImage: 'url('+item.img+')' }") //- img(:src="item.img") div(:class="$style.right" :src="item.img") - h4(:title="item.name") {{item.name}} + h4 {{item.name}} p(:class="$style.play_count") {{item.play_count}} p(:class="$style.author") {{item.author}} li(:class="$style.item" style="cursor: default;" v-for="i in spaceNum")