Adds list-categories command
This commit is contained in:
parent
b7d8b94d46
commit
8d7decd3f7
5 changed files with 61 additions and 0 deletions
|
@ -5,15 +5,27 @@ import (
|
|||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
miniflux "miniflux.app/client"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
MinifluxURL string `json:"miniflux_url"`
|
||||
MinifluxUsername string `json:"miniflux_username"`
|
||||
MinifluxPassword string `json:"miniflux_password"`
|
||||
MinifluxAPI string `json:"miniflux_api"`
|
||||
MinifluxCategory string `json:"miniflux_category"`
|
||||
}
|
||||
|
||||
func (c *Config) IsValid() error {
|
||||
if c.MinifluxURL == "" {
|
||||
return fmt.Errorf("miniflux_url is required")
|
||||
}
|
||||
|
||||
if c.MinifluxAPI == "" && (c.MinifluxUsername == "" || c.MinifluxPassword == "") {
|
||||
return fmt.Errorf("either miniflux_api or miniflux_username and miniflux_password need to be set")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -31,6 +43,21 @@ func ReadConfig(name string) (*Config, error) {
|
|||
return &cfg, nil
|
||||
}
|
||||
|
||||
func createClient(cfg *Config) (*miniflux.Client, error) {
|
||||
var client *miniflux.Client
|
||||
if cfg.MinifluxAPI != "" {
|
||||
client = miniflux.New(cfg.MinifluxURL, cfg.MinifluxAPI)
|
||||
} else {
|
||||
client = miniflux.New(cfg.MinifluxURL, cfg.MinifluxUsername, cfg.MinifluxPassword)
|
||||
}
|
||||
|
||||
if _, err := client.Me(); err != nil {
|
||||
return nil, fmt.Errorf("cannot get \"me\" with newly created client: %w", err)
|
||||
}
|
||||
|
||||
return client, nil
|
||||
}
|
||||
|
||||
func checkErr(err error) {
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "error: %s\n", err)
|
||||
|
@ -38,8 +65,25 @@ func checkErr(err error) {
|
|||
}
|
||||
}
|
||||
|
||||
func listCategories(cfg *Config, client *miniflux.Client) error {
|
||||
categories, err := client.Categories()
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot fetch categories: %w", err)
|
||||
}
|
||||
|
||||
if len(categories) != 0 {
|
||||
fmt.Println("Category list")
|
||||
}
|
||||
for _, c := range categories {
|
||||
fmt.Printf("- %s\n", c.Title)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
cfgFlag := flag.String("config", "bookworm.json", "path to the configuration file")
|
||||
listCategoriesFlag := flag.Bool("list-categories", false, "lists the categories of the remote Miniflux instance")
|
||||
flag.Parse()
|
||||
|
||||
cfg, err := ReadConfig(*cfgFlag)
|
||||
|
@ -47,4 +91,13 @@ func main() {
|
|||
|
||||
cErr := cfg.IsValid()
|
||||
checkErr(cErr)
|
||||
|
||||
client, cliErr := createClient(cfg)
|
||||
checkErr(cliErr)
|
||||
|
||||
if *listCategoriesFlag {
|
||||
listCategories(cfg, client)
|
||||
}
|
||||
|
||||
// download feeds (filter by category if specified)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue