|
|
@@ -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;
|