diff --git a/mastodon/mastodon.go b/mastodon/mastodon.go index 5138091..9bd00f2 100644 --- a/mastodon/mastodon.go +++ b/mastodon/mastodon.go @@ -211,7 +211,8 @@ type Toot struct { Visibility string `json:"visibility"` ContentType string `json:"content_type"` Language string `json:"language"` - ExpiresIn int `json:"expires_in"` + ExpiresIn int `json:"expires_in"` + ScheduledAt string `json:"scheduled_at"` } // Mention hold information for mention. diff --git a/mastodon/status.go b/mastodon/status.go index 242cb03..f56ba21 100644 --- a/mastodon/status.go +++ b/mastodon/status.go @@ -364,6 +364,9 @@ func (c *Client) PostStatus(ctx context.Context, toot *Toot) (*Status, error) { if toot.ExpiresIn >= 3600 { params.Set("expires_in", fmt.Sprint(toot.ExpiresIn)) } + if toot.ScheduledAt != "" { + params.Set("scheduled_at", toot.ScheduledAt) + } var status Status if toot.Edit != "" { diff --git a/service/service.go b/service/service.go index 8cdae83..8215c6a 100644 --- a/service/service.go +++ b/service/service.go @@ -988,7 +988,7 @@ func (s *service) Signout(c *client) (err error) { func (s *service) Post(c *client, content string, replyToID string, format string, visibility string, isNSFW bool, spoilerText string, - files []*multipart.FileHeader, edit string, language string, expiresIn int) (id string, err error) { + files []*multipart.FileHeader, edit string, language string, expiresIn int, scheduledAt string) (id string, err error) { var mediaIDs []string for _, f := range files { @@ -1012,6 +1012,7 @@ func (s *service) Post(c *client, content string, replyToID string, Edit: edit, Language: language, ExpiresIn: expiresIn, // pleroma compatible + ScheduledAt: scheduledAt, } st, err := c.PostStatus(c.ctx, tweet) diff --git a/service/transport.go b/service/transport.go index 30c5a2b..41809f8 100644 --- a/service/transport.go +++ b/service/transport.go @@ -319,8 +319,16 @@ func NewHandler(s *service, verbose bool, staticDir string) http.Handler { if err != nil { return err } + scheduledAt := c.r.FormValue("scheduled") + if scheduledAt != "" { + scheduled, err := time.Parse("2006-01-02T15:04", scheduledAt) + if err != nil { + return err + } + scheduledAt = string(scheduled.UTC().Format(time.RFC3339)) + } - id, err := s.Post(c, content, replyToID, format, visibility, isNSFW, spoilerText, files, edit, language, expiresIn) + id, err := s.Post(c, content, replyToID, format, visibility, isNSFW, spoilerText, files, edit, language, expiresIn, scheduledAt) if err != nil { return err } diff --git a/templates/postform.tmpl b/templates/postform.tmpl index a952fe4..964032b 100644 --- a/templates/postform.tmpl +++ b/templates/postform.tmpl @@ -50,6 +50,7 @@ + {{end}}