diff --git a/cmd/list.go b/cmd/list.go index abfe39b..575d6ae 100644 --- a/cmd/list.go +++ b/cmd/list.go @@ -17,7 +17,9 @@ along with this program. If not, see . package cmd import ( + "fmt" "freed/internal" + "strconv" "github.com/pterm/pterm" "github.com/spf13/cobra" @@ -32,7 +34,14 @@ var listCmd = &cobra.Command{ Example: `freed list freed ls`, Run: func(cmd *cobra.Command, args []string) { - tableData, err := internal.GetAllFeedsAsTable() + feeds, err := internal.GetAllFeeds() + + if err != nil { + pterm.Error.Printf("Error getting feeds: %v\n", err) + return + } + + tableData, err := mapFeedsToPtermTable(*feeds) if err != nil { pterm.Error.Printf("Error listing feeds: %v\n", err) @@ -56,3 +65,25 @@ func init() { // is called directly, e.g.: // listCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") } + +func mapFeedsToPtermTable(feeds []internal.Feed) (pterm.TableData, error) { + tableData := pterm.TableData{} + headerRow := []string{"ID", "Name", "Url", "Item Count", "Created At", "Last Synced At"} + + tableData = append(tableData, headerRow) + + for _, feed := range feeds { + rowData := []string{ + fmt.Sprintf("[%d]", feed.ID), + feed.Name, + feed.Url, + strconv.Itoa(feed.ArticleCount), + pterm.Gray(feed.CreatedAt), + pterm.Gray(feed.LastSyncedAt), + } + + tableData = append(tableData, rowData) + } + + return tableData, nil +} diff --git a/internal/feed.go b/internal/feed.go index dea3704..9d14f8b 100644 --- a/internal/feed.go +++ b/internal/feed.go @@ -12,6 +12,15 @@ import ( "github.com/pterm/pterm" ) +type Feed struct { + ID int64 + Name string + Url string + CreatedAt *time.Time + LastSyncedAt *time.Time + ArticleCount int +} + func AddFeed(feedUrl string) (string, int, error) { if _, err := url.ParseRequestURI(feedUrl); err != nil { return "", 0, fmt.Errorf("The given URL does not seem to be valid: %s", err) @@ -57,32 +66,29 @@ func AddFeed(feedUrl string) (string, int, error) { return feed.Title, len(articles), nil } -func GetAllFeedsAsTable() (pterm.TableData, error) { - feeds, err := database.FindAllFeedsWithArticleCount() +func GetAllFeeds() (*[]Feed, error) { + feedEntities, err := database.FindAllFeedsWithArticleCount() if err != nil { return nil, err } - tableData := pterm.TableData{} - headerRow := []string{"ID", "Name", "Url", "Item Count", "Created At", "Last Synced At"} + var feeds []Feed - tableData = append(tableData, headerRow) - - for _, feed := range *feeds { - rowData := []string{ - fmt.Sprintf("[%d]", feed.ID), - feed.Name, - feed.Url, - strconv.Itoa(feed.ArticleCount), - pterm.Gray(feed.CreatedAt), - pterm.Gray(feed.LastSyncedAt), + for _, feedEntity := range *feedEntities { + feed := &Feed{ + ID: feedEntity.ID, + Name: feedEntity.Name, + Url: feedEntity.Url, + CreatedAt: feedEntity.CreatedAt, + LastSyncedAt: feedEntity.LastSyncedAt, + ArticleCount: feedEntity.ArticleCount, } - tableData = append(tableData, rowData) + feeds = append(feeds, *feed) } - return tableData, nil + return &feeds, nil } func SyncFeeds() error {