From e8c7e7721ade664be0864b20a253939172b80df4 Mon Sep 17 00:00:00 2001 From: Christian Beutel <> Date: Fri, 11 Jul 2025 17:13:30 +0200 Subject: [PATCH] fixes feed --- db/federation/activity.go | 6 +++--- db/federation/create.go | 24 +++++++----------------- db/federation/delete.go | 16 +++++++++------- db/main.go | 12 +++++++++++- db/util/feed.go | 10 ++++++++++ web/src/routes/+page.svelte | 18 +++++++++++------- 6 files changed, 51 insertions(+), 35 deletions(-) diff --git a/db/federation/activity.go b/db/federation/activity.go index 8874bcd4..b346dda7 100644 --- a/db/federation/activity.go +++ b/db/federation/activity.go @@ -143,7 +143,7 @@ func ProcessActivity(e *core.RequestEvent) error { inbox := fmt.Sprintf("%s%s", origin, e.Request.Header.Get("X-Forwarded-Path")) - userActor, err := e.App.FindFirstRecordByData("activitypub_actors", "inbox", inbox) + recipient, err := e.App.FindFirstRecordByData("activitypub_actors", "inbox", inbox) if err != nil { return err } @@ -151,7 +151,7 @@ func ProcessActivity(e *core.RequestEvent) error { actor, err := e.App.FindFirstRecordByData("activitypub_actors", "iri", activity.Actor.GetID().String()) if err != nil { if err == sql.ErrNoRows { - actor, err = GetActorByIRI(e.App, userActor, activity.Actor.GetID().String(), false) + actor, err = GetActorByIRI(e.App, recipient, activity.Actor.GetID().String(), false) if err != nil { return err } @@ -177,7 +177,7 @@ func ProcessActivity(e *core.RequestEvent) error { case pub.UpdateType: fallthrough case pub.CreateType: - err = ProcessCreateOrUpdateActivity(e.App, actor, activity) + err = ProcessCreateOrUpdateActivity(e.App, actor, recipient, activity) case pub.DeleteType: err = ProcessDeleteActivity(e.App, actor, activity) case pub.AnnounceType: diff --git a/db/federation/create.go b/db/federation/create.go index afeae539..48a53d45 100644 --- a/db/federation/create.go +++ b/db/federation/create.go @@ -444,15 +444,15 @@ func CreateListActivity(app core.App, list *core.Record, typ pub.ActivityVocabul return app.Save(record) } -func ProcessCreateOrUpdateActivity(app core.App, actor *core.Record, activity pub.Activity) error { +func ProcessCreateOrUpdateActivity(app core.App, actor *core.Record, recipient *core.Record, activity pub.Activity) error { var err error if strings.Contains(activity.Object.GetID().String(), "/api/v1/trail") { - err = processCreateOrUpdateTrailActivity(activity, app, actor) + err = processCreateOrUpdateTrailActivity(activity, app, actor, recipient) } else if strings.Contains(activity.Object.GetID().String(), "/api/v1/summit-log") { err = processCreateOrUpdateSummitLogActivity(activity, app, actor) } else if strings.Contains(activity.Object.GetID().String(), "/api/v1/list") { - err = processCreateOrUpdateListActivity(activity, app, actor) + err = processCreateOrUpdateListActivity(activity, app, actor, recipient) } else { err = processCreateOrUpdateCommentActivity(activity, app, actor) } @@ -465,18 +465,13 @@ func ProcessCreateOrUpdateActivity(app core.App, actor *core.Record, activity pu } -func processCreateOrUpdateTrailActivity(activity pub.Activity, app core.App, actor *core.Record) error { +func processCreateOrUpdateTrailActivity(activity pub.Activity, app core.App, actor *core.Record, recipient *core.Record) error { trail, err := util.TrailFromActivity(activity, app, actor) if err != nil { return err } - trailAuthor, err := app.FindRecordById("activitypub_actors", trail.GetString("author")) - if err != nil { - return err - } - - _, err = util.InsertIntoFeed(app, actor.Id, trailAuthor.Id, trail.Id, util.TrailFeed) + _, err = util.InsertIntoFeed(app, recipient.Id, actor.Id, trail.Id, util.TrailFeed) if err != nil { return err } @@ -798,18 +793,13 @@ func processCreateOrUpdateSummitLogActivity(activity pub.Activity, app core.App, return nil } -func processCreateOrUpdateListActivity(activity pub.Activity, app core.App, actor *core.Record) error { +func processCreateOrUpdateListActivity(activity pub.Activity, app core.App, actor *core.Record, recipient *core.Record) error { list, err := util.ListFromActivity(activity, app, actor) if err != nil { return err } - listAuthor, err := app.FindRecordById("activitypub_actors", list.GetString("author")) - if err != nil { - return err - } - - _, err = util.InsertIntoFeed(app, actor.Id, listAuthor.Id, list.Id, util.ListFeed) + _, err = util.InsertIntoFeed(app, recipient.Id, actor.Id, list.Id, util.ListFeed) if err != nil { return err } diff --git a/db/federation/delete.go b/db/federation/delete.go index 57c3211e..6703f550 100644 --- a/db/federation/delete.go +++ b/db/federation/delete.go @@ -2,9 +2,8 @@ package federation import ( "fmt" - "net/url" "os" - "path" + "pocketbase/util" "strings" "time" @@ -315,16 +314,17 @@ func ProcessDeleteActivity(app core.App, actor *core.Record, activity pub.Activi func processDeleteTrailActivity(app core.App, activity pub.Activity) error { - trailUrl, err := url.Parse(activity.Object.GetID().String()) + object := activity.Object.GetID().String() + trail, err := app.FindFirstRecordByData("trails", "iri", object) if err != nil { return err } - recordId := path.Base(trailUrl.Path) - trail, err := app.FindRecordById("trails", recordId) + err = util.DeleteFromFeed(app, trail.Id) if err != nil { return err } + return app.Delete(trail) } @@ -370,8 +370,10 @@ func processDeleteListActivity(app core.App, actor *core.Record, activity pub.Ac return err } - if list.GetString("author") != actor.Id { - return fmt.Errorf("actor is not summit log author") + err = util.DeleteFromFeed(app, list.Id) + if err != nil { + return err } + return app.Delete(list) } diff --git a/db/main.go b/db/main.go index 3e021acb..d5d1281d 100644 --- a/db/main.go +++ b/db/main.go @@ -304,6 +304,11 @@ func deleteTrailHandler(client meilisearch.ServiceManager) func(e *core.RecordEv return err } + err = util.DeleteFromFeed(e.App, record.Id) + if err != nil { + return err + } + return e.Next() } } @@ -679,6 +684,11 @@ func deleteListHandler(client meilisearch.ServiceManager) func(e *core.RecordEve return err } + err = util.DeleteFromFeed(e.App, record.Id) + if err != nil { + return err + } + return e.Next() } } @@ -905,7 +915,7 @@ func listFeedHandler() func(e *core.RecordsListRequestEvent) error { } if err != nil { - return err + continue } r.MergeExpand(map[string]any{"item": item}) diff --git a/db/util/feed.go b/db/util/feed.go index 34df48a7..cf9fa1ac 100644 --- a/db/util/feed.go +++ b/db/util/feed.go @@ -25,3 +25,13 @@ func InsertIntoFeed(app core.App, actorId string, authorId string, itemId string return record, app.Save(record) } + +func DeleteFromFeed(app core.App, itemId string) error { + + record, err := app.FindFirstRecordByData("feed", "item", itemId) + if err != nil { + return err + } + + return app.Delete(record) +} diff --git a/web/src/routes/+page.svelte b/web/src/routes/+page.svelte index 8d60b213..9f6ccf4a 100644 --- a/web/src/routes/+page.svelte +++ b/web/src/routes/+page.svelte @@ -172,13 +172,17 @@ {/if} {#each feed.items as f} - - - + {#if f.expand.item} + + + + {/if} {/each} {/if}