cmd/timelines.go
author Mikael Berthe <mikael@lilotux.net>
Fri, 28 Apr 2017 11:49:22 +0200
changeset 18 7a4b57b3e66a
parent 13 f862af8faf17
child 20 b0ccc09f07a2
permissions -rw-r--r--
Display instance version, if field is set Requires latest madon package. (There seems to be a bug in Mastodon 1.3.1, it returns "Mastodon::VERSION")

// Copyright © 2017 Mikael Berthe <mikael@lilotux.net>
//
// Licensed under the MIT license.
// Please see the LICENSE file is this directory.

package cmd

import (
	"github.com/spf13/cobra"
)

var timelineOpts struct {
	local bool
	limit uint
}

// timelineCmd represents the timelines command
var timelineCmd = &cobra.Command{
	Use:     "timeline [home|public|:HASHTAG] [--local]",
	Aliases: []string{"tl"},
	Short:   "Fetch a timeline",
	Long: `
The timeline command fetches a timeline (home, local or federated).
It can also get a hashtag-based timeline if the keyword or prefixed with
':' or '#'.`,
	Example: `  madonctl timeline
  madonctl timeline public --local
  madonctl timeline :mastodon`,
	RunE:      timelineRunE,
	ValidArgs: []string{"home", "public"},
}

func init() {
	RootCmd.AddCommand(timelineCmd)

	timelineCmd.Flags().BoolVar(&timelineOpts.local, "local", false, "Posts from the local instance")
	timelineCmd.Flags().UintVarP(&timelineOpts.limit, "limit", "l", 0, "Limit number of results")
}

func timelineRunE(cmd *cobra.Command, args []string) error {
	opt := timelineOpts

	tl := "home"
	if len(args) > 0 {
		tl = args[0]
	}

	// The home timeline is the only one requiring to be logged in
	if err := madonInit(tl == "home"); err != nil {
		return err
	}

	sl, err := gClient.GetTimelines(tl, opt.local)
	if err != nil {
		errPrint("Error: %s", err.Error())
		return nil
	}

	if opt.limit > 0 {
		sl = sl[:opt.limit]
	}

	p, err := getPrinter()
	if err != nil {
		return err
	}
	return p.PrintObj(sl, nil, "")
}