Adds list-categories command

This commit is contained in:
Miguel de la Cruz 2024-05-28 20:47:12 +02:00
parent b7d8b94d46
commit 8d7decd3f7
5 changed files with 61 additions and 0 deletions

View file

@ -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)
}