Updated all import/export interfaces

This commit is contained in:
Philipp Wolfer 2023-11-15 19:24:12 +01:00
parent 729a3d0ed0
commit ab04eb1123
No known key found for this signature in database
GPG key ID: 8FDF744D4919943B
12 changed files with 247 additions and 167 deletions

View file

@ -23,6 +23,7 @@ package scrobblerlog
import (
"os"
"sort"
"time"
"github.com/spf13/viper"
@ -40,31 +41,36 @@ func (b ScrobblerLogBackend) FromConfig(config *viper.Viper) models.Backend {
return b
}
func (b ScrobblerLogBackend) ExportListens(oldestTimestamp time.Time) ([]models.Listen, error) {
func (b ScrobblerLogBackend) ExportListens(oldestTimestamp time.Time, results chan models.ListensResult) {
defer close(results)
file, err := os.Open(b.filePath)
if err != nil {
return nil, err
results <- models.ListensResult{Error: err}
return
}
defer file.Close()
result, err := Parse(file, b.includeSkipped)
log, err := Parse(file, b.includeSkipped)
if err != nil {
return nil, err
results <- models.ListensResult{Error: err}
close(results)
return
}
return result.Listens, nil
listens := log.Listens.NewerThan(oldestTimestamp)
sort.Sort(listens)
results <- models.ListensResult{Listens: listens}
}
func (b ScrobblerLogBackend) ImportListens(listens []models.Listen, oldestTimestamp time.Time) (models.ImportResult, error) {
result := models.ImportResult{
TotalCount: len(listens),
func (b ScrobblerLogBackend) ImportListens(results chan models.ListensResult, oldestTimestamp time.Time) (models.ImportResult, error) {
importResult := models.ImportResult{
LastTimestamp: oldestTimestamp,
}
file, err := os.Create(b.filePath)
if err != nil {
return result, err
return importResult, err
}
defer file.Close()
@ -72,16 +78,27 @@ func (b ScrobblerLogBackend) ImportListens(listens []models.Listen, oldestTimest
log := ScrobblerLog{
Timezone: "UNKNOWN",
Client: "Rockbox unknown $Revision$",
Listens: listens,
}
lastTimestamp, err := Write(file, &log)
err = WriteHeader(file, &log)
if err != nil {
return result, err
return importResult, err
}
result.LastTimestamp = lastTimestamp
result.ImportCount = len(listens)
return result, nil
for result := range results {
if result.Error != nil {
return importResult, result.Error
}
importResult.TotalCount += len(result.Listens)
lastTimestamp, err := Write(file, result.Listens)
if err != nil {
return importResult, err
}
importResult.UpdateTimestamp(lastTimestamp)
importResult.ImportCount += len(result.Listens)
}
return importResult, nil
}