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">
import type { MeWoachFeedActivity } from '@atcute/client/lexicons';
export let activity: MeWoachFeedActivity.Record[] = [];
import type {
MeWoachContentAnilist,
MeWoachFeedActivity,
MeWoachFeedSession
} from '@atcute/client/lexicons';
export let activity: {
session: MeWoachFeedSession.Record;
activity: MeWoachFeedActivity.Record;
content: MeWoachContentAnilist.Main;
}[];
</script>
<div class="col-span-2 rounded-sm bg-gray-400 p-2">
@ -9,9 +17,18 @@
{#each activity as activityItem}
<li class="mx-auto mb-2 rounded-sm bg-gray-500 p-4">
<div>
<p>{activityItem.performedAt}</p>
<p>{activityItem.progress}</p>
<p>{activityItem.session.uri}</p>
<p>{activityItem.content.id}</p>
<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>
</li>
{/each}

View file

@ -11,13 +11,6 @@
<div>
<a href={'https://pdsls.dev/' + session.content.uri}>{session.label}</a>
<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>
</li>
{/each}

View file

@ -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;
}

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 {
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,