fix strava import?
This commit is contained in:
+42
-17
@@ -561,26 +561,51 @@ try {
|
||||
}
|
||||
});
|
||||
|
||||
stravaSyncBtn.addEventListener('click', async () => {
|
||||
stravaSyncBtn.addEventListener('click', () => {
|
||||
stravaSyncBtn.disabled = true;
|
||||
stravaSyncBtn.textContent = 'Syncing…';
|
||||
stravaStatus.textContent = '';
|
||||
try {
|
||||
const r = await fetch(`${editUrl}/api/strava/sync`, { method: 'POST' });
|
||||
if (!r.ok) throw new Error(await r.text());
|
||||
const d = await r.json();
|
||||
stravaLastSync.textContent = new Date().toLocaleString();
|
||||
const errNote = d.error_count ? `, ${d.error_count} errors` : '';
|
||||
stravaStatus.textContent = `Done — ${d.imported} imported, ${d.skipped} already up to date${errNote}.`;
|
||||
stravaStatus.style.color = '#4ade80';
|
||||
if (d.imported > 0) setTimeout(() => window.location.reload(), 1500);
|
||||
} catch (e) {
|
||||
stravaStatus.textContent = 'Error: ' + e.message;
|
||||
stravaStatus.style.color = '#f87171';
|
||||
} finally {
|
||||
stravaSyncBtn.disabled = false;
|
||||
stravaSyncBtn.textContent = 'Sync now';
|
||||
}
|
||||
stravaStatus.style.color = '';
|
||||
|
||||
const es = new EventSource(`${editUrl}/api/strava/sync/stream`, { withCredentials: true });
|
||||
let imported = 0;
|
||||
|
||||
es.onmessage = (e) => {
|
||||
const d = JSON.parse(e.data);
|
||||
if (d.type === 'fetching') {
|
||||
stravaStatus.textContent = 'Fetching activity list from Strava…';
|
||||
} else if (d.type === 'progress') {
|
||||
const pct = Math.round((d.n / d.total) * 100);
|
||||
const icon = d.status === 'imported' ? '↓' : d.status === 'error' ? '✗' : '·';
|
||||
stravaStatus.textContent = `${icon} ${d.n}/${d.total} (${pct}%) — ${d.name}`;
|
||||
if (d.status === 'imported') imported++;
|
||||
} else if (d.type === 'done') {
|
||||
es.close();
|
||||
stravaLastSync.textContent = new Date().toLocaleString();
|
||||
const errNote = d.error_count ? `, ${d.error_count} errors` : '';
|
||||
stravaStatus.textContent = `Done — ${d.imported} imported, ${d.skipped} already up to date${errNote}.`;
|
||||
stravaStatus.style.color = '#4ade80';
|
||||
stravaSyncBtn.disabled = false;
|
||||
stravaSyncBtn.textContent = 'Sync now';
|
||||
if (d.imported > 0) setTimeout(() => window.location.reload(), 1500);
|
||||
} else if (d.type === 'error') {
|
||||
es.close();
|
||||
stravaStatus.textContent = 'Error: ' + d.message;
|
||||
stravaStatus.style.color = '#f87171';
|
||||
stravaSyncBtn.disabled = false;
|
||||
stravaSyncBtn.textContent = 'Sync now';
|
||||
}
|
||||
};
|
||||
|
||||
es.onerror = () => {
|
||||
es.close();
|
||||
if (stravaSyncBtn.disabled) {
|
||||
stravaStatus.textContent = 'Connection lost. Check logs.';
|
||||
stravaStatus.style.color = '#f87171';
|
||||
stravaSyncBtn.disabled = false;
|
||||
stravaSyncBtn.textContent = 'Sync now';
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
async function stravaReset(mode) {
|
||||
|
||||
Reference in New Issue
Block a user