Changeset 812fea9 in Klonkt for src/services/ArchiveExportService.js
- Timestamp:
- 08/06/2026 02:20:19 PM (5 weeks ago)
- Branches:
- main
- Children:
- 7aa3140
- Parents:
- 58cfe5f
- git-author:
- Robin <roboburr@…> (08/06/2026 02:20:09 PM)
- git-committer:
- roboburr <roboburr@…> (08/06/2026 02:20:19 PM)
- File:
-
- 1 edited
-
src/services/ArchiveExportService.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/ArchiveExportService.js
r58cfe5f r812fea9 81 81 const uit = []; 82 82 const zie = new Set(); 83 const voegToe = (url, name ) => {83 const voegToe = (url, name, rol, extra = {}) => { 84 84 const u = String(url || '').trim(); 85 85 if (!u || zie.has(u)) return; 86 86 zie.add(u); 87 uit.push({ url: u, name: name || null });87 uit.push({ url: u, name: name || null, rol, ...extra }); 88 88 }; 89 voegToe(post.cover_image_url, post.cover_alt); 90 voegToe(post.cover_video_url, post.cover_alt); 91 for (const m of String(post.content || '').matchAll(/<img[^>]+src=["']([^"']+)["'][^>]*>/gi)) voegToe(m[1]); 89 // De ROL is niet decoratief. Zonder rol staat er in het archief wel een 90 // bestand, maar niet dat het de cover was of bij de speler hoorde -- en dan 91 // komt de post na een herstel zonder cover en zonder speler terug. Gevonden 92 // door bij de oefenherstel ALLE kolommen te vergelijken in plaats van een 93 // handjevol. 94 voegToe(post.cover_image_url, post.cover_alt, 'cover'); 95 voegToe(post.cover_video_url, post.cover_alt, 'coverVideo'); 96 for (const m of String(post.content || '').matchAll(/<img[^>]+src=["']([^"']+)["'][^>]*>/gi)) voegToe(m[1], null, 'inline'); 92 97 try { 93 98 for (const a of JSON.parse(post.c2s_attachments || '[]')) { 94 voegToe(a && a.url, a && a.name );99 voegToe(a && a.url, a && a.name, 'c2s'); 95 100 // Een audio-bijlage draagt een poster (de omslag die de speler toont). Die 96 101 // staat in een eigen veld en zou anders stil wegvallen -- op beta viel dat 97 102 // pas op bij de export van echte data. 98 voegToe(a && a.poster, a && a.name ? `${a.name} (poster)` : null );103 voegToe(a && a.poster, a && a.name ? `${a.name} (poster)` : null, 'poster', { posterFor: a && a.url }); 99 104 } 100 105 } catch { /* kapotte kolom blokkeert de export niet */ } … … 103 108 try { 104 109 const t = db.prepare('SELECT t.title, m.storage_path FROM audio_tracks t LEFT JOIN media m ON m.id = t.media_id WHERE t.id = ?').get(m[1]); 105 if (t && t.storage_path) voegToe(`/media/${path.relative(path.resolve(MEDIA_ROOT), path.resolve(t.storage_path))}`, t.title );110 if (t && t.storage_path) voegToe(`/media/${path.relative(path.resolve(MEDIA_ROOT), path.resolve(t.storage_path))}`, t.title, 'track'); 106 111 } catch { /* geen audio-tabellen: niets te doen */ } 107 112 } … … 251 256 'shaer:originalUrl': /^https?:/i.test(ref.url) ? ref.url : `${origin}${ref.url}`, 252 257 'shaer:sha256': hash, 258 'shaer:role': ref.rol, 259 'shaer:posterFor': ref.posterFor || undefined, 253 260 }); 254 261 } else { … … 261 268 type: as2TypeOf(mime), mediaType: mime, name: ref.name || undefined, 262 269 url: orig, 'shaer:availability': 'missing', 'shaer:originalUrl': orig, 270 'shaer:role': ref.rol, 271 'shaer:posterFor': ref.posterFor || undefined, 263 272 }); 264 273 }
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)