aboutsummaryrefslogtreecommitdiff
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)
downloadinfra-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
-}