Use ExtendTrackMetadata also for LB API loves export

This commit is contained in:
Philipp Wolfer 2025-05-24 17:08:15 +02:00
parent f70b6248b6
commit ef6780701a
No known key found for this signature in database
GPG key ID: 8FDF744D4919943B

View file

@ -32,6 +32,8 @@ import (
"go.uploadedlobster.com/scotty/internal/version" "go.uploadedlobster.com/scotty/internal/version"
) )
const lovesBatchSize = listenbrainz.MaxItemsPerGet
type ListenBrainzApiBackend struct { type ListenBrainzApiBackend struct {
client listenbrainz.Client client listenbrainz.Client
mbClient musicbrainzws2.Client mbClient musicbrainzws2.Client
@ -229,7 +231,8 @@ func (b *ListenBrainzApiBackend) ExportLoves(ctx context.Context, oldestTimestam
func (b *ListenBrainzApiBackend) exportLoves(ctx context.Context, oldestTimestamp time.Time, results chan models.LovesResult) { func (b *ListenBrainzApiBackend) exportLoves(ctx context.Context, oldestTimestamp time.Time, results chan models.LovesResult) {
offset := 0 offset := 0
defer close(results) defer close(results)
loves := make(models.LovesList, 0, 2*listenbrainz.MaxItemsPerGet) allLoves := make(models.LovesList, 0, 2*listenbrainz.MaxItemsPerGet)
batch := make([]listenbrainz.Feedback, 0, lovesBatchSize)
out: out:
for { for {
@ -245,31 +248,45 @@ out:
} }
for _, feedback := range result.Feedback { for _, feedback := range result.Feedback {
if time.Unix(feedback.Created, 0).After(oldestTimestamp) {
batch = append(batch, feedback)
} else {
break out
}
if len(batch) >= lovesBatchSize {
// Missing track metadata indicates that the recording MBID is no // Missing track metadata indicates that the recording MBID is no
// longer available and might have been merged. Try fetching details // longer available and might have been merged. Try fetching details
// from MusicBrainz. // from MusicBrainz.
if feedback.TrackMetadata == nil { lovesBatch, err := ExtendTrackMetadata(ctx, &b.client, &b.mbClient, &batch)
track, err := LookupRecording(ctx, &b.mbClient, feedback.RecordingMBID) if err != nil {
if err == nil { results <- models.LovesResult{Error: err}
feedback.TrackMetadata = track return
}
} }
love := AsLove(feedback) for _, l := range lovesBatch {
if love.Created.After(oldestTimestamp) { allLoves = append(allLoves, l)
loves = append(loves, love) }
} else {
break out
} }
} }
offset += listenbrainz.MaxItemsPerGet offset += listenbrainz.MaxItemsPerGet
} }
sort.Sort(loves) lovesBatch, err := ExtendTrackMetadata(ctx, &b.client, &b.mbClient, &batch)
if err != nil {
results <- models.LovesResult{Error: err}
return
}
for _, l := range lovesBatch {
allLoves = append(allLoves, l)
}
sort.Sort(allLoves)
results <- models.LovesResult{ results <- models.LovesResult{
Total: len(loves), Total: len(allLoves),
Items: loves, Items: allLoves,
} }
} }