1
0
mirror of https://github.com/Radarr/Radarr.git synced 2026-04-27 22:57:09 -04:00

New: Use ASP.NET Core instead of Nancy

This commit is contained in:
ta264
2021-10-21 21:04:19 +01:00
committed by Qstick
parent c14ef7bee7
commit 2d53ec24f8
160 changed files with 2866 additions and 3657 deletions
@@ -1,8 +1,6 @@
using System;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Nancy;
using NLog;
using NzbDrone.Common.Disk;
using NzbDrone.Common.EnvironmentInfo;
@@ -29,19 +27,16 @@ namespace Radarr.Http.Frontend.Mappers
protected string HtmlPath;
protected string UrlBase;
protected override Task<byte[]> GetContent(string filePath)
protected override Stream GetContentStream(string filePath)
{
var text = GetHtmlText();
var data = Encoding.UTF8.GetBytes(text);
return Task.FromResult(data);
}
public async override Task<Response> GetResponse(string resourceUrl)
{
var response = await base.GetResponse(resourceUrl);
response.Headers["X-UA-Compatible"] = "IE=edge";
return response;
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(text);
writer.Flush();
stream.Position = 0;
return stream;
}
protected string GetHtmlText()
@@ -1,5 +1,4 @@
using System.Threading.Tasks;
using Nancy;
using Microsoft.AspNetCore.Mvc;
namespace Radarr.Http.Frontend.Mappers
{
@@ -7,6 +6,6 @@ namespace Radarr.Http.Frontend.Mappers
{
string Map(string resourceUrl);
bool CanHandle(string resourceUrl);
Task<Response> GetResponse(string resourceUrl);
IActionResult GetResponse(string resourceUrl);
}
}
@@ -1,7 +1,8 @@
using System;
using System.Net;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Nancy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.StaticFiles;
using NzbDrone.Core.MediaCover;
namespace Radarr.Http.Frontend.Mappers
@@ -11,10 +12,12 @@ namespace Radarr.Http.Frontend.Mappers
private readonly Regex _regex = new Regex(@"/MediaCoverProxy/(?<hash>\w+)/(?<filename>(.+)\.(jpg|png|gif))");
private readonly IMediaCoverProxy _mediaCoverProxy;
private readonly IContentTypeProvider _mimeTypeProvider;
public MediaCoverProxyMapper(IMediaCoverProxy mediaCoverProxy)
{
_mediaCoverProxy = mediaCoverProxy;
_mimeTypeProvider = new FileExtensionContentTypeProvider();
}
public string Map(string resourceUrl)
@@ -27,13 +30,13 @@ namespace Radarr.Http.Frontend.Mappers
return resourceUrl.StartsWith("/MediaCoverProxy/", StringComparison.InvariantCultureIgnoreCase);
}
public Task<Response> GetResponse(string resourceUrl)
public IActionResult GetResponse(string resourceUrl)
{
var match = _regex.Match(resourceUrl);
if (!match.Success)
{
return Task.FromResult<Response>(new NotFoundResponse());
return new StatusCodeResult((int)HttpStatusCode.NotFound);
}
var hash = match.Groups["hash"].Value;
@@ -41,7 +44,12 @@ namespace Radarr.Http.Frontend.Mappers
var imageData = _mediaCoverProxy.GetImage(hash);
return Task.FromResult<Response>(new ByteArrayResponse(imageData, MimeTypes.GetMimeType(filename)));
if (!_mimeTypeProvider.TryGetContentType(filename, out var contentType))
{
contentType = "application/octet-stream";
}
return new FileContentResult(imageData, contentType);
}
}
}
@@ -1,7 +1,7 @@
using System;
using System.IO;
using System.Threading.Tasks;
using Nancy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.StaticFiles;
using NLog;
using NzbDrone.Common.Disk;
using NzbDrone.Common.EnvironmentInfo;
@@ -13,14 +13,14 @@ namespace Radarr.Http.Frontend.Mappers
private readonly IDiskProvider _diskProvider;
private readonly Logger _logger;
private readonly StringComparison _caseSensitive;
private static readonly NotFoundResponse NotFoundResponse = new NotFoundResponse();
private readonly IContentTypeProvider _mimeTypeProvider;
protected StaticResourceMapperBase(IDiskProvider diskProvider, Logger logger)
{
_diskProvider = diskProvider;
_logger = logger;
_mimeTypeProvider = new FileExtensionContentTypeProvider();
_caseSensitive = RuntimeInfo.IsProduction ? DiskProviderBase.PathStringComparison : StringComparison.OrdinalIgnoreCase;
}
@@ -28,33 +28,28 @@ namespace Radarr.Http.Frontend.Mappers
public abstract bool CanHandle(string resourceUrl);
public async virtual Task<Response> GetResponse(string resourceUrl)
public virtual IActionResult GetResponse(string resourceUrl)
{
var filePath = Map(resourceUrl);
if (_diskProvider.FileExists(filePath, _caseSensitive))
{
var data = await GetContent(filePath).ConfigureAwait(false);
if (!_mimeTypeProvider.TryGetContentType(filePath, out var contentType))
{
contentType = "application/octet-stream";
}
return new ByteArrayResponse(data, MimeTypes.GetMimeType(filePath));
return new FileStreamResult(GetContentStream(filePath), contentType);
}
_logger.Warn("File {0} not found", filePath);
return NotFoundResponse;
return null;
}
protected async virtual Task<byte[]> GetContent(string filePath)
protected virtual Stream GetContentStream(string filePath)
{
using (var output = new MemoryStream())
{
using (var file = File.OpenRead(filePath))
{
await file.CopyToAsync(output).ConfigureAwait(false);
}
return output.ToArray();
}
return File.OpenRead(filePath);
}
}
}