1
0
mirror of synced 2024-11-28 00:20:53 +01:00
TaikoLocalServer/TaikoWebUI/Services/GameDataService.cs
2022-09-10 01:27:20 +08:00

53 lines
1.7 KiB
C#

using System.Collections.Immutable;
using System.Net.Http.Json;
using TaikoWebUI.Shared.Models;
using Throw;
namespace TaikoWebUI.Services;
public class GameDataService : IGameDataService
{
private readonly HttpClient client;
private readonly Dictionary<uint, string> musicNameMap = new();
private readonly Dictionary<uint, string> musicArtistMap = new();
public GameDataService(HttpClient client)
{
this.client = client;
}
public async Task InitializeAsync(string dataBaseUrl)
{
var musicInfo = await client.GetFromJsonAsync<MusicInfo>($"{dataBaseUrl}/data/musicinfo.json");
var wordList = await client.GetFromJsonAsync<WordList>($"{dataBaseUrl}/data/wordlist.json");
musicInfo.ThrowIfNull();
wordList.ThrowIfNull();
var dict = wordList.WordListEntries.GroupBy(entry => entry.Key)
.ToImmutableDictionary(group => group.Key, group => group.First());
foreach (var music in musicInfo.Items)
{
var songNameKey = $"song_{music.Id}";
var songArtistKey = $"song_sub_{music.Id}";
var musicName = dict.GetValueOrDefault(songNameKey, new WordListEntry());
var musicArtist = dict.GetValueOrDefault(songArtistKey, new WordListEntry());
musicNameMap.TryAdd(music.SongId, musicName.JapaneseText);
musicArtistMap.TryAdd(music.SongId, musicArtist.JapaneseText);
}
}
public string GetMusicNameBySongId(uint songId)
{
return musicNameMap.GetValueOrDefault(songId, string.Empty);
}
public string GetMusicArtistBySongId(uint songId)
{
return musicArtistMap.GetValueOrDefault(songId, string.Empty);
}
}