public async Task <MediaFileProcessingResult> Process(MediaFileInfo file, RssFeedDto feed, CancellationToken ct)
        {
            string tempDirectory = null;

            try
            {
                tempDirectory = _tempDirectoryService.Create(feed.Id.ToString());
                var alternativeFileName = Guid.NewGuid().ToString();
                var downloadService     = _fileDownloadResolver(feed.Type);

                var tempFile = await downloadService
                               .DownloadMediaFile(file.Url, tempDirectory, alternativeFileName, ct)
                               .ConfigureAwait(false);

                var fileResult = await ProcessFile(tempFile, tempDirectory, ct);

                var newEntry = new MediaFileDto
                {
                    FeedId   = feed.Id,
                    Title    = file.Name,
                    FileName = fileResult,
                    Url      = file.VideoId
                };
                _context.MediaFiles.Add(newEntry);
                await _context.SaveChangesAsync();

                return(new MediaFileSuccessResult(feed.Url, newEntry.Id));
            } catch (Exception ex)
            {
                return(new MediaFileErrorResult(feed.Url, ex));
            }
        }
Exemple #2
0
        public async Task Consume_YtDownloadedThenExtractSended()
        {
            // Arrange
            var directory = _directoryService.Create(nameof(Consume_YtDownloadedThenExtractSended));

            // Act
            var fileName = await _service.DownloadMediaFile("b0EPyS-GBUY", Guid.NewGuid().ToString(), null, default);

            // Assert
            File.Exists(Path.Combine(directory, fileName));
        }
Exemple #3
0
        public virtual async Task <List <MediaFileProcessingResult> > Update(int id, CancellationToken ct)
        {
            var feed = await _context
                       .RssFeeds
                       .Include(f => f.MediaFiles)
                       .FirstOrDefaultAsync(f => f.Id == id);

            var feedReader = _feedReaderResolver(feed.Type);

            var newFeed = await feedReader.GetFeed(feed.Url);

            var newFiles      = GetNewMediaFiles(feed.MediaFiles, newFeed.Videos);
            var tempDirectory = _tempDirectoryService.Create(feed.Id.ToString());

            var results = new List <MediaFileProcessingResult>();

            foreach (var file in newFiles)
            {
                results.Add(await _fileProcessor.Process(file, feed, ct));
            }
            return(results);
        }