Selaa lähdekoodia

提交道理鱼图片资源

onecold 6 kuukautta sitten
vanhempi
sitoutus
fc2ce77e68

+ 72 - 4
entry/src/main/ets/common/util/RemoteDriveManager.ets

@@ -908,6 +908,14 @@ export class RemoteDriveManager {
       Logger.info(TAG, '百度授权字段添加成功');
     } catch (error) {
     }
+
+    try {
+      Logger.info(TAG, '尝试添加sortOrder字段...');
+      const addSortOrderSql = `ALTER TABLE ${this.webDavTable} ADD COLUMN sortOrder INTEGER DEFAULT 999999`;
+      await this.dataBaseUtil.executeSql(addSortOrderSql);
+      Logger.info(TAG, 'sortOrder字段添加成功');
+    } catch (error) {
+    }
   }
 
   // 从数据库查询所有账户
@@ -917,11 +925,13 @@ export class RemoteDriveManager {
       await this.upgradeWebDavTable();
 
       const predicates = new relationalStore.RdbPredicates(this.webDavTable);
+      // 按sortOrder升序排序,然后按id升序排序
+      predicates.orderByAsc('sortOrder').orderByAsc('id');
       // 先查询基础字段(确保这些字段在旧版本中存在)
       const baseColumns = ['id', 'name', 'isActivate', 'host', 'localHost', 'isUseLocalHost',
         'port', 'filepath', 'imageFilePath', 'lyricFilePath', 'uploadFilePath',
         'account', 'password', 'enableHttps', 'coverPath', 'webType', 'smbShare', 'smbDomain', 'navidromeBasePath', 'jellyfinBasePath', 'embyBasePath', 'ftpEncoding',
-        'baiduAccessToken', 'baiduRefreshToken', 'baiduTokenExpiresAt'];
+        'baiduAccessToken', 'baiduRefreshToken', 'baiduTokenExpiresAt', 'sortOrder'];
 
       const resultSet = await this.dataBaseUtil.queryData(this.webDavTable, baseColumns, predicates);
 
@@ -997,12 +1007,28 @@ export class RemoteDriveManager {
         if (baiduExpireIndex >= 0) {
           account.baiduTokenExpiresAt = resultSet.getLong(baiduExpireIndex);
         }
+        const sortOrderIndex = resultSet.getColumnIndex('sortOrder');
+        if (sortOrderIndex >= 0) {
+          account.sortOrder = resultSet.getLong(sortOrderIndex);
+          // 如果数据库中的值为NULL,使用默认值
+          if (resultSet.isColumnNull(sortOrderIndex)) {
+            account.sortOrder = 999999;
+          }
+        } else {
+          account.sortOrder = 999999; // 默认值
+        }
 
+       //Lo Logger.info(TAG, `加载账户 ${account.name}, sortOrder: ${account.sortOrder}, id: ${account.id}`);
         this.webDavAccounts.push(account);
       }
       resultSet.close();
 
+      // 打印排序信息
+      this.webDavAccounts.sort((a, b) => a.sortOrder - b.sortOrder);
       Logger.info(TAG, '从数据库加载了', this.webDavAccounts.length.toString(), '个WebDAV账户');
