mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-31 11:01:36 +08:00
fix(usage): only auto-poll Copilot/ChatGPT quota for current provider
CopilotQuotaFooter and CodexOauthQuotaFooter called their hooks with a hardcoded `enabled: true` plus an unconditional 5-minute refetch and refetchOnWindowFocus, so non-current reverse-proxy cards kept polling in violation of the project's "only the active provider auto-queries on cooldown" rule. With multiple Copilot or ChatGPT accounts bound to different cards, every card kept hitting its own usage endpoint. Adopt the same pattern as useUsageQuery: keep `enabled` independent of isCurrent so first-fetch and manual refresh still work, but gate refetchInterval / refetchIntervalInBackground / refetchOnWindowFocus on a new `autoQuery` option, and thread `isCurrent` from ProviderCard through the footers into the hooks.
This commit is contained in:
@@ -13,7 +13,17 @@ export interface CopilotQuota {
|
||||
queriedAt: number | null;
|
||||
}
|
||||
|
||||
export function useCopilotQuota(accountId: string | null, enabled: boolean) {
|
||||
export interface UseCopilotQuotaOptions {
|
||||
enabled?: boolean;
|
||||
/** 是否启用自动轮询(5 分钟)与窗口 focus 重取 */
|
||||
autoQuery?: boolean;
|
||||
}
|
||||
|
||||
export function useCopilotQuota(
|
||||
accountId: string | null,
|
||||
options: UseCopilotQuotaOptions = {},
|
||||
) {
|
||||
const { enabled = true, autoQuery = false } = options;
|
||||
return useQuery<CopilotQuota>({
|
||||
queryKey: ["copilot", "quota", accountId ?? "default"],
|
||||
queryFn: async (): Promise<CopilotQuota> => {
|
||||
@@ -44,8 +54,9 @@ export function useCopilotQuota(accountId: string | null, enabled: boolean) {
|
||||
};
|
||||
},
|
||||
enabled,
|
||||
refetchInterval: REFETCH_INTERVAL,
|
||||
refetchOnWindowFocus: true,
|
||||
refetchInterval: autoQuery ? REFETCH_INTERVAL : false,
|
||||
refetchIntervalInBackground: autoQuery,
|
||||
refetchOnWindowFocus: autoQuery,
|
||||
staleTime: REFETCH_INTERVAL,
|
||||
retry: 1,
|
||||
});
|
||||
|
||||
@@ -19,6 +19,12 @@ export function useSubscriptionQuota(appId: AppId, enabled: boolean) {
|
||||
});
|
||||
}
|
||||
|
||||
export interface UseCodexOauthQuotaOptions {
|
||||
enabled?: boolean;
|
||||
/** 是否启用自动轮询(5 分钟)与窗口 focus 重取 */
|
||||
autoQuery?: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Codex OAuth (ChatGPT Plus/Pro 反代) 订阅额度查询 hook
|
||||
*
|
||||
@@ -30,15 +36,17 @@ export function useSubscriptionQuota(appId: AppId, enabled: boolean) {
|
||||
*/
|
||||
export function useCodexOauthQuota(
|
||||
meta: ProviderMeta | undefined,
|
||||
enabled: boolean,
|
||||
options: UseCodexOauthQuotaOptions = {},
|
||||
) {
|
||||
const { enabled = true, autoQuery = false } = options;
|
||||
const accountId = resolveManagedAccountId(meta, PROVIDER_TYPES.CODEX_OAUTH);
|
||||
return useQuery({
|
||||
queryKey: ["codex_oauth", "quota", accountId ?? "default"],
|
||||
queryFn: () => subscriptionApi.getCodexOauthQuota(accountId),
|
||||
enabled,
|
||||
refetchInterval: REFETCH_INTERVAL,
|
||||
refetchOnWindowFocus: true,
|
||||
refetchInterval: autoQuery ? REFETCH_INTERVAL : false,
|
||||
refetchIntervalInBackground: autoQuery,
|
||||
refetchOnWindowFocus: autoQuery,
|
||||
staleTime: REFETCH_INTERVAL,
|
||||
retry: 1,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user