Changeset 58cfe5f in Klonkt for src/services/ArchiveExportService.js
- Timestamp:
- 08/06/2026 02:11:18 PM (5 weeks ago)
- Branches:
- main
- Children:
- 812fea9
- Parents:
- 712b161
- git-author:
- Robin <roboburr@…> (08/06/2026 02:10:48 PM)
- git-committer:
- roboburr <roboburr@…> (08/06/2026 02:11:18 PM)
- File:
-
- 1 edited
-
src/services/ArchiveExportService.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/ArchiveExportService.js
r712b161 r58cfe5f 109 109 } 110 110 111 /** De audio-metadata die alleen in de database staat en nergens anders uit te halen is. */ 112 function audioOf(post) { 111 /** 112 * De audio-metadata die alleen in de database staat en nergens anders uit te 113 * halen is: titel, artiest, credit, licentie, externe links. 114 * 115 * `shaer:media` koppelt de track aan zijn bestand in het archief. Zonder die 116 * verwijzing weet een importer wel dát er een track was en hoe hij heette, maar 117 * niet wélk van de bijlagen erbij hoort -- en dan valt [[track:]] bij een 118 * herstel op niets terug. 119 */ 120 function audioOf(post, attachments) { 113 121 const uit = []; 114 122 for (const m of String(post.content || '').matchAll(/\[\[track:([A-Za-z0-9_-]+)\]\]/g)) { 115 123 try { 116 const t = db.prepare('SELECT * FROM audio_tracks WHEREid = ?').get(m[1]);124 const t = db.prepare('SELECT t.*, md.storage_path FROM audio_tracks t LEFT JOIN media md ON md.id = t.media_id WHERE t.id = ?').get(m[1]); 117 125 if (!t) continue; 126 let bestand; 127 if (t.storage_path) { 128 const rel = `/media/${path.relative(path.resolve(MEDIA_ROOT), path.resolve(t.storage_path))}`; 129 const bij = attachments.find((a) => String(a['shaer:originalUrl'] || '').endsWith(rel)); 130 bestand = bij ? bij.url : undefined; 131 } 118 132 uit.push({ 119 133 'shaer:ref': `[[track:${t.id}]]`, 134 'shaer:media': bestand, 120 135 name: t.title, artist: t.artist || undefined, album: t.album || undefined, 121 136 duration: t.duration || undefined, credit: t.credit || undefined, license: t.license || undefined, … … 137 152 if (!d || !Array.isArray(d.options) || d.options.length < 2) return null; 138 153 const opties = d.options.map((o) => ({ type: 'Note', name: String(o && o.name != null ? o.name : o) })); 139 return { multiple: !!d.multiple, opties, endTime: d.endTime || null };154 return { multiple: !!d.multiple, opties, endTime: d.endTime || null, closed: !!d.closed }; 140 155 } catch { return null; } 141 156 })(); … … 164 179 ...(poll ? (poll.multiple ? { anyOf: poll.opties } : { oneOf: poll.opties }) : {}), 165 180 endTime: poll ? (poll.endTime || undefined) : undefined, 181 // AS2 kent `closed` op een Question. Zonder dit staat een poll die vroegtijdig 182 // is gesloten na een herstel weer open -- gevonden op echte beta-data. 183 closed: (poll && poll.closed) ? true : undefined, 166 184 quoteUrl: post.quote_uri || undefined, 167 185 'shaer:quoteActor': post.quote_actor || undefined, … … 179 197 'shaer:coverAlt': post.cover_alt || undefined, 180 198 'shaer:viewCount': post.view_count || undefined, 181 'shaer:audio': audioOf(post ),199 'shaer:audio': audioOf(post, attachments), 182 200 }; 183 201 }
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)