@page "/"
@inject NavigationManager navigator
@inject HttpClient httpClient
@inject Blazored.LocalStorage.ILocalStorageService localStorage
Index
@for (int i = 0; i < numOfChunks; i++)
{
}
Start learning!
@if (Charecters != null)
{
}
@if (!isSavedLocally)
{
@if (isLoading)
{
@($"{savedChunks}/{numOfChunks}")
}
else
{
Load chunks to local storage
}
}
else
{
Chunks are saved locally
}
Delete local storage
@code{
int numOfChunks = 197; //Exclusive index 0
int selectedChunk = 0;
int savedChunks = 0;
bool isLoading = false;
bool isSavedLocally = false;
protected async override Task OnInitializedAsync()
{
if (await localStorage.ContainKeyAsync("Normalized_chunk_001.json"))
isSavedLocally = true;
SelectedChunk();
StateHasChanged();
}
async void StartLearning()
{
await localStorage.SetItemAsync("SelectedChunk", selectedChunk);
navigator.NavigateTo("/Learn");
}
CChar[]? Charecters;
async void SelectedChunk()
{
if (await localStorage.ContainKeyAsync("Normalized_chunk_001.json"))
isSavedLocally = true;
if (!isSavedLocally)
Charecters = await httpClient.GetFromJsonAsync($"Data/Normalized_chunk_{selectedChunk.ToString("000")}.json");
else
{
string json = await localStorage.GetItemAsync($"Normalized_chunk_{selectedChunk.ToString("000")}.json");
Charecters = JsonConvert.DeserializeObject(json);
}
StateHasChanged();
}
async Task LoadAllChunksIntoLocalStorage()
{
isLoading = true;
string[] jsonChunks = new string[numOfChunks];
Parallel.For(0, numOfChunks, async (i)=>
{
await Task.Delay(10*i);
jsonChunks[i] = await httpClient.GetStringAsync($"Data/Normalized_chunk_{i.ToString("000")}.json");
if (string.IsNullOrEmpty(jsonChunks[i])) return;
await localStorage.SetItemAsync($"Normalized_chunk_{i.ToString("000")}.json", jsonChunks[i]);
savedChunks = i + 1;
});
while (jsonChunks.Any(x => x == null))
{
await Task.Delay(1);
StateHasChanged();
}
isLoading = false;
isSavedLocally = true;
StateHasChanged();
}
}