using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using PetaPoco.Business; using Sony.Filtr.Contracts.Abstractions; using Sony.Filtr.Contracts.Definitions; using Sony.Filtr.DeezerAPI; using Sony.Filtr.PlaylistSynchronization; using Sony.Filtr.PlaylistSynchronization.Data; using Sony.Filtr.Utility.ConsoleUtility; using Sony.Filtr.Utility.Extensions; namespace Sony.Filtr.Worker.Onetime { public class DeezerPlaylistSyncIsrcMapping { private readonly DeezerApi _deezerApi; private readonly IServiceAccountManager _serviceAccountManager; private readonly SynchronizationTrackManager _synchronizationTrackManager; public DeezerPlaylistSyncIsrcMapping(DeezerApi deezerApi, IServiceAccountManager serviceAccountManager, SynchronizationTrackManager synchronizationTrackManager) { _deezerApi = deezerApi; _serviceAccountManager = serviceAccountManager; _synchronizationTrackManager = synchronizationTrackManager; } public async Task ExecuteAsync() { var synchronizationTracks = PetaPocoRepository.ReadOnlyInstance.Fetch("WHERE ServiceType = @0", ServiceType.Deezer); var serviceAccount = _serviceAccountManager.GetServiceAccounts().First(p=> p.ServiceType == ServiceType.Deezer); var tracksToUpdate = synchronizationTracks.Where(t => t.MatchDate == DateTime.MinValue).ToList(); using(var progressBar = new ConsoleProgressBarCount(tracksToUpdate.Count)) { await tracksToUpdate.ForEachAsync(10, async track => { try { var deezerTrack = await _deezerApi.GetTrackByISRCAsync(serviceAccount.AccessToken, track.ISRC); if (deezerTrack != null) { await _synchronizationTrackManager.SaveSynchronizationTrackAsync(track.ISRC, ServiceType.Deezer, deezerTrack.id.ToString()); } } catch(Exception e) { Console.WriteLine(e); } }, progressBar); } } } }