Skip to content

Commit 5253fe3

Browse files
committed
fix: ensure audio/flac content-type mapping for flac files.
1 parent b2d0f2a commit 5253fe3

File tree

6 files changed

+30
-14
lines changed

6 files changed

+30
-14
lines changed

backend/Api/Controllers/GetWebdavItem/GetWebdavItemController.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
using System.Text;
22
using Microsoft.AspNetCore.Http;
33
using Microsoft.AspNetCore.Mvc;
4-
using Microsoft.AspNetCore.StaticFiles;
54
using NWebDav.Server.Stores;
65
using NzbWebDAV.Config;
76
using NzbWebDAV.Extensions;
87
using NzbWebDAV.Par2Recovery;
8+
using NzbWebDAV.Utils;
99
using NzbWebDAV.WebDav;
1010

1111
namespace NzbWebDAV.Api.Controllers.GetWebdavItem;
@@ -14,8 +14,6 @@ namespace NzbWebDAV.Api.Controllers.GetWebdavItem;
1414
[Route("view/{*path}")]
1515
public class GetWebdavItemController(DatabaseStore store, ConfigManager configManager) : ControllerBase
1616
{
17-
private static readonly FileExtensionContentTypeProvider MimeTypeProvider = new();
18-
1917
private async Task<Stream> GetWebdavItem(GetWebdavItemRequest request)
2018
{
2119
var item = await store.GetItemAsync(request.Item, HttpContext.RequestAborted).ConfigureAwait(false);
@@ -103,8 +101,7 @@ private static string GetContentType(string item)
103101
return extension == ".mkv" ? "video/webm"
104102
: extension == ".rclonelink" ? "text/plain"
105103
: extension == ".nfo" ? "text/plain"
106-
: MimeTypeProvider.TryGetContentType(Path.GetFileName(item), out var mimeType) ? mimeType
107-
: "application/octet-stream";
104+
: ContentTypeUtil.GetContentType(Path.GetFileName(item));
108105
}
109106

110107
private static string GetContentDisposition(string filename, bool shouldDownload)

backend/Api/SabControllers/AddFile/AddFileRequest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace NzbWebDAV.Api.SabControllers.AddFile;
88
public class AddFileRequest()
99
{
1010
public string FileName { get; init; }
11-
public string? MimeType { get; init; }
11+
public string? ContentType { get; init; }
1212
public Stream NzbFileStream { get; init; }
1313
public string Category { get; init; }
1414
public QueueItem.PriorityOption Priority { get; init; }
@@ -26,7 +26,7 @@ public static async Task<AddFileRequest> New(HttpContext context, ConfigManager
2626
return new AddFileRequest()
2727
{
2828
FileName = file.FileName,
29-
MimeType = file.ContentType,
29+
ContentType = file.ContentType,
3030
NzbFileStream = file.OpenReadStream(),
3131
Category = context.GetQueryParam("cat") ?? configManager.GetManualUploadCategory(),
3232
Priority = MapPriorityOption(context.GetQueryParam("priority")),

backend/Api/SabControllers/AddUrl/AddUrlRequest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public static async Task<AddUrlRequest> New(HttpContext context, ConfigManager c
2020
return new AddUrlRequest()
2121
{
2222
FileName = nzbFile.FileName,
23-
MimeType = nzbFile.ContentType,
23+
ContentType = nzbFile.ContentType,
2424
NzbFileStream = nzbFile.FileStream,
2525
Category = context.GetQueryParam("cat") ?? configManager.GetManualUploadCategory(),
2626
Priority = MapPriorityOption(context.GetQueryParam("priority")),

backend/Utils/ContentTypeUtil.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using Microsoft.AspNetCore.StaticFiles;
2+
3+
namespace NzbWebDAV.Utils;
4+
5+
public static class ContentTypeUtil
6+
{
7+
private static readonly FileExtensionContentTypeProvider ContentTypeProvider;
8+
9+
static ContentTypeUtil()
10+
{
11+
// ReSharper disable once UseObjectOrCollectionInitializer
12+
ContentTypeProvider = new FileExtensionContentTypeProvider();
13+
ContentTypeProvider.Mappings[".flac"] = "audio/flac";
14+
}
15+
16+
public static string GetContentType(string fileName)
17+
{
18+
return !ContentTypeProvider.TryGetContentType(Path.GetFileName(fileName), out var contentType)
19+
? "application/octet-stream"
20+
: contentType;
21+
}
22+
}

backend/WebDav/Base/BaseStoreItemPropertyManager.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
using System.Xml.Linq;
2-
using Microsoft.AspNetCore.StaticFiles;
32
using NWebDav.Server;
43
using NWebDav.Server.Props;
4+
using NzbWebDAV.Utils;
55

66
namespace NzbWebDAV.WebDav.Base;
77

88
public class BaseStoreItemPropertyManager() : PropertyManager<BaseStoreItem>(DavProperties)
99
{
10-
private static readonly FileExtensionContentTypeProvider MimeTypeProvider = new();
1110
private static readonly XElement DavResourceType = new(WebDavNamespaces.DavNs + "item");
1211

1312
private static readonly DavProperty<BaseStoreItem>[] DavProperties =
@@ -22,9 +21,7 @@ public class BaseStoreItemPropertyManager() : PropertyManager<BaseStoreItem>(Dav
2221
},
2322
new DavGetContentType<BaseStoreItem>
2423
{
25-
Getter = item => !MimeTypeProvider.TryGetContentType(item.Name, out var mimeType)
26-
? "application/octet-stream"
27-
: mimeType
24+
Getter = item => ContentTypeUtil.GetContentType(item.Name)
2825
},
2926
new DavGetLastModified<BaseStoreItem>
3027
{

backend/WebDav/DatabaseStoreWatchFolder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ protected override async Task<StoreItemResult> CreateItemAsync(CreateItemRequest
5555
var addFileRequest = new AddFileRequest()
5656
{
5757
FileName = request.Name,
58-
MimeType = "application/x-nzb",
58+
ContentType = "application/x-nzb",
5959
Category = configManager.GetManualUploadCategory(),
6060
Priority = QueueItem.PriorityOption.Normal,
6161
PostProcessing = QueueItem.PostProcessingOption.RepairUnpackDelete,

0 commit comments

Comments
 (0)