Ejemplo n.º 1
0
        public async Task <object> GetServersAsync(
            [FromServices] HttpClient httpClient,
            [FromServices] IServerRepository serverRepository)
        {
            var accept  = HttpContext.Request.Headers[HeaderNames.Accept];
            var accepts = accept
                          .SelectMany(x => x.Split(',', StringSplitOptions.RemoveEmptyEntries))
                          .ToArray();
            var returnJson =
                accepts.Contains(MimeTypes.ApplicationJson, StringComparer.InvariantCultureIgnoreCase) ||
                accepts.Contains(MimeTypes.TextJson, StringComparer.InvariantCultureIgnoreCase);

            try
            {
                // A good time to clean up any expired servers
                await DoServerCleanupAsync(serverRepository);

#if DEBUG
                var servers = await GetServersFromLiveSiteAsync(httpClient);
#else
                var servers = await serverRepository.GetAllAsync();
#endif
                if (returnJson)
                {
                    var response = new JGetServersResponse()
                    {
                        status  = JStatus.OK,
                        Servers = servers
                    };
                    return(ConvertResponse(response));
                }
                else
                {
                    servers = servers
                              .OrderByDescending(x => x.Players)
                              .ThenBy(x => x.RequiresPassword)
                              .ThenByNaturalDescending(x => x.Version)
                              .ThenBy(x => x.Name)
                              .ToArray();
                    return(View("Views/Servers.cshtml", servers));
                }
            }
            catch
            {
                var msg = "Unable to connect to fetch servers.";
                if (returnJson)
                {
                    return(ConvertResponse(JResponse.Error(msg)));
                }
                else
                {
                    return(StatusCode(StatusCodes.Status500InternalServerError, msg));
                }
            }
        }
Ejemplo n.º 2
0
        public async Task <Unit> Handle(RecyclerStartCommand request, CancellationToken cancellationToken)
        {
            _logger.LogInformation($"Iniciando processo de reciclagem de vídeos com mais de {request.Days} dias.");

            var recycler = new Recycler();

            _recyclerRepository.Add(recycler);

            await _recyclerRepository.SaveChangesAsync();

            var servers = await _serverRepository.GetAllAsync();

            foreach (var server in servers)
            {
                var date = Clock.Now.Date.AddDays(-request.Days);

                var oldVideos = server.Videos.Where(x => x.CreatedDate.Date <= date);

                _logger.LogInformation($"Reciclando {oldVideos.Count()} vídeos do servidor {server.Name}.");

                foreach (var video in oldVideos)
                {
                    await _videoRepository.RemoveContent(video.Path);

                    _serverRepository.RemoveVideo(video);

                    _logger.LogInformation($"Vídeo {video.Description} removido do servidor {server.Name}");
                }
            }

            recycler.Executed();

            await _recyclerRepository.SaveChangesAsync();

            return(Unit.Value);
        }