| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | using MediaBrowser.Common.IO;using MediaBrowser.Controller.Net;using MediaBrowser.Controller.Themes;using MediaBrowser.Model.Themes;using ServiceStack;using System;using System.Collections.Generic;using System.IO;using System.Linq;namespace MediaBrowser.Api{    [Route("/Themes", "GET", Summary = "Gets a list of available themes for an app")]    public class GetAppThemes : IReturn<List<AppThemeInfo>>    {        [ApiMember(Name = "App", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]        public string App { get; set; }    }    [Route("/Themes/Info", "GET", Summary = "Gets an app theme")]    public class GetAppTheme : IReturn<AppTheme>    {        [ApiMember(Name = "App", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]        public string App { get; set; }        [ApiMember(Name = "Name", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]        public string Name { get; set; }    }    [Route("/Themes/Images", "GET", Summary = "Gets an app theme")]    public class GetAppThemeImage    {        [ApiMember(Name = "App", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]        public string App { get; set; }        [ApiMember(Name = "Theme", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]        public string Theme { get; set; }        [ApiMember(Name = "Name", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]        public string Name { get; set; }        [ApiMember(Name = "CacheTag", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]        public string CacheTag { get; set; }    }    [Route("/Themes", "POST", Summary = "Saves a theme")]    public class SaveTheme : AppTheme, IReturnVoid    {    }    [Authenticated]    public class AppThemeService : BaseApiService    {        private readonly IAppThemeManager _themeManager;        private readonly IFileSystem _fileSystem;        public AppThemeService(IAppThemeManager themeManager, IFileSystem fileSystem)        {            _themeManager = themeManager;            _fileSystem = fileSystem;        }        public object Get(GetAppThemes request)        {            var result = _themeManager.GetThemes(request.App).ToList();            return ToOptimizedResult(result);        }        public object Get(GetAppTheme request)        {            var result = _themeManager.GetTheme(request.App, request.Name);            return ToOptimizedResult(result);        }        public void Post(SaveTheme request)        {            _themeManager.SaveTheme(request);        }        public object Get(GetAppThemeImage request)        {            var info = _themeManager.GetImageImageInfo(request.App, request.Theme, request.Name);            var cacheGuid = new Guid(info.CacheTag);            TimeSpan? cacheDuration = null;            if (!string.IsNullOrEmpty(request.CacheTag) && cacheGuid == new Guid(request.CacheTag))            {                cacheDuration = TimeSpan.FromDays(365);            }            var contentType = MimeTypes.GetMimeType(info.Path);            return ResultFactory.GetCachedResult(Request, cacheGuid, null, cacheDuration, () => _fileSystem.GetFileStream(info.Path, FileMode.Open, FileAccess.Read, FileShare.Read), contentType);        }    }}
 |