Exemplo n.º 1
0
        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
            });
        }
Exemplo n.º 2
0
        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
            });
        }