about summary refs log tree commit diff
path: root/tools/mpd-stats/internal/scrobbler
diff options
context:
space:
mode:
Diffstat (limited to 'tools/mpd-stats/internal/scrobbler')
-rw-r--r--tools/mpd-stats/internal/scrobbler/db.go1
-rw-r--r--tools/mpd-stats/internal/scrobbler/scrobbler.go16
2 files changed, 16 insertions, 1 deletions
diff --git a/tools/mpd-stats/internal/scrobbler/db.go b/tools/mpd-stats/internal/scrobbler/db.go
index a788b4c..5f80aa4 100644
--- a/tools/mpd-stats/internal/scrobbler/db.go
+++ b/tools/mpd-stats/internal/scrobbler/db.go
@@ -24,6 +24,7 @@ func initdb(dbpath string) error {
 				artist text,
                 album text,
                 duration int,
+                playtime int,
                 time timestamp
 			);`
 
diff --git a/tools/mpd-stats/internal/scrobbler/scrobbler.go b/tools/mpd-stats/internal/scrobbler/scrobbler.go
index e16458c..df8e46a 100644
--- a/tools/mpd-stats/internal/scrobbler/scrobbler.go
+++ b/tools/mpd-stats/internal/scrobbler/scrobbler.go
@@ -3,6 +3,7 @@ package scrobbler
 import (
 	"database/sql"
 	"log"
+	"time"
 
 	"golang.fcuny.net/mpd-stats/internal/mpd"
 )
@@ -67,6 +68,9 @@ func (s *Scrobbler) Run() error {
 			}
 
 			if currentRecord.Id != previousRecord.Id {
+				if err := s.update(previousRecord); err != nil {
+					log.Printf("failed to update record %s: %s", previousRecord.Id, err)
+				}
 				previousRecord = currentRecord
 				s.save(currentRecord)
 			}
@@ -75,7 +79,7 @@ func (s *Scrobbler) Run() error {
 }
 
 func (s *Scrobbler) save(record *Record) error {
-	_, err := s.db.Exec("insert into records(id, title, artist, album, duration, time) values(?, ?, ?, ?, ?, ?)",
+	_, err := s.db.Exec("insert into records(id, title, artist, album, duration, playtime, time) values(?, ?, ?, ?, ?, 0, ?)",
 		record.Id,
 		record.Title,
 		record.Artist,
@@ -85,3 +89,13 @@ func (s *Scrobbler) save(record *Record) error {
 	)
 	return err
 }
+
+func (s *Scrobbler) update(record *Record) error {
+	tnow := time.Now()
+	playtime := tnow.Sub(record.Timestamp).Seconds()
+	_, err := s.db.Exec("update records set playtime = ? where id = ?",
+		int(playtime),
+		record.Id,
+	)
+	return err
+}