添加跳过配置功能,包括数据库和API支持,更新播放器以处理跳过片段

This commit is contained in:
katelya
2025-09-02 13:49:46 +08:00
parent d9d50891f2
commit 348494336a
9 changed files with 1049 additions and 3 deletions
+63 -1
View File
@@ -3,7 +3,7 @@
import { Redis } from '@upstash/redis';
import { AdminConfig } from './admin.types';
import { Favorite, IStorage, PlayRecord } from './types';
import { EpisodeSkipConfig, Favorite, IStorage, PlayRecord } from './types';
// 搜索历史最大条数
const SEARCH_HISTORY_LIMIT = 20;
@@ -267,6 +267,68 @@ export class UpstashRedisStorage implements IStorage {
async setAdminConfig(config: AdminConfig): Promise<void> {
await withRetry(() => this.client.set(this.adminConfigKey(), config));
}
// 跳过配置相关
private skipConfigKey(userName: string, key: string): string {
return `katelyatv:skip_config:${userName}:${key}`;
}
private skipConfigsKey(userName: string): string {
return `katelyatv:skip_configs:${userName}`;
}
async getSkipConfig(
userName: string,
key: string
): Promise<EpisodeSkipConfig | null> {
const data = await withRetry(() =>
this.client.get(this.skipConfigKey(userName, key))
);
return data ? (data as EpisodeSkipConfig) : null;
}
async setSkipConfig(
userName: string,
key: string,
config: EpisodeSkipConfig
): Promise<void> {
await withRetry(async () => {
// 保存到独立的key
await this.client.set(this.skipConfigKey(userName, key), config);
// 同时加入到用户的跳过配置集合中
await this.client.sadd(this.skipConfigsKey(userName), key);
});
}
async getAllSkipConfigs(
userName: string
): Promise<{ [key: string]: EpisodeSkipConfig }> {
const keys = await withRetry(() =>
this.client.smembers(this.skipConfigsKey(userName))
);
const configs: { [key: string]: EpisodeSkipConfig } = {};
for (const key of ensureStringArray(keys || [])) {
const data = await withRetry(() =>
this.client.get(this.skipConfigKey(userName, key))
);
if (data) {
configs[key] = data as EpisodeSkipConfig;
}
}
return configs;
}
async deleteSkipConfig(userName: string, key: string): Promise<void> {
await withRetry(async () => {
// 删除独立的key
await this.client.del(this.skipConfigKey(userName, key));
// 从用户的跳过配置集合中移除
await this.client.srem(this.skipConfigsKey(userName), key);
});
}
}
// 单例 Upstash Redis 客户端