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 @@
    {session.label}

    {session.createdAt}

    - {#if session.participants?.length} - {#each session.participants ?? [] as participant} - {participant.uri.split('at://')[1]} - {/each} - {/if}
    {/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,