Changeset eb071a7 in Klonkt for src/services/MigrationService.js
- Timestamp:
- 08/14/2026 12:12:58 AM (4 weeks ago)
- Branches:
- main
- Children:
- 919b82d
- Parents:
- 98acb97
- File:
-
- 1 edited
-
src/services/MigrationService.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/MigrationService.js
r98acb97 reb071a7 84 84 export function alGemigreerd(slug, origin) { 85 85 try { return !!db.prepare('SELECT 1 FROM ap_migration WHERE slug = ? AND origin = ?').get(slug, String(origin)); } catch { return false; } 86 } 87 88 /** 89 * Waar kwam deze bron-URI hier terecht? Null als hij nog niet gemigreerd is. 90 * 91 * Bestaat omdat "al gehad" en "overslaan" niet hetzelfde horen te zijn. Een 92 * tweede ronde na een uitgebreide ingest (hoezen, duur, playlists erbij) moet 93 * de bestaande nummers KUNNEN AANVULLEN in plaats van ze te passeren. Deed hij 94 * dat niet, dan zat je vast: opnieuw ophalen sloeg alles over, en opruimen hielp 95 * niet omdat deze tabel de blokkade in stand hield. 96 */ 97 export function migrationTarget(slug, origin) { 98 try { 99 const r = db.prepare('SELECT target FROM ap_migration WHERE slug = ? AND origin = ?').get(slug, String(origin)); 100 return r ? r.target : null; 101 } catch { return null; } 86 102 } 87 103 … … 346 362 const rapport = { 347 363 bron: bronActor.id, posts: 0, overgeslagen: 0, media: 0, mediaMislukt: 0, 348 blocks: 0, tracksBinnen: 0, tracksMislukt: 0, overgeslagenTracks: 0,364 blocks: 0, tracksBinnen: 0, tracksMislukt: 0, tracksBijgewerkt: 0, overgeslagenTracks: 0, 349 365 playlistsBinnen: 0, playlistsMislukt: 0, waarschuwingen: [], 350 366 }; … … 480 496 if (!a || !a.id) continue; 481 497 if (a.type && a.type !== 'Audio') continue; 482 if (alGemigreerd(site.slug, a.id)) { rapport.overgeslagenTracks++; continue; } 498 // AL BINNEN? Dan AANVULLEN, niet overslaan. Een tweede ronde bestaat 499 // juist omdat er iets bij is gekomen (hoezen, duur, playlists), en een 500 // pull die dan alles passeert laat je met een half resultaat zitten 501 // zonder uitweg: opruimen hielp niet, want deze tabel hield de blokkade 502 // in stand. 503 // 504 // Alleen LEGE velden worden gevuld. Wat jij zelf hebt aangepast blijft 505 // staan; een migratie hoort je correcties niet terug te draaien. 506 const eerder = migrationTarget(site.slug, a.id); 507 if (eerder) { 508 const lokaalId = String(eerder).split('/').pop(); 509 const rij = db.prepare('SELECT id, cover_url, duration, artist FROM audio_tracks WHERE id = ? AND site_id = ?') 510 .get(lokaalId, site.id); 511 if (rij) { 512 trackKaart.set(String(a.id), rij.id); // MOET, anders vinden de playlists hem niet 513 const duur = rij.duration ? null : duurSeconden(a.duration); 514 const artiest = rij.artist ? null : (a.summary || a.artist || null); 515 let hoes = null; 516 const hUrl = (a.icon && (a.icon.url || a.icon)) || (a.image && (a.image.url || a.image)) || null; 517 if (!rij.cover_url && hUrl && /^https?:\/\//i.test(String(hUrl)) && safeFetch && fs && path && mediaRoot) { 518 const h = await haalBijlage(String(hUrl), { 519 safeFetch, mediaRoot, fs, path, maxBytes, 520 headers: signHeaders ? signHeaders(site.slug, String(hUrl), '*/*') : null, 521 }).catch(() => null); 522 if (h) { hoes = h.url; rapport.media++; } 523 } 524 if (duur || artiest || hoes) { 525 db.prepare(`UPDATE audio_tracks SET 526 duration = COALESCE(?, duration), 527 artist = COALESCE(?, artist), 528 cover_url = COALESCE(?, cover_url) 529 WHERE id = ?`).run(duur, artiest, hoes, rij.id); 530 rapport.tracksBijgewerkt++; 531 } else { 532 rapport.overgeslagenTracks++; 533 } 534 continue; 535 } 536 // De rij is weg maar de mapping staat er nog. Dan is opnieuw ophalen 537 // precies wat je wilt, dus we vallen door naar de gewone tak. 538 } 483 539 const bron = a.url && (typeof a.url === 'string' ? a.url : (Array.isArray(a.url) ? (a.url[0] && (a.url[0].href || a.url[0])) : a.url.href)); 484 540 if (!bron || !/^https?:\/\//i.test(String(bron))) { rapport.tracksMislukt++; continue; } … … 549 605 continue; 550 606 } 551 const plId = crypto.randomUUID(); 607 // Bestond hij al? Dan dezelfde rij bijwerken. Zonder deze stap levert 608 // elke tweede ronde een dubbele plaat op. 609 const eerderPl = migrationTarget(site.slug, uri); 610 const plId = (() => { 611 if (!eerderPl) return crypto.randomUUID(); 612 const bestaand = String(eerderPl).split('/').pop(); 613 return db.prepare('SELECT 1 FROM playlists WHERE id = ? AND site_id = ?').get(bestaand, site.id) 614 ? bestaand : crypto.randomUUID(); 615 })(); 552 616 try { 553 db.prepare('INSERT INTO playlists (id, site_id, title, artist, year, kind) VALUES (?,?,?,?,?,?)') 554 .run(plId, site.id, plc.name || 'zonder titel', plc.attributedTo && plc.artist || plc.artist || null, 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)`) 619 .run(plId, site.id, plc.name || 'zonder titel', plc.artist || null, 555 620 plc.year || null, plc['shaer:kind'] || null); 621 // De volgorde opnieuw zetten: die IS de plaat, en een halve 622 // bijgewerkte volgorde is erger dan een verse. 623 db.prepare('DELETE FROM playlist_tracks WHERE playlist_id = ?').run(plId); 556 624 const ins = db.prepare('INSERT OR IGNORE INTO playlist_tracks (playlist_id, track_id, position) VALUES (?,?,?)'); 557 625 nummers.forEach((tid, i) => ins.run(plId, tid, i)); 626 recordMigrated(site.slug, { origin: uri, target: `${me}/ap/playlists/${plId}`, sourceActor: bronActor.id, isPublic: false }); 558 627 rapport.playlistsBinnen++; 559 628 const kwijt = (plc.orderedItems || plc.items || []).length - nummers.length;
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)