Ejemplo n.º 1
0
        public async Task GenerateEpisodeStills(int seriesDetailsId, int seasonDetailsId)
        {
            var episodes = await _context.EpisodeDetails.Where(e => e.SeasonDetailsId == seasonDetailsId && e.StillBlurHash == null).ToListAsync();

            if (!episodes.Any())
            {
                return;
            }

            var seasonNumber   = episodes.First().SeasonNumber;
            var episodeNumbers = episodes.Select(e => e.EpisodeNumber).ToList();
            var paths          = await _context.EpisodeFiles
                                 .Where(e => e.SeriesDetailsId == seriesDetailsId && e.SeasonNumber == seasonNumber && episodeNumbers.Contains(e.EpisodeNumber))
                                 .ToDictionaryAsync(e => e.EpisodeNumber, e => e.Path);

            foreach (var episodeDetails in episodes)
            {
                if (!paths.TryGetValue(episodeDetails.EpisodeNumber, out var path))
                {
                    continue;
                }

                var snapshotTempPath = await _dispatcher.Dispatch(new CreateSnapshotCommand(path, 0.2, 260, 200));

                await _dispatcher.Dispatch(new SetImageCommand <IStillImageOwner>(episodeDetails, snapshotTempPath, $"{Guid.NewGuid()}.jpg"));
            }

            await _context.SaveChangesAsync();
        }
Ejemplo n.º 2
0
        public async Task <ActionResult> Login([FromForm, Required] string username, [FromForm, Required] string password,
                                               [FromHeader(Name = "User-Agent"), Required] string userAgent)
        {
            var session = await _eventDispatcher.Dispatch(new LoginAttemptCommand(username, password, userAgent));

            if (session == default)
            {
                return(BadRequest("Invalid credentials"));
            }
            _sessionService.AttachSessionToken(HttpContext, session.Token, session.Expiry);
            return(Ok(session.IsAdmin));
        }
Ejemplo n.º 3
0
        public async Task <bool> Handle(LogoutCommand command, CancellationToken cancellationToken = default)
        {
            await _dispatcher.Dispatch(new RemoveSessionCommand(_operationContext.Session.UserId, _operationContext.SessionId));

            _logger.LogInformation("User {UserId} logged out", _operationContext.Session.UserId);
            return(true);
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> StreamFile([FromRoute, Required] StreamKind streamKind, [FromRoute, Required] string token, [FromRoute, Required] long id)
        {
            string?path;

            // Console.WriteLine("Lent out from now");
            using (var scope = await _eventDispatcher.Dispatch(new SubOperationScopeCommand()))
            {
                path = await _eventDispatcher.Dispatch(new FilePathLookupQuery(streamKind, id), scope.ServiceProvider);

                if (path == null)
                {
                    return(NotFound());
                }
            }
            // Response.OnCompleted(() => Task.Delay(TimeSpan.FromSeconds(15)).ContinueWith(() => Task.Run(() => Console.WriteLine("To 5 min from now"))));
            return(PhysicalFile(path, "video/mp4", "media.mp4", true));
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> SetImage(
            [FromForm, Required] DetailsType detailsType,
            [FromForm, Required] ImageType imageType,
            [FromForm, Required] int detailsId,
            [Required] IFormFile image)
        {
            var imageExtension = Path.GetExtension(image.FileName);

            await using var imageStream = image.OpenReadStream();
            var ok = await _eventDispatcher.Dispatch(new ReplaceImageCommand(detailsType, detailsId, imageType, imageExtension, imageStream));

            if (!ok)
            {
                return(BadRequest());
            }
            return(Ok());
        }
Ejemplo n.º 6
0
        public async Task Invoke(HttpContext context, OperationContext operationContext, IRouteSessionTokenExtractor routeSessionTokenExtractor, IApplicationEventDispatcher dispatcher)
        {
            var sessionToken = routeSessionTokenExtractor.ExtractSessionToken(context.Request, "token");

            if (!string.IsNullOrEmpty(sessionToken))
            {
                var session = await dispatcher.Dispatch(new SessionQuery(sessionToken));

                if (session != null)
                {
                    operationContext.Session   = session;
                    operationContext.SessionId = sessionToken;
                }
            }

            await _next(context);
        }
        public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
        {
            var sessionToken = _httpSessionService.ExtractSessionToken(context.HttpContext);

            if (!string.IsNullOrEmpty(sessionToken))
            {
                var session = await _dispatcher.Dispatch(new SessionQuery(sessionToken));

                if (session != null)
                {
                    _operationContext.Session   = session;
                    _operationContext.SessionId = sessionToken;
                    return;
                }
            }

            context.Result = new UnauthorizedResult();
        }
Ejemplo n.º 8
0
        public async Task <IActionResult> ChangePassword(
            [FromForm, Required] string oldPassword,
            [FromForm, Required] string password1,
            [FromForm, Required] string password2)
        {
            var success = await _eventDispatcher.Dispatch(new UpdateUserPasswordCommand(oldPassword, password1, password2));

            if (success)
            {
                return(Ok());
            }
            return(BadRequest());
        }
Ejemplo n.º 9
0
        private async Task <bool> SetSeriesImage(int detailsId, ImageType imageType, string imageExtension, Stream imageStream, CancellationToken cancellationToken)
        {
            var series = await _context.SeriesDetails.FirstOrDefaultAsync(sd => sd.Id == detailsId, cancellationToken);

            if (series == null)
            {
                return(false);
            }

            var tempFile = await SaveTempImage(imageExtension, imageStream, cancellationToken);

            var task = imageType switch
            {
                ImageType.Poster => _dispatcher.Dispatch(new SetImageCommand <IPosterImageOwner>(series, tempFile, $"{Guid.NewGuid()}.jpg")),
                ImageType.Backdrop => _dispatcher.Dispatch(new SetImageCommand <IBackdropImageOwner>(series, tempFile, $"{Guid.NewGuid()}.jpg")),
                _ => throw new ArgumentOutOfRangeException()
            };

            await task;

            return(true);
        }
Ejemplo n.º 10
0
 public Task <SeriesDto?> GetSeries([FromRoute, Required] int seriesId, [FromRoute] int?seasonNo = null)
 => _dispatcher.Dispatch(new SeriesDetailsQuery(seriesId, seasonNo));
Ejemplo n.º 11
0
 public async Task <IEnumerable <string> > List()
 => await _eventDispatcher.Dispatch(new AdminCommandListRequestQuery());
Ejemplo n.º 12
0
 public Task <List <string> > LanguagesForFileId([FromRoute, Required] MediaFileType kind, [FromRoute, Required] int fileId)
 => _dispatcher.Dispatch(new AvailableSubtitleLanguageQuery(kind, fileId));
Ejemplo n.º 13
0
 public Task <SessionDto[]> GetSessions()
 => _dispatcher.Dispatch(new SessionsQuery(_operationContext.Session.UserId));
Ejemplo n.º 14
0
 public async Task <DirectoryEntries> Browse([FromQuery] string?cwd)
 => await _eventDispatcher.Dispatch(new ListDirectoryEntriesQuery(cwd ?? string.Empty));
Ejemplo n.º 15
0
 public Task <InfoDto> FileInfo([FromRoute, Required] int fileId)
 => _eventDispatcher.Dispatch(new FilmInfoLookupQuery(fileId));
Ejemplo n.º 16
0
 public Task <IEnumerable <ContinueWatchingDto> > Continue()
 => _dispatcher.Dispatch(new ContinueWatchingQuery());
Ejemplo n.º 17
0
        private async Task <(string CachePrefix, string CacheOwner, string CacheKey)> CacheKeyGenerator(MediaOverviewQuery _)
        {
            var libs = await _dispatcher.Dispatch(new CurrentUserLibraryAccessQuery());

            return("overview", "sys", string.Join(',', libs.OrderBy(i => i)));
        }