@@ -158,7 +158,7 @@ const player = usePlayer();
158158const localStore = useLocalStore ();
159159const settingStore = useSettingStore ();
160160
161- const loading = ref <boolean >(true );
161+ const loading = ref <boolean >(false );
162162const loadingMsg = ref <MessageReactive | null >(null );
163163
164164// 本地歌曲总线
@@ -184,10 +184,12 @@ const listData = computed<SongType[]>(() => {
184184// 获取音乐文件夹
185185const getMusicFolder = async (): Promise <string []> => {
186186 defaultMusicPath .value = await window .electron .ipcRenderer .invoke (" get-default-dir" , " music" );
187- return [
187+ const paths = [
188188 settingStore .showDefaultLocalPath ? defaultMusicPath .value : " " ,
189189 ... settingStore .localFilesPath ,
190190 ];
191+ // 过滤空路径
192+ return paths .filter ((p ) => p && p .trim () !== " " );
191193};
192194
193195// 全部音乐大小
@@ -219,42 +221,50 @@ const moreOptions = computed<DropdownOption[]>(() => [
219221// 获取全部路径歌曲
220222const getAllLocalMusic = debounce (
221223 async (showTip : boolean = false ) => {
222- // 获取路径
223- const allPath = await getMusicFolder ();
224- if (! allPath || ! allPath .length ) return ;
225- // 加载提示
226- if (showTip ) {
227- loadingMsg .value = window .$message .loading (" 正在获取本地歌曲" , {
228- duration: 0 ,
229- });
230- }
231- // 获取全部歌曲
232- loading .value = true ;
233- const dirContentsPromises = allPath .map ((path ) =>
234- window .electron .ipcRenderer .invoke (" get-music-files" , path ),
235- );
236- const results = await Promise .allSettled (dirContentsPromises );
237- const allSongData = results
238- .filter ((result ) => result .status === " fulfilled" )
239- .map ((result ) => (result as PromiseFulfilledResult <any >).value );
240- // 展平去重
241- const songData = uniqBy (flattenDeep (allSongData ), " id" );
242- // 处理数据
243- const listData = formatSongsList (songData );
244- // 数据是否变化
245- const oldLength = localStore .localSongs .length ;
246- if (oldLength === 0 && listData .length > 0 ) {
247- window .$message .success (` 发现 ${listData .length } 首歌曲 ` );
248- } else if (listData .length > oldLength ) {
249- window .$message .success (` 新增 ${listData .length - oldLength } 首歌曲 ` );
224+ try {
225+ // 获取路径
226+ const allPath = await getMusicFolder ();
227+ if (! allPath || ! allPath .length ) {
228+ loading .value = false ;
229+ return ;
230+ }
231+ // 加载提示
232+ if (showTip ) {
233+ loadingMsg .value = window .$message .loading (" 正在获取本地歌曲" , {
234+ duration: 0 ,
235+ });
236+ }
237+ // 获取全部歌曲
238+ loading .value = true ;
239+ const dirContentsPromises = allPath .map ((path ) =>
240+ window .electron .ipcRenderer .invoke (" get-music-files" , path ),
241+ );
242+ const results = await Promise .allSettled (dirContentsPromises );
243+ const allSongData = results
244+ .filter ((result ) => result .status === " fulfilled" )
245+ .map ((result ) => (result as PromiseFulfilledResult <any >).value );
246+ // 展平去重
247+ const songData = uniqBy (flattenDeep (allSongData ), " id" );
248+ // 处理数据
249+ const listData = formatSongsList (songData );
250+ // 数据是否变化
251+ const oldLength = localStore .localSongs .length ;
252+ if (oldLength === 0 && listData .length > 0 ) {
253+ window .$message .success (` 发现 ${listData .length } 首歌曲 ` );
254+ } else if (listData .length > oldLength ) {
255+ window .$message .success (` 新增 ${listData .length - oldLength } 首歌曲 ` );
256+ }
257+ if (showTip ) window .$message .success (` 已发现 ${listData .length } 首 ` );
258+ // 保存并更新
259+ localStore .updateLocalSong (listData );
260+ } catch (error ) {
261+ console .error (" 获取本地音乐失败:" , error );
262+ window .$message .error (" 获取本地音乐失败,请重试" );
263+ } finally {
264+ loading .value = false ;
265+ loadingMsg .value ?.destroy ();
266+ loadingMsg .value = null ;
250267 }
251- if (showTip ) window .$message .success (` 已发现 ${listData .length } 首 ` );
252- // 保存并更新
253- localStore .updateLocalSong (listData );
254- // 关闭加载
255- loading .value = false ;
256- loadingMsg .value ?.destroy ();
257- loadingMsg .value = null ;
258268 },
259269 300 ,
260270 { leading: true , trailing: false },
0 commit comments