1
0
mirror of synced 2024-12-22 11:25:54 +01:00
TaikoLocalServer/TaikoWebUI/Pages/HighScores.razor.cs

87 lines
3.4 KiB
C#
Raw Normal View History

namespace TaikoWebUI.Pages;
2024-03-17 20:46:47 +01:00
public partial class HighScores
{
[Parameter]
public int Baid { get; set; }
private SongBestResponse? response;
private UserSetting? userSetting;
private Dictionary<Difficulty, List<SongBestData>> songBestDataMap = new();
private readonly List<BreadcrumbItem> breadcrumbs = new();
private int selectedDifficultyTab;
private Dictionary<uint, MusicDetail> musicDetailDictionary = new();
2024-03-17 20:46:47 +01:00
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
if (AuthService.LoginRequired && !AuthService.IsLoggedIn)
{
await AuthService.LoginWithAuthToken();
}
2024-03-17 20:46:47 +01:00
response = await Client.GetFromJsonAsync<SongBestResponse>($"api/PlayData/{Baid}");
response.ThrowIfNull();
userSetting = await Client.GetFromJsonAsync<UserSetting>($"api/UserSettings/{Baid}");
var songNameLanguage = await LocalStorage.GetItemAsync<string>("songNameLanguage");
musicDetailDictionary = await GameDataService.GetMusicDetailDictionary();
2024-03-17 20:46:47 +01:00
response.SongBestData.ForEach(data =>
{
var songId = data.SongId;
data.Genre = GameDataService.GetMusicGenreBySongId(musicDetailDictionary, songId);
data.MusicName = GameDataService.GetMusicNameBySongId(musicDetailDictionary, songId, string.IsNullOrEmpty(songNameLanguage) ? "ja" : songNameLanguage);
data.MusicArtist = GameDataService.GetMusicArtistBySongId(musicDetailDictionary, songId, string.IsNullOrEmpty(songNameLanguage) ? "ja" : songNameLanguage);
2024-03-17 20:46:47 +01:00
});
songBestDataMap = response.SongBestData.GroupBy(data => data.Difficulty)
.ToDictionary(data => data.Key,
data => data.ToList());
foreach (var songBestDataList in songBestDataMap.Values)
{
songBestDataList.Sort((data1, data2) => GameDataService.GetMusicIndexBySongId(musicDetailDictionary, data1.SongId)
.CompareTo(GameDataService.GetMusicIndexBySongId(musicDetailDictionary, data2.SongId)));
2024-03-17 20:46:47 +01:00
}
2024-05-17 00:32:46 +02:00
// Set last selected tab from local storage
2024-05-17 00:32:46 +02:00
selectedDifficultyTab = await LocalStorage.GetItemAsync<int>($"highScoresTab");
// Breadcrumbs
2024-05-17 00:32:46 +02:00
if (AuthService.IsLoggedIn && !AuthService.IsAdmin)
2024-03-17 20:46:47 +01:00
{
breadcrumbs.Add(new BreadcrumbItem(Localizer["Dashboard"], href: "/"));
2024-03-17 20:46:47 +01:00
}
else
{
breadcrumbs.Add(new BreadcrumbItem(Localizer["Users"], href: "/Users"));
2024-03-17 20:46:47 +01:00
};
breadcrumbs.Add(new BreadcrumbItem($"{userSetting?.MyDonName}", href: null, disabled: true));
breadcrumbs.Add(new BreadcrumbItem(Localizer["High Scores"], href: $"/Users/{Baid}/HighScores", disabled: false));
2024-03-17 20:46:47 +01:00
}
private async Task OnFavoriteToggled(SongBestData data)
{
var request = new SetFavoriteRequest
{
Baid = (uint)Baid,
IsFavorite = !data.IsFavorite,
SongId = data.SongId
};
var result = await Client.PostAsJsonAsync("api/FavoriteSongs", request);
if (result.IsSuccessStatusCode)
{
data.IsFavorite = !data.IsFavorite;
}
}
private async Task OnTabChanged(int index)
2024-03-17 20:46:47 +01:00
{
selectedDifficultyTab = index;
2024-05-17 00:32:46 +02:00
await LocalStorage.SetItemAsync($"highScoresTab", selectedDifficultyTab);
2024-03-17 20:46:47 +01:00
}
}