Unified export result types

This commit is contained in:
Philipp Wolfer 2023-12-03 16:56:12 +01:00
parent a4a05ea047
commit ca3b8492b0
No known key found for this signature in database
GPG key ID: 8FDF744D4919943B
12 changed files with 35 additions and 37 deletions

View file

@ -113,7 +113,7 @@ out:
} }
sort.Sort(listens) sort.Sort(listens)
results <- models.ListensResult{Listens: listens, Total: totalCount} results <- models.ListensResult{Items: listens, Total: totalCount}
p.Elapsed += int64(count) p.Elapsed += int64(count)
progress <- p progress <- p
@ -180,7 +180,7 @@ out:
} }
sort.Sort(loves) sort.Sort(loves)
results <- models.LovesResult{Loves: loves, Total: totalCount} results <- models.LovesResult{Items: loves, Total: totalCount}
p.Elapsed += int64(count) p.Elapsed += int64(count)
progress <- p progress <- p

View file

@ -33,7 +33,7 @@ func (b *DumpBackend) StartImport() error { return nil }
func (b *DumpBackend) FinishImport() error { return nil } func (b *DumpBackend) FinishImport() error { return nil }
func (b *DumpBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) { func (b *DumpBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
for _, listen := range export.Listens { for _, listen := range export.Items {
importResult.UpdateTimestamp(listen.ListenedAt) importResult.UpdateTimestamp(listen.ListenedAt)
importResult.ImportCount += 1 importResult.ImportCount += 1
progress <- models.Progress{}.FromImportResult(importResult) progress <- models.Progress{}.FromImportResult(importResult)
@ -45,7 +45,7 @@ func (b *DumpBackend) ImportListens(export models.ListensResult, importResult mo
} }
func (b *DumpBackend) ImportLoves(export models.LovesResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) { func (b *DumpBackend) ImportLoves(export models.LovesResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
for _, love := range export.Loves { for _, love := range export.Items {
importResult.UpdateTimestamp(love.Created) importResult.UpdateTimestamp(love.Created)
importResult.ImportCount += 1 importResult.ImportCount += 1
progress <- models.Progress{}.FromImportResult(importResult) progress <- models.Progress{}.FromImportResult(importResult)

View file

@ -88,7 +88,7 @@ out:
sort.Sort(listens) sort.Sort(listens)
progress <- p.Complete() progress <- p.Complete()
results <- models.ListensResult{Listens: listens} results <- models.ListensResult{Items: listens}
} }
func (b *FunkwhaleApiBackend) ExportLoves(oldestTimestamp time.Time, results chan models.LovesResult, progress chan models.Progress) { func (b *FunkwhaleApiBackend) ExportLoves(oldestTimestamp time.Time, results chan models.LovesResult, progress chan models.Progress) {
@ -137,7 +137,7 @@ out:
sort.Sort(loves) sort.Sort(loves)
progress <- p.Complete() progress <- p.Complete()
results <- models.LovesResult{Loves: loves} results <- models.LovesResult{Items: loves}
} }
func (l Listening) AsListen() models.Listen { func (l Listening) AsListen() models.Listen {

View file

@ -52,7 +52,7 @@ func (b *JSPFBackend) FinishImport() error {
} }
func (b *JSPFBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) { func (b *JSPFBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
for _, listen := range export.Listens { for _, listen := range export.Items {
track := listenAsTrack(listen) track := listenAsTrack(listen)
b.tracks = append(b.tracks, track) b.tracks = append(b.tracks, track)
importResult.ImportCount += 1 importResult.ImportCount += 1
@ -64,7 +64,7 @@ func (b *JSPFBackend) ImportListens(export models.ListensResult, importResult mo
} }
func (b *JSPFBackend) ImportLoves(export models.LovesResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) { func (b *JSPFBackend) ImportLoves(export models.LovesResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
for _, love := range export.Loves { for _, love := range export.Items {
track := loveAsTrack(love) track := loveAsTrack(love)
b.tracks = append(b.tracks, track) b.tracks = append(b.tracks, track)
importResult.ImportCount += 1 importResult.ImportCount += 1

View file

@ -146,7 +146,7 @@ out:
page -= 1 page -= 1
results <- models.ListensResult{ results <- models.ListensResult{
Listens: listens, Items: listens,
Total: result.Total, Total: result.Total,
OldestTimestamp: minTime, OldestTimestamp: minTime,
} }
@ -160,9 +160,9 @@ out:
} }
func (b *LastfmApiBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) { func (b *LastfmApiBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
total := len(export.Listens) total := len(export.Items)
for i := 0; i < total; i += MaxListensPerSubmission { for i := 0; i < total; i += MaxListensPerSubmission {
listens := export.Listens[i:min(i+MaxListensPerSubmission, total)] listens := export.Items[i:min(i+MaxListensPerSubmission, total)]
count := len(listens) count := len(listens)
if count == 0 { if count == 0 {
break break
@ -302,12 +302,12 @@ out:
} }
sort.Sort(loves) sort.Sort(loves)
results <- models.LovesResult{Loves: loves, Total: totalCount} results <- models.LovesResult{Items: loves, Total: totalCount}
progress <- p.Complete() progress <- p.Complete()
} }
func (b *LastfmApiBackend) ImportLoves(export models.LovesResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) { func (b *LastfmApiBackend) ImportLoves(export models.LovesResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
for _, love := range export.Loves { for _, love := range export.Items {
err := b.client.Track.Love(lastfm.P{ err := b.client.Track.Love(lastfm.P{
"track": love.TrackName, "track": love.TrackName,
"artist": love.ArtistName(), "artist": love.ArtistName(),

View file

@ -95,7 +95,7 @@ func (b *ListenBrainzApiBackend) ExportListens(oldestTimestamp time.Time, result
sort.Sort(listens) sort.Sort(listens)
p.Elapsed = int64(totalDuration.Seconds() - remainingTime.Seconds()) p.Elapsed = int64(totalDuration.Seconds() - remainingTime.Seconds())
progress <- p progress <- p
results <- models.ListensResult{Listens: listens, OldestTimestamp: minTime} results <- models.ListensResult{Items: listens, OldestTimestamp: minTime}
} }
results <- models.ListensResult{OldestTimestamp: minTime} results <- models.ListensResult{OldestTimestamp: minTime}
@ -103,9 +103,9 @@ func (b *ListenBrainzApiBackend) ExportListens(oldestTimestamp time.Time, result
} }
func (b *ListenBrainzApiBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) { func (b *ListenBrainzApiBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
total := len(export.Listens) total := len(export.Items)
for i := 0; i < total; i += MaxListensPerRequest { for i := 0; i < total; i += MaxListensPerRequest {
listens := export.Listens[i:min(i+MaxListensPerRequest, total)] listens := export.Items[i:min(i+MaxListensPerRequest, total)]
count := len(listens) count := len(listens)
if count == 0 { if count == 0 {
break break
@ -184,7 +184,7 @@ out:
sort.Sort(loves) sort.Sort(loves)
progress <- p.Complete() progress <- p.Complete()
results <- models.LovesResult{Loves: loves} results <- models.LovesResult{Items: loves}
} }
func (b *ListenBrainzApiBackend) ImportLoves(export models.LovesResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) { func (b *ListenBrainzApiBackend) ImportLoves(export models.LovesResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
@ -197,13 +197,13 @@ func (b *ListenBrainzApiBackend) ImportLoves(export models.LovesResult, importRe
} }
// TODO: Store MBIDs directly // TODO: Store MBIDs directly
b.existingMbids = make(map[string]bool, len(existingLoves.Loves)) b.existingMbids = make(map[string]bool, len(existingLoves.Items))
for _, love := range existingLoves.Loves { for _, love := range existingLoves.Items {
b.existingMbids[string(love.RecordingMbid)] = true b.existingMbids[string(love.RecordingMbid)] = true
} }
} }
for _, love := range export.Loves { for _, love := range export.Items {
recordingMbid := string(love.RecordingMbid) recordingMbid := string(love.RecordingMbid)
if recordingMbid == "" { if recordingMbid == "" {

View file

@ -85,11 +85,11 @@ out:
sort.Sort(listens) sort.Sort(listens)
progress <- p.Complete() progress <- p.Complete()
results <- models.ListensResult{Listens: listens} results <- models.ListensResult{Items: listens}
} }
func (b *MalojaApiBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) { func (b *MalojaApiBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
for _, listen := range export.Listens { for _, listen := range export.Items {
scrobble := NewScrobble{ scrobble := NewScrobble{
Title: listen.TrackName, Title: listen.TrackName,
Artists: listen.ArtistNames, Artists: listen.ArtistNames,

View file

@ -39,7 +39,7 @@ func ProcessListensImports(importer models.ListensImport, results chan models.Li
if exportResult.Total > 0 { if exportResult.Total > 0 {
result.TotalCount = exportResult.Total result.TotalCount = exportResult.Total
} else { } else {
result.TotalCount += len(exportResult.Listens) result.TotalCount += len(exportResult.Items)
} }
importResult, err := importer.ImportListens(exportResult, result, progress) importResult, err := importer.ImportListens(exportResult, result, progress)
if err != nil { if err != nil {
@ -81,7 +81,7 @@ func ProcessLovesImports(importer models.LovesImport, results chan models.LovesR
if exportResult.Total > 0 { if exportResult.Total > 0 {
result.TotalCount = exportResult.Total result.TotalCount = exportResult.Total
} else { } else {
result.TotalCount += len(exportResult.Loves) result.TotalCount += len(exportResult.Items)
} }
importResult, err := importer.ImportLoves(exportResult, result, progress) importResult, err := importer.ImportLoves(exportResult, result, progress)
if err != nil { if err != nil {

View file

@ -119,17 +119,17 @@ func (b *ScrobblerLogBackend) ExportListens(oldestTimestamp time.Time, results c
listens := log.Listens.NewerThan(oldestTimestamp) listens := log.Listens.NewerThan(oldestTimestamp)
sort.Sort(listens) sort.Sort(listens)
progress <- models.Progress{Elapsed: int64(len(listens))}.Complete() progress <- models.Progress{Elapsed: int64(len(listens))}.Complete()
results <- models.ListensResult{Listens: listens} results <- models.ListensResult{Items: listens}
} }
func (b *ScrobblerLogBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) { func (b *ScrobblerLogBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
lastTimestamp, err := Write(b.file, export.Listens) lastTimestamp, err := Write(b.file, export.Items)
if err != nil { if err != nil {
return importResult, err return importResult, err
} }
importResult.UpdateTimestamp(lastTimestamp) importResult.UpdateTimestamp(lastTimestamp)
importResult.ImportCount += len(export.Listens) importResult.ImportCount += len(export.Items)
progress <- models.Progress{}.FromImportResult(importResult) progress <- models.Progress{}.FromImportResult(importResult)
return importResult, nil return importResult, nil

View file

@ -137,7 +137,7 @@ func (b *SpotifyApiBackend) ExportListens(oldestTimestamp time.Time, results cha
sort.Sort(listens) sort.Sort(listens)
p.Elapsed = int64(totalDuration.Seconds() - remainingTime.Seconds()) p.Elapsed = int64(totalDuration.Seconds() - remainingTime.Seconds())
progress <- p progress <- p
results <- models.ListensResult{Listens: listens, OldestTimestamp: minTime} results <- models.ListensResult{Items: listens, OldestTimestamp: minTime}
} }
results <- models.ListensResult{OldestTimestamp: minTime} results <- models.ListensResult{OldestTimestamp: minTime}
@ -193,7 +193,7 @@ out:
} }
sort.Sort(loves) sort.Sort(loves)
results <- models.LovesResult{Loves: loves, Total: totalCount} results <- models.LovesResult{Items: loves, Total: totalCount}
p.Elapsed += int64(count) p.Elapsed += int64(count)
progress <- p progress <- p

View file

@ -62,7 +62,7 @@ func (b *SubsonicApiBackend) ExportLoves(oldestTimestamp time.Time, results chan
} }
progress <- models.Progress{Elapsed: int64(len(starred.Song))}.Complete() progress <- models.Progress{Elapsed: int64(len(starred.Song))}.Complete()
results <- models.LovesResult{Loves: b.filterSongs(starred.Song, oldestTimestamp)} results <- models.LovesResult{Items: b.filterSongs(starred.Song, oldestTimestamp)}
} }
func (b *SubsonicApiBackend) filterSongs(songs []*subsonic.Child, oldestTimestamp time.Time) models.LovesList { func (b *SubsonicApiBackend) filterSongs(songs []*subsonic.Child, oldestTimestamp time.Time) models.LovesList {

View file

@ -147,18 +147,16 @@ func (l LovesList) Swap(i, j int) {
l[i], l[j] = l[j], l[i] l[i], l[j] = l[j], l[i]
} }
type ListensResult struct { type ExportResult[T LovesList | ListensList] struct {
Items T
Total int Total int
Listens ListensList
OldestTimestamp time.Time OldestTimestamp time.Time
Error error Error error
} }
type LovesResult struct { type ListensResult ExportResult[ListensList]
Total int
Loves LovesList type LovesResult ExportResult[LovesList]
Error error
}
type ImportResult struct { type ImportResult struct {
TotalCount int TotalCount int