From 91f68ccfb391ee53bfc36f4877ca8d8f63c8faf2 Mon Sep 17 00:00:00 2001 From: r Date: Sat, 16 Jan 2021 09:10:02 +0000 Subject: [PATCH] Add follow request support --- service/service.go | 20 ++++++++++++++++++++ service/transport.go | 22 ++++++++++++++++++++++ templates/notification.tmpl | 29 +++++++++++++++++++++++++++++ templates/requestlist.tmpl | 34 ++++++++++++++++++++++++++++++++++ templates/user.tmpl | 13 +++++++++---- 5 files changed, 114 insertions(+), 4 deletions(-) create mode 100644 templates/requestlist.tmpl diff --git a/service/service.go b/service/service.go index db44e10..088bcf4 100644 --- a/service/service.go +++ b/service/service.go @@ -486,6 +486,18 @@ func (s *service) UserPage(c *client, id string, pageType string, nextLink = fmt.Sprintf("/user/%s/likes?max_id=%s", id, pg.MaxID) } + case "requests": + if !isCurrent { + return errInvalidArgument + } + users, err = c.GetFollowRequests(ctx, &pg) + if err != nil { + return + } + if len(users) == 20 && len(pg.MaxID) > 0 { + nextLink = fmt.Sprintf("/user/%s/requests?max_id=%s", + id, pg.MaxID) + } default: return errInvalidArgument } @@ -817,6 +829,14 @@ func (s *service) UnFollow(c *client, id string) (err error) { return } +func (s *service) Accept(c *client, id string) (err error) { + return c.FollowRequestAuthorize(ctx, id) +} + +func (s *service) Reject(c *client, id string) (err error) { + return c.FollowRequestReject(ctx, id) +} + func (s *service) Mute(c *client, id string) (err error) { _, err = c.AccountMute(ctx, id) return diff --git a/service/transport.go b/service/transport.go index 80ad7f1..7ba52a4 100644 --- a/service/transport.go +++ b/service/transport.go @@ -403,6 +403,26 @@ func NewHandler(s *service, logger *log.Logger, staticDir string) http.Handler { return nil }, CSRF, HTML) + accept := handle(func(c *client) error { + id, _ := mux.Vars(c.Req)["id"] + err := s.Accept(c, id) + if err != nil { + return err + } + redirect(c, c.Req.Header.Get("Referer")) + return nil + }, CSRF, HTML) + + reject := handle(func(c *client) error { + id, _ := mux.Vars(c.Req)["id"] + err := s.Reject(c, id) + if err != nil { + return err + } + redirect(c, c.Req.Header.Get("Referer")) + return nil + }, CSRF, HTML) + mute := handle(func(c *client) error { id, _ := mux.Vars(c.Req)["id"] err := s.Mute(c, id) @@ -634,6 +654,8 @@ func NewHandler(s *service, logger *log.Logger, staticDir string) http.Handler { r.HandleFunc("/vote/{id}", vote).Methods(http.MethodPost) r.HandleFunc("/follow/{id}", follow).Methods(http.MethodPost) r.HandleFunc("/unfollow/{id}", unfollow).Methods(http.MethodPost) + r.HandleFunc("/accept/{id}", accept).Methods(http.MethodPost) + r.HandleFunc("/reject/{id}", reject).Methods(http.MethodPost) r.HandleFunc("/mute/{id}", mute).Methods(http.MethodPost) r.HandleFunc("/unmute/{id}", unMute).Methods(http.MethodPost) r.HandleFunc("/block/{id}", block).Methods(http.MethodPost) diff --git a/templates/notification.tmpl b/templates/notification.tmpl index 3977aa7..5563425 100644 --- a/templates/notification.tmpl +++ b/templates/notification.tmpl @@ -38,6 +38,35 @@ + {{else if eq .Type "follow_request"}} +
+
+ + profile-avatar + +
+
+
+ {{EmojiFilter .Account.DisplayName .Account.Emojis}} + wants to follow you - + + +
+
+ @{{.Account.Acct}} +
+
+ + +
+ - +
+ + +
+
+
+ {{else if eq .Type "mention"}} {{template "status" (WithContext .Status $.Ctx)}} diff --git a/templates/requestlist.tmpl b/templates/requestlist.tmpl new file mode 100644 index 0000000..232b56d --- /dev/null +++ b/templates/requestlist.tmpl @@ -0,0 +1,34 @@ +{{with .Data}} +
+ {{range .}} +
+
+ + avatar + +
+
+
+
{{EmojiFilter .DisplayName .Emojis}}
+ +
@{{.Acct}}
+
+
+
+ + +
+ - +
+ + +
+
+
+ {{else}} +
No data found
+ {{end}} +
+{{else}} +
No data found
+{{end}} diff --git a/templates/user.tmpl b/templates/user.tmpl index b3461c6..5ef411a 100644 --- a/templates/user.tmpl +++ b/templates/user.tmpl @@ -99,10 +99,11 @@ {{if .IsCurrent}}
- bookmarks - - likes - - mutes - - blocks + bookmarks + - likes + - mutes + - blocks + {{if .User.Locked}}- requests {{end}}
{{end}}
@@ -162,6 +163,10 @@ {{else if eq .Type "blocks"}}
Blocks
{{template "userlist.tmpl" (WithContext .Users $.Ctx)}} + +{{else if eq .Type "requests"}} +
Follow requests
+{{template "requestlist.tmpl" (WithContext .Users $.Ctx)}} {{end}}