@@ -40,7 +40,7 @@ import playerEventemitter, {
4040} from '../../../eventemitter' ;
4141import { Singer } from './constants' ;
4242import upperCaseFirstLetter from '#/utils/upper_case_first_letter' ;
43- import { base64ToCover } from './utils' ;
43+ import { base64ToCover , canAudioPlay } from './utils' ;
4444
4545const maskProps : { style : CSSProperties } = {
4646 style : { zIndex : ZIndex . DIALOG } ,
@@ -90,33 +90,43 @@ function CreateMusicDialog() {
9090 setMusicType ( option . actualValue ) ;
9191
9292 const [ asset , setAsset ] = useState < File | null > ( null ) ;
93- const onAssetChange = ( a ) => {
93+ const onAssetChange = ( a : File | null ) => {
9494 setAsset ( a ) ;
9595
96- getMusicFileMetadata ( a )
97- . then ( ( metadata ) => {
98- const { title , artist } = metadata ;
99- if ( ! name && title ) {
100- setName ( title ) ;
96+ if ( a ) {
97+ canAudioPlay ( a ) . then ( ( canPlay ) => {
98+ if ( ! canPlay ) {
99+ setAsset ( null ) ;
100+ return notice . error ( t ( 'can_not_play_audio_file' ) ) ;
101101 }
102- if ( ! singerList . length && artist ) {
103- searchSingerRequest ( {
104- keyword : artist ,
105- page : 1 ,
106- pageSize : 10 ,
107- requestMinimalDuration : 0 ,
108- } )
109- . then ( ( data ) => {
110- if ( ! singerList . length ) {
111- setSingerList ( data . singerList ) ;
112- }
102+ } ) ;
103+ getMusicFileMetadata ( a )
104+ . then ( ( metadata ) => {
105+ const { title, artist } = metadata ;
106+ if ( ! name && title ) {
107+ setName ( title ) ;
108+ }
109+ if ( ! singerList . length && artist ) {
110+ searchSingerRequest ( {
111+ keyword : artist ,
112+ page : 1 ,
113+ pageSize : 10 ,
114+ requestMinimalDuration : 0 ,
113115 } )
114- . catch ( ( error ) => logger . error ( error , 'Failed to search singers' ) ) ;
115- }
116- } )
117- . catch ( ( error ) =>
118- logger . error ( error , "Failed to parse music's metadata" ) ,
119- ) ;
116+ . then ( ( data ) => {
117+ if ( ! singerList . length ) {
118+ setSingerList ( data . singerList ) ;
119+ }
120+ } )
121+ . catch ( ( error ) =>
122+ logger . error ( error , 'Failed to search singers' ) ,
123+ ) ;
124+ }
125+ } )
126+ . catch ( ( error ) =>
127+ logger . error ( error , "Failed to parse music's metadata" ) ,
128+ ) ;
129+ }
120130 } ;
121131
122132 const [ loading , setLoading ] = useState ( false ) ;
@@ -229,11 +239,13 @@ function CreateMusicDialog() {
229239 value = { asset }
230240 onChange = { onAssetChange }
231241 disabled = { loading }
232- acceptTypes = { ASSET_TYPE_MAP [ AssetType . MUSIC ] . acceptTypes }
242+ acceptTypes = { Object . values (
243+ ASSET_TYPE_MAP [ AssetType . MUSIC ] . acceptType ,
244+ ) . flat ( ) }
233245 placeholder = { upperCaseFirstLetter (
234- `${ t ( 'empty_file_warning ' ) } , ${ t (
235- 'supported_formats' ,
236- ) } ${ ASSET_TYPE_MAP [ AssetType . MUSIC ] . acceptTypes . join ( ', ' ) } `,
246+ `${ t ( 'supported_formats ' ) } : ${ Object . keys (
247+ ASSET_TYPE_MAP [ AssetType . MUSIC ] . acceptType ,
248+ ) . join ( '/ ' ) } `,
237249 ) }
238250 />
239251 </ Label >
0 commit comments