Changeset ca260d1 in Klonkt for src/routes
- Timestamp:
- 09/30/2026 08:08:44 AM (6 hours ago)
- Branches:
- main
- Children:
- 76bd53c
- Parents:
- 19e28ce
- File:
-
- 1 edited
-
src/routes/admin-audio.js (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/routes/admin-audio.js
r19e28ce rca260d1 24 24 import { mediaDir } from '../config/paths.js'; 25 25 import * as ActivityPubService from '../services/ActivityPubService.js'; 26 import { postsEmbeddingTrack } from '../services/music/index.js'; 27 import { t as i18nT, resolveLang } from '../services/i18n.js'; 26 28 27 29 const __dirname = path.dirname(fileURLToPath(import.meta.url)); … … 96 98 const rows = db.prepare(` 97 99 SELECT t.id, t.title, t.artist, t.album, t.duration, t.cover_url, 98 t.position, t.created_at, t.downloadable, m.filename, m.size, m.mime_type 100 t.position, t.created_at, t.downloadable, t.fedi_open, t.media_id, 101 m.filename, m.size, m.mime_type 99 102 FROM audio_tracks t 100 103 LEFT JOIN media m ON m.id = t.media_id … … 290 293 }); 291 294 295 /** 296 * Een track openbaar op de fediverse zetten, vanuit de mediamanager (Robin, 297 * 30-9: "Fedi open audio ook per track aan kunnen zetten"). 298 * 299 * Tot nu toe kon dat alleen per POST, met het vinkje in de editor, dat elke 300 * track in die post opende. De vlag zelf was altijd al per track 301 * (audio_tracks.fedi_open): hij opent het BESTAND en maakt er een echte 302 * Audio-bijlage van. Dit is dezelfde vlag, met een eigen knop. 303 * 304 * EENRICHTINGS, net als in de editor. Een bestand dat al gefedereerd is, staat 305 * op andere servers; het hier weer afschermen zou schijnveiligheid zijn. Er is 306 * dus geen weg terug, en die bouwen we ook niet. 307 * 308 * EN DE POSTS GAAN OPNIEUW DE DEUR UIT. Het vinkje in de editor werkt zichtbaar 309 * omdat het opslaan van de post een Update stuurt, met de audio erin. Een knop 310 * die alleen de vlag zet, laat elke post die al verstuurd is zonder speler 311 * staan tot iemand hem bewerkt. Dus hier dezelfde Update, voor elke 312 * gepubliceerde post waar de track in staat -- rechtstreeks, via een playlist of 313 * via zijn album. De bibliotheek (Funkwhale) hoeft niets: die wordt opgehaald, 314 * en een open track staat er meteen in. 315 * 316 * Alleen een track met een eigen BESTAND: een track die alleen een link is heeft 317 * niets om te openen. 318 * 319 * `deliver` is er voor de toetsen; de route gebruikt de echte deliverUpdate. 320 */ 321 export function openTrackOnFediverse(site, trackId, { deliver = (s, p) => ActivityPubService.deliverUpdate(s, p) } = {}) { 322 const t = db.prepare('SELECT id, media_id, fedi_open FROM audio_tracks WHERE id = ? AND site_id = ?').get(trackId, site.id); 323 if (!t) return { ok: false, reason: 'not_found' }; 324 if (!t.media_id) return { ok: false, reason: 'no_file' }; 325 if (t.fedi_open) return { ok: true, changed: false, updated: 0 }; 326 db.prepare('UPDATE audio_tracks SET fedi_open = 1 WHERE id = ? AND site_id = ?').run(trackId, site.id); 327 const postIds = postsEmbeddingTrack(site.id, trackId); 328 for (const id of postIds) { 329 const post = db.prepare('SELECT * FROM posts WHERE id = ? AND site_id = ?').get(id, site.id); 330 if (!post) continue; 331 // Op de achtergrond: een trage volger houdt de knop niet vast. 332 Promise.resolve() 333 .then(() => deliver(site, post)) 334 .catch((e) => console.warn('[admin-audio] Update na openen mislukt:', post.id, e.message)); 335 } 336 return { ok: true, changed: true, updated: postIds.length }; 337 } 338 339 router.post('/:id/fedi-open', requireGod, (req, res) => { 340 const site = res.locals.site; 341 if (!site) return res.status(404).send('Site required'); 342 const lang = resolveLang(req, { userLang: req.session?.user?.lang }); 343 const r = openTrackOnFediverse(site, req.params.id); 344 if (!r.ok) { 345 const msg = r.reason === 'no_file' ? i18nT(lang, 'aaud.fedi_no_file') : 'Not found'; 346 return res.redirect('/admin/audio?error=' + encodeURIComponent(msg)); 347 } 348 res.redirect('/admin/audio?success=' + encodeURIComponent(i18nT(lang, 'aaud.fedi_opened', { n: r.updated }))); 349 }); 350 292 351 router.post('/:id/delete', requireGod, (req, res) => { 293 352 const site = res.locals.site;
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)