2023-03-19 09:07:33 -04:00
|
|
|
async function get_apps() {
|
|
|
|
let results = {};
|
2023-05-23 20:10:05 -04:00
|
|
|
await ssb.sqlAsync(`
|
2023-03-19 09:07:33 -04:00
|
|
|
SELECT messages.*
|
|
|
|
FROM messages_fts('"application/tildefriends"')
|
|
|
|
JOIN messages ON messages.rowid = messages_fts.rowid
|
|
|
|
ORDER BY timestamp
|
|
|
|
`,
|
|
|
|
[],
|
|
|
|
function(row) {
|
|
|
|
let content = JSON.parse(row.content);
|
|
|
|
for (let mention of content.mentions) {
|
|
|
|
if (mention?.type === 'application/tildefriends') {
|
|
|
|
results[JSON.stringify([row.author, mention.name])] = {
|
|
|
|
message: row,
|
|
|
|
blob: mention.link,
|
|
|
|
name: mention.name,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return Object.values(results).sort((x, y) => y.message.timestamp - x.message.timestamp);
|
|
|
|
}
|
|
|
|
|
|
|
|
function render_app(app) {
|
|
|
|
return `
|
|
|
|
<div style="border: 2px solid white; display: inline-block; margin: 8px; padding: 8px">
|
|
|
|
<a href="/~cory/ssb/#${app.message.author}">@</a>
|
|
|
|
<a href="/~cory/ssb/#${app.message.id}">%</a>
|
|
|
|
<a href="/${app.blob}/">${app.name}</a>
|
|
|
|
</div>
|
|
|
|
`;
|
|
|
|
}
|
|
|
|
|
|
|
|
async function main() {
|
|
|
|
let apps = await get_apps();
|
|
|
|
app.setDocument(`
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<base target="_top">
|
|
|
|
<style>
|
|
|
|
a:link { color: #bbf; }
|
|
|
|
a:visited { color: #ddd; }
|
|
|
|
a:hover { color: #ddf; }
|
|
|
|
</style>
|
|
|
|
</head>
|
|
|
|
<body style="color: #fff">
|
|
|
|
<h1>${apps.length} apps</h1>
|
|
|
|
${apps.map(render_app).join('\n')}
|
|
|
|
</body>
|
|
|
|
</html>
|
|
|
|
`);
|
|
|
|
}
|
|
|
|
|
2023-05-23 20:10:05 -04:00
|
|
|
main();
|