Moved scrobblerlog parsing to separate package

This commit is contained in:
Philipp Wolfer 2025-04-29 08:36:34 +02:00
parent 69665bc286
commit aeb3a56982
No known key found for this signature in database
GPG key ID: 8FDF744D4919943B
3 changed files with 74 additions and 56 deletions

View file

@ -25,6 +25,7 @@ import (
"go.uploadedlobster.com/scotty/internal/config"
"go.uploadedlobster.com/scotty/internal/i18n"
"go.uploadedlobster.com/scotty/internal/models"
"go.uploadedlobster.com/scotty/pkg/scrobblerlog"
)
type ScrobblerLogBackend struct {
@ -32,7 +33,7 @@ type ScrobblerLogBackend struct {
includeSkipped bool
append bool
file *os.File
log ScrobblerLog
log scrobblerlog.ScrobblerLog
}
func (b *ScrobblerLogBackend) Name() string { return "scrobbler-log" }
@ -58,9 +59,9 @@ func (b *ScrobblerLogBackend) FromConfig(config *config.ServiceConfig) models.Ba
b.filePath = config.GetString("file-path")
b.includeSkipped = config.GetBool("include-skipped", false)
b.append = config.GetBool("append", true)
b.log = ScrobblerLog{
Timezone: "UNKNOWN",
Client: "Rockbox unknown $Revision$",
b.log = scrobblerlog.ScrobblerLog{
TZ: scrobblerlog.TZ_UTC,
Client: "Rockbox unknown $Revision$",
}
return b
}
@ -88,7 +89,7 @@ func (b *ScrobblerLogBackend) StartImport() error {
} else {
// Verify existing file is a scrobbler log
reader := bufio.NewReader(file)
if err = ReadHeader(reader, &b.log); err != nil {
if err = b.log.ReadHeader(reader); err != nil {
file.Close()
return err
}
@ -99,7 +100,7 @@ func (b *ScrobblerLogBackend) StartImport() error {
}
if !b.append {
if err = WriteHeader(file, &b.log); err != nil {
if err = b.log.WriteHeader(file); err != nil {
file.Close()
return err
}
@ -124,21 +125,21 @@ func (b *ScrobblerLogBackend) ExportListens(oldestTimestamp time.Time, results c
defer file.Close()
log, err := Parse(file, b.includeSkipped)
err = b.log.Parse(file, b.includeSkipped)
if err != nil {
progress <- models.Progress{}.Complete()
results <- models.ListensResult{Error: err}
return
}
listens := log.Listens.NewerThan(oldestTimestamp)
listens := b.log.Listens.NewerThan(oldestTimestamp)
sort.Sort(listens)
progress <- models.Progress{Elapsed: int64(len(listens))}.Complete()
results <- models.ListensResult{Items: listens}
}
func (b *ScrobblerLogBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
lastTimestamp, err := Write(b.file, export.Items)
lastTimestamp, err := b.log.Append(b.file, export.Items)
if err != nil {
return importResult, err
}