Changes in / [f549cf5:09fc5fb] in Klonkt
- Files:
-
- 1 deleted
- 3 edited
-
src/routes/feed.js (modified) (4 diffs)
-
src/services/guardianship/queues.js (modified) (1 diff)
-
test/feed-tracks-only.test.js (deleted)
-
test/help-c2s.test.js (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/routes/feed.js
rf549cf5 r09fc5fb 44 44 45 45 // ==================== RSS 2.0 ==================== 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 */ 65 function stuurFeed(req, res, { alleenTracks }) { 46 router.get('/feed.xml', (req, res) => { 66 47 const site = res.locals.site; 67 48 if (!site) return res.status(404).send('No site'); … … 69 50 const origin = siteOrigin(req); 70 51 const base = origin + (res.locals.siteUrlBase || ''); 71 const posts = alleenTracks ? [] :postsForFeed(site.id);52 const posts = postsForFeed(site.id); 72 53 73 54 // De tracks die deze site aan de federatie heeft opengezet, elk als eigen … … 84 65 // poortregel en die hoort op een plek te staan. 85 66 const tracks = siteOpenTracks(site.id); 86 const lastBuild = posts[0]?.published_at || tracks[0]?.created_at ||new Date().toISOString();67 const lastBuild = posts[0]?.published_at || new Date().toISOString(); 87 68 88 69 // De itunes-velden waar een podcast-app een kanaal aan herkent. Funkwhale … … 136 117 <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"> 137 118 <channel> 138 <title>${escapeXml( alleenTracks ? `${site.title} \u2014 muziek` :site.title)}</title>119 <title>${escapeXml(site.title)}</title> 139 120 <link>${escapeXml(base + '/')}</link> 140 121 <description>${escapeXml(site.description || site.tagline || '')}</description> 141 122 <language>${escapeXml(site.language || 'nl')}</language> 142 123 <lastBuildDate>${new Date(lastBuild).toUTCString()}</lastBuildDate> 143 <atom:link href="${escapeXml(base + (alleenTracks ? '/tracks.xml' : '/feed.xml'))}" rel="self" type="application/rss+xml" />124 <atom:link href="${escapeXml(base + '/feed.xml')}" rel="self" type="application/rss+xml" /> 144 125 ${kanaalTags} 145 126 ${items} 146 127 </channel> 147 128 </rss>`); 148 } 149 150 router.get('/feed.xml', (req, res) => stuurFeed(req, res, { alleenTracks: false })); 151 // De hele site als muziekkanaal: alleen wat op de federatie openstaat. 152 router.get('/tracks.xml', (req, res) => stuurFeed(req, res, { alleenTracks: true })); 129 }); 153 130 154 131 // ==================== Atom 1.0 ==================== -
src/services/guardianship/queues.js
rf549cf5 r09fc5fb 294 294 'shaer:handledAt': h.state.handled ? h.state.handled.at : undefined, 295 295 'shaer:pickedUpBy': h.state.pickedUpBy.map((p) => p.handle || p.uri), 296 // HOE OUD het oudste oppakken is (shaer-lgo). Barts besluit was dat297 // "opgepikt" niet vervalt maar zichtbaar VEROUDERT -- het verschil tussen298 // "er is iemand mee bezig" en "er was ooit iemand mee bezig". Het paneel299 // 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 de301 // faalstand is hier nou juist "iedereen denkt dat het geregeld is".302 //303 // Als TIJDSTIP en niet als leeftijd: een leeftijd maakt elk antwoord anders304 // en dan kan de ETag nooit gelijk zijn. De client rekent zelf terug, precies305 // zoals guardian.js het doet.306 'shaer:oldestPickupAt': h.state.oldestPickupAt || undefined,307 296 'shaer:formerWard': h.state.formerWard || undefined, 308 297 })); -
test/help-c2s.test.js
rf549cf5 r09fc5fb 60 60 }); 61 61 62 test('en de apps krijgen te horen HOE OUD dat oppakken is', () => {63 // Barts besluit: opgepikt vervalt niet maar veroudert zichtbaar -- het64 // 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 en72 // dan kan de ETag nooit gelijk zijn. De client rekent zelf terug.73 assert.equal(typeof item['shaer:oldestPickupAt'], 'string');74 });75 76 62 test('afsluiten vanuit de app sluit hem ook echt', async () => { 77 63 await AP.ingestOutboxActivity(site(), user, marker('handled')); … … 89 75 assert.ok(item['shaer:handledBy']); 90 76 assert.equal(item['shaer:helpRequest'], true); 91 // En de ouderdom is WEG zodra hij is afgehandeld: hoe lang er iemand naar92 // keek is dan geen informatie meer, en zou als "er wacht nog iets" lezen.93 assert.equal(item['shaer:oldestPickupAt'], undefined);94 77 }); 95 78
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)