Example #1
0
        public override async Task <bool> DoWork()
        {
            using IServiceScope scope = _scopeFactory.CreateScope();
            IVideoManagerService videoService = scope.ServiceProvider.GetRequiredService <IVideoManagerService>();

            int thumbnailsAssigned = await videoService.AssignThumbnails();

            int previewsAssigned = await videoService.AssignPreviews();

            int durationsAssigned = await videoService.AssignDurations();

            return(thumbnailsAssigned > 0 || previewsAssigned > 0 || durationsAssigned > 0);
        }
Example #2
0
        public override async Task <bool> DoWork()
        {
            using IServiceScope scope = _scopeFactory.CreateScope();
            IVideoManagerService videoService = scope.ServiceProvider.GetRequiredService <IVideoManagerService>();
            List <Video>         videos       = await videoService.GetVideosToEncode(_maxConcurrentTasks);

            if (videos.Count == 0)
            {
                return(false);
            }

            VideoManagerDbContext videoManagerDbContext = scope.ServiceProvider.GetRequiredService <VideoManagerDbContext>();
            IEncoder encodingService = scope.ServiceProvider.GetRequiredService <IEncoder>();
            List <Task <EncodeResult> > encodingTasks = new(videos.Count);

            foreach (Video video in videos)
            {
                encodingTasks.Add(encodingService.Encode(video));
                video.Status = VideoStatus.Encoding;
            }

            await videoManagerDbContext.SaveChangesAsync();

            for (int i = 0; i < encodingTasks.Count; i++)
            {
                Video video = videos[i];

                EncodeResult encodeResult = await encodingTasks[i];

                video.Status = encodeResult.Success
                    ? VideoStatus.Ready
                    : VideoStatus.Failed;

                video.EncodeTime    = encodeResult.EncodeTime;
                video.EncodedLength = encodeResult.EncodedFileLength;
            }

            await videoManagerDbContext.SaveChangesAsync();

            return(true);
        }