feat: add details and countdown for MiniMax and Antigravity
Build and Push Docker Image / build-and-push (push) Canceled after 0s

This commit is contained in:
Jannik committed 2026-08-28 22:11:58 +02:00
1 parent 0043008020
commit d699dd4c0c
1 file changed
+73 -3
+73 -3
View File
@@ -64,10 +64,51 @@ function updateRow(providerId, quota) {
// Detail text
if (quota.provider.toLowerCase() === 'minimax' && quota.meta) {
const reset5h = new Date(quota.meta.intervalReset).toLocaleTimeString();
statusText.innerHTML = `5h: ${quota.meta.intervalUsed}% (Resets: ${reset5h})`;
const { intervalUsed, weeklyUsed, intervalReset, weeklyReset } = quota.meta;
statusText.innerText = `${Math.round(quota.used)}% / 100%`;
const detailsEl = document.getElementById(`details-minimax`);
if (detailsEl) {
const parseDate = (val) => {
if (!val) return '--';
// If it's a number and less than 10 billion, it's likely seconds, multiply by 1000
const ts = (typeof val === 'number' && val < 9999999999) ? val * 1000 : val;
return new Date(ts).toLocaleString();
};
const reset5hStr = parseDate(intervalReset);
const resetWeeklyStr = parseDate(weeklyReset);
detailsEl.innerHTML = `
<div><span>5h Limit:</span> <strong style="color: ${intervalUsed > 80 ? 'var(--danger)' : '#fff'}">${intervalUsed}% verbraucht</strong></div>
<div><span>Weekly Limit:</span> <strong style="color: ${weeklyUsed > 80 ? 'var(--danger)' : '#fff'}">${weeklyUsed}% verbraucht</strong></div>
<div><span>5h Reset in:</span> <strong id="minimax-countdown" style="color: var(--success)">--:--:--</strong></div>
<div style="font-size: 0.9em; color: var(--text-muted); width: 100%; text-align: right; margin-top: 4px;">
Weekly Reset: ${resetWeeklyStr}
</div>
`;
const targetTs = (typeof intervalReset === 'number' && intervalReset < 9999999999) ? intervalReset * 1000 : intervalReset;
if (targetTs) startMinimaxCountdown(targetTs);
}
} else if (quota.provider.toLowerCase() === 'antigravity' && quota.meta) {
statusText.innerHTML = `5h: ${quota.meta.intervalUsed}% (Resets: ${quota.meta.intervalResetStr})`;
const { intervalUsed, weeklyUsed, intervalResetStr, weeklyResetStr } = quota.meta;
statusText.innerText = `${Math.round(quota.used)}% / 100%`;
const detailsEl = document.getElementById(`details-antigravity`);
if (detailsEl) {
const reset5h = intervalResetStr && intervalResetStr !== 'Unknown' ? new Date(intervalResetStr).toLocaleString() : '--';
const resetWeekly = weeklyResetStr && weeklyResetStr !== 'Unknown' ? new Date(weeklyResetStr).toLocaleString() : '--';
detailsEl.innerHTML = `
<div><span>5h Limit:</span> <strong style="color: ${intervalUsed > 80 ? 'var(--danger)' : '#fff'}">${intervalUsed}% verbraucht</strong></div>
<div><span>Weekly Limit:</span> <strong style="color: ${weeklyUsed > 80 ? 'var(--danger)' : '#fff'}">${weeklyUsed}% verbraucht</strong></div>
<div><span>5h Reset:</span> <strong style="color: var(--success)">${reset5h}</strong></div>
<div style="font-size: 0.9em; color: var(--text-muted); width: 100%; text-align: right; margin-top: 4px;">
Weekly Reset: ${resetWeekly}
</div>
`;
}
} else if (quota.provider.toLowerCase() === 'poe' && quota.meta) {
statusText.innerText = `${(quota.used).toLocaleString()} / ${(quota.total).toLocaleString()}`;
@@ -127,6 +168,35 @@ function startPoeCountdown() {
poeCountdownInterval = setInterval(updateCountdown, 1000);
}
let minimaxCountdownInterval = null;
function startMinimaxCountdown(targetTs) {
if (minimaxCountdownInterval) clearInterval(minimaxCountdownInterval);
const targetDate = new Date(targetTs);
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;
}
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');
if (el) {
el.innerText = `${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;
}
};
updateCountdown();
minimaxCountdownInterval = setInterval(updateCountdown, 1000);
}
async function fetchHistory() {
try {
const response = await fetch('/api/history');