From a90e6b23dbe9e9b8a83de678f5fc880006be2e2f Mon Sep 17 00:00:00 2001 From: orfelorfel23 Date: Sat, 5 Sep 2026 20:05:13 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20Live-Countdowns=20f=C3=BCr=20Reset-Zeit?= =?UTF-8?q?en=20bei=20AG=20und=20MiniMax=20(5h=20+=20Weekly)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/services/providers.js | 8 ++-- dist/services/providers.js.map | 2 +- public/app.js | 79 +++++++++++++++++----------------- src/services/providers.ts | 8 ++-- tokenwatch-sync.js | 25 +++++------ 5 files changed, 59 insertions(+), 63 deletions(-) diff --git a/dist/services/providers.js b/dist/services/providers.js index c0e0300..3cbb5a1 100644 --- a/dist/services/providers.js +++ b/dist/services/providers.js @@ -30,28 +30,28 @@ function updateAntigravityQuota(data) { used: gemini5hUsed, total: 100, percentage: gemini5hUsed, - meta: { resetStr: data.gemini_5h_reset || 'Unknown' } + meta: { resetTime: data.gemini_5h_reset || null } }, { provider: 'AG Gemini (Weekly)', used: geminiWeeklyUsed, total: 100, percentage: geminiWeeklyUsed, - meta: { resetStr: data.gemini_weekly_reset || 'Unknown' } + meta: { resetTime: data.gemini_weekly_reset || null } }, { provider: 'AG Claude (5h)', used: claude5hUsed, total: 100, percentage: claude5hUsed, - meta: { resetStr: data.claude_5h_reset || 'Unknown' } + meta: { resetTime: data.claude_5h_reset || null } }, { provider: 'AG Claude (Weekly)', used: claudeWeeklyUsed, total: 100, percentage: claudeWeeklyUsed, - meta: { resetStr: data.claude_weekly_reset || 'Unknown' } + meta: { resetTime: data.claude_weekly_reset || null } } ]; // Persist to DB so values survive server restarts diff --git a/dist/services/providers.js.map b/dist/services/providers.js.map index 8c95843..671a793 100644 --- a/dist/services/providers.js.map +++ b/dist/services/providers.js.map @@ -1 +1 @@ -{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/services/providers.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/services/providers.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,kDAA0B;AAC1B,oDAA4B;AAC5B,6BAAgF;AAEhF,gBAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,IAAI,gBAAgB,GAAiB;IACjC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE;IAClE,EAAE,QAAQ,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE;IACtE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE;IAClE,EAAE,QAAQ,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE;CACzE,CAAC;AAEF,gCAAuC,IAAS;IAC5C,MAAM,YAAY,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,mBAAmB,IAAI,GAAG,CAAC,CAAC;IAC7D,MAAM,gBAAgB,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,uBAAuB,IAAI,GAAG,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,mBAAmB,IAAI,GAAG,CAAC,CAAC;IAC7D,MAAM,gBAAgB,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,uBAAuB,IAAI,GAAG,CAAC,CAAC;IAErE,gBAAgB,GAAG;QACf;YACI,QAAQ,EAAE,gBAAgB;YAC1B,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,GAAG;YACV,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE;SACpD;QACD;YACI,QAAQ,EAAE,oBAAoB;YAC9B,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,GAAG;YACV,UAAU,EAAE,gBAAgB;YAC5B,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,mBAAmB,IAAI,IAAI,EAAE;SACxD;QACD;YACI,QAAQ,EAAE,gBAAgB;YAC1B,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,GAAG;YACV,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE;SACpD;QACD;YACI,QAAQ,EAAE,oBAAoB;YAC9B,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,GAAG;YACV,UAAU,EAAE,gBAAgB;YAC5B,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,mBAAmB,IAAI,IAAI,EAAE;SACxD;KACJ,CAAC;IAEF,kDAAkD;IAClD,IAAA,0BAAqB,EAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CACpC,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC,CACnE,CAAC;AACN,CAAC;AAEM,KAAK;IACR,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAqB,GAAE,CAAC;QAC3C,IAAI,IAAI,EAAE,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAClD,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACxE,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC;AACL,CAAC;AAED;IACI,OAAO,gBAAgB,CAAC;AAC5B,CAAC;AAEM,KAAK;IACR,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,2CAA2C,EAAE;YACrE,OAAO,EAAE;gBACL,eAAe,EAAE,UAAU,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;aACvD;SACJ,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,OAAO,CAAC;QACtB,MAAM,IAAI,GAAG,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;QAE7C,MAAM,YAAY,GAAG,KAAK,CAAC;QAC3B,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,YAAY,GAAG,KAAK,CAAC,CAAC;QACrE,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,YAAY,CAAC,CAAC;QAEpE,MAAM,IAAI,GAAG;YACT,SAAS;YACT,YAAY;YACZ,cAAc;YACd,YAAY;SACf,CAAC;QAEF,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IACvE,CAAC;AACL,CAAC;AAEM,KAAK;IACR,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,gEAAgE,EAAE;YAC1F,OAAO,EAAE;gBACL,eAAe,EAAE,UAAU,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE;aAC3D;SACJ,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC;QACrF,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElF,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7D,OAAO;YACH;gBACI,QAAQ,EAAE,cAAc;gBACxB,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,GAAG;gBACV,UAAU,EAAE,YAAY;gBACxB,IAAI,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;aACjC;YACD;gBACI,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,GAAG;gBACV,UAAU,EAAE,UAAU;gBACtB,IAAI,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;aAC/B;SACJ,CAAC;IACN,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9D,OAAO;YACH,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE;YAChE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE;SACvE,CAAC;IACN,CAAC;AACL,CAAC;AAEM,KAAK;IACR,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,aAAa,EAAE,CAAC;IACvC,MAAM,aAAa,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAEhD,OAAO,CAAC,GAAG,QAAQ,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC,CAAC;AACrD,CAAC"} \ No newline at end of file diff --git a/public/app.js b/public/app.js index d297d5d..9a3ecd5 100644 --- a/public/app.js +++ b/public/app.js @@ -78,41 +78,45 @@ function updateRow(providerId, quota) { } // Detail text + const detailsId = `details-${quota.provider.toLowerCase().replace(/[^a-z0-9]/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '')}`; + const detailsEl = document.getElementById(detailsId); + if (quota.provider.startsWith('MiniMax') && quota.meta) { statusText.innerText = `${Math.round(quota.used)}% / 100%`; - const detailsId = `details-${quota.provider.toLowerCase().replace(/[^a-z0-9]/g, '-')}`; - const detailsEl = document.getElementById(detailsId); - if (detailsEl) { - const parseDate = (val) => { - if (!val) return '--'; - const ts = (typeof val === 'number' && val < 9999999999) ? val * 1000 : val; - return new Date(ts).toLocaleString(); - }; - - const resetStr = parseDate(quota.meta.reset); - + const resetTs = quota.meta.reset; + const targetMs = (typeof resetTs === 'number' && resetTs < 9999999999) ? resetTs * 1000 : resetTs; + const countdownId = `countdown-${detailsId}`; + if (quota.provider.includes('5h')) { - detailsEl.innerHTML = ` -
Reset in: --:--:--
- `; - const targetTs = (typeof quota.meta.reset === 'number' && quota.meta.reset < 9999999999) ? quota.meta.reset * 1000 : quota.meta.reset; - if (targetTs) startMinimaxCountdown(targetTs); + detailsEl.innerHTML = `
Reset in: --:--:--
`; + if (targetMs) startCountdown(countdownId, targetMs); } else { - detailsEl.innerHTML = ` -
Reset: ${resetStr}
- `; + // Weekly: show countdown if in the future, else formatted date + if (targetMs && targetMs > Date.now()) { + detailsEl.innerHTML = `
Reset in: --:--:--
`; + startCountdown(countdownId, targetMs); + } else { + const resetStr = targetMs ? new Date(targetMs).toLocaleString() : '--'; + detailsEl.innerHTML = `
Reset: ${resetStr}
`; + } } } } else if (quota.provider.startsWith('AG ') && quota.meta) { statusText.innerText = `${Math.round(quota.used)}% / 100%`; - const detailsId = `details-${quota.provider.toLowerCase().replace(/[^a-z0-9]/g, '-')}`; - const detailsEl = document.getElementById(detailsId); if (detailsEl) { - const resetStr = quota.meta.resetStr || '--'; - detailsEl.innerHTML = ` -
Reset: ${resetStr}
- `; + const resetTs = quota.meta.resetTime; + const targetMs = resetTs ? new Date(resetTs).getTime() : null; + const countdownId = `countdown-${detailsId}`; + + if (targetMs && targetMs > Date.now()) { + detailsEl.innerHTML = `
Reset in: --:--:--
`; + startCountdown(countdownId, targetMs); + } else if (targetMs) { + detailsEl.innerHTML = `
Reset: ${new Date(targetMs).toLocaleString()}
`; + } else { + detailsEl.innerHTML = `
Reset: --
`; + } } } else if (quota.provider.toLowerCase() === 'poe' && quota.meta) { statusText.innerText = `${(quota.used).toLocaleString()} / ${(quota.total).toLocaleString()}`; @@ -175,33 +179,30 @@ function startPoeCountdown() { poeCountdownInterval = setInterval(updateCountdown, 1000); } -let minimaxCountdownInterval = null; -function startMinimaxCountdown(targetTs) { - if (minimaxCountdownInterval) clearInterval(minimaxCountdownInterval); - - const targetDate = new Date(targetTs); + +let countdownIntervals = {}; +function startCountdown(elementId, targetMs) { + if (countdownIntervals[elementId]) clearInterval(countdownIntervals[elementId]); const updateCountdown = () => { - const now = new Date(); - let diffMs = targetDate.getTime() - now.getTime(); - - if (diffMs < 0) { - // Already passed, show 00:00:00 or let the UI handle refresh - diffMs = 0; - } + let diffMs = targetMs - Date.now(); + if (diffMs < 0) diffMs = 0; const h = Math.floor(diffMs / (1000 * 60 * 60)); const m = Math.floor((diffMs % (1000 * 60 * 60)) / (1000 * 60)); const s = Math.floor((diffMs % (1000 * 60)) / 1000); - const el = document.getElementById('minimax-countdown'); + const el = document.getElementById(elementId); if (el) { el.innerText = `${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`; + } else { + clearInterval(countdownIntervals[elementId]); + delete countdownIntervals[elementId]; } }; updateCountdown(); - minimaxCountdownInterval = setInterval(updateCountdown, 1000); + countdownIntervals[elementId] = setInterval(updateCountdown, 1000); } async function fetchHistory() { diff --git a/src/services/providers.ts b/src/services/providers.ts index bade8be..2706c53 100644 --- a/src/services/providers.ts +++ b/src/services/providers.ts @@ -23,28 +23,28 @@ export function updateAntigravityQuota(data: any) { used: gemini5hUsed, total: 100, percentage: gemini5hUsed, - meta: { resetStr: data.gemini_5h_reset || 'Unknown' } + meta: { resetTime: data.gemini_5h_reset || null } }, { provider: 'AG Gemini (Weekly)', used: geminiWeeklyUsed, total: 100, percentage: geminiWeeklyUsed, - meta: { resetStr: data.gemini_weekly_reset || 'Unknown' } + meta: { resetTime: data.gemini_weekly_reset || null } }, { provider: 'AG Claude (5h)', used: claude5hUsed, total: 100, percentage: claude5hUsed, - meta: { resetStr: data.claude_5h_reset || 'Unknown' } + meta: { resetTime: data.claude_5h_reset || null } }, { provider: 'AG Claude (Weekly)', used: claudeWeeklyUsed, total: 100, percentage: claudeWeeklyUsed, - meta: { resetStr: data.claude_weekly_reset || 'Unknown' } + meta: { resetTime: data.claude_weekly_reset || null } } ]; diff --git a/tokenwatch-sync.js b/tokenwatch-sync.js index d3132f4..d737fad 100644 --- a/tokenwatch-sync.js +++ b/tokenwatch-sync.js @@ -159,13 +159,8 @@ async function main() { return; } - let gemini5h = 1, geminiWeekly = 1, gemini5hReset = 'Unknown', geminiWeeklyReset = 'Unknown'; - let claude5h = 1, claudeWeekly = 1, claude5hReset = 'Unknown', claudeWeeklyReset = 'Unknown'; - - const formatTime = (ts) => { - if (!ts) return 'Unknown'; - return new Date(ts).toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'}); - }; + let gemini5h = 1, geminiWeekly = 1, gemini5hReset = null, geminiWeeklyReset = null; + let claude5h = 1, claudeWeekly = 1, claude5hReset = null, claudeWeeklyReset = null; for (const group of groups) { const isGemini = group.displayName && group.displayName.toLowerCase().includes('gemini'); @@ -173,18 +168,18 @@ async function main() { if (isGemini) { if (bucket.window === '5h') { gemini5h = bucket.remainingFraction ?? 1; - gemini5hReset = formatTime(bucket.resetTime); + gemini5hReset = bucket.resetTime || null; } else if (bucket.window === 'weekly') { geminiWeekly = bucket.remainingFraction ?? 1; - geminiWeeklyReset = formatTime(bucket.resetTime); + geminiWeeklyReset = bucket.resetTime || null; } } else { if (bucket.window === '5h') { claude5h = bucket.remainingFraction ?? 1; - claude5hReset = formatTime(bucket.resetTime); + claude5hReset = bucket.resetTime || null; } else if (bucket.window === 'weekly') { claudeWeekly = bucket.remainingFraction ?? 1; - claudeWeeklyReset = formatTime(bucket.resetTime); + claudeWeeklyReset = bucket.resetTime || null; } } } @@ -195,10 +190,10 @@ async function main() { gemini_weekly_remaining: Math.round(geminiWeekly * 100), claude_5h_remaining: Math.round(claude5h * 100), claude_weekly_remaining: Math.round(claudeWeekly * 100), - gemini_5h_reset: `in ${gemini5hReset}`, - gemini_weekly_reset: `in ${geminiWeeklyReset}`, - claude_5h_reset: `in ${claude5hReset}`, - claude_weekly_reset: `in ${claudeWeeklyReset}` + gemini_5h_reset: gemini5hReset, + gemini_weekly_reset: geminiWeeklyReset, + claude_5h_reset: claude5hReset, + claude_weekly_reset: claudeWeeklyReset }; console.log('Gefundene Live-Daten:', payload);