aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mastodon/accounts.go8
-rw-r--r--service/auth.go4
-rw-r--r--service/logging.go4
-rw-r--r--service/service.go6
-rw-r--r--service/transport.go9
-rw-r--r--templates/user.tmpl14
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>