Various AT Protocol integrations with obsidian
20
fork

Configure Feed

Select the types of activity you want to include in your feed.

progressively render publiactions

+16 -12
+16 -12
src/views/standardfeed.ts
··· 1 - import { getSubscribedPublications } from "lib/standardsite"; 1 + import { getSubscriptions, getPublication, getPublicationDocuments } from "lib/standardsite"; 2 2 import AtmospherePlugin from "main"; 3 3 import { ItemView, Notice, WorkspaceLeaf, setIcon } from "obsidian"; 4 4 import { Main as Document } from "@atcute/standard-site/types/document"; 5 5 import { Main as Publication } from "@atcute/standard-site/types/publication"; 6 6 import { ATRecord } from "lib"; 7 7 import { parseResourceUri } from "@atcute/lexicons"; 8 - import { getPublicationDocuments } from "lib/standardsite"; 9 8 10 9 export const VIEW_ATMOSPHERE_STANDARD_FEED = "atmosphere-standard-site-feed"; 11 10 ··· 39 38 container.addClass("standard-site-view"); 40 39 this.renderHeader(container); 41 40 41 + const loading = container.createEl("p", { text: "Loading subscriptions..." }); 42 + const list = container.createEl("div", { cls: "standard-site-list" }); 42 43 43 - const loading = container.createEl("p", { text: "Loading feed..." }); 44 44 try { 45 - const pubs = await getSubscribedPublications(this.plugin.client, this.plugin.settings.identifier); 46 - loading.remove(); 47 - 48 - if (pubs.length === 0) { 45 + const subsResp = await getSubscriptions(this.plugin.client, this.plugin.settings.identifier); 46 + if (subsResp.records.length === 0) { 47 + loading.remove(); 49 48 container.createEl("p", { text: "No subscriptions found" }); 50 49 return; 51 50 } 52 51 53 - const list = container.createEl("div", { cls: "standard-site-list" }); 54 - 55 - for (const pub of pubs) { 56 - void this.renderPublicationCard(list, pub); 52 + const pubUris = subsResp.records.map(sub => sub.value.publication); 53 + for (const uri of pubUris) { 54 + try { 55 + const pub = await getPublication(this.plugin.client, uri); 56 + void this.renderPublicationCard(list, pub); 57 + } catch (e) { 58 + console.warn(`Failed to fetch publication at ${uri}:`, e); 59 + } 57 60 } 61 + 62 + loading.remove(); 58 63 } catch (error) { 59 64 const message = error instanceof Error ? error.message : String(error); 60 65 console.error("Failed to load feed:", error); 61 66 container.createEl("p", { text: `Failed to load feed: ${message}`, cls: "standard-site-error" }); 62 - } finally { 63 67 loading.remove(); 64 68 } 65 69 }