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)); } }
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)); }
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); }