Skip to content

Commit 7136f54

Browse files
Merge pull request #3256 from MediaBrowser/beta
Beta
2 parents 8b4724b + aab1b82 commit 7136f54

File tree

977 files changed

+14815
-13374
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

977 files changed

+14815
-13374
lines changed

Docker/Dockerfile

-52
This file was deleted.

Docker/LICENSE

-20
This file was deleted.

Docker/README.md

-26
This file was deleted.

Docker/start.sh

-6
This file was deleted.

MediaBrowser.Api/Dlna/DlnaServerService.cs Emby.Dlna/Api/DlnaServerService.cs

+69-16
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
using MediaBrowser.Controller.Dlna;
22
using System;
33
using System.Collections.Generic;
4-
using System.Globalization;
54
using System.IO;
65
using System.Threading.Tasks;
7-
8-
using MediaBrowser.Controller.IO;
96
using MediaBrowser.Model.IO;
107
using MediaBrowser.Model.Services;
8+
using MediaBrowser.Common.Extensions;
9+
using System.Text;
10+
using MediaBrowser.Controller.Net;
11+
using System.Linq;
1112

12-
namespace MediaBrowser.Api.Dlna
13+
namespace Emby.Dlna.Api
1314
{
1415
[Route("/Dlna/{UuId}/description.xml", "GET", Summary = "Gets dlna server info")]
1516
[Route("/Dlna/{UuId}/description", "GET", Summary = "Gets dlna server info")]
@@ -105,7 +106,7 @@ public class GetIcon
105106
public string Filename { get; set; }
106107
}
107108

108-
public class DlnaServerService : BaseApiService
109+
public class DlnaServerService : IService, IRequiresRequest
109110
{
110111
private readonly IDlnaManager _dlnaManager;
111112
private readonly IContentDirectory _contentDirectory;
@@ -115,13 +116,22 @@ public class DlnaServerService : BaseApiService
115116
private const string XMLContentType = "text/xml; charset=UTF-8";
116117
private readonly IMemoryStreamFactory _memoryStreamProvider;
117118

118-
public DlnaServerService(IDlnaManager dlnaManager, IContentDirectory contentDirectory, IConnectionManager connectionManager, IMediaReceiverRegistrar mediaReceiverRegistrar, IMemoryStreamFactory memoryStreamProvider)
119+
public IRequest Request { get; set; }
120+
private IHttpResultFactory _resultFactory;
121+
122+
public DlnaServerService(IDlnaManager dlnaManager, IHttpResultFactory httpResultFactory, IContentDirectory contentDirectory, IConnectionManager connectionManager, IMediaReceiverRegistrar mediaReceiverRegistrar, IMemoryStreamFactory memoryStreamProvider)
119123
{
120124
_dlnaManager = dlnaManager;
121125
_contentDirectory = contentDirectory;
122126
_connectionManager = connectionManager;
123127
_mediaReceiverRegistrar = mediaReceiverRegistrar;
124128
_memoryStreamProvider = memoryStreamProvider;
129+
_resultFactory = httpResultFactory;
130+
}
131+
132+
private string GetHeader(string name)
133+
{
134+
return Request.Headers[name];
125135
}
126136

127137
public object Get(GetDescriptionXml request)
@@ -130,49 +140,53 @@ public object Get(GetDescriptionXml request)
130140
var serverAddress = url.Substring(0, url.IndexOf("/dlna/", StringComparison.OrdinalIgnoreCase));
131141
var xml = _dlnaManager.GetServerDescriptionXml(Request.Headers.ToDictionary(), request.UuId, serverAddress);
132142

133-
return ResultFactory.GetResult(xml, XMLContentType);
143+
var cacheLength = TimeSpan.FromDays(1);
144+
var cacheKey = Request.RawUrl.GetMD5();
145+
var bytes = Encoding.UTF8.GetBytes(xml);
146+
147+
return _resultFactory.GetStaticResult(Request, cacheKey, null, cacheLength, XMLContentType, () => Task.FromResult<Stream>(new MemoryStream(bytes)));
134148
}
135149

