- Timestamp:
- 08/14/2026 12:29:06 AM (4 weeks ago)
- Branches:
- main
- Children:
- 19430fa, 2365630
- Parents:
- eb071a7
- File:
-
- 1 edited
-
src/services/MigrationService.js (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/MigrationService.js
reb071a7 r919b82d 226 226 for (let n = 2; n < 500; n++) if (!bestaat.get(siteId, `${schoon}-${n}`)) return `${schoon}-${n}`; 227 227 return `${schoon}-${crypto.randomBytes(4).toString('hex')}`; 228 } 229 230 /** Het kale id uit een track-URI: .../tracks/t-een -> t-een. */ 231 function ruwId(uri) { 232 try { return decodeURIComponent(String(uri).split('/').filter(Boolean).pop() || ''); } catch { return ''; } 228 233 } 229 234 … … 361 366 362 367 const rapport = { 363 bron: bronActor.id, posts: 0, overgeslagen: 0, media: 0, mediaMislukt: 0,368 bron: bronActor.id, posts: 0, overgeslagen: 0, opnieuw: 0, media: 0, mediaMislukt: 0, 364 369 blocks: 0, tracksBinnen: 0, tracksMislukt: 0, tracksBijgewerkt: 0, overgeslagenTracks: 0, 365 370 playlistsBinnen: 0, playlistsMislukt: 0, waarschuwingen: [], … … 412 417 if (auteur && auteur !== bronActor.id) continue; // alleen wat van HEM was 413 418 gezien++; 414 if (alGemigreerd(site.slug, o.id)) { rapport.overgeslagen++; continue; } 419 // Al binnen? Alleen overslaan als het bericht er OOK nog staat. Heb je 420 // het verwijderd, dan is opnieuw ophalen precies wat je bedoelt, en 421 // een mapping die dat blokkeert is een val: opruimen hielp dan niet, 422 // want de blokkade zat in ap_migration en niet in de posts. 423 const eerderPost = migrationTarget(site.slug, o.id); 424 if (eerderPost) { 425 const postId = String(eerderPost).split('/').pop(); 426 if (db.prepare('SELECT 1 FROM posts WHERE id = ? AND site_id = ?').get(decodeURIComponent(postId), site.id)) { 427 rapport.overgeslagen++; 428 continue; 429 } 430 rapport.opnieuw++; // weg hier, dus opnieuw binnenhalen 431 } 415 432 416 433 // Media eerst, want een post die naar een plaatje wijst dat we niet … … 487 504 // blijven. 488 505 const trackKaart = new Map(); // bron-URI van een nummer -> ons nieuwe id 506 // En het RUWE id zoals het in de posttekst staat. Klonkt schrijft 507 // [[track:<id>]] in de content, en die tekst reist letterlijk mee over AP. 508 // Krijgt het nummer hier een ander id, dan wijst die shorthand nergens meer 509 // heen en zie je de code zelf in je bericht staan. 510 const ruwKaart = new Map(); // ruw bron-id -> ons id 489 511 const streams = [].concat(bronActor.streams || []).filter((u) => typeof u === 'string'); 490 512 const tracksUrl = streams.find((u) => /\/tracks\/?$/.test(u)); … … 511 533 if (rij) { 512 534 trackKaart.set(String(a.id), rij.id); // MOET, anders vinden de playlists hem niet 535 ruwKaart.set(ruwId(a.id), rij.id); 513 536 const duur = rij.duration ? null : duurSeconden(a.duration); 514 537 const artiest = rij.artist ? null : (a.summary || a.artist || null); … … 571 594 recordMigrated(site.slug, { origin: a.id, target: `${me}/ap/tracks/${trackId}`, sourceActor: bronActor.id, isPublic: false }); 572 595 trackKaart.set(String(a.id), trackId); 596 ruwKaart.set(ruwId(a.id), trackId); 573 597 rapport.tracksBinnen++; 574 598 } catch (e) { … … 579 603 } else if (tracksUrl) { 580 604 rapport.waarschuwingen.push('muziekbibliotheek overgeslagen: geen audiomap meegegeven'); 605 } 606 607 // ── De verwijzingen in de tekst bijtrekken ──────────────────── 608 // 609 // Klonkt schrijft [[track:<id>]] in posts.content, en die tekst reist 610 // letterlijk mee. Krijgt het nummer hier een ander id, dan wijst de 611 // shorthand nergens heen en zie je de code zelf in je bericht staan in 612 // plaats van een speler. Precies wat Robin op TikTik zag. 613 // 614 // Pas NA de tracks, want daarvoor is de kaart nog leeg. En alleen waar het 615 // id echt veranderde: een gelijk id hoeft niet aangeraakt. 616 { 617 const paren = [...ruwKaart.entries()].filter(([oud, nieuwId]) => oud && oud !== nieuwId); 618 if (paren.length) { 619 const upd = db.prepare('UPDATE posts SET content = REPLACE(content, ?, ?) WHERE site_id = ? AND content LIKE ?'); 620 let n = 0; 621 for (const [oud, nieuwId] of paren) { 622 const r = upd.run(`[[track:${oud}]]`, `[[track:${nieuwId}]]`, site.id, `%[[track:${oud}]]%`); 623 if (r && r.changes) n += r.changes; 624 } 625 if (n) { rapport.tekstBijgewerkt = n; console.log('[FEP-1580] track-verwijzingen bijgetrokken in', n, 'bericht(en)'); } 626 } 581 627 } 582 628 … … 608 654 // elke tweede ronde een dubbele plaat op. 609 655 const eerderPl = migrationTarget(site.slug, uri); 656 // De hoes van de plaat, net als bij een nummer. 657 let plHoes = null; 658 const plHoesUrl = (plc.icon && (plc.icon.url || plc.icon)) || (plc.image && (plc.image.url || plc.image)) || null; 659 if (plHoesUrl && /^https?:\/\//i.test(String(plHoesUrl)) && safeFetch && fs && path && mediaRoot) { 660 const h = await haalBijlage(String(plHoesUrl), { 661 safeFetch, mediaRoot, fs, path, maxBytes, 662 headers: signHeaders ? signHeaders(site.slug, String(plHoesUrl), '*/*') : null, 663 }).catch(() => null); 664 if (h) { plHoes = h.url; rapport.media++; } 665 else rapport.waarschuwingen.push(`hoes van playlist niet opgehaald: ${plc.name || uri}`); 666 } 610 667 const plId = (() => { 611 668 if (!eerderPl) return crypto.randomUUID(); … … 615 672 })(); 616 673 try { 617 db.prepare(`INSERT INTO playlists (id, site_id, title, artist, year, kind) VALUES (?,?,?,?,?,?) 618 ON CONFLICT(id) DO UPDATE SET title = excluded.title, artist = COALESCE(playlists.artist, excluded.artist)`) 674 db.prepare(`INSERT INTO playlists (id, site_id, title, artist, year, kind, cover_url) VALUES (?,?,?,?,?,?,?) 675 ON CONFLICT(id) DO UPDATE SET 676 title = excluded.title, 677 artist = COALESCE(playlists.artist, excluded.artist), 678 cover_url = COALESCE(playlists.cover_url, excluded.cover_url)`) 619 679 .run(plId, site.id, plc.name || 'zonder titel', plc.artist || null, 620 plc.year || null, plc['shaer:kind'] || null );680 plc.year || null, plc['shaer:kind'] || null, plHoes); 621 681 // De volgorde opnieuw zetten: die IS de plaat, en een halve 622 682 // bijgewerkte volgorde is erger dan een verse.
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)