diff --git a/service/auth.go b/service/auth.go index cb442a7..5ee2001 100644 --- a/service/auth.go +++ b/service/auth.go @@ -142,7 +142,7 @@ func (s *authService) UnRetweet(ctx context.Context, client io.Writer, c *mastod return s.Service.UnRetweet(ctx, client, c, id) } -func (s *authService) PostTweet(ctx context.Context, client io.Writer, c *mastodon.Client, content string, replyToID string) (err error) { +func (s *authService) PostTweet(ctx context.Context, client io.Writer, c *mastodon.Client, content string, replyToID string) (id string, err error) { c, err = s.getClient(ctx) if err != nil { return diff --git a/service/logging.go b/service/logging.go index b11599e..0ed40bd 100644 --- a/service/logging.go +++ b/service/logging.go @@ -108,7 +108,7 @@ func (s *loggingService) UnRetweet(ctx context.Context, client io.Writer, c *mas return s.Service.UnRetweet(ctx, client, c, id) } -func (s *loggingService) PostTweet(ctx context.Context, client io.Writer, c *mastodon.Client, content string, replyToID string) (err error) { +func (s *loggingService) PostTweet(ctx context.Context, client io.Writer, c *mastodon.Client, content string, replyToID string) (id string, err error) { defer func(begin time.Time) { s.logger.Printf("method=%v, content=%v, reply_to_id=%v, took=%v, err=%v\n", "PostTweet", content, replyToID, time.Since(begin), err) diff --git a/service/service.go b/service/service.go index b10a5de..3bfb163 100644 --- a/service/service.go +++ b/service/service.go @@ -36,7 +36,7 @@ type Service interface { UnLike(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) Retweet(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) UnRetweet(ctx context.Context, client io.Writer, c *mastodon.Client, id string) (err error) - PostTweet(ctx context.Context, client io.Writer, c *mastodon.Client, content string, replyToID string) (err error) + PostTweet(ctx context.Context, client io.Writer, c *mastodon.Client, content string, replyToID string) (id string, err error) } type service struct { @@ -292,11 +292,16 @@ func (svc *service) UnRetweet(ctx context.Context, client io.Writer, c *mastodon return } -func (svc *service) PostTweet(ctx context.Context, client io.Writer, c *mastodon.Client, content string, replyToID string) (err error) { +func (svc *service) PostTweet(ctx context.Context, client io.Writer, c *mastodon.Client, content string, replyToID string) (id string, err error) { tweet := &mastodon.Toot{ Status: content, InReplyToID: replyToID, } - _, err = c.PostStatus(ctx, tweet) - return + + s, err := c.PostStatus(ctx, tweet) + if err != nil { + return + } + + return s.ID, nil } diff --git a/service/transport.go b/service/transport.go index 709a2ff..00f7430 100644 --- a/service/transport.go +++ b/service/transport.go @@ -108,7 +108,7 @@ func NewHandler(s Service, staticDir string) http.Handler { return } - w.Header().Add("Location", req.Header.Get("Referer")) + w.Header().Add("Location", req.Header.Get("Referer")+"#status-"+id) w.WriteHeader(http.StatusSeeOther) }).Methods(http.MethodGet) @@ -121,7 +121,7 @@ func NewHandler(s Service, staticDir string) http.Handler { return } - w.Header().Add("Location", req.Header.Get("Referer")) + w.Header().Add("Location", req.Header.Get("Referer")+"#status-"+id) w.WriteHeader(http.StatusSeeOther) }).Methods(http.MethodGet) @@ -134,7 +134,7 @@ func NewHandler(s Service, staticDir string) http.Handler { return } - w.Header().Add("Location", req.Header.Get("Referer")) + w.Header().Add("Location", req.Header.Get("Referer")+"#status-"+id) w.WriteHeader(http.StatusSeeOther) }).Methods(http.MethodGet) @@ -147,7 +147,7 @@ func NewHandler(s Service, staticDir string) http.Handler { return } - w.Header().Add("Location", req.Header.Get("Referer")) + w.Header().Add("Location", req.Header.Get("Referer")+"#status-"+id) w.WriteHeader(http.StatusSeeOther) }).Methods(http.MethodGet) @@ -155,15 +155,15 @@ func NewHandler(s Service, staticDir string) http.Handler { ctx := getContextWithSession(context.Background(), req) content := req.FormValue("content") replyToID := req.FormValue("reply_to_id") - err := s.PostTweet(ctx, w, nil, content, replyToID) + id, err := s.PostTweet(ctx, w, nil, content, replyToID) if err != nil { s.ServeErrorPage(ctx, w, err) return } - location := "/timeline" + location := "/timeline" + "#status-" + id if len(replyToID) > 0 { - location = "/thread/" + replyToID + location = "/thread/" + replyToID + "#status-" + id } w.Header().Add("Location", location) w.WriteHeader(http.StatusSeeOther) diff --git a/templates/status.tmpl b/templates/status.tmpl index 3953f23..24f9a54 100644 --- a/templates/status.tmpl +++ b/templates/status.tmpl @@ -1,4 +1,4 @@ -