parent
3268207afe
commit
559ed99cdf
|
@ -20,3 +20,49 @@ func cmdTimeline(c *cli.Context) error {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func cmdTimelineHome(c *cli.Context) error {
|
||||||
|
return cmdTimeline(c)
|
||||||
|
}
|
||||||
|
|
||||||
|
func cmdTimelinePublic(c *cli.Context) error {
|
||||||
|
client := c.App.Metadata["client"].(*mastodon.Client)
|
||||||
|
config := c.App.Metadata["config"].(*mastodon.Config)
|
||||||
|
timeline, err := client.GetTimelinePublic(context.Background(), false, nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
s := newScreen(config)
|
||||||
|
for i := len(timeline) - 1; i >= 0; i-- {
|
||||||
|
s.displayStatus(c.App.Writer, timeline[i])
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func cmdTimelineLocal(c *cli.Context) error {
|
||||||
|
client := c.App.Metadata["client"].(*mastodon.Client)
|
||||||
|
config := c.App.Metadata["config"].(*mastodon.Config)
|
||||||
|
timeline, err := client.GetTimelinePublic(context.Background(), true, nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
s := newScreen(config)
|
||||||
|
for i := len(timeline) - 1; i >= 0; i-- {
|
||||||
|
s.displayStatus(c.App.Writer, timeline[i])
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func cmdTimelineDirect(c *cli.Context) error {
|
||||||
|
client := c.App.Metadata["client"].(*mastodon.Client)
|
||||||
|
config := c.App.Metadata["config"].(*mastodon.Config)
|
||||||
|
timeline, err := client.GetTimelineDirect(context.Background(), nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
s := newScreen(config)
|
||||||
|
for i := len(timeline) - 1; i >= 0; i-- {
|
||||||
|
s.displayStatus(c.App.Writer, timeline[i])
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -14,7 +14,13 @@ func TestCmdTimeline(t *testing.T) {
|
||||||
func(w http.ResponseWriter, r *http.Request) {
|
func(w http.ResponseWriter, r *http.Request) {
|
||||||
switch r.URL.Path {
|
switch r.URL.Path {
|
||||||
case "/api/v1/timelines/home":
|
case "/api/v1/timelines/home":
|
||||||
fmt.Fprintln(w, `[{"content": "zzz"}]`)
|
fmt.Fprintln(w, `[{"content": "home"}]`)
|
||||||
|
return
|
||||||
|
case "/api/v1/timelines/public":
|
||||||
|
fmt.Fprintln(w, `[{"content": "public"}]`)
|
||||||
|
return
|
||||||
|
case "/api/v1/timelines/direct":
|
||||||
|
fmt.Fprintln(w, `[{"content": "direct"}]`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
|
http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
|
||||||
|
@ -22,9 +28,25 @@ func TestCmdTimeline(t *testing.T) {
|
||||||
},
|
},
|
||||||
func(app *cli.App) {
|
func(app *cli.App) {
|
||||||
app.Run([]string{"mstdn", "timeline"})
|
app.Run([]string{"mstdn", "timeline"})
|
||||||
|
app.Run([]string{"mstdn", "timeline-home"})
|
||||||
|
app.Run([]string{"mstdn", "timeline-public"})
|
||||||
|
app.Run([]string{"mstdn", "timeline-local"})
|
||||||
|
app.Run([]string{"mstdn", "timeline-direct"})
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if !strings.Contains(out, "zzz") {
|
want := strings.Join([]string{
|
||||||
t.Fatalf("%q should be contained in output of command: %v", "zzz", out)
|
"@example.com",
|
||||||
|
"home",
|
||||||
|
"@example.com",
|
||||||
|
"home",
|
||||||
|
"@example.com",
|
||||||
|
"public",
|
||||||
|
"@example.com",
|
||||||
|
"public",
|
||||||
|
"@example.com",
|
||||||
|
"direct",
|
||||||
|
}, "\n") + "\n"
|
||||||
|
if !strings.Contains(out, want) {
|
||||||
|
t.Fatalf("%q should be contained in output of command: %v", want, out)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -235,6 +235,26 @@ func makeApp() *cli.App {
|
||||||
Usage: "show timeline",
|
Usage: "show timeline",
|
||||||
Action: cmdTimeline,
|
Action: cmdTimeline,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "timeline-home",
|
||||||
|
Usage: "show timeline home",
|
||||||
|
Action: cmdTimelineHome,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "timeline-local",
|
||||||
|
Usage: "show timeline local",
|
||||||
|
Action: cmdTimelineLocal,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "timeline-public",
|
||||||
|
Usage: "show timeline public",
|
||||||
|
Action: cmdTimelinePublic,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "timeline-direct",
|
||||||
|
Usage: "show timeline direct",
|
||||||
|
Action: cmdTimelineDirect,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
Name: "notification",
|
Name: "notification",
|
||||||
Usage: "show notification",
|
Usage: "show notification",
|
||||||
|
|
12
status.go
12
status.go
|
@ -295,3 +295,15 @@ func (c *Client) UploadMediaFromReader(ctx context.Context, reader io.Reader) (*
|
||||||
}
|
}
|
||||||
return &attachment, nil
|
return &attachment, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetTimelineDirect return statuses from direct timeline.
|
||||||
|
func (c *Client) GetTimelineDirect(ctx context.Context, pg *Pagination) ([]*Status, error) {
|
||||||
|
params := url.Values{}
|
||||||
|
|
||||||
|
var statuses []*Status
|
||||||
|
err := c.doAPI(ctx, http.MethodGet, "/api/v1/timelines/direct", params, &statuses, pg)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return statuses, nil
|
||||||
|
}
|
||||||
|
|
|
@ -370,6 +370,28 @@ func TestGetTimelinePublic(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetTimelineDirect(t *testing.T) {
|
||||||
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
fmt.Fprintln(w, `[{"content": "direct"}, {"content": "status"}]`)
|
||||||
|
}))
|
||||||
|
defer ts.Close()
|
||||||
|
|
||||||
|
client := NewClient(&Config{Server: ts.URL})
|
||||||
|
tl, err := client.GetTimelineDirect(context.Background(), nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("should not be fail: %v", err)
|
||||||
|
}
|
||||||
|
if len(tl) != 2 {
|
||||||
|
t.Fatalf("result should be two: %d", len(tl))
|
||||||
|
}
|
||||||
|
if tl[0].Content != "direct" {
|
||||||
|
t.Fatalf("want %q but %q", "foo", tl[0].Content)
|
||||||
|
}
|
||||||
|
if tl[1].Content != "status" {
|
||||||
|
t.Fatalf("want %q but %q", "bar", tl[1].Content)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestGetTimelineHashtag(t *testing.T) {
|
func TestGetTimelineHashtag(t *testing.T) {
|
||||||
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
if r.URL.Path != "/api/v1/timelines/tag/zzz" {
|
if r.URL.Path != "/api/v1/timelines/tag/zzz" {
|
||||||
|
|
Loading…
Reference in New Issue