add session and content resolution for activity

This commit is contained in:
Badtz 2025-03-28 15:56:30 -07:00
parent 6600ba56bf
commit e876d5846e
4 changed files with 83 additions and 15 deletions

View file

@ -1,6 +1,14 @@
<script lang="ts"> <script lang="ts">
import type { MeWoachFeedActivity } from '@atcute/client/lexicons'; import type {
export let activity: MeWoachFeedActivity.Record[] = []; MeWoachContentAnilist,
MeWoachFeedActivity,
MeWoachFeedSession
} from '@atcute/client/lexicons';
export let activity: {
session: MeWoachFeedSession.Record;
activity: MeWoachFeedActivity.Record;
content: MeWoachContentAnilist.Main;
}[];
</script> </script>
<div class="col-span-2 rounded-sm bg-gray-400 p-2"> <div class="col-span-2 rounded-sm bg-gray-400 p-2">
@ -9,9 +17,18 @@
{#each activity as activityItem} {#each activity as activityItem}
<li class="mx-auto mb-2 rounded-sm bg-gray-500 p-4"> <li class="mx-auto mb-2 rounded-sm bg-gray-500 p-4">
<div> <div>
<p>{activityItem.performedAt}</p> <p>{activityItem.content.id}</p>
<p>{activityItem.progress}</p> <p>
<p>{activityItem.session.uri}</p> Watched episode {activityItem.activity.progress} at {activityItem.activity.performedAt}
</p>
{#if activityItem.session.participants?.length}
<p>With:</p>
{#each activityItem.session.participants ?? [] as participant}
<a href={'/user/' + participant.uri.split('at://')[1]}
>{participant.uri.split('at://')[1]}</a
>
{/each}
{/if}
</div> </div>
</li> </li>
{/each} {/each}

View file

@ -11,13 +11,6 @@
<div> <div>
<a href={'https://pdsls.dev/' + session.content.uri}>{session.label}</a> <a href={'https://pdsls.dev/' + session.content.uri}>{session.label}</a>
<p>{session.createdAt}</p> <p>{session.createdAt}</p>
{#if session.participants?.length}
{#each session.participants ?? [] as participant}
<a href={'/user/' + participant.uri.split('at://')[1]}
>{participant.uri.split('at://')[1]}</a
>
{/each}
{/if}
</div> </div>
</li> </li>
{/each} {/each}

View file

@ -7,6 +7,8 @@ import {
XrpcHandleResolver XrpcHandleResolver
} from '@atcute/identity-resolver'; } from '@atcute/identity-resolver';
import type { At } from '@atcute/client/lexicons';
const didDocumentResolver = new CompositeDidDocumentResolver({ const didDocumentResolver = new CompositeDidDocumentResolver({
methods: { methods: {
plc: new PlcDidDocumentResolver(), plc: new PlcDidDocumentResolver(),
@ -68,3 +70,33 @@ export async function getActivity(rpc: XRPC, did: string) {
}); });
return records; 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;
}

View file

@ -1,6 +1,14 @@
import { createRPC, getActivity, getSessions, resolveHandle } from '$lib/util'; import {
createRPC,
getActivity,
getSessions,
resolveHandle,
resolveMedia,
resolveSession
} from '$lib/util';
import type { import type {
ComAtprotoRepoListRecords, ComAtprotoRepoListRecords,
MeWoachContentAnilist,
MeWoachFeedActivity, MeWoachFeedActivity,
MeWoachFeedSession MeWoachFeedSession
} from '@atcute/client/lexicons'; } from '@atcute/client/lexicons';
@ -14,10 +22,28 @@ export const load: PageLoad = async ({ params }) => {
(record: ComAtprotoRepoListRecords.Record) => record.value as MeWoachFeedSession.Record (record: ComAtprotoRepoListRecords.Record) => record.value as MeWoachFeedSession.Record
); );
const activity: MeWoachFeedActivity.Record[] = (await getActivity(rpc, did)).map( const activity: {
(record: ComAtprotoRepoListRecords.Record) => record.value as MeWoachFeedActivity.Record 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 { return {
handle: params.handle, handle: params.handle,
sessions: sessions, sessions: sessions,