diff options
author | r <r@freesoftwareextremist.com> | 2020-04-19 05:57:40 +0000 |
---|---|---|
committer | r <r@freesoftwareextremist.com> | 2020-04-19 05:57:40 +0000 |
commit | 91d87b01752a35f67508d5eb6f804946d7f9f7f2 (patch) | |
tree | 65cfc14c69d4ae3b554b600457c39293bf1a79c3 | |
parent | 04af1b93dc95d761b4e05a448c9d86ac67623ff6 (diff) | |
download | bloat-91d87b01752a35f67508d5eb6f804946d7f9f7f2.tar.gz bloat-91d87b01752a35f67508d5eb6f804946d7f9f7f2.zip |
Add account {hide,show}retweets
-rw-r--r-- | mastodon/accounts.go | 8 | ||||
-rw-r--r-- | service/auth.go | 4 | ||||
-rw-r--r-- | service/logging.go | 4 | ||||
-rw-r--r-- | service/service.go | 6 | ||||
-rw-r--r-- | service/transport.go | 9 | ||||
-rw-r--r-- | templates/user.tmpl | 14 |
6 files changed, 34 insertions, 11 deletions
diff --git a/mastodon/accounts.go b/mastodon/accounts.go index 995741c..7a44e2b 100644 --- a/mastodon/accounts.go +++ b/mastodon/accounts.go @@ -199,9 +199,13 @@ type Relationship struct { } // AccountFollow follow the account. -func (c *Client) AccountFollow(ctx context.Context, id string) (*Relationship, error) { +func (c *Client) AccountFollow(ctx context.Context, id string, reblogs *bool) (*Relationship, error) { var relationship Relationship - err := c.doAPI(ctx, http.MethodPost, fmt.Sprintf("/api/v1/accounts/%s/follow", url.PathEscape(string(id))), nil, &relationship, nil) + params := url.Values{} + if reblogs != nil { + params.Set("reblogs", strconv.FormatBool(*reblogs)) + } + err := c.doAPI(ctx, http.MethodPost, fmt.Sprintf("/api/v1/accounts/%s/follow", url.PathEscape(id)), params, &relationship, nil) if err != nil { return nil, err } diff --git a/service/auth.go b/service/auth.go index dd114b4..a7c4c15 100644 --- a/service/auth.go +++ b/service/auth.go @@ -292,7 +292,7 @@ func (s *as) Vote(ctx context.Context, c *model.Client, id string, return s.Service.Vote(ctx, c, id, choices) } -func (s *as) Follow(ctx context.Context, c *model.Client, id string) (err error) { +func (s *as) Follow(ctx context.Context, c *model.Client, id string, reblogs *bool) (err error) { err = s.authenticateClient(ctx, c) if err != nil { return @@ -301,7 +301,7 @@ func (s *as) Follow(ctx context.Context, c *model.Client, id string) (err error) if err != nil { return } - return s.Service.Follow(ctx, c, id) + return s.Service.Follow(ctx, c, id, reblogs) } func (s *as) UnFollow(ctx context.Context, c *model.Client, id string) (err error) { diff --git a/service/logging.go b/service/logging.go index c16cdb3..16279cc 100644 --- a/service/logging.go +++ b/service/logging.go @@ -221,12 +221,12 @@ func (s *ls) Vote(ctx context.Context, c *model.Client, id string, choices []str return s.Service.Vote(ctx, c, id, choices) } -func (s *ls) Follow(ctx context.Context, c *model.Client, id string) (err error) { +func (s *ls) Follow(ctx context.Context, c *model.Client, id string, reblogs *bool) (err error) { defer func(begin time.Time) { s.logger.Printf("method=%v, id=%v, took=%v, err=%v\n", "Follow", id, time.Since(begin), err) }(time.Now()) - return s.Service.Follow(ctx, c, id) + return s.Service.Follow(ctx, c, id, reblogs) } func (s *ls) UnFollow(ctx context.Context, c *model.Client, id string) (err error) { diff --git a/service/service.go b/service/service.go index 3a48e77..be83bd0 100644 --- a/service/service.go +++ b/service/service.go @@ -46,7 +46,7 @@ type Service interface { Retweet(ctx context.Context, c *model.Client, id string) (count int64, err error) UnRetweet(ctx context.Context, c *model.Client, id string) (count int64, err error) Vote(ctx context.Context, c *model.Client, id string, choices []string) (err error) - Follow(ctx context.Context, c *model.Client, id string) (err error) + Follow(ctx context.Context, c *model.Client, id string, reblogs *bool) (err error) UnFollow(ctx context.Context, c *model.Client, id string) (err error) Mute(ctx context.Context, c *model.Client, id string) (err error) UnMute(ctx context.Context, c *model.Client, id string) (err error) @@ -811,8 +811,8 @@ func (svc *service) Vote(ctx context.Context, c *model.Client, id string, return } -func (svc *service) Follow(ctx context.Context, c *model.Client, id string) (err error) { - _, err = c.AccountFollow(ctx, id) +func (svc *service) Follow(ctx context.Context, c *model.Client, id string, reblogs *bool) (err error) { + _, err = c.AccountFollow(ctx, id, reblogs) return } diff --git a/service/transport.go b/service/transport.go index 108cc18..69b28ec 100644 --- a/service/transport.go +++ b/service/transport.go @@ -458,7 +458,14 @@ func NewHandler(s Service, staticDir string) http.Handler { ctx := newCtxWithSesionCSRF(req, req.FormValue("csrf_token")) id, _ := mux.Vars(req)["id"] - err := s.Follow(ctx, c, id) + var reblogs *bool + r, ok := req.URL.Query()["reblogs"] + if ok && len(r) > 0 { + reblogs = new(bool) + *reblogs = r[0] == "true" + } + + err := s.Follow(ctx, c, id, reblogs) if err != nil { w.WriteHeader(http.StatusInternalServerError) s.ServeErrorPage(ctx, c, err) diff --git a/templates/user.tmpl b/templates/user.tmpl index 848ca0a..b8b3754 100644 --- a/templates/user.tmpl +++ b/templates/user.tmpl @@ -74,7 +74,19 @@ <input type="hidden" name="csrf_token" value="{{$.Ctx.CSRFToken}}"> <input type="submit" value="mute" class="btn-link"> </form> - {{end}} + {{end}} + - + {{if .User.Pleroma.Relationship.ShowingReblogs}} + <form class="d-inline" action="/follow/{{.User.ID}}?reblogs=false" method="post"> + <input type="hidden" name="csrf_token" value="{{$.Ctx.CSRFToken}}"> + <input type="submit" value="hide retweets" class="btn-link"> + </form> + {{else}} + <form class="d-inline" action="/follow/{{.User.ID}}" method="post"> + <input type="hidden" name="csrf_token" value="{{$.Ctx.CSRFToken}}"> + <input type="submit" value="show retweets" class="btn-link"> + </form> + {{end}} </div> {{end}} <div> |