@@ -91,7 +91,7 @@ public async Task UpdateArtistByIdAsync(int artistId,
9191 await _updateTidalRepository . CommitAsync ( ) ;
9292 return ;
9393 }
94-
94+
9595 //fetch all the albums available of the artist
9696 //by going through the next page cursor
9797 //populating the artist object
@@ -121,6 +121,8 @@ public async Task UpdateArtistByIdAsync(int artistId,
121121 . Where ( x => x . Type == "albums" )
122122 . ToList ( ) ;
123123
124+ await PullMissingSimilarTracksAsync ( artistId , _updateTidalRepository , callback , artistInfo , albums . Count ) ;
125+
124126 if ( albums . Count >= _ignoreArtistAlbumAmount )
125127 {
126128 await _updateTidalRepository . CommitAsync ( ) ;
@@ -304,7 +306,6 @@ await _updateTidalRepository.UpsertAlbumExternalLinkAsync(int.Parse(album.Id),
304306 ? . Items
305307 ? . Data
306308 ? . FirstOrDefault ( x => x . Id == track . Id ) ;
307-
308309
309310 callback ? . Invoke ( new UpdateTidalCallback ( artistId ,
310311 artistInfo . Data . Attributes . Name ,
@@ -360,24 +361,9 @@ await _updateTidalRepository.UpsertTrackAsync(int.Parse(track.Id),
360361 trackNumber . Meta . VolumeNumber ,
361362 trackNumber . Meta . TrackNumber ,
362363 track . Attributes . Version ?? string . Empty ) ;
363-
364- var similarTracks = await _tidalAPIService . GetSimilarTracksByTrackIdAsync ( int . Parse ( track . Id ) ) ;
365364
366- foreach ( var similarTrack in similarTracks . Data )
367- {
368- string similarIsrc = similarTracks . Included
369- ? . Where ( x => x . Id == similarTrack . Id )
370- ? . Select ( x => x . Attributes . ISRC )
371- ? . FirstOrDefault ( ) ?? string . Empty ;
372-
373- await _updateTidalRepository . UpsertSimilarTrackAsync (
374- int . Parse ( track . Id ) ,
375- int . Parse ( similarTrack . Id ) ,
376- similarIsrc ) ;
377- }
378-
365+ await ProcessSimilarTrackAsync ( int . Parse ( track . Id ) , _updateTidalRepository ) ;
379366 }
380-
381367 progress ++ ;
382368 }
383369
@@ -397,6 +383,53 @@ await _updateTidalRepository.UpsertSimilarTrackAsync(
397383 }
398384 }
399385
386+ private async Task PullMissingSimilarTracksAsync (
387+ int artistId ,
388+ UpdateTidalRepository updateTidalRepository ,
389+ Action < UpdateTidalCallback > ? callback ,
390+ TidalSearchResponse artistInfo ,
391+ int albumCount )
392+ {
393+ List < int > trackIdsMissingSimilar = await updateTidalRepository . GetMissingSimilarTrackIdsByArtistIdAsync ( artistId ) ;
394+
395+ int repullProgress = 1 ;
396+ foreach ( int trackId in trackIdsMissingSimilar )
397+ {
398+ await ProcessSimilarTrackAsync ( trackId , updateTidalRepository ) ;
399+
400+ callback ? . Invoke ( new UpdateTidalCallback ( artistId ,
401+ artistInfo . Data . Attributes . Name ,
402+ string . Empty ,
403+ albumCount ,
404+ UpdateTidalStatus . Updating ,
405+ 0 ,
406+ $ "Pulling missing similar tracks { repullProgress } of { trackIdsMissingSimilar . Count } processed") ) ;
407+ repullProgress ++ ;
408+ }
409+ }
410+
411+ private async Task ProcessSimilarTrackAsync ( int trackId , UpdateTidalRepository updateTidalRepository )
412+ {
413+ if ( ! await updateTidalRepository . HasSimilarTrackRecordsAsync ( trackId ) )
414+ {
415+ var similarTracks = await _tidalAPIService . GetSimilarTracksByTrackIdAsync ( trackId ) ;
416+
417+ foreach ( var similarTrack in similarTracks ? . Data ?? [ ] )
418+ {
419+ string similarIsrc = similarTracks
420+ ? . Included
421+ ? . Where ( x => x . Id == similarTrack . Id )
422+ ? . Select ( x => x . Attributes . ISRC )
423+ ? . FirstOrDefault ( ) ?? string . Empty ;
424+
425+ await updateTidalRepository . UpsertSimilarTrackAsync (
426+ trackId ,
427+ int . Parse ( similarTrack . Id ) ,
428+ similarIsrc ) ;
429+ }
430+ }
431+ }
432+
400433 private async Task < TidalSearchResponse ? > InsertArtistInfoAsync ( int artistId , bool ignorePeventCheck = false )
401434 {
402435 UpdateTidalRepository _updateTidalRepository = new UpdateTidalRepository ( _connectionString ) ;
0 commit comments