diff --git a/go.mod b/go.mod index 75dfe0c..4e8fd28 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/celogeek/piwigo-cli go 1.17 require ( + github.com/grokify/html-strip-tags-go v0.0.1 // indirect github.com/jedib0t/go-pretty/v6 v6.2.4 // indirect github.com/jessevdk/go-flags v1.5.0 // indirect github.com/mattn/go-runewidth v0.0.9 // indirect diff --git a/go.sum b/go.sum index f9b53c7..4022a11 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASxc7x3E= +github.com/grokify/html-strip-tags-go v0.0.1 h1:0fThFwLbW7P/kOiTBs03FsJSV9RM2M/Q/MOnCQxKMo0= +github.com/grokify/html-strip-tags-go v0.0.1/go.mod h1:2Su6romC5/1VXOQMaWL2yb618ARB8iVo6/DR99A6d78= github.com/jedib0t/go-pretty/v6 v6.2.4 h1:wdaj2KHD2W+mz8JgJ/Q6L/T5dB7kyqEFI16eLq7GEmk= github.com/jedib0t/go-pretty/v6 v6.2.4/go.mod h1:+nE9fyyHGil+PuISTCrp7avEdo6bqoMwqZnuiK2r2a0= github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= diff --git a/internal/piwigocli/categories_list.go b/internal/piwigocli/categories_list.go index 56be92e..53dcfc4 100644 --- a/internal/piwigocli/categories_list.go +++ b/internal/piwigocli/categories_list.go @@ -14,10 +14,10 @@ type CategoriesListCommand struct { } type Category struct { - Id int - Name string - FullName string - ImagesCount int + Id int `json:"id,string"` + Name string `json:"name"` + FullName string `json:"fullname"` + ImagesCount int `json:"nb_images,string"` } func getInt(n interface{}) (r int) { diff --git a/internal/piwigocli/reflexion.go b/internal/piwigocli/reflexion.go new file mode 100644 index 0000000..fb49cbf --- /dev/null +++ b/internal/piwigocli/reflexion.go @@ -0,0 +1,12 @@ +package piwigocli + +type ReflexionGroup struct { + MethodList ReflexionMethodListCommand `command:"method-list" description:"List of available methods"` + MethodDetails ReflexionMethodDetailsCommand `command:"method-details" description:"Details of a method"` +} + +var reflexionGroup ReflexionGroup + +func init() { + parser.AddCommand("reflexion", "Reflexion management", "", &reflexionGroup) +} diff --git a/internal/piwigocli/reflexion_method_details.go b/internal/piwigocli/reflexion_method_details.go new file mode 100644 index 0000000..c7f08d9 --- /dev/null +++ b/internal/piwigocli/reflexion_method_details.go @@ -0,0 +1,52 @@ +package piwigocli + +import ( + "net/url" + "os" + + "github.com/celogeek/piwigo-cli/internal/piwigo" + strip "github.com/grokify/html-strip-tags-go" + "github.com/jedib0t/go-pretty/v6/table" +) + +type ReflexionMethodDetailsCommand struct { + MethodName string `short:"m" long:"method-name" description:"Method name to details"` +} + +type ReflexionMethodDetailsResult struct { + Description string `json:"description"` +} + +func (c *ReflexionMethodDetailsCommand) Execute(args []string) error { + p := piwigo.Piwigo{} + if err := p.LoadConfig(); err != nil { + return err + } + + _, err := p.Login() + if err != nil { + return err + } + + var result ReflexionMethodDetailsResult + + if err := p.Post("reflection.getMethodDetails", &url.Values{ + "methodName": []string{c.MethodName}, + }, &result); err != nil { + return err + } + + desc := strip.StripTags(result.Description) + + t := table.NewWriter() + t.AppendRow(table.Row{"Method", c.MethodName}) + t.AppendSeparator() + t.AppendRow(table.Row{"Description", desc}) + t.AppendSeparator() + t.AppendRow(table.Row{"Parameters"}) + t.SetOutputMirror(os.Stdout) + t.SetStyle(table.StyleLight) + t.Render() + + return nil +} diff --git a/internal/piwigocli/reflexion_method_list.go b/internal/piwigocli/reflexion_method_list.go new file mode 100644 index 0000000..36d733a --- /dev/null +++ b/internal/piwigocli/reflexion_method_list.go @@ -0,0 +1,46 @@ +package piwigocli + +import ( + "os" + + "github.com/celogeek/piwigo-cli/internal/piwigo" + "github.com/jedib0t/go-pretty/v6/table" +) + +type ReflexionMethodListCommand struct{} + +type ReflexionMethodListResult struct { + Methods []string `json:"methods"` +} + +func (c *ReflexionMethodListCommand) Execute(args []string) error { + p := piwigo.Piwigo{} + if err := p.LoadConfig(); err != nil { + return err + } + + _, err := p.Login() + if err != nil { + return err + } + + var result ReflexionMethodListResult + + if err := p.Post("reflection.getMethodList", nil, &result); err != nil { + return err + } + + t := table.NewWriter() + + t.AppendHeader(table.Row{"Methods"}) + for _, method := range result.Methods { + t.AppendRow(table.Row{ + method, + }) + } + t.SetOutputMirror(os.Stdout) + t.SetStyle(table.StyleLight) + t.Render() + + return nil +}