mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-08 02:17:46 +08:00
简化 Codex 重置机会展示标签
This commit is contained in:
+19
-7
@@ -28,7 +28,7 @@ describe('codex reset credit display helpers', () => {
|
||||
expect(getVisibleCodexResetCreditItems(snapshot, 1_700_000_000)).toEqual([])
|
||||
})
|
||||
|
||||
it('sorts available detail items by remaining time and limits visible items to five', () => {
|
||||
it('sorts available detail items by remaining time and labels visible items with short ordinal keys', () => {
|
||||
const snapshot: QuotaResetCreditsSnapshot = {
|
||||
available_count: 7,
|
||||
updated_at: 1_700_000_000,
|
||||
@@ -40,18 +40,30 @@ describe('codex reset credit display helpers', () => {
|
||||
{ id: 'missing-expiry-0000', status: 'available' },
|
||||
{ id: 'first-0000', status: 'available', expires_at: 1_700_010_000 },
|
||||
{ id: 'second-0000', status: 'available', expires_at: 1_700_020_000 },
|
||||
{ id: 'fourth-0000', display_key: 'displayed', status: 'available', expires_at: 1_700_040_000 },
|
||||
{
|
||||
id: 'fourth-0000',
|
||||
display_key: 'RateLimitResetCredit_05cbb6eeeb9c81918e011d8300f9ebfb',
|
||||
status: 'available',
|
||||
expires_at: 1_700_040_000,
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
const items = getVisibleCodexResetCreditItems(snapshot, 1_700_000_000)
|
||||
|
||||
expect(items.map(item => item.displayKey)).toEqual([
|
||||
'first',
|
||||
'second',
|
||||
'third',
|
||||
'displayed',
|
||||
'fifth',
|
||||
'Key-1',
|
||||
'Key-2',
|
||||
'Key-3',
|
||||
'Key-4',
|
||||
'Key-5',
|
||||
])
|
||||
expect(items.map(item => item.title)).toEqual([
|
||||
'Codex 重置机会 Key-1',
|
||||
'Codex 重置机会 Key-2',
|
||||
'Codex 重置机会 Key-3',
|
||||
'Codex 重置机会 Key-4',
|
||||
'Codex 重置机会 Key-5',
|
||||
])
|
||||
expect(items.map(item => item.remainingSeconds)).toEqual([
|
||||
10_000,
|
||||
|
||||
@@ -11,6 +11,12 @@ export interface CodexResetCreditDisplayItem {
|
||||
title: string
|
||||
}
|
||||
|
||||
interface CodexResetCreditDisplayCandidate {
|
||||
id?: string | null
|
||||
expiresAt?: number | null
|
||||
remainingSeconds: number
|
||||
}
|
||||
|
||||
export function getCodexResetCreditAvailableCount(
|
||||
snapshot: QuotaResetCreditsSnapshot | null | undefined,
|
||||
): number | null {
|
||||
@@ -22,14 +28,6 @@ export function formatCodexResetCreditCount(count: number | null | undefined): s
|
||||
return `共 ${count ?? 0} 次机会`
|
||||
}
|
||||
|
||||
function codexResetCreditDisplayKey(item: QuotaResetCreditSnapshot): string | null {
|
||||
const explicit = item.display_key?.trim()
|
||||
if (explicit) return explicit
|
||||
const id = item.id?.trim()
|
||||
if (!id) return null
|
||||
return id.split('-')[0]?.trim() || null
|
||||
}
|
||||
|
||||
function codexResetCreditRemainingSeconds(
|
||||
item: QuotaResetCreditSnapshot,
|
||||
snapshot: QuotaResetCreditsSnapshot,
|
||||
@@ -64,20 +62,25 @@ export function getVisibleCodexResetCreditItems(
|
||||
return credits
|
||||
.map((item) => {
|
||||
if (!codexResetCreditStatusIsDisplayable(item)) return null
|
||||
const displayKey = codexResetCreditDisplayKey(item)
|
||||
const remainingSeconds = codexResetCreditRemainingSeconds(item, snapshot, nowUnixSecs)
|
||||
if (!displayKey || remainingSeconds === null || remainingSeconds <= 0) return null
|
||||
if (remainingSeconds === null || remainingSeconds <= 0) return null
|
||||
return {
|
||||
id: item.id,
|
||||
displayKey,
|
||||
expiresAt: item.expires_at,
|
||||
remainingSeconds,
|
||||
title: item.id ? `${item.id}` : displayKey,
|
||||
} satisfies CodexResetCreditDisplayItem
|
||||
} satisfies CodexResetCreditDisplayCandidate
|
||||
})
|
||||
.filter((item): item is CodexResetCreditDisplayItem => item !== null)
|
||||
.filter((item): item is CodexResetCreditDisplayCandidate => item !== null)
|
||||
.sort((a, b) => a.remainingSeconds - b.remainingSeconds)
|
||||
.slice(0, limit)
|
||||
.map((item, index) => {
|
||||
const displayKey = `Key-${index + 1}`
|
||||
return {
|
||||
...item,
|
||||
displayKey,
|
||||
title: `Codex 重置机会 ${displayKey}`,
|
||||
} satisfies CodexResetCreditDisplayItem
|
||||
})
|
||||
}
|
||||
|
||||
export function formatCodexResetCreditDays(remainingSeconds: number): string {
|
||||
|
||||
Reference in New Issue
Block a user