diff --git a/src/lib/components/activity.svelte b/src/lib/components/activity.svelte
index 72846c4..5025313 100644
--- a/src/lib/components/activity.svelte
+++ b/src/lib/components/activity.svelte
@@ -1,6 +1,14 @@
@@ -9,9 +17,18 @@
{#each activity as activityItem}
-
{activityItem.performedAt}
-
{activityItem.progress}
-
{activityItem.session.uri}
+
{activityItem.content.id}
+
+ Watched episode {activityItem.activity.progress} at {activityItem.activity.performedAt}
+
+ {#if activityItem.session.participants?.length}
+
With:
+ {#each activityItem.session.participants ?? [] as participant}
+
{participant.uri.split('at://')[1]}
+ {/each}
+ {/if}
{/each}
diff --git a/src/lib/components/list.svelte b/src/lib/components/list.svelte
index 69b3dcd..332ab89 100644
--- a/src/lib/components/list.svelte
+++ b/src/lib/components/list.svelte
@@ -11,13 +11,6 @@
{/each}
diff --git a/src/lib/util.ts b/src/lib/util.ts
index 09139b1..ea6fe97 100644
--- a/src/lib/util.ts
+++ b/src/lib/util.ts
@@ -7,6 +7,8 @@ import {
XrpcHandleResolver
} from '@atcute/identity-resolver';
+import type { At } from '@atcute/client/lexicons';
+
const didDocumentResolver = new CompositeDidDocumentResolver({
methods: {
plc: new PlcDidDocumentResolver(),
@@ -68,3 +70,33 @@ export async function getActivity(rpc: XRPC, did: string) {
});
return records;
}
+
+export async function resolveSession(rpc: XRPC, uri: At.Uri) {
+ const repo = uri.split('at://')[1].split('/')[0];
+ const rkey = uri.split('/')[4];
+ const {
+ data: { value }
+ } = await rpc.get('com.atproto.repo.getRecord', {
+ params: {
+ repo,
+ rkey,
+ collection: 'me.woach.feed.session'
+ }
+ });
+ return value;
+}
+
+export async function resolveMedia(rpc: XRPC, uri: At.Uri) {
+ const repo = uri.split('at://')[1].split('/')[0];
+ const rkey = uri.split('/')[4];
+ const {
+ data: { value }
+ } = await rpc.get('com.atproto.repo.getRecord', {
+ params: {
+ repo,
+ rkey,
+ collection: 'me.woach.content.anilist'
+ }
+ });
+ return value;
+}
diff --git a/src/routes/user/[handle]/+page.ts b/src/routes/user/[handle]/+page.ts
index dfe0416..467a4eb 100644
--- a/src/routes/user/[handle]/+page.ts
+++ b/src/routes/user/[handle]/+page.ts
@@ -1,6 +1,14 @@
-import { createRPC, getActivity, getSessions, resolveHandle } from '$lib/util';
+import {
+ createRPC,
+ getActivity,
+ getSessions,
+ resolveHandle,
+ resolveMedia,
+ resolveSession
+} from '$lib/util';
import type {
ComAtprotoRepoListRecords,
+ MeWoachContentAnilist,
MeWoachFeedActivity,
MeWoachFeedSession
} from '@atcute/client/lexicons';
@@ -14,10 +22,28 @@ export const load: PageLoad = async ({ params }) => {
(record: ComAtprotoRepoListRecords.Record) => record.value as MeWoachFeedSession.Record
);
- const activity: MeWoachFeedActivity.Record[] = (await getActivity(rpc, did)).map(
- (record: ComAtprotoRepoListRecords.Record) => record.value as MeWoachFeedActivity.Record
+ const activity: {
+ session: MeWoachFeedSession.Record;
+ activity: MeWoachFeedActivity.Record;
+ }[] = await Promise.all(
+ (await getActivity(rpc, did)).map(async (activityRecord: ComAtprotoRepoListRecords.Record) => {
+ const session = (await resolveSession(
+ rpc,
+ (activityRecord.value as MeWoachFeedActivity.Record).session.uri
+ )) as MeWoachFeedSession.Record;
+
+ const content = (await resolveMedia(rpc, session.content.uri)) as MeWoachContentAnilist.Main;
+
+ return {
+ session,
+ activity: activityRecord.value as MeWoachFeedActivity.Record,
+ content
+ };
+ })
);
+ console.log(activity);
+
return {
handle: params.handle,
sessions: sessions,