Add account {hide,show}retweets

This commit is contained in:
r 2020-04-19 05:57:40 +00:00
parent 04af1b93dc
commit 91d87b0175
6 changed files with 34 additions and 11 deletions

View File

@ -199,9 +199,13 @@ type Relationship struct {
} }
// AccountFollow follow the account. // 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 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 { if err != nil {
return nil, err return nil, err
} }

View File

@ -292,7 +292,7 @@ func (s *as) Vote(ctx context.Context, c *model.Client, id string,
return s.Service.Vote(ctx, c, id, choices) 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) err = s.authenticateClient(ctx, c)
if err != nil { if err != nil {
return return
@ -301,7 +301,7 @@ func (s *as) Follow(ctx context.Context, c *model.Client, id string) (err error)
if err != nil { if err != nil {
return 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) { func (s *as) UnFollow(ctx context.Context, c *model.Client, id string) (err error) {

View File

@ -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) 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) { defer func(begin time.Time) {
s.logger.Printf("method=%v, id=%v, took=%v, err=%v\n", s.logger.Printf("method=%v, id=%v, took=%v, err=%v\n",
"Follow", id, time.Since(begin), err) "Follow", id, time.Since(begin), err)
}(time.Now()) }(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) { func (s *ls) UnFollow(ctx context.Context, c *model.Client, id string) (err error) {

View File

@ -46,7 +46,7 @@ type Service interface {
Retweet(ctx context.Context, c *model.Client, id string) (count int64, err error) 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) 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) 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) UnFollow(ctx context.Context, c *model.Client, id string) (err error)
Mute(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) 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 return
} }
func (svc *service) Follow(ctx context.Context, c *model.Client, id string) (err error) { func (svc *service) Follow(ctx context.Context, c *model.Client, id string, reblogs *bool) (err error) {
_, err = c.AccountFollow(ctx, id) _, err = c.AccountFollow(ctx, id, reblogs)
return return
} }

View File

@ -458,7 +458,14 @@ func NewHandler(s Service, staticDir string) http.Handler {
ctx := newCtxWithSesionCSRF(req, req.FormValue("csrf_token")) ctx := newCtxWithSesionCSRF(req, req.FormValue("csrf_token"))
id, _ := mux.Vars(req)["id"] 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 { if err != nil {
w.WriteHeader(http.StatusInternalServerError) w.WriteHeader(http.StatusInternalServerError)
s.ServeErrorPage(ctx, c, err) s.ServeErrorPage(ctx, c, err)

View File

@ -74,7 +74,19 @@
<input type="hidden" name="csrf_token" value="{{$.Ctx.CSRFToken}}"> <input type="hidden" name="csrf_token" value="{{$.Ctx.CSRFToken}}">
<input type="submit" value="mute" class="btn-link"> <input type="submit" value="mute" class="btn-link">
</form> </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> </div>
{{end}} {{end}}
<div> <div>