mirror of
https://github.com/ZHANGTIANYAO1/teamspeak-music-bot.git
synced 2026-10-02 04:52:50 +08:00
Merge remote-tracking branch 'origin/main' into feat/issue-126-default-source
# Conflicts: # src/data/config.ts
This commit is contained in:
commit
75497cf0f7
18 files changed
+885
-77
No files matched your search
@@ -38,6 +38,22 @@ export interface JellyfinConfig {
|
||||
userId: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Per-provider audio quality (音质), persisted so a restart keeps the user's
|
||||
* choice instead of resetting each provider to its in-memory default (#125).
|
||||
* The values are the same strings the WebUI/REST `POST /api/music/quality`
|
||||
* endpoint sends and each provider's setQuality() accepts; on startup they are
|
||||
* replayed onto the (shared, process-wide) providers. Providers ignore/normalize
|
||||
* unknown values, so a stale/hand-edited entry can never break playback.
|
||||
*/
|
||||
export interface AudioQualityConfig {
|
||||
netease: string;
|
||||
qq: string;
|
||||
bilibili: string;
|
||||
kugou: string;
|
||||
jellyfin: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Providers gated by `enabledProviders`. Not listed here:
|
||||
* - "local" → governed by the existing `localAudioEnabled` flag
|
||||
@@ -111,6 +127,8 @@ export interface BotConfig {
|
||||
guestMode: GuestModeConfig;
|
||||
spotify: SpotifyConfig;
|
||||
jellyfin: JellyfinConfig;
|
||||
/** Persisted per-provider audio quality (音质), restored on startup (#125). */
|
||||
audioQuality: AudioQualityConfig;
|
||||
/**
|
||||
* Which gateable providers are active (see GATEABLE_PROVIDERS). Default is
|
||||
* the online sources (NetEase/QQ/Bilibili/YouTube/Kugou); jellyfin is an
|
||||
@@ -179,6 +197,15 @@ export function getDefaultConfig(): BotConfig {
|
||||
apiKey: "",
|
||||
userId: "",
|
||||
},
|
||||
// Mirrors each provider's own in-memory default quality; overwritten on
|
||||
// startup once the user has changed a quality (persisted via #125).
|
||||
audioQuality: {
|
||||
netease: "exhigh",
|
||||
qq: "exhigh",
|
||||
bilibili: "high",
|
||||
kugou: "128",
|
||||
jellyfin: "direct",
|
||||
},
|
||||
enabledProviders: ["netease", "qq", "bilibili", "youtube", "kugou"],
|
||||
defaultPlatform: null,
|
||||
};
|
||||
@@ -347,6 +374,20 @@ export function loadConfig(path: string): BotConfig {
|
||||
? (rawDefault as GateableProvider)
|
||||
: null;
|
||||
|
||||
// audioQuality → per-provider strings; each field falls back to its default
|
||||
// when missing/blank/non-string (a hand-edited/legacy config must never smuggle
|
||||
// a non-string past the gate — the value is fed straight to provider.setQuality).
|
||||
const partialAq = (partial.audioQuality ?? {}) as Partial<AudioQualityConfig>;
|
||||
const coerceQuality = (v: unknown, fallback: string): string =>
|
||||
typeof v === "string" && v.trim() ? v : fallback;
|
||||
const audioQuality: AudioQualityConfig = {
|
||||
netease: coerceQuality(partialAq.netease, defaults.audioQuality.netease),
|
||||
qq: coerceQuality(partialAq.qq, defaults.audioQuality.qq),
|
||||
bilibili: coerceQuality(partialAq.bilibili, defaults.audioQuality.bilibili),
|
||||
kugou: coerceQuality(partialAq.kugou, defaults.audioQuality.kugou),
|
||||
jellyfin: coerceQuality(partialAq.jellyfin, defaults.audioQuality.jellyfin),
|
||||
};
|
||||
|
||||
return {
|
||||
...defaults,
|
||||
...partial,
|
||||
@@ -354,6 +395,7 @@ export function loadConfig(path: string): BotConfig {
|
||||
guestMode: gm,
|
||||
spotify,
|
||||
jellyfin,
|
||||
audioQuality,
|
||||
enabledProviders,
|
||||
defaultPlatform: defaultPlatformPref,
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user