1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
using MediaBrowser.Common.IO;
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")]
[Api(Description = "Gets a list of available themes for an app")]
public class GetAppThemes : IReturn<List<AppThemeInfo>>
{
[ApiMember(Name = "ApplicationName", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
public string ApplicationName { get; set; }
}
[Route("/Themes/Info", "GET")]
[Api(Description = "Gets an app theme")]
public class GetAppTheme : IReturn<AppTheme>
{
[ApiMember(Name = "ApplicationName", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
public string ApplicationName { get; set; }
[ApiMember(Name = "Name", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
public string Name { get; set; }
}
[Route("/Themes/Images", "GET")]
[Api(Description = "Gets an app theme")]
public class GetAppThemeImage
{
[ApiMember(Name = "ApplicationName", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
public string ApplicationName { get; set; }
[ApiMember(Name = "ThemeName", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
public string ThemeName { get; set; }
[ApiMember(Name = "Name", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
public string Name { get; set; }
[ApiMember(Name = "Tag", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
public string Tag { get; set; }
}
[Route("/Themes", "POST")]
[Api(Description = "Saves a theme")]
public class SaveTheme : AppTheme, IReturnVoid
{
}
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.ApplicationName).ToList();
return ToOptimizedResult(result);
}
public object Get(GetAppTheme request)
{
var result = _themeManager.GetTheme(request.ApplicationName, request.Name);
return ToOptimizedResult(result);
}
public void Post(SaveTheme request)
{
_themeManager.SaveTheme(request);
}
public object Get(GetAppThemeImage request)
{
var info = _themeManager.GetImageImageInfo(request.ApplicationName, request.ThemeName, request.Name);
var cacheGuid = new Guid(info.CacheTag);
TimeSpan? cacheDuration = null;
if (!string.IsNullOrEmpty(request.Tag) && cacheGuid == new Guid(request.Tag))
{
cacheDuration = TimeSpan.FromDays(365);
}
var contentType = MimeTypes.GetMimeType(info.Path);
return ToCachedResult(cacheGuid, info.DateModified, cacheDuration, () => _fileSystem.GetFileStream(info.Path, FileMode.Open, FileAccess.Read, FileShare.Read), contentType);
}
}
}
|