package cmd import ( "fmt" "log" "github.com/Jaculabilis/intake/core" "github.com/spf13/cobra" ) var feedCmd = &cobra.Command{ Use: "feed", Short: "Display the item feed", Long: fmt.Sprintf(`Display the intake item feed in various formats. The default format is "headlines". %s`, makeFormatHelpText()), Run: func(cmd *cobra.Command, args []string) { feed( stringArg(cmd, "format"), stringArg(cmd, "source"), stringArg(cmd, "channel"), boolArg(cmd, "all"), ) }, } func init() { rootCmd.AddCommand(feedCmd) 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") feedCmd.MarkFlagsMutuallyExclusive("source", "channel") feedCmd.Flags().Bool("all", false, "Show inactive items") } func feed( format string, source string, channel string, showInactive bool, ) { formatter := formatAs(format) db := openAndMigrateDb() var items []core.Item var err error if source != "" { if exists, err := core.SourceExists(db, source); !exists || err != nil { log.Fatalf("error: no such source %s", source) } if showInactive { items, err = core.GetAllItemsForSource(db, source, 0, core.DefaultFeedLimit) } else { items, err = core.GetActiveItemsForSource(db, source, 0, core.DefaultFeedLimit) } if err != nil { log.Fatalf("error: failed to fetch items from %s:, %v", source, err) } } else if channel != "" { if showInactive { items, err = core.GetAllItemsForChannel(db, channel, 0, core.DefaultFeedLimit) } else { items, err = core.GetActiveItemsForChannel(db, channel, 0, core.DefaultFeedLimit) } if err != nil { log.Fatalf("error: failed to fetch items from %s:, %v", channel, err) } } else { if showInactive { items, err = core.GetAllItems(db, 0, core.DefaultFeedLimit) } else { items, err = core.GetAllActiveItems(db, 0, core.DefaultFeedLimit) } if err != nil { log.Fatalf("error: failed to fetch items: %v", err) } } for _, item := range items { fmt.Println(formatter(item)) } }