From 0b97866be3a15f64170673af9813b39cbc585db5 Mon Sep 17 00:00:00 2001 From: FChannel <> Date: Sat, 4 Jun 2022 15:12:24 -0700 Subject: archive page works --- activitypub/object.go | 4 +-- main.go | 3 +- route/routes/actor.go | 67 ++++++++++++++++++++------------------------ route/structs.go | 1 + route/util.go | 10 +++++++ views/archive.html | 60 +++++++++++++++++++++++++++++++++++++++ views/catalog.html | 2 ++ views/npost.html | 4 +-- views/nposts.html | 4 +-- views/partials/post_nav.html | 12 ++++---- views/partials/top.html | 4 +-- 11 files changed, 119 insertions(+), 52 deletions(-) create mode 100644 views/archive.html diff --git a/activitypub/object.go b/activitypub/object.go index 4682832..891cb23 100644 --- a/activitypub/object.go +++ b/activitypub/object.go @@ -425,7 +425,7 @@ func (obj ObjectBase) GetCollectionFromPath() (Collection, error) { var err error - query := `select x.id, x.name, x.content, x.type, x.published, x.updated, x.attributedto, x.attachment, x.preview, x.actor, x.tripcode, x.sensitive from (select id, name, content, type, published, updated, attributedto, attachment, preview, actor, tripcode, sensitive from activitystream where id like $1 and type='Note' union select id, name, content, type, published, updated, attributedto, attachment, preview, actor, tripcode, sensitive from cacheactivitystream where id like $1 and type='Note') as x order by x.updated` + query := `select x.id, x.name, x.content, x.type, x.published, x.updated, x.attributedto, x.attachment, x.preview, x.actor, x.tripcode, x.sensitive from (select id, name, content, type, published, updated, attributedto, attachment, preview, actor, tripcode, sensitive from activitystream where id like $1 and (type='Note' or type='Archive') union select id, name, content, type, published, updated, attributedto, attachment, preview, actor, tripcode, sensitive from cacheactivitystream where id like $1 and (type='Note' or type='Archive')) as x order by x.updated` if err = config.DB.QueryRow(query, obj.Id).Scan(&post.Id, &post.Name, &post.Content, &post.Type, &post.Published, &post.Updated, &post.AttributedTo, &post.Attachment[0].Id, &post.Preview.Id, &actor.Id, &post.TripCode, &post.Sensitive); err != nil { return nColl, util.MakeError(err, "GetCollectionFromPath") } @@ -663,7 +663,7 @@ func (obj ObjectBase) GetRepliesReplies() (CollectionBase, int, int, error) { var err error var rows *sql.Rows - query := `select count(x.id) over(), sum(case when RTRIM(x.attachment) = '' then 0 else 1 end) over(), x.id, x.name, x.content, x.type, x.published, x.attributedto, x.attachment, x.preview, x.actor, x.tripcode, x.sensitive from (select * from activitystream where id in (select id from replies where inreplyto=$1) and type='Note' union select * from cacheactivitystream where id in (select id from replies where inreplyto=$1) and type='Note') as x order by x.published asc` + query := `select count(x.id) over(), sum(case when RTRIM(x.attachment) = '' then 0 else 1 end) over(), x.id, x.name, x.content, x.type, x.published, x.attributedto, x.attachment, x.preview, x.actor, x.tripcode, x.sensitive from (select * from activitystream where id in (select id from replies where inreplyto=$1) and (type='Note' or type='Archive') union select * from cacheactivitystream where id in (select id from replies where inreplyto=$1) and (type='Note' or type='Archive')) as x order by x.published asc` if rows, err = config.DB.Query(query, obj.Id); err != nil { return nColl, postCount, attachCount, util.MakeError(err, "GetRepliesReplies") } diff --git a/main.go b/main.go index 66ecb6c..7e25243 100644 --- a/main.go +++ b/main.go @@ -89,12 +89,11 @@ func main() { app.Get("/api/media", routes.Media) // Board actor routes - app.Get("/:actor/catalog", routes.ActorCatalogGet) + app.Get("/:actor/catalog", routes.ActorCatalog) app.Post("/:actor/inbox", routes.ActorInbox) app.All("/:actor/outbox", routes.ActorOutbox) app.Get("/:actor/following", routes.ActorFollowing) app.All("/:actor/followers", routes.ActorFollowers) - app.Get("/:actor/reported", routes.ActorReported) app.Get("/:actor/archive", routes.ActorArchive) app.Get("/:actor", routes.ActorOutboxGet) app.Post("/:actor", routes.ActorPost) diff --git a/route/routes/actor.go b/route/routes/actor.go index fc9795a..a7711d3 100644 --- a/route/routes/actor.go +++ b/route/routes/actor.go @@ -213,18 +213,6 @@ func ActorFollowers(ctx *fiber.Ctx) error { return actor.GetFollowersResp(ctx) } -func ActorReported(c *fiber.Ctx) error { - // STUB - - return c.SendString("actor reported") -} - -func ActorArchive(c *fiber.Ctx) error { - // STUB - - return c.SendString("actor archive") -} - func ActorPost(ctx *fiber.Ctx) error { header, _ := ctx.FormFile("file") @@ -450,10 +438,6 @@ func ActorPostGet(ctx *fiber.Ctx) error { } } - if len(data.Posts) > 0 { - data.PostId = util.ShortURL(data.Board.To, data.Posts[0].Id) - } - data.Board.Name = actor.Name data.Board.PrefName = actor.PreferredUsername data.Board.To = actor.Outbox @@ -463,6 +447,11 @@ func ActorPostGet(ctx *fiber.Ctx) error { data.Board.Domain = config.Domain data.Board.Restricted = actor.Restricted data.ReturnTo = "feed" + data.PostType = "reply" + + if len(data.Posts) > 0 { + data.PostId = util.ShortURL(data.Board.To, data.Posts[0].Id) + } capt, err := util.GetRandomCaptcha() if err != nil { @@ -496,28 +485,19 @@ func ActorPostGet(ctx *fiber.Ctx) error { }, "layouts/main") } -func ActorCatalogGet(ctx *fiber.Ctx) error { +func ActorCatalog(ctx *fiber.Ctx) error { actorName := ctx.Params("actor") actor, err := activitypub.GetActorByNameFromDB(actorName) + if err != nil { - return util.MakeError(err, "CatalogGet") + return util.MakeError(err, "ActorCatalog") } collection, err := actor.GetCatalogCollection() - // TODO: implement this in template functions - // "showArchive": func() bool { - // col, err := db.GetActorCollectionDBTypeLimit(collection.Actor.Id, "Archive", 1) - // if err != nil { - // // TODO: figure out what to do here - // panic(err) - // } - // - // if len(col.OrderedItems) > 0 { - // return true - // } - // return false - //}, + if err != nil { + return util.MakeError(err, "ActorCatalog") + } var data route.PageData data.Board.Name = actor.Name @@ -531,6 +511,7 @@ func ActorCatalogGet(ctx *fiber.Ctx) error { data.Board.Restricted = actor.Restricted data.Key = config.Key data.ReturnTo = "catalog" + data.PostType = "new" data.Board.Post.Actor = actor.Id @@ -612,6 +593,7 @@ func ActorOutboxGet(ctx *fiber.Ctx) error { data.Board.Restricted = actor.Restricted data.CurrentPage = page data.ReturnTo = "feed" + data.PostType = "new" data.Board.Post.Actor = actor.Id @@ -644,9 +626,19 @@ func ActorOutboxGet(ctx *fiber.Ctx) error { }, "layouts/main") } -func ActorArchiveGet(ctx *fiber.Ctx) error { - collection := ctx.Locals("collection").(activitypub.Collection) - actor := collection.Actor +func ActorArchive(ctx *fiber.Ctx) error { + actorName := ctx.Params("actor") + actor, err := activitypub.GetActorByNameFromDB(actorName) + + if err != nil { + return util.MakeError(err, "ActorArchive") + } + + collection, err := actor.GetCollectionType("Archive") + + if err != nil { + return util.MakeError(err, "ActorArchive") + } var returnData route.PageData returnData.Board.Name = actor.Name @@ -663,12 +655,11 @@ func ActorArchiveGet(ctx *fiber.Ctx) error { returnData.Board.Post.Actor = actor.Id - var err error returnData.Instance, err = activitypub.GetActorFromDB(config.Domain) capt, err := util.GetRandomCaptcha() if err != nil { - return util.MakeError(err, "ArchiveGet") + return util.MakeError(err, "ActorArchive") } returnData.Board.Captcha = config.Domain + "/" + capt returnData.Board.CaptchaCode = post.GetCaptchaCode(returnData.Board.Captcha) @@ -679,6 +670,10 @@ func ActorArchiveGet(ctx *fiber.Ctx) error { returnData.Posts = collection.OrderedItems + returnData.Meta.Description = returnData.Board.Summary + returnData.Meta.Url = returnData.Board.Actor.Id + returnData.Meta.Title = returnData.Title + returnData.Themes = &config.Themes returnData.ThemeCookie = route.GetThemeCookie(ctx) diff --git a/route/structs.go b/route/structs.go index fbfb327..73371ae 100644 --- a/route/structs.go +++ b/route/structs.go @@ -24,6 +24,7 @@ type PageData struct { NewsItems []db.NewsItem BoardRemainer []int Meta Meta + PostType string Themes *[]string ThemeCookie string diff --git a/route/util.go b/route/util.go index 9a2de75..defa60e 100644 --- a/route/util.go +++ b/route/util.go @@ -386,4 +386,14 @@ func TemplateFunctions(engine *html.Engine) { return board.Name + "/" + util.ShortURL(board.Outbox, OP) + "#" + util.ShortURL(board.Outbox, link) }) + + engine.AddFunc("showArchive", func(actor activitypub.Actor) bool { + col, err := actor.GetCollectionTypeLimit("Archive", 1) + + if err != nil || len(col.OrderedItems) == 0 { + return false + } + + return true + }) } diff --git a/views/archive.html b/views/archive.html new file mode 100644 index 0000000..a5184a4 --- /dev/null +++ b/views/archive.html @@ -0,0 +1,60 @@ +{{ template "partials/top" .page }} + +{{ $board := .page.Board }} + +
+ {{ end }} + | No. | +Excerpt | ++ |
---|---|---|---|
[Pop] | + {{ end }} +{{ shortURL $board.Actor.Outbox $e.Id }} | + +[View] | +|
[Pop] | + {{ end }} +{{ shortURL $board.Actor.Outbox $e.Id }} | + +[View] | +
{{ .Board.Summary }}
{{ $len := len .Posts }} {{ if eq $len 0 }} - {{ if .Board.InReplyTo }} + {{ if eq .PostType "reply" }}