From 4710bb16d89f933ddde8b0f7daaefe6e23ed9f00 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Wed, 1 Oct 2025 13:29:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=88=97=E8=A1=A8=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E6=96=B0=E5=A2=9E=E6=AD=8C=E6=9B=B2=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=EF=BC=88#2537=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 8 +++++-- src/renderer/views/Download/index.vue | 17 +++++++++++++++ src/renderer/views/Download/useMenu.js | 10 +++++++++ src/renderer/views/Download/useMusicAdd.js | 25 ++++++++++++++++++++++ 4 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 src/renderer/views/Download/useMusicAdd.js diff --git a/publish/changeLog.md b/publish/changeLog.md index fcc44958..4078c94b 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,3 +1,6 @@ +我们很高兴地宣布新项目 Any Listen 的桌面版已发布,目前已支持列表跟随本地文件自动更新、加载并播放WebDAV上的歌曲等功能,更多功能仍在积极开发中,桌面版与Web版将同步更新。 +对于有播放本地音乐或播放服务器上音乐需求的人可以试试,若遇到任何问题可以发 issue 反馈。 + ### 新增 - 新增「设置 → 其他设置 → 主窗口使用软件内置的圆角及阴影」选项(#2360) @@ -5,8 +8,9 @@ - 开放 API 新增播放器声音大小、静音、播放进度控制、完整歌词获取,详情看接入文档(#2386) - 新增「设置 → 播放设置 → 调换歌词翻译与歌词罗马音位置」选项,默认关闭(#2451) - 新增启动参数 `-hidden`,在启动时将软件最小化到系统托盘(#2459) -- 新增 Any Listen 歌词标签数据读取与播放(#2485) +- 新增 Any Listen 歌词(用于支持已下载歌曲的歌词逐字播放)标签数据读取与播放(#2485) - 新增 Any Listen 歌词(包含逐字歌词、翻译、罗马音歌词,如果有)嵌入与下载,默认启用 +- 下载列表菜单新增歌曲添加弹窗,允许将所选歌曲的在线版本添加到收藏列表(#2537) ### 修复 @@ -20,4 +24,4 @@ ### 其他 -- 更新 Electron 到 37.4.0 +- 更新 Electron 到 37.6.0 diff --git a/src/renderer/views/Download/index.vue b/src/renderer/views/Download/index.vue index ca4b220b..e25e5399 100644 --- a/src/renderer/views/Download/index.vue +++ b/src/renderer/views/Download/index.vue @@ -62,6 +62,8 @@ + + @@ -75,6 +77,7 @@ import useTab from './useTab' import useMenu from './useMenu' import usePlay from './usePlay' import useTaskActions from './useTaskActions' +import useMusicAdd from './useMusicAdd' import { downloadStatus } from '@renderer/store/download/state' import { appSetting } from '@renderer/store/setting' @@ -113,6 +116,13 @@ export default { handleOpenFile, } = useTaskActions({ list, removeAllSelect, selectedList }) + const { + isShowListAdd, + isShowListAddMultiple, + selectedAddMusicInfo, + handleShowMusicAddModal, + } = useMusicAdd({ selectedList, list }) + const { menus, menuLocation, @@ -126,6 +136,7 @@ export default { handleOpenFile, handlePlayMusic, handlePlayMusicLater, + handleShowMusicAddModal, handleSearch, handleOpenMusicDetail, }) @@ -209,6 +220,12 @@ export default { listItemHeight, playTaskId, + isShowListAdd, + isShowListAddMultiple, + selectedAddMusicInfo, + + removeAllSelect, + menus, menuLocation, isShowItemMenu, diff --git a/src/renderer/views/Download/useMenu.js b/src/renderer/views/Download/useMenu.js index 0f97addb..163d4d20 100644 --- a/src/renderer/views/Download/useMenu.js +++ b/src/renderer/views/Download/useMenu.js @@ -10,6 +10,7 @@ export default ({ handleOpenFile, handlePlayMusic, handlePlayMusicLater, + handleShowMusicAddModal, handleSearch, handleOpenMusicDetail, }) => { @@ -22,6 +23,7 @@ export default ({ sourceDetail: true, search: true, remove: true, + addTo: true, }) const t = useI18n() const menuLocation = shallowReactive({ x: 0, y: 0 }) @@ -54,6 +56,11 @@ export default ({ action: 'file', hide: !itemMenuControl.file, }, + { + name: t('list__add_to'), + action: 'addTo', + disabled: !itemMenuControl.addTo, + }, { name: t('list__source_detail'), action: 'sourceDetail', @@ -129,6 +136,9 @@ export default ({ case 'playLater': handlePlayMusicLater(index) break + case 'addTo': + handleShowMusicAddModal(index) + break case 'search': handleSearch(index) break diff --git a/src/renderer/views/Download/useMusicAdd.js b/src/renderer/views/Download/useMusicAdd.js new file mode 100644 index 00000000..0b3bcca1 --- /dev/null +++ b/src/renderer/views/Download/useMusicAdd.js @@ -0,0 +1,25 @@ +import { ref, shallowRef, nextTick, markRaw } from '@common/utils/vueTools' + +export default ({ selectedList, list }) => { + const isShowListAdd = ref(false) + const isShowListAddMultiple = ref(false) + const selectedAddMusicInfo = shallowRef(null) + + const handleShowMusicAddModal = (index, single) => { + if (selectedList.value.length && !single) { + isShowListAddMultiple.value = true + } else { + selectedAddMusicInfo.value = markRaw(list.value[index].metadata.musicInfo) + nextTick(() => { + isShowListAdd.value = true + }) + } + } + + return { + isShowListAdd, + isShowListAddMultiple, + selectedAddMusicInfo, + handleShowMusicAddModal, + } +}