Changes in / [09fc5fb:f549cf5] in Klonkt


Ignore:
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • src/routes/feed.js

    r09fc5fb rf549cf5  
    4444
    4545// ==================== RSS 2.0 ====================
    46 router.get('/feed.xml', (req, res) => {
     46/**
     47 * Twee feeds, een bouwer.
     48 *
     49 *   /feed.xml    de site: posts EN open tracks door elkaar, chronologisch
     50 *   /tracks.xml  alleen de open tracks -- de hele site als muziekkanaal
     51 *
     52 * WAAROM DIE TWEEDE (Robins vraag, 10-8). Hij vroeg naar een "hele site, open
     53 * tracks"-library voor Funkwhale. Als AS2-object helpt zo'n ding daar niet: een
     54 * Funkwhale-KANAAL wijst nergens naar een library, en hun library is een eigen
     55 * actor met inbox en sleutel -- de optie die op 7 augustus is afgewezen. Maar de
     56 * vorm waarin Funkwhale een kanaal WEL uitgeeft is RSS met iTunes en een
     57 * enclosure per item, en dat is precies wat Klonkt hier al doet. Naast een echte
     58 * kanaalfeed gelegd (audio.pepemoss.com/api/v1/channels/tnd/rss): dezelfde
     59 * namespaces, dezelfde enclosure.
     60 *
     61 * Het enige verschil was dat onze feed ook gewone posts draagt. Een muziekkanaal
     62 * met blogberichten ertussen is er geen, dus die feed staat er nu apart -- een
     63 * URL om te plakken, zonder dat er iets naar buiten geduwd wordt.
     64 */
     65function stuurFeed(req, res, { alleenTracks }) {
    4766  const site = res.locals.site;
    4867  if (!site) return res.status(404).send('No site');
     
    5069  const origin = siteOrigin(req);
    5170  const base = origin + (res.locals.siteUrlBase || '');
    52   const posts = postsForFeed(site.id);
     71  const posts = alleenTracks ? [] : postsForFeed(site.id);
    5372
    5473  // De tracks die deze site aan de federatie heeft opengezet, elk als eigen
     
    6584  // poortregel en die hoort op een plek te staan.
    6685  const tracks = siteOpenTracks(site.id);
    67   const lastBuild = posts[0]?.published_at || new Date().toISOString();
     86  const lastBuild = posts[0]?.published_at || tracks[0]?.created_at || new Date().toISOString();
    6887
    6988  // De itunes-velden waar een podcast-app een kanaal aan herkent. Funkwhale
     
    117136<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
    118137  <channel>
    119     <title>${escapeXml(site.title)}</title>
     138    <title>${escapeXml(alleenTracks ? `${site.title} \u2014 muziek` : site.title)}</title>
    120139    <link>${escapeXml(base + '/')}</link>
    121140    <description>${escapeXml(site.description || site.tagline || '')}</description>
    122141    <language>${escapeXml(site.language || 'nl')}</language>
    123142    <lastBuildDate>${new Date(lastBuild).toUTCString()}</lastBuildDate>
    124     <atom:link href="${escapeXml(base + '/feed.xml')}" rel="self" type="application/rss+xml" />
     143    <atom:link href="${escapeXml(base + (alleenTracks ? '/tracks.xml' : '/feed.xml'))}" rel="self" type="application/rss+xml" />
    125144${kanaalTags}
    126145${items}
    127146  </channel>
    128147</rss>`);
    129 });
     148}
     149
     150router.get('/feed.xml', (req, res) => stuurFeed(req, res, { alleenTracks: false }));
     151// De hele site als muziekkanaal: alleen wat op de federatie openstaat.
     152router.get('/tracks.xml', (req, res) => stuurFeed(req, res, { alleenTracks: true }));
    130153
    131154// ==================== Atom 1.0 ====================
  • src/services/guardianship/queues.js

    r09fc5fb rf549cf5  
    294294    'shaer:handledAt': h.state.handled ? h.state.handled.at : undefined,
    295295    'shaer:pickedUpBy': h.state.pickedUpBy.map((p) => p.handle || p.uri),
     296    // HOE OUD het oudste oppakken is (shaer-lgo). Barts besluit was dat
     297    // "opgepikt" niet vervalt maar zichtbaar VEROUDERT -- het verschil tussen
     298    // "er is iemand mee bezig" en "er was ooit iemand mee bezig". Het paneel
     299    // toonde dat al; de apps konden het niet, want dit veld bleef hier liggen.
     300    // Een oppak van vijf minuten zag er daar uit als een van vijf dagen, en de
     301    // faalstand is hier nou juist "iedereen denkt dat het geregeld is".
     302    //
     303    // Als TIJDSTIP en niet als leeftijd: een leeftijd maakt elk antwoord anders
     304    // en dan kan de ETag nooit gelijk zijn. De client rekent zelf terug, precies
     305    // zoals guardian.js het doet.
     306    'shaer:oldestPickupAt': h.state.oldestPickupAt || undefined,
    296307    'shaer:formerWard': h.state.formerWard || undefined,
    297308  }));
  • test/help-c2s.test.js

    r09fc5fb rf549cf5  
    6060});
    6161
     62test('en de apps krijgen te horen HOE OUD dat oppakken is', () => {
     63  // Barts besluit: opgepikt vervalt niet maar veroudert zichtbaar -- het
     64  // verschil tussen "er is iemand mee bezig" en "er was ooit iemand mee bezig".
     65  // Het paneel toonde dat al uit dezelfde staat; de apps kregen het veld niet,
     66  // dus daar zag een oppak van vijf minuten eruit als een van vijf dagen.
     67  const coll = queues.helpCollection('https://x/queues/help', 'oma');
     68  const item = coll.orderedItems.find((i) => i.id === BOEI);
     69  assert.ok(item['shaer:oldestPickupAt'], 'het veld staat er');
     70  assert.ok(!Number.isNaN(Date.parse(item['shaer:oldestPickupAt'])), 'en is een leesbaar tijdstip');
     71  // Een TIJDSTIP en geen leeftijd: een leeftijd maakt elk antwoord anders en
     72  // dan kan de ETag nooit gelijk zijn. De client rekent zelf terug.
     73  assert.equal(typeof item['shaer:oldestPickupAt'], 'string');
     74});
     75
    6276test('afsluiten vanuit de app sluit hem ook echt', async () => {
    6377  await AP.ingestOutboxActivity(site(), user, marker('handled'));
     
    7589  assert.ok(item['shaer:handledBy']);
    7690  assert.equal(item['shaer:helpRequest'], true);
     91  // En de ouderdom is WEG zodra hij is afgehandeld: hoe lang er iemand naar
     92  // keek is dan geen informatie meer, en zou als "er wacht nog iets" lezen.
     93  assert.equal(item['shaer:oldestPickupAt'], undefined);
    7794});
    7895
Note: See TracChangeset for help on using the changeset viewer.