add session and content resolution for activity
This commit is contained in:
parent
6600ba56bf
commit
e876d5846e
4 changed files with 83 additions and 15 deletions
|
|
@ -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}
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue