浏览代码

扫描媒体库的时候自动校正数据

onecold 11 月之前
父节点
当前提交
9b9bdd52f6
共有 2 个文件被更改,包括 51 次插入9 次删除
  1. 8 3
      entry/src/main/ets/view/LocalMusic.ets
  2. 43 6
      entry/src/main/ets/workers/Worker.ets

+ 8 - 3
entry/src/main/ets/view/LocalMusic.ets

@@ -674,6 +674,7 @@ export struct LocalMusic {
     //如果是hicar连接状态,这些都是false
     if(this.isHiCar()){
       this.isShowTitleBar = false//不显示导航栏
+      this.columns=4
       if(!(this.windowWidth>1800&&this.windowHeight>=1200))//小屏幕不可以Grid
       {
         this.isShowHeader = false//二级菜单不显示头部
@@ -1210,6 +1211,9 @@ export struct LocalMusic {
   }
 
   getCurFileList(): Array<VideoItem> {
+    if(this.isSearchMode){
+      return this.filteredList
+    }
     let files: Array<VideoItem> = [];
     if (ArrayUtil.isNotEmpty(this.videoLocalList)) {
       for (let i = 0; i < this.videoLocalList.length; i++) {
@@ -3465,7 +3469,7 @@ export struct LocalMusic {
         .cachedCount(6)
         .margin(
           this.isHiCar()?{bottom:this.bottomBarHeight+90}:
-          {bottom:this.isShowCoverHeader()? 25:
+          {bottom:this.isShowCoverHeader()? this.topBarHeight+35:
           this.isCoverOpacity()?this.topBarHeight+this.bottomBarHeight+78
             :this.topBarHeight+this.bottomBarHeight+108})
         .transition(TransitionEffect.move(TransitionEdge.BOTTOM)
@@ -7109,6 +7113,7 @@ export struct LocalMusic {
       LogUtil.info('twocold isHiCarSmall isHiCarStatus= ' + this.isHiCarStatus);
       if (Math.abs(currentRatio - hiCarRatio.ratio) <= RATIO_TOLERANCE) {
         // LogUtil.info(`HiCar detected: ${hiCarRatio.name}, actual: ${this.windowWidth}x${this.windowHeight}`);
+        //宽扁平的尺寸设置列表展示
         return true;
       }
     }
@@ -9473,8 +9478,8 @@ export struct LocalMusic {
 
       Row() {
         this.pushLyricButton($r('app.media.cut_current'), 0, '本地歌词')
-        this.pushLyricButton($r('app.media.white_search'), 1, '获取歌词')
-
+        // this.pushLyricButton($r('app.media.white_search'), 1, '获取歌词')
+        this.pushLyricButton($r('app.media.white_search'), 1, '繁体转简体')
       }
       .justifyContent(FlexAlign.Center)
       .margin({ top: 3, bottom: 10 })

+ 43 - 6
entry/src/main/ets/workers/Worker.ets

@@ -111,14 +111,51 @@ async function scanDirectory(context: Context, curPath: string, lockPath: string
 async function queryMediaKuList(context:Context){
   const table: MediaTable = new MediaTable(context);
   try {
-    table.getRdbStore(context,() => {
-      let mediaKuList: Array<VideoItem> = []
-      table.query(0, async (result: VideoItem[]) => {
-        mediaKuList = result;
-        workerPort.postMessage({ code: 102, data: mediaKuList }); // 返回主线程
-      }, true);
 
+    await new Promise<void>((resolve, reject) => {
+      table.getRdbStore(context,  (err:Error) => {
+        err ? reject(err) : resolve();
+      });
     });
+
+    // 2. 查询媒体库(isVideo=1)音乐
+    const originalList: VideoItem[] = await new Promise((resolve, reject) => {
+      table.query(0,  (result: VideoItem[] | null, err?: Error) => {
+        if (err) {
+          reject(err);
+        } else {
+          resolve(result || []);
+        }
+      });
+    });
+    workerPort.postMessage({  code: 102, data: originalList });
+    // 3. 并行校验文件有效性
+    const validList = await Promise.all(
+      originalList.map(async  item => {
+        try {
+          const exists = await FileUtil.access(item.filePath);  // 改为异步校验
+          if (exists) return item;
+
+          // 删除无效记录
+          const isDeleted = await new Promise<boolean>(resolve => {
+            table.deleteDataFilePath(item.filePath,  resolve);
+          });
+
+          // Logger.info(` 文件${isDeleted ? '已' : '未'}删除: ${item.filePath}`);
+          return isDeleted ? null : item; // 标记删除项
+        } catch (e) {
+          Logger.warn(` 文件校验异常: ${item.filePath}`,  e);
+          return item; // 出错时保守保留
+        }
+      })
+    );
+
+    // 4. 过滤已删除项并返回结果
+    const finalList = validList.filter(Boolean)  as VideoItem[];
+    if(originalList&&finalList&&originalList.length!=finalList.length){
+      workerPort.postMessage({  code: 102, data: finalList });
+    }
+
   }catch (err) {
     Logger.error(` onecold testtag queryMediaKuList: ${err.code}  - ${err.message}`);