Feature: Parallele Bild-Uploads, Heartbeat last_seen, Admin zuletzt aktiv, SW by-v1071
- Tagebuch: Bilder werden parallel hochgeladen (Promise.all), Button zeigt Fortschritt - Auth: /heartbeat Route ergänzt — aktualisiert last_seen alle 5 Min - Admin: last_seen + last_login in Nutzer-Liste angezeigt (🟢/🔵/⚪) - Bump SW by-v1071
This commit is contained in:
parent
9677d1e71a
commit
3abf974d29
8 changed files with 44 additions and 25 deletions
|
|
@ -1722,29 +1722,35 @@ window.Page_diary = (() => {
|
|||
};
|
||||
|
||||
async function _uploadNewFiles(entryId) {
|
||||
let failCount = 0;
|
||||
const uploaded = [];
|
||||
let exifGps = null;
|
||||
for (const file of _newFiles) {
|
||||
const total = _newFiles.length;
|
||||
const saveBtn = document.querySelector('button[form="diary-form"]');
|
||||
let done = 0;
|
||||
if (saveBtn) saveBtn.textContent = `0 von ${total} hochgeladen…`;
|
||||
|
||||
const results = await Promise.all(_newFiles.map(async file => {
|
||||
const formData = new FormData();
|
||||
formData.append('file', file);
|
||||
try {
|
||||
const formData = new FormData();
|
||||
formData.append('file', file);
|
||||
const m = await API.diary.uploadMedia(_appState.activeDog.id, entryId, formData);
|
||||
uploaded.push(m);
|
||||
if (m.exif_lat != null && m.exif_lon != null && !exifGps) {
|
||||
exifGps = { lat: m.exif_lat, lon: m.exif_lon };
|
||||
}
|
||||
if (saveBtn) saveBtn.textContent = `${++done} von ${total} hochgeladen…`;
|
||||
return { ok: true, m };
|
||||
} catch {
|
||||
failCount++;
|
||||
if (saveBtn) saveBtn.textContent = `${++done} von ${total} hochgeladen…`;
|
||||
return { ok: false };
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
const uploaded = results.filter(r => r.ok).map(r => r.m);
|
||||
const failCount = results.filter(r => !r.ok).length;
|
||||
const exifGps = results.find(r => r.ok && r.m.exif_lat != null)?.m;
|
||||
|
||||
if (failCount > 0) {
|
||||
UI.toast.warning(`${failCount} Medium${failCount > 1 ? 'en' : ''} konnte${failCount > 1 ? 'n' : ''} nicht hochgeladen werden.`);
|
||||
}
|
||||
if (exifGps) {
|
||||
UI.toast.success(`📍 Standort aus Foto-GPS übernommen`);
|
||||
}
|
||||
return { uploaded, exifGps };
|
||||
return { uploaded, exifGps: exifGps ? { lat: exifGps.exif_lat, lon: exifGps.exif_lon } : null };
|
||||
}
|
||||
|
||||
if (isEdit) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue