Esempio n. 1
0
        public async Task <Video?> Delete(int videoId)
        {
            Video video = await Get(videoId);

            video.Status = VideoStatus.Deleted;
            await _videoManagerDbContext.SaveChangesAsync();

            return(video);
        }
        public async Task <int> AssignDurations()
        {
            var tasks = (await _videoManagerDbContext.Videos
                         .Where(x => x.Status == VideoStatus.Ready && !x.DurationInSeconds.HasValue)
                         .Select(x => new { video = x, task = _encoderService.GetVideoDurationInSeconds(x.GetEncodedFilePath()) })
                         .ToArrayAsync());

            foreach (var taskObject in tasks)
            {
                taskObject.video.DurationInSeconds = await taskObject.task;
            }

            await _videoManagerDbContext.SaveChangesAsync();

            return(tasks.Length);
        }
Esempio n. 3
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);
        }
Esempio n. 4
0
        public async Task <User?> CreateOrGetByAuthUser(AuthUser authUser)
        {
            if (_memoryCache.TryGetValue(authUser.Sub, out User? user))
            {
                return(user);
            }

            user = await _videoManagerDbContext.Users.FirstOrDefaultAsync(x => x.Auth0Id == authUser.Sub);

            if (user == null && !string.IsNullOrEmpty(authUser.Sub) && !string.IsNullOrEmpty(authUser.Email))
            {
                user = new User(authUser.Sub, authUser.Email.ToLower());

                await _videoManagerDbContext.Users.AddAsync(user);

                await _videoManagerDbContext.SaveChangesAsync();
            }

            _memoryCache.Set(authUser.Sub, user);

            return(user);
        }