about summary refs log tree commit diff
path: root/tools/mpd-stats/internal/scrobbler/scrobbler.go
diff options
context:
space:
mode:
authorFranck Cuny <franck@fcuny.net>2022-10-24 17:32:17 -0700
committerFranck Cuny <franck@fcuny.net>2022-10-24 17:32:17 -0700
commitfe7dfdd250b701177f051ad6cdc3dc68695cbfc4 (patch)
tree99d7cf0230ad604c256df2225c1d32ef4266d4ec /tools/mpd-stats/internal/scrobbler/scrobbler.go
parentfeat(home/packages): install git-broom (diff)
downloadworld-fe7dfdd250b701177f051ad6cdc3dc68695cbfc4.tar.gz
ref(tools/mpd-stats): delete the project
It's been moved to its own repository at
https://github.com/fcuny/mpd-stats

Update the list of repositories managed by terraform.
Diffstat (limited to 'tools/mpd-stats/internal/scrobbler/scrobbler.go')
-rw-r--r--tools/mpd-stats/internal/scrobbler/scrobbler.go118
1 files changed, 0 insertions, 118 deletions
diff --git a/tools/mpd-stats/internal/scrobbler/scrobbler.go b/tools/mpd-stats/internal/scrobbler/scrobbler.go
deleted file mode 100644
index eb4eb9c..0000000
--- a/tools/mpd-stats/internal/scrobbler/scrobbler.go
+++ /dev/null
@@ -1,118 +0,0 @@
-package scrobbler
-
-import (
-	"database/sql"
-	"log"
-	"time"
-
-	"golang.fcuny.net/mpd-stats/internal/mpd"
-)
-
-type Scrobbler struct {
-	player *mpd.Player
-	db     *sql.DB
-}
-
-func NewScrobbler(net string, addr string, dbpath string) (*Scrobbler, error) {
-	p, err := mpd.NewPlayer(net, addr)
-	if err != nil {
-		return nil, err
-	}
-
-	db, err := opendatabase(dbpath)
-	if err != nil {
-		return nil, err
-	}
-
-	s := Scrobbler{
-		player: p,
-		db:     db,
-	}
-
-	return &s, nil
-}
-
-func (s *Scrobbler) Close() error {
-	return s.player.Close()
-}
-
-func (s *Scrobbler) Run() error {
-	var (
-		currentRecord  *Record
-		previousRecord *Record
-	)
-
-	for {
-		e := <-s.player.Watcher.Event
-		if e == mpd.SubSystemPlayer {
-			status, err := s.player.Client.Status()
-			if err != nil {
-				log.Printf("could not read the status: %v", err)
-			}
-
-			if status["state"] == "stop" {
-				if currentRecord != nil {
-					if err := s.update(currentRecord); err != nil {
-						log.Printf("failed to update record %s: %s", currentRecord.Id, err)
-					}
-					currentRecord = nil
-				}
-				continue
-			}
-
-			attrs, err := s.player.Client.CurrentSong()
-			if err != nil {
-				log.Printf("could not get current song: %v", err)
-			}
-
-			if currentRecord == nil {
-				currentRecord, err = NewRecord(attrs)
-				if err != nil {
-					log.Printf("could not create a log: %v", err)
-				}
-				previousRecord = currentRecord
-				if err := s.save(currentRecord); err != nil {
-					log.Printf("failed to insert record %s: %s", currentRecord.Id, err)
-				}
-				continue
-			}
-
-			if !currentRecord.EqualAttrs(attrs) {
-				currentRecord, err = NewRecord(attrs)
-				if err != nil {
-					log.Printf("could not create a log: %v", err)
-				}
-			}
-
-			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)
-			}
-		}
-	}
-}
-
-func (s *Scrobbler) save(record *Record) error {
-	_, err := s.db.Exec("insert into records(id, title, artist, album, duration, playtime, time) values(?, ?, ?, ?, ?, 0, ?)",
-		record.Id,
-		record.Title,
-		record.Artist,
-		record.Album,
-		int(record.Duration.Seconds()),
-		record.Timestamp,
-	)
-	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
-}