136150
public object Get(GetContentDirectory request)
137151
{
138152
var xml = _contentDirectory.GetServiceXml(Request.Headers.ToDictionary());
139153

140-
return ResultFactory.GetResult(xml, XMLContentType);
154+
return _resultFactory.GetResult(xml, XMLContentType);
141155
}
142156

143157
public object Get(GetMediaReceiverRegistrar request)
144158
{
145159
var xml = _mediaReceiverRegistrar.GetServiceXml(Request.Headers.ToDictionary());
146160

147-
return ResultFactory.GetResult(xml, XMLContentType);
161+
return _resultFactory.GetResult(xml, XMLContentType);
148162
}
149163

150164
public object Get(GetConnnectionManager request)
151165
{
152166
var xml = _connectionManager.GetServiceXml(Request.Headers.ToDictionary());
153167

154-
return ResultFactory.GetResult(xml, XMLContentType);
168+
return _resultFactory.GetResult(xml, XMLContentType);
155169
}
156170

157171
public object Post(ProcessMediaReceiverRegistrarControlRequest request)
158172
{
159173
var response = PostAsync(request.RequestStream, _mediaReceiverRegistrar);
160174

161-
return ResultFactory.GetResult(response.Xml, XMLContentType);
175+
return _resultFactory.GetResult(response.Xml, XMLContentType);
162176
}
163177

164178
public object Post(ProcessContentDirectoryControlRequest request)
165179
{
166180
var response = PostAsync(request.RequestStream, _contentDirectory);
167181

168-
return ResultFactory.GetResult(response.Xml, XMLContentType);
182+
return _resultFactory.GetResult(response.Xml, XMLContentType);
169183
}
170184

171185
public object Post(ProcessConnectionManagerControlRequest request)
172186
{
173187
var response = PostAsync(request.RequestStream, _connectionManager);
174188

175-
return ResultFactory.GetResult(response.Xml, XMLContentType);
189+
return _resultFactory.GetResult(response.Xml, XMLContentType);
176190
}
177191

178192
private ControlResponse PostAsync(Stream requestStream, IUpnpService service)
@@ -188,17 +202,56 @@ private ControlResponse PostAsync(Stream requestStream, IUpnpService service)
188202
});
189203
}
190204

205+
protected string GetPathValue(int index)
206+
{
207+
var pathInfo = Parse(Request.PathInfo);
208+
var first = pathInfo[0];
209+
210+
// backwards compatibility
211+
if (string.Equals(first, "mediabrowser", StringComparison.OrdinalIgnoreCase) ||
212+
string.Equals(first, "emby", StringComparison.OrdinalIgnoreCase))
213+
{
214+
index++;
215+
}
216+
217+
return pathInfo[index];
218+
}
219+
220+
private List<string> Parse(string pathUri)
221+
{
222+
var actionParts = pathUri.Split(new[] { "://" }, StringSplitOptions.None);
223+
224+
var pathInfo = actionParts[actionParts.Length - 1];
225+
226+
var optionsPos = pathInfo.LastIndexOf('?');
227+
if (optionsPos != -1)
228+
{
229+
pathInfo = pathInfo.Substring(0, optionsPos);
230+
}
231+
232+
var args = pathInfo.Split('/');
233+
234+
return args.Skip(1).ToList();
235+
}
236+
191237
public object Get(GetIcon request)
192238
{
193239
using (var response = _dlnaManager.GetIcon(request.Filename))
194240
{
195-
using (var ms = _memoryStreamProvider.CreateNew())
241+
using (var ms = new MemoryStream())
196242
{
197243
response.Stream.CopyTo(ms);
198244

199245
ms.Position = 0;
200246
var bytes = ms.ToArray();
201-
return ResultFactory.GetResult(bytes, "image/" + response.Format.ToString().ToLower());
247+
248+
var contentType = "image/" + response.Format.ToString().ToLower();
249+
250+
var cacheLength = TimeSpan.FromDays(365);
251+
var cacheKey = Request.RawUrl.GetMD5();
252+
253+
return _resultFactory.GetStaticResult(Request, cacheKey, null, cacheLength, contentType, ()=> Task.FromResult<Stream>(new MemoryStream(bytes)));
254+
//return ResultFactory.GetResult(bytes, contentType);
202255
}
203256
}
204257
}
@@ -257,7 +310,7 @@ private object ProcessEventRequest(IEventManager eventManager)
257310

