Beispiel #1
0
        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)));
        }
Beispiel #2
0
        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);
        }