M api/todo.go => api/todo.go +77 -0
@@ 1,5 1,18 @@
package api
+import (
+ "fmt"
+ "strings"
+
+ "git.xenrox.net/~xenrox/srhtctl/config"
+)
+
+// TicketStatus is the status of a ticket
+var TicketStatus string
+
+// TrackerName is the name of a tracker
+var TrackerName string
+
type permissionStruct struct {
Anonymous []string `json:"anonymous"`
Submitter []string `json:"submitter"`
@@ 45,3 58,67 @@ type ticketPagerStruct struct {
Total int `json:"total"`
ResultsPerPage int `json:"results_per_page"`
}
+
+// PrintTickets prints out tickets of a user
+func PrintTickets(args []string) error {
+ var tickets ticketPagerStruct
+
+ if TrackerName != "" {
+ _ = getTickets(&tickets, TrackerName)
+ for _, ticket := range tickets.Results {
+ fmt.Print(ticket.filterByStatus())
+ }
+ return nil
+ }
+
+ var trackers trackerPagerStruct
+ _ = getTrackers(&trackers)
+
+ for _, tracker := range trackers.Results {
+ _ = getTickets(&tickets, tracker.Name)
+
+ for i, ticket := range tickets.Results {
+ if i == 0 {
+ fmt.Printf("Tracker %s:\n\n", tracker.Name)
+ }
+ fmt.Print(ticket.filterByStatus())
+ }
+ }
+
+ return nil
+}
+
+func getTickets(response *ticketPagerStruct, trackerName string) error {
+ url := fmt.Sprintf("%s/api/trackers/%s/tickets", config.GetURL("todo"), trackerName)
+ err := Request(url, "GET", "", &response)
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+func (ticket ticketStruct) filterByStatus() string {
+ if TicketStatus == "all" || TicketStatus == ticket.Status {
+ return fmt.Sprintln(ticket)
+ }
+ return ""
+}
+
+func getTrackers(response *trackerPagerStruct) error {
+ url := fmt.Sprintf("%s/api/trackers", config.GetURL("todo"))
+ err := Request(url, "GET", "", &response)
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+func (ticket ticketStruct) String() string {
+ str := fmt.Sprintf("Ticket %d: %s\n", ticket.ID, ticket.Title)
+ str += fmt.Sprintf("Submitter: %s\n", ticket.Submitter.Name)
+ str += fmt.Sprintf("Status: %s with %s\n", ticket.Status, ticket.Resolution)
+ // Trim newline in tickets submitted by email
+ str += fmt.Sprintln(strings.TrimSpace(ticket.Description))
+
+ return str
+}
A cmd/todo.go => cmd/todo.go +37 -0
@@ 0,0 1,37 @@
+package cmd
+
+import (
+ "git.xenrox.net/~xenrox/srhtctl/api"
+ "git.xenrox.net/~xenrox/srhtctl/helpers/errorhelper"
+ "github.com/spf13/cobra"
+)
+
+var todoCmd = &cobra.Command{
+ Use: "todo",
+ Short: "Use the srht todo API",
+ Run: func(cmd *cobra.Command, args []string) {
+ },
+}
+
+var ticketsCmd = &cobra.Command{
+ Use: "tickets",
+ Short: "List tickets",
+ Run: func(cmd *cobra.Command, args []string) {
+ err := api.PrintTickets(args)
+ errorhelper.ExitError(err)
+ },
+}
+
+func init() {
+ rootCmd.AddCommand(todoCmd)
+
+ todoCmd.AddCommand(ticketsCmd)
+ ticketsCmd.Flags().StringVarP(&api.TicketStatus, "status", "s", "reported", "Ticket status")
+ ticketsCmd.RegisterFlagCompletionFunc("status", func(cmd *cobra.Command, args []string, toComplete string) (
+ []string, cobra.ShellCompDirective) {
+ return []string{"reported", "confirmed", "in_progress", "pending", "resolved", "all"},
+ cobra.ShellCompDirectiveNoFileComp
+ })
+ ticketsCmd.Flags().StringVarP(&api.TrackerName, "tracker", "t", "", "Tracker name")
+ ticketsCmd.RegisterFlagCompletionFunc("tracker", completeNoFiles)
+}