Skip to content

Commit de076f1

Browse files
authored
Merge pull request #19 from Syriiin/fix/missing-beatmap-crash
Fix crashing on missing beatmaps
2 parents 5506dfd + e656d9f commit de076f1

File tree

4 files changed

+20
-16
lines changed

4 files changed

+20
-16
lines changed

Difficalcy.Tests/DummyCalculatorServiceTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ protected override DummyCalculation CalculatePerformance(DummyScore score, objec
4545
protected override object DeserialiseDifficultyAttributes(string difficultyAttributesJson) =>
4646
double.Parse(difficultyAttributesJson);
4747

48-
protected override Task<bool> EnsureBeatmap(string beatmapId) =>
48+
protected override Task EnsureBeatmap(string beatmapId) =>
4949
Task.FromResult(true);
5050
}
5151

Difficalcy/Services/IBeatmapProvider.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace Difficalcy.Services
55
{
66
public interface IBeatmapProvider
77
{
8-
public Task<bool> EnsureBeatmap(string beatmapId);
8+
public Task EnsureBeatmap(string beatmapId);
99

1010
public Stream GetBeatmapStream(string beatmapId);
1111
}

Difficalcy/Services/TestBeatmapProvider.cs

+12-9
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,30 @@
22
using System.IO;
33
using System.Reflection;
44
using System.Threading.Tasks;
5+
using Microsoft.AspNetCore.Http;
56

67
namespace Difficalcy.Services
78
{
89
public class TestBeatmapProvider(string resourceAssemblyName) : IBeatmapProvider
910
{
10-
public Task<bool> EnsureBeatmap(string beatmapId)
11+
public Task EnsureBeatmap(string beatmapId)
1112
{
12-
var resourceName = $"{resourceAssemblyName}.Resources.{beatmapId}";
13-
var info = ResourceAssembly.GetManifestResourceInfo(resourceName);
14-
return Task.FromResult(info != null);
13+
var resourceName = GetResourceName(beatmapId);
14+
_ = ResourceAssembly.GetManifestResourceInfo(resourceName) ?? throw new BadHttpRequestException($"Beatmap not found: {beatmapId}");
15+
return Task.CompletedTask;
1516
}
1617

1718
public Stream GetBeatmapStream(string beatmapId)
19+
{
20+
var resourceName = GetResourceName(beatmapId);
21+
return ResourceAssembly.GetManifestResourceStream(resourceName);
22+
}
23+
24+
private string GetResourceName(string beatmapId)
1825
{
1926
var resourceNamespace = "Testing.Beatmaps";
2027
var resourceName = $"{resourceNamespace}.{beatmapId}.osu";
21-
var fullResourceName = $"{resourceAssemblyName}.Resources.{resourceName}";
22-
var stream = ResourceAssembly.GetManifestResourceStream(fullResourceName);
23-
if (stream == null)
24-
throw new Exception($@"Unable to find resource ""{fullResourceName}"" in assembly ""{resourceAssemblyName}""");
25-
return stream;
28+
return $"{resourceAssemblyName}.Resources.{resourceName}";
2629
}
2730

2831
private Assembly ResourceAssembly

Difficalcy/Services/WebBeatmapProvider.cs

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.IO;
22
using System.Net.Http;
33
using System.Threading.Tasks;
4+
using Microsoft.AspNetCore.Http;
45
using Microsoft.Extensions.Configuration;
56

67
namespace Difficalcy.Services
@@ -10,21 +11,21 @@ public class WebBeatmapProvider(IConfiguration configuration) : IBeatmapProvider
1011
private readonly string _beatmapDirectory = configuration["BEATMAP_DIRECTORY"];
1112
private readonly HttpClient _httpClient = new();
1213

13-
public async Task<bool> EnsureBeatmap(string beatmapId)
14+
public async Task EnsureBeatmap(string beatmapId)
1415
{
1516
var beatmapPath = GetBeatmapPath(beatmapId);
1617
if (!File.Exists(beatmapPath))
1718
{
1819
using var response = await _httpClient.GetAsync($"https://osu.ppy.sh/osu/{beatmapId}");
1920
if (!response.IsSuccessStatusCode)
20-
{
21-
return false;
22-
}
21+
throw new BadHttpRequestException("Beatmap not found");
2322

2423
using var fs = new FileStream(beatmapPath, FileMode.CreateNew);
24+
if (fs.Length == 0)
25+
throw new BadHttpRequestException("Beatmap not found");
26+
2527
await response.Content.CopyToAsync(fs);
2628
}
27-
return true;
2829
}
2930

3031
public Stream GetBeatmapStream(string beatmapId)

0 commit comments

Comments
 (0)