From 841c1129ff506ef71ce8de25a308e0b6dff09ae6 Mon Sep 17 00:00:00 2001 From: Deluan Date: Wed, 9 Sep 2020 08:57:59 -0400 Subject: [PATCH] Break-up album/artist refresh in chunks --- persistence/album_repository.go | 11 +++++++++++ persistence/artist_repository.go | 11 +++++++++++ utils/strings.go | 6 +++--- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/persistence/album_repository.go b/persistence/album_repository.go index c47e224b..a7262ecc 100644 --- a/persistence/album_repository.go +++ b/persistence/album_repository.go @@ -138,6 +138,17 @@ func (r *albumRepository) getEmbeddedCovers(ids []string) (map[string]model.Medi } func (r *albumRepository) Refresh(ids ...string) error { + chunks := utils.BreakUpStringSlice(ids, 100) + for _, chunk := range chunks { + err := r.refresh(chunk...) + if err != nil { + return err + } + } + return nil +} + +func (r *albumRepository) refresh(ids ...string) error { type refreshAlbum struct { model.Album CurrentId string diff --git a/persistence/artist_repository.go b/persistence/artist_repository.go index e9b626b0..bd28b89e 100644 --- a/persistence/artist_repository.go +++ b/persistence/artist_repository.go @@ -115,6 +115,17 @@ func (r *artistRepository) GetIndex() (model.ArtistIndexes, error) { } func (r *artistRepository) Refresh(ids ...string) error { + chunks := utils.BreakUpStringSlice(ids, 100) + for _, chunk := range chunks { + err := r.refresh(chunk...) + if err != nil { + return err + } + } + return nil +} + +func (r *artistRepository) refresh(ids ...string) error { type refreshArtist struct { model.Artist CurrentId string diff --git a/utils/strings.go b/utils/strings.go index 9e57f242..94a27642 100644 --- a/utils/strings.go +++ b/utils/strings.go @@ -39,8 +39,8 @@ func MoveString(array []string, srcIndex int, dstIndex int) []string { return InsertString(RemoveString(array, srcIndex), value, dstIndex) } -func BreakUpStringSlice(mediaFileIds []string, chunkSize int) [][]string { - numTracks := len(mediaFileIds) +func BreakUpStringSlice(items []string, chunkSize int) [][]string { + numTracks := len(items) var chunks [][]string for i := 0; i < numTracks; i += chunkSize { end := i + chunkSize @@ -48,7 +48,7 @@ func BreakUpStringSlice(mediaFileIds []string, chunkSize int) [][]string { end = numTracks } - chunks = append(chunks, mediaFileIds[i:end]) + chunks = append(chunks, items[i:end]) } return chunks }