feat: add details and countdown for MiniMax and Antigravity
Build and Push Docker Image / build-and-push (push) Canceled after 0s
Build and Push Docker Image / build-and-push (push) Canceled after 0s
This commit is contained in:
1 parent
0043008020
commit
d699dd4c0c
1 file changed
+73
-3
+73
-3
@@ -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');
|
||||
|
||||
Reference in new issue
Block a user