diff --git a/src/lib/components/list.svelte b/src/lib/components/list.svelte
index 332ab89..d6ad39e 100644
--- a/src/lib/components/list.svelte
+++ b/src/lib/components/list.svelte
@@ -1,6 +1,22 @@
@@ -9,8 +25,13 @@
{#each sessions as session}
{/each}
diff --git a/src/lib/util.ts b/src/lib/util.ts
index ea6fe97..cd16435 100644
--- a/src/lib/util.ts
+++ b/src/lib/util.ts
@@ -7,7 +7,7 @@ import {
XrpcHandleResolver
} from '@atcute/identity-resolver';
-import type { At } from '@atcute/client/lexicons';
+import type { At, MeWoachFeedActivity } from '@atcute/client/lexicons';
const didDocumentResolver = new CompositeDidDocumentResolver({
methods: {
@@ -43,6 +43,7 @@ export async function createRPC(did: string) {
const manager = new CredentialManager({ service: pds });
const rpc = new XRPC({ handler: manager });
+ // await manager.login({ identifier: '', password: '' });
return rpc;
}
@@ -100,3 +101,54 @@ export async function resolveMedia(rpc: XRPC, uri: At.Uri) {
});
return value;
}
+
+export async function addActivity(
+ did: At.DID,
+ rpc: XRPC,
+ uri: At.Uri,
+ cid: At.CID,
+ count: number = 1,
+ performedAt: string = new Date().toISOString()
+) {
+ const activityRecord: MeWoachFeedActivity.Record = {
+ $type: 'me.woach.feed.activity',
+ createdAt: new Date().toISOString(),
+ progress: count,
+ session: { cid, uri },
+ performedAt
+ };
+
+ const result = await rpc.call('com.atproto.repo.createRecord', {
+ data: {
+ repo: did,
+ collection: 'me.woach.feed.activity',
+ record: activityRecord
+ }
+ });
+
+ return result.data.uri;
+}
+
+export async function getProgress(rpc: XRPC, did: string, uri: At.Uri) {
+ const currentProgress = await rpc.get('com.atproto.repo.listRecords', {
+ params: {
+ repo: did,
+ collection: 'me.woach.feed.activity'
+ }
+ });
+
+ const filteredRecords = currentProgress.data.records.filter((a) => {
+ const record = a.value as MeWoachFeedActivity.Record;
+ return record.session.uri === uri;
+ });
+
+ let lastProgress = 0;
+ if (filteredRecords.length > 0) {
+ const lastUpdate = filteredRecords[0]?.value as MeWoachFeedActivity.Record;
+ lastProgress = Number(lastUpdate.progress);
+
+ return lastProgress;
+ } else {
+ return 0;
+ }
+}
diff --git a/src/routes/user/[handle]/+page.svelte b/src/routes/user/[handle]/+page.svelte
index 274b5f0..bd2feb0 100644
--- a/src/routes/user/[handle]/+page.svelte
+++ b/src/routes/user/[handle]/+page.svelte
@@ -10,5 +10,5 @@
diff --git a/src/routes/user/[handle]/+page.ts b/src/routes/user/[handle]/+page.ts
index 467a4eb..e692e3f 100644
--- a/src/routes/user/[handle]/+page.ts
+++ b/src/routes/user/[handle]/+page.ts
@@ -1,6 +1,7 @@
import {
createRPC,
getActivity,
+ getProgress,
getSessions,
resolveHandle,
resolveMedia,
@@ -18,13 +19,24 @@ export const load: PageLoad = async ({ params }) => {
const did = await resolveHandle(params.handle);
const rpc = await createRPC(did);
- const sessions: MeWoachFeedSession.Record[] = (await getSessions(rpc, did)).map(
- (record: ComAtprotoRepoListRecords.Record) => record.value as MeWoachFeedSession.Record
+ const sessions: {
+ record: MeWoachFeedSession.Record;
+ uri: string;
+ cid: string;
+ progress: number;
+ }[] = await Promise.all(
+ (await getSessions(rpc, did)).map(async (record: ComAtprotoRepoListRecords.Record) => ({
+ record: record.value as MeWoachFeedSession.Record,
+ uri: record.uri,
+ cid: record.cid,
+ progress: await getProgress(rpc, did, record.uri)
+ }))
);
const activity: {
session: MeWoachFeedSession.Record;
activity: MeWoachFeedActivity.Record;
+ content: MeWoachContentAnilist.Main;
}[] = await Promise.all(
(await getActivity(rpc, did)).map(async (activityRecord: ComAtprotoRepoListRecords.Record) => {
const session = (await resolveSession(
@@ -42,11 +54,11 @@ export const load: PageLoad = async ({ params }) => {
})
);
- console.log(activity);
-
return {
handle: params.handle,
sessions: sessions,
- activity: activity
+ activity: activity,
+ rpc,
+ did
};
};