Changes in src/services/ArchiveImportService.js [a4fea5e:e9ec5e4] in Klonkt
- File:
-
- 1 edited
-
src/services/ArchiveImportService.js (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/ArchiveImportService.js
ra4fea5e re9ec5e4 25 25 import db from '../config/database.js'; 26 26 import { MEDIA_ROOT } from '../config/paths.js'; 27 import { FORMAT_VERSION } from './ArchiveExportService.js';27 import { FORMAT_VERSION, parseFollowingCsv } from './ArchiveExportService.js'; 28 28 29 29 const sha256 = (buf) => crypto.createHash('sha256').update(buf).digest('hex'); … … 116 116 function bestemming(a) { 117 117 return padVanOrigineel(a && a['shaer:originalUrl']) || `/media/archief/${path.basename(String((a && a.url) || ''))}`; 118 } 119 120 /** 121 * Volg opnieuw wie je volgde, uit de `following.csv` van een archief. 122 * 123 * BEWUST BUITEN importArchive. Die draait in één transactie en raakt alleen de 124 * database; opnieuw volgen stuurt Follow-activiteiten de deur uit en wacht op 125 * het netwerk. Dat hoort niet in een transactie: een trage peer houdt hem open, 126 * en een rollback neemt verzonden activiteiten niet terug. 127 * 128 * Ook een aparte, expliciete stap omdat een archief inlezen stil is maar negen 129 * mensen aanschrijven niet. Dat mag geen bijwerking zijn van een import. 130 * 131 * `followFn` is injecteerbaar, zodat de test geen netwerk raakt en dit bestand 132 * ActivityPubService niet hoeft te importeren. 133 */ 134 export async function importFollowing(site, csvText, { followFn = null } = {}) { 135 const rijen = parseFollowingCsv(csvText); 136 const rapport = { totaal: rijen.length, gevolgd: 0, overgeslagen: 0, mislukt: [] }; 137 if (!followFn) return { ...rapport, error: 'no_follow_fn' }; 138 for (const r of rijen) { 139 // Jezelf volgen is geen relatie maar een lus. Kan echt gebeuren bij een 140 // archief van een instance die je onder een nieuwe naam opnieuw opzet. 141 if (site && site.slug && r.address.startsWith(`${site.slug}@`)) { rapport.overgeslagen += 1; continue; } 142 try { 143 // De uitgelicht-stand gaat MEE in de Follow zelf: followActor neemt hem 144 // als derde argument en zet auto_boost bij het aanmaken van de rij. Een 145 // aparte UPDATE erna zou een tweede pad zijn naar dezelfde vlag, en dan 146 // kan er precies een halve toestand ontstaan als die faalt. 147 const ok = await followFn(site, r.address, r.featured); 148 if (ok === false) { rapport.mislukt.push({ adres: r.address, reden: 'geweigerd' }); continue; } 149 rapport.gevolgd += 1; 150 } catch (e) { 151 rapport.mislukt.push({ adres: r.address, reden: (e && e.message) || 'onbekend' }); 152 } 153 } 154 return rapport; 118 155 } 119 156
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)