You've already forked lx-music-desktop
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fcea542def | ||
|
|
44407585fa |
17
CHANGELOG.md
17
CHANGELOG.md
@@ -6,6 +6,23 @@ Project versioning adheres to [Semantic Versioning](http://semver.org/).
|
||||
Commit convention is based on [Conventional Commits](http://conventionalcommits.org).
|
||||
Change log format is based on [Keep a Changelog](http://keepachangelog.com/).
|
||||
|
||||
## [2.0.1](https://github.com/lyswhut/lx-music-desktop/compare/v2.0.0...v2.0.1) - 2023-01-02
|
||||
|
||||
若你更新v2.0.0后,出现之前收藏的歌曲全部丢失或者歌曲无法添加到列表播放的问题,可以按以下方式解决:
|
||||
|
||||
1. 根据你的平台类型,进入软件数据目录
|
||||
- Windows:`%APPDATA%/lx-music-desktop`
|
||||
- Linux:`$XDG_CONFIG_HOME/lx-music-desktop` 或 `~/.config/lx-music-desktop`
|
||||
- macOS:`~/Library/Application Support/lx-music-desktop`
|
||||
|
||||
2. 进入`LxDatas`目录,退出LX,删除`lx.data.db`文件,再启动软件即可
|
||||
|
||||
若以上操作仍然不行,可以加交流群或者在GitHub开issue反馈
|
||||
|
||||
### 优化
|
||||
|
||||
- 单次执行所有sql语句,尝试解决某些情况下某些表没有成功创建的问题
|
||||
|
||||
## [2.0.0](https://github.com/lyswhut/lx-music-desktop/compare/v1.22.3...v2.0.0) - 2023-01-01
|
||||
|
||||
|
||||
|
||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "lx-music-desktop",
|
||||
"version": "2.0.0",
|
||||
"version": "2.0.1",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "lx-music-desktop",
|
||||
"version": "2.0.0",
|
||||
"version": "2.0.1",
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "lx-music-desktop",
|
||||
"version": "2.0.0",
|
||||
"version": "2.0.1",
|
||||
"description": "一个免费的音乐查找助手",
|
||||
"main": "./dist/main.js",
|
||||
"productName": "lx-music-desktop",
|
||||
|
||||
@@ -1,59 +1,14 @@
|
||||
若你更新v2.0.0后,出现之前收藏的歌曲全部丢失或者歌曲无法添加到列表播放的问题,可以按以下方式解决:
|
||||
|
||||
### 不兼容性变更说明
|
||||
1. 根据你的平台类型,进入软件数据目录
|
||||
- Windows:`%APPDATA%/lx-music-desktop`
|
||||
- Linux:`$XDG_CONFIG_HOME/lx-music-desktop` 或 `~/.config/lx-music-desktop`
|
||||
- macOS:`~/Library/Application Support/lx-music-desktop`
|
||||
|
||||
- 数据迁移,升级此版本时,会使用旧版本的我的列表、下载设置、快捷键设置、自定义源等数据会自动迁移到新的数据格式版本,旧的数据仍然会保留,但下载列表的数据不做迁移
|
||||
- 备份文件,v2.0.0及以后版本导出的列表、配置不支持导入v2.0.0之前版本,但v2.0.0之前版本导出的列表、配置支持导入v2.0.0以及以后版本(移动端需v0.15.0起才支持导入PC端v2生成的备份数据)
|
||||
- 同步功能,该功能不支持与移动端v1.0.0之前版本的使用,需等待后面的新版移动端,目前移动端v1的开发工作已在进行中
|
||||
2. 进入`LxDatas`目录,退出LX,删除`lx.data.db`文件,再启动软件即可
|
||||
|
||||
### 新增
|
||||
若以上操作仍然不行,可以加交流群或者在GitHub开issue反馈
|
||||
|
||||
- 新增自定义主题功能
|
||||
- 新增歌单搜索功能
|
||||
- 新增将本地歌曲添加到我的列表的支持,此功能可以在列表的右击菜单中使用(本地歌曲的歌词优先尝试读取相同路径下的同名歌词文件,若文件不存在则尝试读取歌曲文件内的歌词,若还是找不到歌词则尝试利用换源功能获取在线歌词,歌曲封面则是尝试读取歌曲文件内的封面,若不存在则利用换源功能获取在线封面)
|
||||
- 启动软件时自动回到上次的界面,例如上次退出软件时在我的列表,下次启动软件时会自动进入我的列表
|
||||
- 新增启动软件时自动播放音乐设置,默认关闭,可去设置-播放设置开启
|
||||
- 新增“蛋雅深藍”、“近墨者黑”皮肤
|
||||
- 新增下载歌词时是否同时下载歌词翻译、罗马音设置,默认关闭,可以去设置-下载设置开启(#344)
|
||||
- 新增下载时,若目录存在同名的文件时是否跳过下载此任务的设置(默认跳过,可以去设置-下载设置更改)
|
||||
- 新增界面字体大小设置
|
||||
- 桌面歌词新增竖排歌词显示功能(#971)
|
||||
- 桌面歌词新增歌词对齐方式、是否不允许歌词换行、歌词颜色、滚动对齐方式、歌词间距设置
|
||||
- 桌面歌词新增歌曲频谱显示(得益于主窗口与桌面歌词进程通信的改进,可以将此功能以CPU使用率“相对较低”的方式带到桌面歌词中)
|
||||
- 桌面歌词新增在任务栏显示歌词进程设置(此设置用于在录屏软件无法捕获歌词窗口时的变通解决方法)(#1063)
|
||||
- 添加kg源罗马音歌词的支持(感谢@helloplhm-qwq)
|
||||
- 支持打开波点音乐歌单(需在酷我源打开)
|
||||
- 新增设置-基本设置-播放栏进度条样式设置(此版本默认使用迷你进度条样式,对于某些不喜欢该样式的人可以将其换成其他样式)
|
||||
- 添加kg源评论图片展示(感谢@helloplhm-qwq)
|
||||
### 优化
|
||||
|
||||
### 优化(界面/交互/功能)
|
||||
|
||||
- 调整软件界面及配色,使其更加清爽
|
||||
- 处于单曲循环、顺序播放、禁用切歌模式时,手动切歌将会按列表循环模式的逻辑处理切歌(#864)
|
||||
- 歌单右键菜单的“重复歌曲”扫描功能现在会将歌曲名字内的括号内容移除再对比,这可以有效找出歌曲的变体,例如:`突然的自我`、`突然的自我(Live)`、`突然的自我(女生版)`、`突然的自我(DJ版)`等都会被找出来(#987)
|
||||
- 允许更小的桌面歌词窗口高度,可以取消“不允许拖动到主屏幕之外”设置后,再启用“不允许歌词换行”、“置顶歌词”与“自动刷新置顶”等设置,把它拖动到任务栏上,当做任务栏歌词使用(具体可以按你想要的显示方式使用这些设置组合去调)
|
||||
|
||||
### 优化(程序)
|
||||
|
||||
- 优化程序启动性能,优化与程序交互的流畅度
|
||||
- 重构整个程序,重新梳理了程序逻辑,使其更容易扩展及维护,将大部分代码从JavaScript迁移到TypeScript
|
||||
- 重写配置管理、列表管理功能,列表、歌词数据从json文件迁移到sqlite3存储,这应该能解决因为意外的字符编码导致的数据文件损坏问题
|
||||
|
||||
### 变更
|
||||
|
||||
- 列表右侧的操作按钮栏默认不再显示,歌曲的操作可以使用右键菜单代替,若想恢复它们的显示,可以去设置-列表设置-启用操作按钮栏开启
|
||||
- 窗口大小设置时不再自动调整字体大小,想要调整字体大小可以使用新增的字体大小设置调整
|
||||
|
||||
### 修复
|
||||
|
||||
- 修复Linux、macOS下若程序路径存在百分号时会导致软件无法启动的问题(#963)
|
||||
- 支持单行多时间标签歌词解析,修复某些歌词会出现时间标签的问题
|
||||
|
||||
### 移除
|
||||
|
||||
- 移除“信口雌黄”皮肤(由于该皮肤的配色有点刺眼),若你正在使用该皮肤,可以使用自定义主题功能恢复它
|
||||
- 移除Linux deb x86包构建,Electron/Chromium已不再支持 32-bit Linux(electron/electron#34787)
|
||||
- 移除桌面歌词主题设置,改用桌面歌词字体颜色设置功能代替
|
||||
|
||||
### 其他
|
||||
|
||||
- 更新Electron到v19.1.9
|
||||
- 单次执行所有sql语句,尝试解决某些情况下某些表没有成功创建的问题
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -6,19 +6,14 @@ let db: Database.Database
|
||||
|
||||
|
||||
const initTables = (db: Database.Database) => {
|
||||
db.exec(`
|
||||
const sql = `
|
||||
CREATE TABLE "db_info" (
|
||||
"id" INTEGER NOT NULL UNIQUE,
|
||||
"field_name" TEXT,
|
||||
"field_value" TEXT,
|
||||
PRIMARY KEY("id" AUTOINCREMENT)
|
||||
)`)
|
||||
);
|
||||
|
||||
db.prepare(`INSERT INTO "main"."db_info" ("field_name", "field_value") VALUES
|
||||
('version', '1')
|
||||
`).run()
|
||||
|
||||
db.exec(`
|
||||
CREATE TABLE "my_list" (
|
||||
"id" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
@@ -27,17 +22,8 @@ const initTables = (db: Database.Database) => {
|
||||
"position" INTEGER NOT NULL,
|
||||
"locationUpdateTime" INTEGER,
|
||||
PRIMARY KEY("id")
|
||||
)`)
|
||||
// const insert = db.prepare(`INSERT INTO "main"."my_list" ("id", "name", "source", "sourceListId", "locationUpdateTime") VALUES
|
||||
// (@id, @name, @source, @sourceListId, @locationUpdateTime)`)
|
||||
// db.transaction((cats) => {
|
||||
// for (const cat of cats) insert.run(cat)
|
||||
// })([
|
||||
// { id: 'default', name: '默认列表', source: null, sourceListId: null, locationUpdateTime: null },
|
||||
// { id: 'love', name: '收藏列表', source: null, sourceListId: null, locationUpdateTime: null },
|
||||
// { id: 'temp', name: '临时列表', source: null, sourceListId: null, locationUpdateTime: null },
|
||||
// ])
|
||||
db.exec(`
|
||||
);
|
||||
|
||||
CREATE TABLE "my_list_music_info" (
|
||||
"id" TEXT NOT NULL,
|
||||
"listId" TEXT NOT NULL,
|
||||
@@ -47,26 +33,22 @@ const initTables = (db: Database.Database) => {
|
||||
"interval" TEXT,
|
||||
"meta" TEXT NOT NULL,
|
||||
UNIQUE("id","listId")
|
||||
)`)
|
||||
db.exec(`
|
||||
);
|
||||
CREATE INDEX "index_my_list_music_info" ON "my_list_music_info" (
|
||||
"id",
|
||||
"listId"
|
||||
)`)
|
||||
);
|
||||
|
||||
db.exec(`
|
||||
CREATE TABLE "my_list_music_info_order" (
|
||||
"listId" TEXT NOT NULL,
|
||||
"musicInfoId" TEXT NOT NULL,
|
||||
"order" INTEGER NOT NULL
|
||||
)`)
|
||||
db.exec(`
|
||||
);
|
||||
CREATE INDEX "index_my_list_music_info_order" ON "my_list_music_info_order" (
|
||||
"listId",
|
||||
"musicInfoId"
|
||||
)`)
|
||||
);
|
||||
|
||||
db.exec(`
|
||||
CREATE TABLE "music_info_other_source" (
|
||||
"source_id" TEXT NOT NULL,
|
||||
"id" TEXT NOT NULL,
|
||||
@@ -76,29 +58,25 @@ const initTables = (db: Database.Database) => {
|
||||
"meta" TEXT NOT NULL,
|
||||
"order" INTEGER NOT NULL,
|
||||
UNIQUE("source_id","id")
|
||||
)`)
|
||||
db.exec(`
|
||||
);
|
||||
CREATE INDEX "index_music_info_other_source" ON "music_info_other_source" (
|
||||
"source_id",
|
||||
"id"
|
||||
)`)
|
||||
);
|
||||
|
||||
// TODO "meta" TEXT NOT NULL,
|
||||
db.exec(`
|
||||
-- TODO "meta" TEXT NOT NULL,
|
||||
CREATE TABLE "lyric" (
|
||||
"id" TEXT NOT NULL,
|
||||
"source" TEXT NOT NULL,
|
||||
"type" TEXT NOT NULL,
|
||||
"text" TEXT NOT NULL
|
||||
)`)
|
||||
);
|
||||
|
||||
db.exec(`
|
||||
CREATE TABLE "music_url" (
|
||||
"id" TEXT NOT NULL,
|
||||
"url" TEXT NOT NULL
|
||||
)`)
|
||||
);
|
||||
|
||||
db.exec(`
|
||||
CREATE TABLE "download_list" (
|
||||
"id" TEXT NOT NULL,
|
||||
"isComplate" INTEGER NOT NULL,
|
||||
@@ -114,7 +92,12 @@ const initTables = (db: Database.Database) => {
|
||||
"musicInfo" TEXT NOT NULL,
|
||||
"position" INTEGER NOT NULL,
|
||||
PRIMARY KEY("id")
|
||||
)`)
|
||||
);
|
||||
|
||||
INSERT INTO "main"."db_info" ("field_name", "field_value") VALUES ('version', '1');
|
||||
`
|
||||
|
||||
db.exec(sql)
|
||||
}
|
||||
|
||||
|
||||
@@ -143,7 +126,7 @@ export const init = (lxDataPath: string): boolean => {
|
||||
// if (dbFileExists) migrateData(db)
|
||||
|
||||
// https://www.sqlite.org/pragma.html#pragma_optimize
|
||||
db.exec('PRAGMA optimize;')
|
||||
if (dbFileExists) db.exec('PRAGMA optimize;')
|
||||
|
||||
// https://www.sqlite.org/lang_vacuum.html
|
||||
// db.exec('VACUUM "main"')
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import Database from 'better-sqlite3'
|
||||
|
||||
const migrateV1 = (db: Database.Database) => {
|
||||
db.exec('DROP TABLE "main"."download_list"')
|
||||
db.exec(`
|
||||
const sql = `
|
||||
DROP TABLE "main"."download_list";
|
||||
|
||||
CREATE TABLE "download_list" (
|
||||
"id" TEXT NOT NULL,
|
||||
"isComplate" INTEGER NOT NULL,
|
||||
@@ -18,11 +19,16 @@ const migrateV1 = (db: Database.Database) => {
|
||||
"musicInfo" TEXT NOT NULL,
|
||||
"position" INTEGER NOT NULL,
|
||||
PRIMARY KEY("id")
|
||||
)`)
|
||||
);
|
||||
`
|
||||
db.exec(sql)
|
||||
db.prepare('UPDATE "main"."db_info" SET "field_value"=@value WHERE "field_name"=@name').run({ name: 'version', value: '2' })
|
||||
}
|
||||
|
||||
export default (db: Database.Database) => {
|
||||
// PRAGMA user_version = x
|
||||
// console.log(db.prepare('PRAGMA user_version').get().user_version)
|
||||
// https://github.com/WiseLibs/better-sqlite3/issues/668#issuecomment-1145285728
|
||||
const version = db.prepare('SELECT "field_value" FROM "main"."db_info" WHERE "field_name" = ?').get('version').field_value
|
||||
switch (version) {
|
||||
case '1':
|
||||
|
||||
Reference in New Issue
Block a user