258311
private object GetSubscriptionResponse(EventSubscriptionResponse response)
259312
{
260-
return ResultFactory.GetResult(response.Content, response.ContentType, response.Headers);
313+
return _resultFactory.GetResult(response.Content, response.ContentType, response.Headers);
261314
}
262315
}
263316
}

MediaBrowser.Api/Dlna/DlnaService.cs Emby.Dlna/Api/DlnaService.cs

+5-11
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using MediaBrowser.Model.Dlna;
55
using MediaBrowser.Model.Services;
66

7-
namespace MediaBrowser.Api.Dlna
7+
namespace Emby.Dlna.Api
88
{
99
[Route("/Dlna/ProfileInfos", "GET", Summary = "Gets a list of profiles")]
1010
public class GetProfileInfos : IReturn<DeviceProfileInfo[]>
@@ -41,7 +41,7 @@ public class CreateProfile : DeviceProfile, IReturnVoid
4141
}
4242

4343
[Authenticated(Roles = "Admin")]
44-
public class DlnaService : BaseApiService
44+
public class DlnaService : IService
4545
{
4646
private readonly IDlnaManager _dlnaManager;
4747

@@ -52,23 +52,17 @@ public DlnaService(IDlnaManager dlnaManager)
5252

5353
public object Get(GetProfileInfos request)
5454
{
55-
var result = _dlnaManager.GetProfileInfos().ToArray();
56-
57-
return ToOptimizedResult(result);
55+
return _dlnaManager.GetProfileInfos().ToArray();
5856
}
5957

6058
public object Get(GetProfile request)
6159
{
62-
var result = _dlnaManager.GetProfile(request.Id);
63-
64-
return ToOptimizedResult(result);
60+
return _dlnaManager.GetProfile(request.Id);
6561
}
6662

6763
public object Get(GetDefaultProfile request)
6864
{
69-
var result = _dlnaManager.GetDefaultProfile();
70-
71-
return ToOptimizedResult(result);
65+
return _dlnaManager.GetDefaultProfile();
7266
}
7367

7468
public void Delete(DeleteProfile request)

Emby.Dlna/Common/StateVariable.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using System;
23

34
namespace Emby.Dlna.Common
45
{
@@ -10,7 +11,7 @@ public class StateVariable
1011

1112
public bool SendsEvents { get; set; }
1213

13-
public List<string> AllowedValues { get; set; }
14+
public string[] AllowedValues { get; set; }
1415

1516
public override string ToString()
1617
{
@@ -19,7 +20,7 @@ public override string ToString()
1920

2021
public StateVariable()
2122
{
22-
AllowedValues = new List<string>();
23+
AllowedValues = Array.Empty<string>();
2324
}
2425
}
2526
}

MediaBrowser.Model/Configuration/DlnaOptions.cs Emby.Dlna/Configuration/DlnaOptions.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
namespace MediaBrowser.Model.Configuration
2+
namespace Emby.Dlna.Configuration
33
{
44
public class DlnaOptions
55
{

Emby.Dlna/ConfigurationExtension.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using MediaBrowser.Common.Configuration;
2-
using MediaBrowser.Model.Configuration;
2+
using Emby.Dlna.Configuration;
33
using System.Collections.Generic;
44

55
namespace Emby.Dlna
@@ -16,7 +16,7 @@ public class DlnaConfigurationFactory : IConfigurationFactory
1616
{
1717
public IEnumerable<ConfigurationStore> GetConfigurations()
1818
{
19-
return new List<ConfigurationStore>
19+
return new ConfigurationStore[]
2020
{
2121
new ConfigurationStore
2222
{

0 commit comments

Comments
 (0)