Author: Adam <git@apiote.tk>
skip only not watched when skipping all episodes
db/db.go | 37 +++++++++++++++++++++++++++++++++++--
diff --git a/db/db.go b/db/db.go index b9cfb57eb676971a4498e8242cd3991625a90107..2344eefb8ee25d78e4ab61734b117df3737a186f 100644 --- a/db/db.go +++ b/db/db.go @@ -300,10 +300,37 @@ return err } defer db.Close() + tx, err := db.Begin() + if err != nil { + fmt.Fprintf(os.Stderr, "Transaction err %s\n", err) + return err + } + defer tx.Rollback() + + rows, err := tx.Query(`select item_id from experiences where item_type = ? and item_id like ? || '/%' and username = ?`, itemType, itemId, username) + if err != nil { + fmt.Fprintf(os.Stderr, "Select err %v\n", err) + return err + } + defer rows.Close() + + watched := map[string]int{} + for rows.Next() { + var watchedId string + err := rows.Scan(&watchedId) + if err != nil { + fmt.Fprintf(os.Stderr, "Scan err %v\n", err) + return err + } + watched[watchedId]++ + } + for e := 1; e <= episodesNumber; e++ { episodeId := fmt.Sprintf("%s/S00E%02d", itemId, e) - // todo if not watched already - _, err = db.Exec(`insert into experiences values(?, ?, ?, ?)`, username, itemType, episodeId, datetime) + if watched[episodeId] > 0 { + continue + } + _, err = tx.Exec(`insert into experiences values(?, ?, ?, ?)`, username, itemType, episodeId, datetime) if err != nil { if err.Error()[:6] != "UNIQUE" { fmt.Fprintf(os.Stderr, "Insert err %v\n", err) @@ -312,6 +339,12 @@ } else { fmt.Fprintf(os.Stderr, "WARNING: Insert err: Unique constraint violation\n") } } + } + + err = tx.Commit() + if err != nil { + fmt.Fprintf(os.Stderr, "Commit err %v\n", err) + return err } return nil