Skip to content

Commit

Permalink
新增打开当前歌曲详情页菜单,可以在歌曲菜单中使用
Browse files Browse the repository at this point in the history
  • Loading branch information
lyswhut committed Jul 13, 2024
1 parent fd56d2b commit 13446c9
Show file tree
Hide file tree
Showing 9 changed files with 47 additions and 21 deletions.
3 changes: 3 additions & 0 deletions publish/changeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,8 @@
### 新增

- 新增重复歌曲列表,可以方便移除我的列表中的重复歌曲,此列表会列出目标列表里歌曲名相同的歌曲,可在“我的列表”里的列表名菜单中使用(注:该功能与PC端的区别是可以点击歌曲名多选删除)
- 新增打开当前歌曲详情页菜单,可以在歌曲菜单中使用

### 其他

- 更新 React native 到 v0.73.9
6 changes: 6 additions & 0 deletions src/components/OnlineList/ListMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export interface ListMenuProps {
onPlayLater: (selectInfo: SelectInfo) => void
onAdd: (selectInfo: SelectInfo) => void
onCopyName: (selectInfo: SelectInfo) => void
onMusicSourceDetail: (selectInfo: SelectInfo) => void
onDislikeMusic: (selectInfo: SelectInfo) => void
}
export interface ListMenuType {
Expand Down Expand Up @@ -54,6 +55,7 @@ export default forwardRef<ListMenuType, ListMenuProps>((props: ListMenuProps, re
// { action: 'download', label: '下载' },
{ action: 'add', label: t('add_to') },
{ action: 'copyName', label: t('copy_name') },
{ action: 'musicSourceDetail', label: t('music_source_detail') },
{ action: 'dislike', label: t('dislike'), disabled: isDislikeMusic },
] as const
}, [t, isDislikeMusic])
Expand All @@ -73,6 +75,10 @@ export default forwardRef<ListMenuType, ListMenuProps>((props: ListMenuProps, re
case 'copyName':
props.onCopyName(selectInfo)
break
case 'musicSourceDetail':
props.onMusicSourceDetail(selectInfo)
// setVIsibleMusicPosition(true)
break
case 'dislike':
props.onDislikeMusic(selectInfo)
break
Expand Down
3 changes: 2 additions & 1 deletion src/components/OnlineList/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import ListMenu, { type ListMenuType, type Position, type SelectInfo } from './L
import ListMusicMultiAdd, { type MusicMultiAddModalType as ListAddMultiType } from '@/components/MusicMultiAddModal'
import ListMusicAdd, { type MusicAddModalType as ListMusicAddType } from '@/components/MusicAddModal'
import MultipleModeBar, { type MultipleModeBarType, type SelectMode } from './MultipleModeBar'
import { handleDislikeMusic, handlePlay, handlePlayLater, handleShare } from './listAction'
import { handleDislikeMusic, handlePlay, handlePlayLater, handleShare, handleShowMusicSourceDetail } from './listAction'
import { createStyle } from '@/utils/tools'

export interface OnlineListProps {
Expand Down Expand Up @@ -109,6 +109,7 @@ export default forwardRef<OnlineListType, OnlineListProps>(({
onPlayLater={info => { hancelExitSelect(); handlePlayLater(info.musicInfo, info.selectedList, hancelExitSelect) }}
onCopyName={info => { handleShare(info.musicInfo) }}
onAdd={handleAddMusic}
onMusicSourceDetail={info => { void handleShowMusicSourceDetail(info.musicInfo) }}
onDislikeMusic={info => { void handleDislikeMusic(info.musicInfo) }}
/>
{/* <LoadingMask ref={loadingMaskRef} /> */}
Expand Down
11 changes: 10 additions & 1 deletion src/components/OnlineList/listAction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@ import { playList, playNext } from '@/core/player/player'
import { addTempPlayList } from '@/core/player/tempPlayList'
import settingState from '@/store/setting/state'
import { getListMusicSync } from '@/utils/listManage'
import { confirmDialog, shareMusic, toast } from '@/utils/tools'
import { confirmDialog, openUrl, shareMusic, toast } from '@/utils/tools'
import { addDislikeInfo, hasDislike } from '@/core/dislikeList'
import playerState from '@/store/player/state'
import musicSdk from '@/utils/musicSdk'
import { toOldMusicInfo } from '@/utils'

export const handlePlay = (musicInfo: LX.Music.MusicInfoOnline) => {
void addListMusics(LIST_IDS.DEFAULT, [musicInfo], settingState.setting['list.addMusicLocationType']).then(() => {
Expand All @@ -29,6 +31,13 @@ export const handleShare = (musicInfo: LX.Music.MusicInfoOnline) => {
shareMusic(settingState.setting['common.shareType'], settingState.setting['download.fileName'], musicInfo)
}

export const handleShowMusicSourceDetail = async(minfo: LX.Music.MusicInfoOnline) => {
const url = musicSdk[minfo.source as LX.OnlineSource]?.getMusicDetailPageUrl(toOldMusicInfo(minfo))
if (!url) return
void openUrl(url)
}


export const handleDislikeMusic = async(musicInfo: LX.Music.MusicInfoOnline) => {
const confirm = await confirmDialog({
message: global.i18n.t('lists_dislike_music_tip', { name: musicInfo.name }),
Expand Down
1 change: 1 addition & 0 deletions src/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@
"metadata_edit_modal_tip": "Song name cannot be empty",
"metadata_edit_modal_title": "Edit song tags",
"move_to": "Move to...",
"music_source_detail": "Song page",
"name": "Name: {name}",
"nav_exit": "Exit application",
"nav_love": "Collection",
Expand Down
1 change: 1 addition & 0 deletions src/lang/zh_cn.json
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@
"metadata_edit_modal_tip": "歌曲名不能为空",
"metadata_edit_modal_title": "编辑歌曲标签",
"move_to": "移动到...",
"music_source_detail": "歌曲详情页",
"name": "歌曲名:{name}",
"nav_exit": "退出应用",
"nav_love": "我的收藏",
Expand Down
28 changes: 12 additions & 16 deletions src/screens/Home/Views/Mylist/MusicList/ListMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ export interface ListMenuProps {
onEditMetadata: (selectInfo: SelectInfo) => void
onCopyName: (selectInfo: SelectInfo) => void
onChangePosition: (selectInfo: SelectInfo) => void
onMusicSourceDetail: (selectInfo: SelectInfo) => void
onDislikeMusic: (selectInfo: SelectInfo) => void
onRemove: (selectInfo: SelectInfo) => void
}
Expand Down Expand Up @@ -65,35 +66,26 @@ export default forwardRef<ListMenuType, ListMenuProps>((props, ref) => {
// { action: 'download', label: '下载' },
{ action: 'add', label: t('add_to') },
{ action: 'move', label: t('move_to') },
{ action: 'copyName', label: t('copy_name') },
{ action: 'changePosition', label: t('change_position') },
{ action: 'copyName', label: t('copy_name') },
{ action: 'musicSourceDetail', disabled: musicInfo.source == 'local', label: t('music_source_detail') },
// { action: 'musicSearch', label: t('music_search') },
{ action: 'dislike', disabled: hasDislike(musicInfo), label: t('dislike') },
{ action: 'remove', label: t('delete') },
]
if (musicInfo.source == 'local') menu.splice(4, 0, { action: 'editMetadata', disabled: !edit_metadata, label: t('edit_metadata') })
if (musicInfo.source == 'local') menu.splice(5, 0, { action: 'editMetadata', disabled: !edit_metadata, label: t('edit_metadata') })
setMenus(menu)
void Promise.all([hasEditMetadata(musicInfo)]).then(([_edit_metadata]) => {
// console.log(_edit_metadata)
let isUpdated = true
let isUpdated = false
if (edit_metadata != _edit_metadata) {
edit_metadata = _edit_metadata
isUpdated ||= true
}

if (isUpdated) {
const menu = [
{ action: 'play', label: t('play') },
{ action: 'playLater', label: t('play_later') },
// { action: 'download', label: '下载' },
{ action: 'add', label: t('add_to') },
{ action: 'move', label: t('move_to') },
{ action: 'copyName', label: t('copy_name') },
{ action: 'changePosition', label: t('change_position') },
{ action: 'dislike', disabled: hasDislike(musicInfo), label: t('dislike') },
{ action: 'remove', label: t('delete') },
]
if (musicInfo.source == 'local') menu.splice(4, 0, { action: 'editMetadata', disabled: !edit_metadata, label: t('edit_metadata') })
setMenus(menu)
menu[menu.findIndex(m => m.action == 'editMetadata')].disabled = !edit_metadata
setMenus([...menu])
}
})
}
Expand Down Expand Up @@ -132,6 +124,10 @@ export default forwardRef<ListMenuType, ListMenuProps>((props, ref) => {
props.onChangePosition(selectInfo)
// setVIsibleMusicPosition(true)
break
case 'musicSourceDetail':
props.onMusicSourceDetail(selectInfo)
// setVIsibleMusicPosition(true)
break
case 'dislike':
props.onDislikeMusic(selectInfo)
break
Expand Down
3 changes: 2 additions & 1 deletion src/screens/Home/Views/Mylist/MusicList/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { useCallback, useRef } from 'react'

import listState from '@/store/list/state'
import ListMenu, { type ListMenuType, type Position, type SelectInfo } from './ListMenu'
import { handleDislikeMusic, handlePlay, handlePlayLater, handleRemove, handleShare, handleUpdateMusicInfo, handleUpdateMusicPosition } from './listAction'
import { handleDislikeMusic, handlePlay, handlePlayLater, handleRemove, handleShare, handleShowMusicSourceDetail, handleUpdateMusicInfo, handleUpdateMusicPosition } from './listAction'
import List, { type ListType } from './List'
import ListMusicAdd, { type MusicAddModalType as ListMusicAddType } from '@/components/MusicAddModal'
import ListMusicMultiAdd, { type MusicMultiAddModalType as ListAddMultiType } from '@/components/MusicMultiAddModal'
Expand Down Expand Up @@ -156,6 +156,7 @@ export default () => {
onRemove={info => { hancelExitSelect(); handleRemove(info.listId, info.musicInfo, info.selectedList, hancelExitSelect) }}
onDislikeMusic={info => { void handleDislikeMusic(info.musicInfo) }}
onCopyName={info => { handleShare(info.musicInfo) }}
onMusicSourceDetail={info => { void handleShowMusicSourceDetail(info.musicInfo) }}
onAdd={handleAddMusic}
onMove={handleMoveMusic}
onEditMetadata={handleEditMetadata}
Expand Down
12 changes: 10 additions & 2 deletions src/screens/Home/Views/Mylist/MusicList/listAction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@ import { removeListMusics, updateListMusicPosition, updateListMusics } from '@/c
import { playList, playNext } from '@/core/player/player'
import { addTempPlayList } from '@/core/player/tempPlayList'
import settingState from '@/store/setting/state'
import { similar, sortInsert } from '@/utils'
import { confirmDialog, shareMusic, toast } from '@/utils/tools'
import { similar, sortInsert, toOldMusicInfo } from '@/utils'
import { confirmDialog, openUrl, shareMusic, toast } from '@/utils/tools'
import { addDislikeInfo, hasDislike } from '@/core/dislikeList'
import playerState from '@/store/player/state'

import type { SelectInfo } from './ListMenu'
import { type Metadata } from '@/components/MetadataEditModal'
import musicSdk from '@/utils/musicSdk'

export const handlePlay = (listId: SelectInfo['listId'], index: SelectInfo['index']) => {
void playList(listId, index)
Expand Down Expand Up @@ -89,6 +90,13 @@ export const searchListMusic = (list: LX.Music.MusicInfo[], text: string) => {
return sortedList.map(item => item.data).reverse()
}

export const handleShowMusicSourceDetail = async(minfo: SelectInfo['musicInfo']) => {
const url = musicSdk[minfo.source as LX.OnlineSource]?.getMusicDetailPageUrl(toOldMusicInfo(minfo))
if (!url) return
void openUrl(url)
}


export const handleDislikeMusic = async(musicInfo: SelectInfo['musicInfo']) => {
const confirm = await confirmDialog({
message: global.i18n.t('lists_dislike_music_tip', { name: musicInfo.name }),
Expand Down

0 comments on commit 13446c9

Please sign in to comment.