diff --git a/TODO.md b/TODO.md index 408799f..3cd3a52 100644 --- a/TODO.md +++ b/TODO.md @@ -26,9 +26,9 @@ * Podcasts ## 1.0 +* ✓ concurrent processing * Review all errors wrapped properly * Change log from byte to string -* concurrent processing * Config validation * Cron spec * Name - No spaces diff --git a/app/db.go b/app/db.go index e4b37c1..faf7b1e 100644 --- a/app/db.go +++ b/app/db.go @@ -84,33 +84,36 @@ func (d *db) Filter(entries []parser.FeedEntry) ([]parser.FeedEntry, error) { } func (d *db) Save(records []Record) error { + if len(records) == 0 { + return nil + } + f, err := os.OpenFile(d.dbPath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { return err } - defer func() { - f.Sync() - f.Close() - }() + defer f.Close() + csvw := csv.NewWriter(f) - if len(d.seenLinks) == 0 { //New file, write header + defer csvw.Flush() + + if d.IsNewFeed() { csvw.Write([]string{ - "Date", - "Link", - "Status", - "Filter", - "Content", + /* 1 */ "Date", + /* 2 */ "Link", + /* 3 */ "Status", + /* 4 */ "Filter", + /* 5 */ "Content", }) } for _, r := range records { csvw.Write([]string{ - r.Time.Format(TimeFormat), - r.FeedEntry.Link, - string(r.Status), - r.Filter, - fmt.Sprintf("%s", strings.ReplaceAll(r.FeedEntry.Content, "\n", " ")), + /* 1 */ r.Time.Format(TimeFormat), + /* 2 */ r.FeedEntry.Link, + /* 3 */ string(r.Status), + /* 4 */ r.Filter, + /* 5 */ fmt.Sprintf("%s", strings.ReplaceAll(r.FeedEntry.Content, "\n", " ")), }) } - csvw.Flush() return nil }