Przeglądaj źródła

提交MediaTable

onecold 7 miesięcy temu
rodzic
commit
2a9eb5333a
1 zmienionych plików z 28 dodań i 11 usunięć
  1. 28 11
      entry/src/main/ets/common/util/MediaTable.ets

+ 28 - 11
entry/src/main/ets/common/util/MediaTable.ets

@@ -90,6 +90,7 @@ export interface PageQueryOptions {
   pageIndex: number;           // 页码(从0开始)
   pageSize: number;            // 每页数量
   type?: number;               // 媒体类型过滤
+  isShowFileName?: boolean;    // 是否显示文件名(影响排序字段选择)
 }
 
 export interface PageQueryResult {
@@ -614,12 +615,12 @@ export default  class MediaTable {
   /**
    * 按艺术家查询歌曲列表(用于艺术家详情页)
    */
-  public async querySongsByArtist(artist: string, sortType?: number): Promise<VideoItem[]> {
+  public async querySongsByArtist(artist: string, sortType?: number, isShowFileName?: boolean): Promise<VideoItem[]> {
     try {
       const predicates = new relationalStore.RdbPredicates(RdbUtils.MEDIA_TABLE.tableName);
       predicates.equalTo(DB_COLUMNS.ARTIST, artist);
       predicates.equalTo(DB_COLUMNS.TYPE, CommonConstants.TYPE_LOCAL);
-      this.applySortConditions(predicates, sortType);
+      this.applySortConditions(predicates, sortType, isShowFileName);
 
       return await new Promise((resolve, reject) => {
         this.accountTable.query(predicates, (resultSet: relationalStore.ResultSet) => {
@@ -640,12 +641,12 @@ export default  class MediaTable {
   /**
    * 按专辑查询歌曲列表(用于专辑详情页)
    */
-  public async querySongsByAlbum(album: string, sortType?: number): Promise<VideoItem[]> {
+  public async querySongsByAlbum(album: string, sortType?: number, isShowFileName?: boolean): Promise<VideoItem[]> {
     try {
       const predicates = new relationalStore.RdbPredicates(RdbUtils.MEDIA_TABLE.tableName);
       predicates.equalTo(DB_COLUMNS.ALBUM, album);
       predicates.equalTo(DB_COLUMNS.TYPE, CommonConstants.TYPE_LOCAL);
-      this.applySortConditions(predicates, sortType);
+      this.applySortConditions(predicates, sortType, isShowFileName);
 
       return await new Promise((resolve, reject) => {
         this.accountTable.query(predicates, (resultSet: relationalStore.ResultSet) => {
@@ -1164,10 +1165,20 @@ export default  class MediaTable {
 
   /**
    * 应用排序条件到查询谓词
-   * sortType: 0-艺术家升序 1-艺术家降序 2-专辑升序 3-专辑降序 4-名称升序 5-名称降序
+   * sortType: 0-艺术家升序 1-艺术家降序 2-专辑升序 3-专辑降序 4-名称升序 5-名称降序 6-时间升序 7-时间降序
+   * @param predicates 查询谓词
+   * @param sortType 排序类型
+   * @param isShowFileName 是否显示文件名(当sortType为4或5时,此参数决定按name还是fileName排序)
    */
-  private applySortConditions(predicates: relationalStore.RdbPredicates, sortType?: number): void {
+  private applySortConditions(predicates: relationalStore.RdbPredicates, sortType?: number, isShowFileName?: boolean): void {
     const type = sortType !== undefined ? sortType : 4;
+
+    // 当按名称排序时,根据isShowFileName决定使用name还是fileName字段
+    let nameColumn = DB_COLUMNS.NAME;
+    if ((type === 4 || type === 5) && isShowFileName === true) {
+      nameColumn = DB_COLUMNS.FILE_NAME;
+    }
+
     switch (type) {
       case 0:
         predicates.orderByAsc(DB_COLUMNS.ARTIST);
@@ -1182,13 +1193,19 @@ export default  class MediaTable {
         predicates.orderByDesc(DB_COLUMNS.ALBUM);
         break;
       case 4:
-        predicates.orderByAsc(DB_COLUMNS.NAME);
+        predicates.orderByAsc(nameColumn);
         break;
       case 5:
-        predicates.orderByDesc(DB_COLUMNS.NAME);
+        predicates.orderByDesc(nameColumn);
+        break;
+      case 6:
+        predicates.orderByAsc(DB_COLUMNS.C_TIME);
+        break;
+      case 7:
+        predicates.orderByDesc(DB_COLUMNS.C_TIME);
         break;
       default:
-        predicates.orderByAsc(DB_COLUMNS.NAME);
+        predicates.orderByAsc(nameColumn);
         break;
     }
   }
@@ -1246,7 +1263,7 @@ export default  class MediaTable {
       }
       
       // 5. 应用排序
-      this.applySortConditions(pagePredicates, options.sortType);
+      this.applySortConditions(pagePredicates, options.sortType, options.isShowFileName);
       
       // 6. 应用分页
       const offset = options.pageIndex * options.pageSize;
@@ -1302,7 +1319,7 @@ export default  class MediaTable {
       }
       
       // 5. 应用排序
-      this.applySortConditions(pagePredicates, options.sortType);
+      this.applySortConditions(pagePredicates, options.sortType, options.isShowFileName);
       
       // 6. 应用分页
       const offset = options.pageIndex * options.pageSize;