amuse.git

commit 9b19741777481a190e46afc473fbb3f890711183

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