From ca3b8492b0716aaff224d0baa0581e6d3813a69a Mon Sep 17 00:00:00 2001 From: Philipp Wolfer Date: Sun, 3 Dec 2023 16:56:12 +0100 Subject: [PATCH] Unified export result types --- internal/backends/deezer/deezer.go | 4 ++-- internal/backends/dump/dump.go | 4 ++-- internal/backends/funkwhale/funkwhale.go | 4 ++-- internal/backends/jspf/jspf.go | 4 ++-- internal/backends/lastfm/lastfm.go | 10 +++++----- internal/backends/listenbrainz/listenbrainz.go | 14 +++++++------- internal/backends/maloja/maloja.go | 4 ++-- internal/backends/process.go | 4 ++-- internal/backends/scrobblerlog/scrobblerlog.go | 6 +++--- internal/backends/spotify/spotify.go | 4 ++-- internal/backends/subsonic/subsonic.go | 2 +- internal/models/models.go | 12 +++++------- 12 files changed, 35 insertions(+), 37 deletions(-) diff --git a/internal/backends/deezer/deezer.go b/internal/backends/deezer/deezer.go index c35b8ae..df36280 100644 --- a/internal/backends/deezer/deezer.go +++ b/internal/backends/deezer/deezer.go @@ -113,7 +113,7 @@ out: } sort.Sort(listens) - results <- models.ListensResult{Listens: listens, Total: totalCount} + results <- models.ListensResult{Items: listens, Total: totalCount} p.Elapsed += int64(count) progress <- p @@ -180,7 +180,7 @@ out: } sort.Sort(loves) - results <- models.LovesResult{Loves: loves, Total: totalCount} + results <- models.LovesResult{Items: loves, Total: totalCount} p.Elapsed += int64(count) progress <- p diff --git a/internal/backends/dump/dump.go b/internal/backends/dump/dump.go index a5c3751..e85495f 100644 --- a/internal/backends/dump/dump.go +++ b/internal/backends/dump/dump.go @@ -33,7 +33,7 @@ func (b *DumpBackend) StartImport() 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) { - for _, listen := range export.Listens { + for _, listen := range export.Items { importResult.UpdateTimestamp(listen.ListenedAt) importResult.ImportCount += 1 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) { - for _, love := range export.Loves { + for _, love := range export.Items { importResult.UpdateTimestamp(love.Created) importResult.ImportCount += 1 progress <- models.Progress{}.FromImportResult(importResult) diff --git a/internal/backends/funkwhale/funkwhale.go b/internal/backends/funkwhale/funkwhale.go index 617b90a..4a4bfb1 100644 --- a/internal/backends/funkwhale/funkwhale.go +++ b/internal/backends/funkwhale/funkwhale.go @@ -88,7 +88,7 @@ out: sort.Sort(listens) 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) { @@ -137,7 +137,7 @@ out: sort.Sort(loves) progress <- p.Complete() - results <- models.LovesResult{Loves: loves} + results <- models.LovesResult{Items: loves} } func (l Listening) AsListen() models.Listen { diff --git a/internal/backends/jspf/jspf.go b/internal/backends/jspf/jspf.go index 26bc57f..6aeb5ca 100644 --- a/internal/backends/jspf/jspf.go +++ b/internal/backends/jspf/jspf.go @@ -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) { - for _, listen := range export.Listens { + for _, listen := range export.Items { track := listenAsTrack(listen) b.tracks = append(b.tracks, track) 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) { - for _, love := range export.Loves { + for _, love := range export.Items { track := loveAsTrack(love) b.tracks = append(b.tracks, track) importResult.ImportCount += 1 diff --git a/internal/backends/lastfm/lastfm.go b/internal/backends/lastfm/lastfm.go index e79c82c..d68ed6f 100644 --- a/internal/backends/lastfm/lastfm.go +++ b/internal/backends/lastfm/lastfm.go @@ -146,7 +146,7 @@ out: page -= 1 results <- models.ListensResult{ - Listens: listens, + Items: listens, Total: result.Total, OldestTimestamp: minTime, } @@ -160,9 +160,9 @@ out: } 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 { - listens := export.Listens[i:min(i+MaxListensPerSubmission, total)] + listens := export.Items[i:min(i+MaxListensPerSubmission, total)] count := len(listens) if count == 0 { break @@ -302,12 +302,12 @@ out: } sort.Sort(loves) - results <- models.LovesResult{Loves: loves, Total: totalCount} + results <- models.LovesResult{Items: loves, Total: totalCount} progress <- p.Complete() } 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{ "track": love.TrackName, "artist": love.ArtistName(), diff --git a/internal/backends/listenbrainz/listenbrainz.go b/internal/backends/listenbrainz/listenbrainz.go index 0b29767..27c8102 100644 --- a/internal/backends/listenbrainz/listenbrainz.go +++ b/internal/backends/listenbrainz/listenbrainz.go @@ -95,7 +95,7 @@ func (b *ListenBrainzApiBackend) ExportListens(oldestTimestamp time.Time, result sort.Sort(listens) p.Elapsed = int64(totalDuration.Seconds() - remainingTime.Seconds()) progress <- p - results <- models.ListensResult{Listens: listens, OldestTimestamp: minTime} + results <- models.ListensResult{Items: listens, 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) { - total := len(export.Listens) + total := len(export.Items) 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) if count == 0 { break @@ -184,7 +184,7 @@ out: sort.Sort(loves) 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) { @@ -197,13 +197,13 @@ func (b *ListenBrainzApiBackend) ImportLoves(export models.LovesResult, importRe } // TODO: Store MBIDs directly - b.existingMbids = make(map[string]bool, len(existingLoves.Loves)) - for _, love := range existingLoves.Loves { + b.existingMbids = make(map[string]bool, len(existingLoves.Items)) + for _, love := range existingLoves.Items { b.existingMbids[string(love.RecordingMbid)] = true } } - for _, love := range export.Loves { + for _, love := range export.Items { recordingMbid := string(love.RecordingMbid) if recordingMbid == "" { diff --git a/internal/backends/maloja/maloja.go b/internal/backends/maloja/maloja.go index 58a70b7..4fa57ad 100644 --- a/internal/backends/maloja/maloja.go +++ b/internal/backends/maloja/maloja.go @@ -85,11 +85,11 @@ out: sort.Sort(listens) 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) { - for _, listen := range export.Listens { + for _, listen := range export.Items { scrobble := NewScrobble{ Title: listen.TrackName, Artists: listen.ArtistNames, diff --git a/internal/backends/process.go b/internal/backends/process.go index 1143cc0..2e8cb2e 100644 --- a/internal/backends/process.go +++ b/internal/backends/process.go @@ -39,7 +39,7 @@ func ProcessListensImports(importer models.ListensImport, results chan models.Li if exportResult.Total > 0 { result.TotalCount = exportResult.Total } else { - result.TotalCount += len(exportResult.Listens) + result.TotalCount += len(exportResult.Items) } importResult, err := importer.ImportListens(exportResult, result, progress) if err != nil { @@ -81,7 +81,7 @@ func ProcessLovesImports(importer models.LovesImport, results chan models.LovesR if exportResult.Total > 0 { result.TotalCount = exportResult.Total } else { - result.TotalCount += len(exportResult.Loves) + result.TotalCount += len(exportResult.Items) } importResult, err := importer.ImportLoves(exportResult, result, progress) if err != nil { diff --git a/internal/backends/scrobblerlog/scrobblerlog.go b/internal/backends/scrobblerlog/scrobblerlog.go index 1c4f652..cbd0aa8 100644 --- a/internal/backends/scrobblerlog/scrobblerlog.go +++ b/internal/backends/scrobblerlog/scrobblerlog.go @@ -119,17 +119,17 @@ func (b *ScrobblerLogBackend) ExportListens(oldestTimestamp time.Time, results c listens := log.Listens.NewerThan(oldestTimestamp) sort.Sort(listens) 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) { - lastTimestamp, err := Write(b.file, export.Listens) + lastTimestamp, err := Write(b.file, export.Items) if err != nil { return importResult, err } importResult.UpdateTimestamp(lastTimestamp) - importResult.ImportCount += len(export.Listens) + importResult.ImportCount += len(export.Items) progress <- models.Progress{}.FromImportResult(importResult) return importResult, nil diff --git a/internal/backends/spotify/spotify.go b/internal/backends/spotify/spotify.go index 1c797c8..e584cc1 100644 --- a/internal/backends/spotify/spotify.go +++ b/internal/backends/spotify/spotify.go @@ -137,7 +137,7 @@ func (b *SpotifyApiBackend) ExportListens(oldestTimestamp time.Time, results cha sort.Sort(listens) p.Elapsed = int64(totalDuration.Seconds() - remainingTime.Seconds()) progress <- p - results <- models.ListensResult{Listens: listens, OldestTimestamp: minTime} + results <- models.ListensResult{Items: listens, OldestTimestamp: minTime} } results <- models.ListensResult{OldestTimestamp: minTime} @@ -193,7 +193,7 @@ out: } sort.Sort(loves) - results <- models.LovesResult{Loves: loves, Total: totalCount} + results <- models.LovesResult{Items: loves, Total: totalCount} p.Elapsed += int64(count) progress <- p diff --git a/internal/backends/subsonic/subsonic.go b/internal/backends/subsonic/subsonic.go index 2d42fff..1167f87 100644 --- a/internal/backends/subsonic/subsonic.go +++ b/internal/backends/subsonic/subsonic.go @@ -62,7 +62,7 @@ func (b *SubsonicApiBackend) ExportLoves(oldestTimestamp time.Time, results chan } 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 { diff --git a/internal/models/models.go b/internal/models/models.go index 2175ea1..086b922 100644 --- a/internal/models/models.go +++ b/internal/models/models.go @@ -147,18 +147,16 @@ func (l LovesList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } -type ListensResult struct { +type ExportResult[T LovesList | ListensList] struct { + Items T Total int - Listens ListensList OldestTimestamp time.Time Error error } -type LovesResult struct { - Total int - Loves LovesList - Error error -} +type ListensResult ExportResult[ListensList] + +type LovesResult ExportResult[LovesList] type ImportResult struct { TotalCount int