navidrome/itunesbridge/itunes.go

84 lines
2.6 KiB
Go
Raw Normal View History

package itunesbridge
import (
"fmt"
"time"
)
type ItunesControl interface {
MarkAsPlayed(trackId string, playDate time.Time) error
MarkAsSkipped(trackId string, skipDate time.Time) error
SetTrackLoved(trackId string, loved bool) error
SetAlbumLoved(trackId string, loved bool) error
SetTrackRating(trackId string, rating int) error
SetAlbumRating(trackId string, rating int) error
}
func NewItunesControl() ItunesControl {
return &itunesControl{}
}
type itunesControl struct{}
func (c *itunesControl) MarkAsPlayed(trackId string, playDate time.Time) error {
script := Script{fmt.Sprintf(
`set theTrack to the first item of (every track whose persistent ID is equal to "%s")`, trackId),
`set c to (get played count of theTrack)`,
`tell theTrack`,
`set played count to c + 1`,
fmt.Sprintf(`set played date to date("%s")`, c.formatDateTime(playDate)),
`end tell`}
return script.Run()
}
func (c *itunesControl) MarkAsSkipped(trackId string, skipDate time.Time) error {
2016-03-17 23:58:09 +01:00
script := Script{fmt.Sprintf(
`set theTrack to the first item of (every track whose persistent ID is equal to "%s")`, trackId),
2016-03-17 23:58:09 +01:00
`set c to (get skipped count of theTrack)`,
`tell theTrack`,
`set skipped count to c + 1`,
fmt.Sprintf(`set skipped date to date("%s")`, c.formatDateTime(skipDate)),
`end tell`}
return script.Run()
}
func (c *itunesControl) SetTrackLoved(trackId string, loved bool) error {
script := Script{fmt.Sprintf(
`set theTrack to the first item of (every track whose persistent ID is equal to "%s")`, trackId),
`tell theTrack`,
fmt.Sprintf(`set loved to %v`, loved),
`end tell`}
return script.Run()
}
func (c *itunesControl) SetAlbumLoved(trackId string, loved bool) error {
script := Script{fmt.Sprintf(
`set theTrack to the first item of (every track whose persistent ID is equal to "%s")`, trackId),
`tell theTrack`,
fmt.Sprintf(`set album loved to %v`, loved),
`end tell`}
return script.Run()
}
func (c *itunesControl) SetTrackRating(trackId string, rating int) error {
script := Script{fmt.Sprintf(
`set theTrack to the first item of (every track whose persistent ID is equal to "%s")`, trackId),
`tell theTrack`,
fmt.Sprintf(`set rating to %d`, rating),
`end tell`}
return script.Run()
}
func (c *itunesControl) SetAlbumRating(trackId string, rating int) error {
script := Script{fmt.Sprintf(
`set theTrack to the first item of (every track whose persistent ID is equal to "%s")`, trackId),
`tell theTrack`,
fmt.Sprintf(`set album rating to %d`, rating),
`end tell`}
return script.Run()
}
func (c *itunesControl) formatDateTime(d time.Time) string {
return d.Format("Jan _2, 2006 3:04PM")
}