Add printer object to format output

This commit is contained in:
Ryan Cavicchioni 2021-03-13 16:20:18 -06:00
parent 94cc596afa
commit ff05f8e2f3
Signed by: ryanc
GPG Key ID: 877EEDAF9245103D
8 changed files with 120 additions and 116 deletions

View File

@ -24,6 +24,8 @@ func NewCmdLs() Command {
}
func LsCmd(args CmdArgs) (int, error) {
var p Printer
c := args.Client
selector := args.Flags.String("selector")
format := args.Flags.String("format")
@ -37,12 +39,8 @@ func LsCmd(args CmdArgs) (int, error) {
return ExitFailure, err
}
switch format {
case "table":
PrintLightsTable(lights)
default:
PrintLights(lights)
}
p = NewPrinter(format)
p.Lights(lights)
return ExitSuccess, nil
}

View File

@ -29,6 +29,8 @@ func NewCmdPoweroff() Command {
}
func PoweroffCmd(args CmdArgs) (int, error) {
var p Printer
c := args.Client
duration := args.Flags.Float64("duration")
selector := args.Flags.String("selector")
@ -44,12 +46,8 @@ func PoweroffCmd(args CmdArgs) (int, error) {
return ExitFailure, err
}
switch format {
case "table":
PrintResultsTable(r.Results)
default:
PrintResults(r.Results)
}
p = NewPrinter(format)
p.Results(r.Results)
return ExitSuccess, nil
}

View File

@ -29,6 +29,8 @@ func NewCmdPoweron() Command {
}
func PoweronCmd(args CmdArgs) (int, error) {
var p Printer
c := args.Client
duration := args.Flags.Float64("duration")
selector := args.Flags.String("selector")
@ -44,12 +46,8 @@ func PoweronCmd(args CmdArgs) (int, error) {
return ExitFailure, err
}
switch format {
case "table":
PrintResultsTable(r.Results)
default:
PrintResults(r.Results)
}
p = NewPrinter(format)
p.Results(r.Results)
return ExitSuccess, nil
}

View File

