public async Task <ActionResult> ImportTracks([FromBody] TrackImportForm tracksForm) { var trackToImport = tracksForm.Tracks.Tracks .Select(x => new NormalizedTrack { Artist = x.Artist, Title = x.Title, }) .Reverse() .ToArray(); var progressId = Guid.NewGuid(); var results = await domainService.ImportTracksAsync(trackToImport, tracksForm.YaPlaylistId, UserId, tuple => progressBar.UpdateProgressModel(new ProgressModel { Id = progressId, Processed = tuple.Processed, Total = tuple.Total, })).ConfigureAwait(true); await importResultLogger.WriteImportLogsAsync(results, UserId, null).ConfigureAwait(true); return(PartialView("Progress", progressBar.FindProgressModel(progressId))); }
private async Task RunImport(Guid progressId, NormalizedTrack[] trackToImport, string yaPlayListId, Guid sessionId, Guid userId) { void UpdateProgress((int Processed, int Total, ImportResult importResult) tuple) { var currentProgress = progressBar.FindProgressModel(progressId) ?? new ProgressModel { Id = progressId, Total = tuple.Total, Processed = tuple.Processed, SessionId = sessionId }; currentProgress.Total = tuple.Total; currentProgress.Processed = tuple.Processed; var importResult = tuple.importResult; if (importResult.ImportStatus == ImportStatus.Error || importResult.ImportStatus == ImportStatus.NotFound) { currentProgress.Errors.Add((new TrackModel { Title = importResult.ImportingTrack?.Title ?? string.Empty, Artist = importResult.ImportingTrack?.Artist ?? string.Empty }, $"{jsonSerializer.SerializeToString(new {importResult.ImportStatus, importResult.Message})}")); } progressBar.UpdateProgressModel(currentProgress); } var results = await domainService.ImportTracksAsync(trackToImport, yaPlayListId, userId, UpdateProgress) .ConfigureAwait(false); await importResultLogger.WriteImportLogsAsync(results, userId, sessionId).ConfigureAwait(false); var lastProgress = progressBar.FindProgressModel(progressId); lastProgress.ImportLogsSaved = true; progressBar.UpdateProgressModel(lastProgress); }