コード例 #1
0
ファイル: ImageByNameService.cs プロジェクト: ptkey/jellyfin
        /// <summary>
        /// Gets the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>System.Object.</returns>
        public Task <object> Get(GetGeneralImage request)
        {
            var filename = string.Equals(request.Type, "primary", StringComparison.OrdinalIgnoreCase)
                               ? "folder"
                               : request.Type;

            var paths = BaseItem.SupportedImageExtensions.Select(i => Path.Combine(_appPaths.GeneralPath, request.Name, filename + i)).ToList();

            var path = paths.FirstOrDefault(_fileSystem.FileExists) ?? paths.FirstOrDefault();

            return(_resultFactory.GetStaticFileResult(Request, path));
        }
コード例 #2
0
        public async Task <object> Get(GetShareImage request)
        {
            var share = _sharingManager.GetShareInfo(request.Id);

            if (share == null)
            {
                throw new ResourceNotFoundException();
            }
            if (share.ExpirationDate <= DateTime.UtcNow)
            {
                throw new ResourceNotFoundException();
            }

            var item = _libraryManager.GetItemById(share.ItemId);

            var image = item.GetImageInfo(ImageType.Primary, 0);

            if (image != null)
            {
                if (image.IsLocalFile)
                {
                    return(await _resultFactory.GetStaticFileResult(Request, image.Path).ConfigureAwait(false));
                }

                try
                {
                    // Don't fail the request over this
                    var updatedImage = await _libraryManager.ConvertImageToLocal(item, image, 0).ConfigureAwait(false);

                    return(await _resultFactory.GetStaticFileResult(Request, updatedImage.Path).ConfigureAwait(false));
                }
                catch
                {
                }
            }

            // Grab a dlna icon if nothing else is available
            using (var response = _dlnaManager.GetIcon("logo240.jpg"))
            {
                using (var ms = new MemoryStream())
                {
                    response.Stream.CopyTo(ms);

                    ms.Position = 0;
                    var bytes = ms.ToArray();
                    return(ResultFactory.GetResult(bytes, "image/" + response.Format.ToString().ToLower()));
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Gets the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>System.Object.</returns>
        public async Task <object> Get(GetDashboardResource request)
        {
            if (!_appConfig.HostWebClient() || DashboardUIPath == null)
            {
                throw new ResourceNotFoundException();
            }

            var path = request.ResourceName;

            var contentType = MimeTypes.GetMimeType(path);
            var basePath    = DashboardUIPath;

            // Bounce them to the startup wizard if it hasn't been completed yet
            if (!_serverConfigurationManager.Configuration.IsStartupWizardCompleted &&
                Request.RawUrl.IndexOf("wizard", StringComparison.OrdinalIgnoreCase) == -1 &&
                PackageCreator.IsCoreHtml(path))
            {
                // But don't redirect if an html import is being requested.
                if (path.IndexOf("bower_components", StringComparison.OrdinalIgnoreCase) == -1)
                {
                    Request.Response.Redirect("index.html?start=wizard#!/wizardstart.html");
                    return(null);
                }
            }

            var localizationCulture = GetLocalizationCulture();

            // Don't cache if not configured to do so
            // But always cache images to simulate production
            if (!_serverConfigurationManager.Configuration.EnableDashboardResponseCaching &&
                !contentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase) &&
                !contentType.StartsWith("font/", StringComparison.OrdinalIgnoreCase))
            {
                var stream = await GetResourceStream(basePath, path, localizationCulture).ConfigureAwait(false);

                return(_resultFactory.GetResult(Request, stream, contentType));
            }

            TimeSpan?cacheDuration = null;

            // Cache images unconditionally - updates to image files will require new filename
            // If there's a version number in the query string we can cache this unconditionally
            if (contentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase) || contentType.StartsWith("font/", StringComparison.OrdinalIgnoreCase) || !string.IsNullOrEmpty(request.V))
            {
                cacheDuration = TimeSpan.FromDays(365);
            }

            var cacheKey = (_appHost.ApplicationVersionString + (localizationCulture ?? string.Empty) + path).GetMD5();

            // html gets modified on the fly
            if (contentType.StartsWith("text/html", StringComparison.OrdinalIgnoreCase))
            {
                return(await _resultFactory.GetStaticResult(Request, cacheKey, null, cacheDuration, contentType, () => GetResourceStream(basePath, path, localizationCulture)).ConfigureAwait(false));
            }

            return(await _resultFactory.GetStaticFileResult(Request, _resourceFileManager.GetResourcePath(basePath, path)).ConfigureAwait(false));
        }
コード例 #4
0
        /// <summary>
        /// Gets the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>System.Object.</returns>
        public object Get(GetSwaggerResource request)
        {
            var runningDirectory = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);

            var swaggerDirectory = Path.Combine(runningDirectory, "swagger-ui");

            var requestedFile = Path.Combine(swaggerDirectory, request.ResourceName.Replace('/', '\\'));

            return(HttpResultFactory.GetStaticFileResult(RequestContext, requestedFile));
        }
コード例 #5
0
ファイル: DashboardService.cs プロジェクト: xumix/jellyfin
        /// <summary>
        /// Gets the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>System.Object.</returns>
        public async Task <object> Get(GetDashboardResource request)
        {
            if (!_appConfig.HostWebClient() || DashboardUIPath == null)
            {
                throw new ResourceNotFoundException();
            }

            var path     = request?.ResourceName;
            var basePath = DashboardUIPath;

            // Bounce them to the startup wizard if it hasn't been completed yet
            if (!_serverConfigurationManager.Configuration.IsStartupWizardCompleted &&
                !Request.RawUrl.Contains("wizard", StringComparison.OrdinalIgnoreCase) &&
                Request.RawUrl.Contains("index", StringComparison.OrdinalIgnoreCase))
            {
                Request.Response.Redirect("index.html?start=wizard#!/wizardstart.html");
                return(null);
            }

            return(await _resultFactory.GetStaticFileResult(Request, _resourceFileManager.GetResourcePath(basePath, path)).ConfigureAwait(false));
        }
コード例 #6
0
 public Task <object> GetStaticFileResult(IRequest request, string basePath, string virtualPath, string contentType, TimeSpan?cacheDuration)
 {
     return(_resultFactory.GetStaticFileResult(request, GetResourcePath(basePath, virtualPath)));
 }