@ -10,6 +10,98 @@ import (
"github.com/olekukonko/tablewriter"
)
type Printer interface {
Results(results []lifx.Result)
Lights(lights []lifx.Light)
}
type defaultPrinter struct{}
type tablePrinter struct{}
func NewPrinter(format string) Printer {
switch format {
case "table":
return &tablePrinter{}
default:
return &defaultPrinter{}
}
}
func (dp *defaultPrinter) Results(results []lifx.Result) {
sortResults(results)
table := tablewriter.NewWriter(os.Stdout)
_, rows := makeResultsTable(results)
for _, v := range rows {
table.Append(v)
}
fmt.Printf("total %d\n", len(results))
table.SetAlignment(tablewriter.ALIGN_LEFT)
table.SetAutoWrapText(false)
table.SetBorder(false)
table.SetCenterSeparator("")
table.SetColumnSeparator("")
table.SetHeaderLine(false)
table.SetNoWhiteSpace(true)
table.SetRowSeparator("")
table.SetTablePadding(" ")
table.Render()
}
func (tp *tablePrinter) Results(results []lifx.Result) {
sortResults(results)
table := tablewriter.NewWriter(os.Stdout)
hdr, rows := makeResultsTable(results)
for _, v := range rows {
table.Append(v)
}
table.SetHeader(hdr)
table.Render()
}
func (dp *defaultPrinter) Lights(lights []lifx.Light) {
sortLights(lights)
table := tablewriter.NewWriter(os.Stdout)
_, rows := makeLightsTable(lights)
for _, v := range rows {
table.Append(v)
}
fmt.Printf("total %d\n", len(lights))
table.SetAlignment(tablewriter.ALIGN_LEFT)
table.SetAutoWrapText(false)
table.SetBorder(false)
table.SetCenterSeparator("")
table.SetColumnSeparator("")
table.SetHeaderLine(false)
table.SetNoWhiteSpace(true)
table.SetRowSeparator("")
table.SetTablePadding(" ")
table.Render()
}
func (tp *tablePrinter) Lights(lights []lifx.Light) {
sortLights(lights)
table := tablewriter.NewWriter(os.Stdout)
hdr, rows := makeLightsTable(lights)
for _, v := range rows {
table.Append(v)
}
table.SetHeader(hdr)
table.Render()
}
func ColorizePower(s string) string {
c := color.New(color.FgRed)
if s == "on" {
@ -69,77 +161,3 @@ func makeResultsTable(results []lifx.Result) (hdr []string, rows [][]string) {
return
}
func PrintLights(lights []lifx.Light) {
sortLights(lights)
table := tablewriter.NewWriter(os.Stdout)
_, rows := makeLightsTable(lights)
for _, v := range rows {
table.Append(v)
}
fmt.Printf("total %d\n", len(lights))
table.SetAlignment(tablewriter.ALIGN_LEFT)
table.SetAutoWrapText(false)
table.SetBorder(false)
table.SetCenterSeparator("")
table.SetColumnSeparator("")
table.SetHeaderLine(false)
table.SetNoWhiteSpace(true)
table.SetRowSeparator("")
table.SetTablePadding(" ")
table.Render()
}
func PrintLightsTable(lights []lifx.Light) {
sortLights(lights)
table := tablewriter.NewWriter(os.Stdout)
hdr, rows := makeLightsTable(lights)
for _, v := range rows {
table.Append(v)
}
table.SetHeader(hdr)
table.Render()
}
func PrintResults(results []lifx.Result) {
sortResults(results)
table := tablewriter.NewWriter(os.Stdout)
_, rows := makeResultsTable(results)
for _, v := range rows {
table.Append(v)
}
fmt.Printf("total %d\n", len(results))
table.SetAlignment(tablewriter.ALIGN_LEFT)
table.SetAutoWrapText(false)
table.SetBorder(false)
table.SetCenterSeparator("")
table.SetColumnSeparator("")
table.SetHeaderLine(false)
table.SetNoWhiteSpace(true)
table.SetRowSeparator("")
table.SetTablePadding(" ")
table.Render()
}
func PrintResultsTable(results []lifx.Result) {
sortResults(results)
table := tablewriter.NewWriter(os.Stdout)
hdr, rows := makeResultsTable(results)
for _, v := range rows {
table.Append(v)
}
table.SetHeader(hdr)
table.Render()
}

View File

@ -51,6 +51,8 @@ func NewCmdSetColor() Command {
}
func SetColorCmd(args CmdArgs) (int, error) {
var p Printer
c := args.Client
state := lifx.State{}
selector := args.Flags.String("selector")
@ -126,12 +128,8 @@ func SetColorCmd(args CmdArgs) (int, error) {
}
if !fast {
switch format {
case "table":
PrintResultsTable(r.Results)
default:
PrintResults(r.Results)
}
p = NewPrinter(format)
p.Results(r.Results)
}
return ExitSuccess, nil

View File

@ -44,6 +44,8 @@ func NewCmdSetState() Command {
}
func SetStateCmd(args CmdArgs) (int, error) {
var p Printer
c := args.Client
state := lifx.State{}
selector := args.Flags.String("selector")
@ -92,12 +94,8 @@ func SetStateCmd(args CmdArgs) (int, error) {
}
if !fast {
switch format {
case "table":
PrintResultsTable(r.Results)
default:
PrintResults(r.Results)
}
p = NewPrinter(format)
p.Results(r.Results)
}
return ExitSuccess, nil

View File

@ -47,6 +47,8 @@ func NewCmdSetWhite() Command {
}
func SetWhiteCmd(args CmdArgs) (int, error) {
var p Printer
c := args.Client
state := lifx.State{}
selector := args.Flags.String("selector")
@ -110,12 +112,8 @@ func SetWhiteCmd(args CmdArgs) (int, error) {
}
if !fast {
switch format {
case "table":
PrintResultsTable(r.Results)
default:
PrintResults(r.Results)
}
p = NewPrinter(format)
p.Results(r.Results)
}
return ExitSuccess, nil

View File

@ -27,6 +27,8 @@ func NewCmdToggle() Command {
}
func ToggleCmd(args CmdArgs) (int, error) {
var p Printer
c := args.Client
duration := args.Flags.Float64("duration")
selector := args.Flags.String("selector")
@ -41,12 +43,8 @@ func ToggleCmd(args CmdArgs) (int, error) {
return ExitFailure, err
}
switch format {
case "table":
PrintResultsTable(r.Results)
default:
PrintResults(r.Results)
}
p = NewPrinter(format)
p.Results(r.Results)
return ExitSuccess, nil
}