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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
using MediaBrowser.Api.HttpHandlers;
using MediaBrowser.Common.Net.Handlers;
using MediaBrowser.Common.Plugins;
using MediaBrowser.Controller;
using MediaBrowser.Model.Plugins;
using System;
using System.ComponentModel.Composition;
using System.Net;
using System.Reactive.Linq;
namespace MediaBrowser.Api
{
[Export(typeof(BasePlugin))]
public class Plugin : BaseGenericPlugin<BasePluginConfiguration>
{
public override string Name
{
get { return "Media Browser API"; }
}
protected override void InitializeOnServer()
{
var httpServer = Kernel.Instance.HttpServer;
httpServer.Where(ctx => ctx.Request.Url.LocalPath.IndexOf("/api/", StringComparison.OrdinalIgnoreCase) != -1).Subscribe((ctx) =>
{
BaseHandler handler = GetHandler(ctx);
if (handler != null)
{
handler.ProcessRequest(ctx);
}
});
}
private BaseHandler GetHandler(HttpListenerContext ctx)
{
string localPath = ctx.Request.Url.LocalPath;
if (IsUrlMatch("/api/item", localPath))
{
return new ItemHandler();
}
else if (IsUrlMatch("/api/image", localPath))
{
return new ImageHandler();
}
else if (IsUrlMatch("/api/users", localPath))
{
return new UsersHandler();
}
else if (IsUrlMatch("/api/itemlist", localPath))
{
return new ItemListHandler();
}
else if (IsUrlMatch("/api/genres", localPath))
{
return new GenresHandler();
}
else if (IsUrlMatch("/api/years", localPath))
{
return new YearsHandler();
}
else if (IsUrlMatch("/api/studios", localPath))
{
return new StudiosHandler();
}
else if (IsUrlMatch("/api/plugins", localPath))
{
return new PluginsHandler();
}
else if (IsUrlMatch("/api/pluginconfiguration", localPath))
{
return new PluginConfigurationHandler();
}
else if (IsUrlMatch("/api/static", localPath))
{
return new StaticFileHandler();
}
else if (IsUrlMatch("/api/audio", localPath))
{
return new AudioHandler();
}
else if (IsUrlMatch("/api/video", localPath))
{
return new VideoHandler();
}
else if (IsUrlMatch("/api/person", localPath))
{
return new PersonHandler();
}
else if (IsUrlMatch("/api/genre", localPath))
{
return new GenreHandler();
}
else if (IsUrlMatch("/api/year", localPath))
{
return new YearHandler();
}
else if (IsUrlMatch("/api/studio", localPath))
{
return new StudioHandler();
}
else if (IsUrlMatch("/api/weather", localPath))
{
return new WeatherHandler();
}
else if (IsUrlMatch("/api/serverconfiguration", localPath))
{
return new ServerConfigurationHandler();
}
else if (IsUrlMatch("/api/user", localPath))
{
return new UserHandler();
}
else if (IsUrlMatch("/api/pluginassembly", localPath))
{
return new PluginAssemblyHandler();
}
else if (IsUrlMatch("/api/UserAuthentication", localPath))
{
return new UserAuthenticationHandler();
}
return null;
}
private bool IsUrlMatch(string url, string localPath)
{
return localPath.EndsWith(url, StringComparison.OrdinalIgnoreCase);
}
}
}
|