+      if (this.webDavAccounts.length > 0) {
+        Logger.info(TAG, `第一个账户: ${this.webDavAccounts[0].name}, sortOrder: ${this.webDavAccounts[0].sortOrder}`);
+      }
       this.notifyObservers(RemoteDriveManagerStates.QueryAccountsSucceed);
     } catch (err) {
       const error = err as Error;
@@ -1036,7 +1062,8 @@ export class RemoteDriveManager {
     ftpEncoding: string = 'utf-8',
     baiduAccessToken: string = '',
     baiduRefreshToken: string = '',
-    baiduTokenExpiresAt: number = 0
+    baiduTokenExpiresAt: number = 0,
+    sortOrder: number = 999999
   ): Promise<void> {
     try {
       const values: relationalStore.ValuesBucket = {
@@ -1063,7 +1090,8 @@ export class RemoteDriveManager {
         'ftpEncoding': ftpEncoding,
         'baiduAccessToken': baiduAccessToken,
         'baiduRefreshToken': baiduRefreshToken,
-        'baiduTokenExpiresAt': baiduTokenExpiresAt
+        'baiduTokenExpiresAt': baiduTokenExpiresAt,
+        'sortOrder': sortOrder
       };
 
       await this.dataBaseUtil.insertData(this.webDavTable, values);
@@ -1106,7 +1134,8 @@ export class RemoteDriveManager {
         'ftpEncoding': account.ftpEncoding,
         'baiduAccessToken': account.baiduAccessToken,
         'baiduRefreshToken': account.baiduRefreshToken,
-        'baiduTokenExpiresAt': account.baiduTokenExpiresAt
+        'baiduTokenExpiresAt': account.baiduTokenExpiresAt,
+        'sortOrder': account.sortOrder
       };
 
       const predicates = new relationalStore.RdbPredicates(this.webDavTable);
@@ -1144,6 +1173,45 @@ export class RemoteDriveManager {
     }
   }
 
+  // 置顶账户
+  public async pinAccount(account: WebDavAccount): Promise<void> {
+    try {
+      // 获取当前所有账户中最小的sortOrder值
+      const allAccounts = this.getAllWebDavAccounts();
+      if (allAccounts.length === 0) {
+        return;
+      }
+
+      // 找到最小的sortOrder值
+      let minSortOrder = allAccounts[0].sortOrder;
+      for (let i = 1; i < allAccounts.length; i++) {
+        if (allAccounts[i].sortOrder < minSortOrder) {
+          minSortOrder = allAccounts[i].sortOrder;
+        }
+      }
+
+      Logger.info(TAG, `当前最小sortOrder: ${minSortOrder}, 要置顶的账户sortOrder: ${account.sortOrder}, 账户名: ${account.name}`);
+
+      // 如果账户已经是最小的,则不需要置顶
+      if (account.sortOrder === minSortOrder && minSortOrder !== 999999) {
+        Logger.info(TAG, '账户已经是第一个:', account.name);
+        return;
+      }
+
+      // 将账户的sortOrder设置为比最小值更小的值
+      account.sortOrder = minSortOrder - 1;
+      Logger.info(TAG, `设置账户 ${account.name} 的sortOrder为: ${account.sortOrder}`);
+
+      // 更新数据库
+      await this.editAccount(account);
+      Logger.info(TAG, '置顶WebDAV账户成功:', account.name);
+    } catch (err) {
+      const error = err as Error;
+      Logger.error(TAG, '置顶WebDAV账户失败:', error.message);
+      throw error;
+    }
+  }
+
   // 获取所有账户
   public getAllWebDavAccounts(): WebDavAccount[] {
     return this.webDavAccounts;

+ 1 - 1
entry/src/main/ets/dialog/RemoteDriveAccountDialog.ets

@@ -1586,7 +1586,7 @@ export function getCloudDiskIcon(type: number): ResourceStr {
     case RemoteDriveType.Plex:
       return $r('app.media.plex');
     case RemoteDriveType.DaoLiYu:
-      return $r('app.media.music_group');
+      return $r('app.media.daoliyu');
     case RemoteDriveType.Baidu:
       return $r('app.media.baiduwp');
     case RemoteDriveType.ALi:

+ 1 - 1
entry/src/main/ets/pages/NewIndex.ets

@@ -1657,7 +1657,7 @@ struct NewIndex {
           this.showRemoteDriveAccountDialog(false, undefined, RemoteDriveType.Plex)
         })
       MenuItem({
-        startIcon: $r('app.media.music_group'),
+        startIcon: $r('app.media.daoliyu'),
         content: '道理鱼'
       })
         .onClick(async () => {

BIN
entry/src/main/resources/base/media/daoliyu.png