intake/cmd/feed.go

80 lines
1.7 KiB
Go
Raw Normal View History

2025-01-17 15:05:57 +00:00
package cmd
import (
"fmt"
"log"
"github.com/Jaculabilis/intake/core"
"github.com/spf13/cobra"
)
var feedCmd = &cobra.Command{
Use: "feed",
2025-01-21 16:42:59 +00:00
Short: "Display the item feed",
2025-01-23 21:22:38 +00:00
Long: fmt.Sprintf(`Display the intake item feed in various formats.
2025-01-17 15:05:57 +00:00
The default format is "headlines".
2025-01-23 21:22:38 +00:00
%s`, makeFormatHelpText()),
2025-01-17 15:05:57 +00:00
Run: func(cmd *cobra.Command, args []string) {
2025-01-30 15:54:13 +00:00
feed(
stringArg(cmd, "format"),
stringArg(cmd, "source"),
stringArg(cmd, "channel"),
boolArg(cmd, "all"),
)
2025-01-17 15:05:57 +00:00
},
}
func init() {
rootCmd.AddCommand(feedCmd)
2025-01-30 15:54:13 +00:00
feedCmd.Flags().StringP("format", "f", "headlines", "Feed format")
feedCmd.Flags().StringP("source", "s", "", "Limit to items from source")
feedCmd.Flags().StringP("channel", "c", "", "Limit to items from channel")
2025-01-17 15:05:57 +00:00
feedCmd.MarkFlagsMutuallyExclusive("source", "channel")
2025-01-30 15:54:13 +00:00
feedCmd.Flags().Bool("all", false, "Show inactive items")
2025-01-17 15:05:57 +00:00
}
2025-01-30 15:54:13 +00:00
func feed(
format string,
source string,
channel string,
showInactive bool,
) {
formatter := formatAs(format)
2025-01-17 15:05:57 +00:00
2025-01-23 16:36:25 +00:00
db := openAndMigrateDb()
2025-01-17 15:05:57 +00:00
var items []core.Item
2025-01-23 21:22:38 +00:00
var err error
2025-01-30 15:54:13 +00:00
if source != "" {
if exists, err := core.SourceExists(db, source); !exists || err != nil {
log.Fatalf("error: no such source %s", source)
}
2025-01-30 15:54:13 +00:00
if showInactive {
items, err = core.GetAllItemsForSource(db, source)
} else {
2025-01-30 15:54:13 +00:00
items, err = core.GetActiveItemsForSource(db, source)
}
2025-01-17 15:05:57 +00:00
if err != nil {
2025-01-30 15:54:13 +00:00
log.Fatalf("error: failed to fetch items from %s:, %v", source, err)
2025-01-17 15:05:57 +00:00
}
2025-01-30 15:54:13 +00:00
} else if channel != "" {
2025-01-17 15:05:57 +00:00
log.Fatal("error: unimplemented")
} else {
2025-01-30 15:54:13 +00:00
if showInactive {
items, err = core.GetAllItems(db)
} else {
items, err = core.GetAllActiveItems(db)
}
2025-01-17 15:05:57 +00:00
if err != nil {
log.Fatalf("error: failed to fetch items: %v", err)
2025-01-17 15:05:57 +00:00
}
}
for _, item := range items {
fmt.Println(formatter(item))
2025-01-17 15:05:57 +00:00
}
}