Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/ArchiveImportService.js

    re9ec5e4 ra4fea5e  
    2525import db from '../config/database.js';
    2626import { MEDIA_ROOT } from '../config/paths.js';
    27 import { FORMAT_VERSION, parseFollowingCsv } from './ArchiveExportService.js';
     27import { FORMAT_VERSION } from './ArchiveExportService.js';
    2828
    2929const sha256 = (buf) => crypto.createHash('sha256').update(buf).digest('hex');
     
    116116function bestemming(a) {
    117117  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;
    155118}
    156119
Note: See TracChangeset for help on using the changeset viewer.