fixes feed

This commit is contained in:
Christian Beutel
2025-07-11 17:13:30 +02:00
parent 237d12bfec
commit e8c7e7721a
6 changed files with 51 additions and 35 deletions

View File

@@ -143,7 +143,7 @@ func ProcessActivity(e *core.RequestEvent) error {
inbox := fmt.Sprintf("%s%s", origin, e.Request.Header.Get("X-Forwarded-Path")) 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 { if err != nil {
return err return err
} }
@@ -151,7 +151,7 @@ func ProcessActivity(e *core.RequestEvent) error {
actor, err := e.App.FindFirstRecordByData("activitypub_actors", "iri", activity.Actor.GetID().String()) actor, err := e.App.FindFirstRecordByData("activitypub_actors", "iri", activity.Actor.GetID().String())
if err != nil { if err != nil {
if err == sql.ErrNoRows { 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 { if err != nil {
return err return err
} }
@@ -177,7 +177,7 @@ func ProcessActivity(e *core.RequestEvent) error {
case pub.UpdateType: case pub.UpdateType:
fallthrough fallthrough
case pub.CreateType: case pub.CreateType:
err = ProcessCreateOrUpdateActivity(e.App, actor, activity) err = ProcessCreateOrUpdateActivity(e.App, actor, recipient, activity)
case pub.DeleteType: case pub.DeleteType:
err = ProcessDeleteActivity(e.App, actor, activity) err = ProcessDeleteActivity(e.App, actor, activity)
case pub.AnnounceType: case pub.AnnounceType:

View File

@@ -444,15 +444,15 @@ func CreateListActivity(app core.App, list *core.Record, typ pub.ActivityVocabul
return app.Save(record) 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 var err error
if strings.Contains(activity.Object.GetID().String(), "/api/v1/trail") { 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") { } else if strings.Contains(activity.Object.GetID().String(), "/api/v1/summit-log") {
err = processCreateOrUpdateSummitLogActivity(activity, app, actor) err = processCreateOrUpdateSummitLogActivity(activity, app, actor)
} else if strings.Contains(activity.Object.GetID().String(), "/api/v1/list") { } else if strings.Contains(activity.Object.GetID().String(), "/api/v1/list") {
err = processCreateOrUpdateListActivity(activity, app, actor) err = processCreateOrUpdateListActivity(activity, app, actor, recipient)
} else { } else {
err = processCreateOrUpdateCommentActivity(activity, app, actor) 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) trail, err := util.TrailFromActivity(activity, app, actor)
if err != nil { if err != nil {
return err return err
} }
trailAuthor, err := app.FindRecordById("activitypub_actors", trail.GetString("author")) _, err = util.InsertIntoFeed(app, recipient.Id, actor.Id, trail.Id, util.TrailFeed)
if err != nil {
return err
}
_, err = util.InsertIntoFeed(app, actor.Id, trailAuthor.Id, trail.Id, util.TrailFeed)
if err != nil { if err != nil {
return err return err
} }
@@ -798,18 +793,13 @@ func processCreateOrUpdateSummitLogActivity(activity pub.Activity, app core.App,
return nil 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) list, err := util.ListFromActivity(activity, app, actor)
if err != nil { if err != nil {
return err return err
} }
listAuthor, err := app.FindRecordById("activitypub_actors", list.GetString("author")) _, err = util.InsertIntoFeed(app, recipient.Id, actor.Id, list.Id, util.ListFeed)
if err != nil {
return err
}
_, err = util.InsertIntoFeed(app, actor.Id, listAuthor.Id, list.Id, util.ListFeed)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -2,9 +2,8 @@ package federation
import ( import (
"fmt" "fmt"
"net/url"
"os" "os"
"path" "pocketbase/util"
"strings" "strings"
"time" "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 { 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 { if err != nil {
return err return err
} }
recordId := path.Base(trailUrl.Path)
trail, err := app.FindRecordById("trails", recordId) err = util.DeleteFromFeed(app, trail.Id)
if err != nil { if err != nil {
return err return err
} }
return app.Delete(trail) return app.Delete(trail)
} }
@@ -370,8 +370,10 @@ func processDeleteListActivity(app core.App, actor *core.Record, activity pub.Ac
return err return err
} }
if list.GetString("author") != actor.Id { err = util.DeleteFromFeed(app, list.Id)
return fmt.Errorf("actor is not summit log author") if err != nil {
return err
} }
return app.Delete(list) return app.Delete(list)
} }

View File

@@ -304,6 +304,11 @@ func deleteTrailHandler(client meilisearch.ServiceManager) func(e *core.RecordEv
return err return err
} }
err = util.DeleteFromFeed(e.App, record.Id)
if err != nil {
return err
}
return e.Next() return e.Next()
} }
} }
@@ -679,6 +684,11 @@ func deleteListHandler(client meilisearch.ServiceManager) func(e *core.RecordEve
return err return err
} }
err = util.DeleteFromFeed(e.App, record.Id)
if err != nil {
return err
}
return e.Next() return e.Next()
} }
} }
@@ -905,7 +915,7 @@ func listFeedHandler() func(e *core.RecordsListRequestEvent) error {
} }
if err != nil { if err != nil {
return err continue
} }
r.MergeExpand(map[string]any{"item": item}) r.MergeExpand(map[string]any{"item": item})

View File

@@ -25,3 +25,13 @@ func InsertIntoFeed(app core.App, actorId string, authorId string, itemId string
return record, app.Save(record) 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)
}

View File

@@ -172,13 +172,17 @@
<EmptyStateFeed></EmptyStateFeed> <EmptyStateFeed></EmptyStateFeed>
{/if} {/if}
{#each feed.items as f} {#each feed.items as f}
<a {#if f.expand.item}
class="block" <a
href={(f.type === "trail" ? "/trail/view/" : "/lists/") + class="block"
`@${f.expand.author?.preferred_username}@${f.expand.author?.domain}/${f.item}`} href={(f.type === "trail"
> ? "/trail/view/"
<FeedCard feedItem={f}></FeedCard> : "/lists/") +
</a> `@${f.expand.author?.preferred_username}@${f.expand.author?.domain}/${f.item}`}
>
<FeedCard feedItem={f}></FeedCard>
</a>
{/if}
{/each} {/each}
</div> </div>
{/if} {/if}