public async Task Move(string source, string destination) { await _storage.Move(source, destination); var affected = _context.Files.Where(f => f.FileName.Contains(source)); foreach (var file in affected) { file.FileName = file.FileName.Replace(source, destination); } var totalCount = await _context.Files.CountAsync(); await _context.SaveChangesAsync(); _rabbitPublisher.Publish <SynchronizedEventMessage>(new SynchronizedEventMessage { Added = 0, Deleted = 0, TotalNow = totalCount }); }
public async Task ConvertInFormat(Guid videoFileId, VideoFormat format) { FileDbModel result; var conversion = await _context.Conversions.FirstOrDefaultAsync(c => c.Source.FileId == videoFileId && c.VideoFormat == format); if (conversion?.Status == ConversionStatus.InProgress) { return; } if (conversion?.Status == ConversionStatus.Success) { result = conversion.Result; } else { var file = await _context.Files.FirstOrDefaultAsync(f => f.FileId == videoFileId) ?? throw new FileNotFoundException(); if (conversion == null) { conversion = new ConversionDbModel { Source = file, Status = ConversionStatus.InProgress, Tryes = 1, VideoFormat = format }; _context.Add(conversion); } else { conversion.Tryes++; //todo maxTryes } await _context.SaveChangesAsync(); if (format == VideoFormat.preview) { result = await GenerateFilePreview(file); } else if (format == VideoFormat.gif) { result = await GenerateFileGif(file); } else { result = await ConvertVideoInternal(file, format); } _context.Files.Add(result); _context.SaveChanges(); } _rabbitPublisher.Publish <VideoConvertedEventMessage>(new VideoConvertedEventMessage { Format = format, SourceId = videoFileId, ResultId = result.FileId }); }