From 729a3d0ed0cfc0c71740876e7aad2fd175bb3a12 Mon Sep 17 00:00:00 2001 From: Philipp Wolfer Date: Wed, 15 Nov 2023 18:37:36 +0100 Subject: [PATCH] Add ImportResult.UpdateTimestamp method --- backends/dump/dump.go | 8 ++------ backends/jspf/jspf.go | 5 +---- backends/listenbrainz/listenbrainz.go | 4 +--- models/interfaces.go | 17 ----------------- models/models.go | 24 ++++++++++++++++++++++++ models/models_test.go | 11 +++++++++++ 6 files changed, 39 insertions(+), 30 deletions(-) diff --git a/backends/dump/dump.go b/backends/dump/dump.go index 1b38d5c..db0bc66 100644 --- a/backends/dump/dump.go +++ b/backends/dump/dump.go @@ -48,9 +48,7 @@ func (b DumpBackend) ImportListens(results chan models.ListensResult, oldestTime importResult.TotalCount += len(result.Listens) for _, listen := range result.Listens { - if listen.ListenedAt.Unix() > importResult.LastTimestamp.Unix() { - importResult.LastTimestamp = listen.ListenedAt - } + importResult.UpdateTimestamp(listen.ListenedAt) importResult.ImportCount += 1 fmt.Printf("🎶 %v: \"%v\" by %v (%v)\n", listen.ListenedAt, listen.TrackName, listen.ArtistName(), listen.RecordingMbid) @@ -72,9 +70,7 @@ func (b DumpBackend) ImportLoves(results chan models.LovesResult, oldestTimestam importResult.TotalCount += len(result.Loves) for _, love := range result.Loves { - if love.Created.Unix() > importResult.LastTimestamp.Unix() { - importResult.LastTimestamp = love.Created - } + importResult.UpdateTimestamp(love.Created) importResult.ImportCount += 1 fmt.Printf("❤️ %v: \"%v\" by %v (%v)\n", love.Created, love.TrackName, love.ArtistName(), love.RecordingMbid) diff --git a/backends/jspf/jspf.go b/backends/jspf/jspf.go index 9af9087..a9af9f4 100644 --- a/backends/jspf/jspf.go +++ b/backends/jspf/jspf.go @@ -55,10 +55,6 @@ func (b JspfBackend) ImportLoves(loves []models.Love, oldestTimestamp time.Time) tracks := make([]Track, 0, result.TotalCount) for _, love := range loves { - if love.Created.Unix() > result.LastTimestamp.Unix() { - result.LastTimestamp = love.Created - } - extension := MusicBrainzTrackExtension{ AddedAt: love.Created, AddedBy: love.UserName, @@ -90,6 +86,7 @@ func (b JspfBackend) ImportLoves(loves []models.Love, oldestTimestamp time.Time) tracks = append(tracks, track) + result.UpdateTimestamp(love.Created) result.ImportCount += 1 } diff --git a/backends/listenbrainz/listenbrainz.go b/backends/listenbrainz/listenbrainz.go index 86472e4..5d8d146 100644 --- a/backends/listenbrainz/listenbrainz.go +++ b/backends/listenbrainz/listenbrainz.go @@ -158,10 +158,8 @@ func (b ListenBrainzApiBackend) ImportLoves(loves []models.Love, oldestTimestamp } if ok { + result.UpdateTimestamp(love.Created) result.ImportCount += 1 - if love.Created.Unix() > result.LastTimestamp.Unix() { - result.LastTimestamp = love.Created - } } else { msg := fmt.Sprintf("Failed import of \"%s\" by %s: %v", love.TrackName, love.ArtistName(), errMsg) diff --git a/models/interfaces.go b/models/interfaces.go index ab58b66..fe9c4a5 100644 --- a/models/interfaces.go +++ b/models/interfaces.go @@ -60,20 +60,3 @@ type LovesImport interface { // Imports the given list of loves. ImportLoves(results chan LovesResult, oldestTimestamp time.Time) (ImportResult, error) } - -type ListensResult struct { - Error error - Listens ListensList -} - -type LovesResult struct { - Error error - Loves LovesList -} - -type ImportResult struct { - TotalCount int - ImportCount int - LastTimestamp time.Time - ImportErrors []string -} diff --git a/models/models.go b/models/models.go index 687eb67..f2b9eb0 100644 --- a/models/models.go +++ b/models/models.go @@ -92,3 +92,27 @@ func (l LovesList) Less(i, j int) bool { func (l LovesList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } + +type ListensResult struct { + Error error + Listens ListensList +} + +type LovesResult struct { + Error error + Loves LovesList +} + +type ImportResult struct { + TotalCount int + ImportCount int + LastTimestamp time.Time + ImportErrors []string +} + +// Sets LastTimestamp to newTime, if newTime is newer than LastTimestamp +func (i *ImportResult) UpdateTimestamp(newTime time.Time) { + if newTime.Unix() > i.LastTimestamp.Unix() { + i.LastTimestamp = newTime + } +} diff --git a/models/models_test.go b/models/models_test.go index 3737b1b..c777259 100644 --- a/models/models_test.go +++ b/models/models_test.go @@ -62,3 +62,14 @@ func TestLovesListSort(t *testing.T) { assert.Equal(t, love2, list[0]) assert.Equal(t, love3, list[1]) } + +func TestImportResultUpdateTimestamp(t *testing.T) { + timestamp := time.Now() + i := models.ImportResult{LastTimestamp: timestamp} + newTimestamp := time.Now().Add(-time.Duration(2 * time.Second)) + i.UpdateTimestamp(newTimestamp) + assert.Equalf(t, timestamp, i.LastTimestamp, "Expected older timestamp is kept") + newTimestamp = time.Now().Add(time.Duration(2 * time.Second)) + i.UpdateTimestamp(newTimestamp) + assert.Equalf(t, newTimestamp, i.LastTimestamp, "Updated timestamp expected") +}