diff --git a/CCharLearn/Pages/Index.razor b/CCharLearn/Pages/Index.razor index 32f06fc..476cb34 100644 --- a/CCharLearn/Pages/Index.razor +++ b/CCharLearn/Pages/Index.razor @@ -15,7 +15,17 @@ } - Start learning! + @((!continueDataExists) ? "Start learning!" : "Start new!") + + Continue + @if (continueDataExists) + { + + @($"CChars left: {continueCharectersLeft}") + + + } + @@ -63,9 +73,13 @@ int numOfChunks = 197; //Exclusive index 0 int selectedChunk = 0; int savedChunks = 0; + const int chunkSize = 50; bool isLoading = false; bool isSavedLocally = false; + bool continueDataExists = false; + int continueCharectersLeft = -1; + protected async override Task OnInitializedAsync() { @@ -79,9 +93,25 @@ async void StartLearning() { await localStorage.SetItemAsync("SelectedChunk", selectedChunk); + await localStorage.SetItemAsync("ContinueLearning", false); navigator.NavigateTo("/Learn"); } + async void ContinueLearning() + { + await localStorage.SetItemAsync("ContinueLearning", true); + navigator.NavigateTo("/Learn"); + } + + async void DeleteContinueData() + { + string[] continueDataKeys = { "ContinueLearning", "ContinueData", "ContinueCharectersLeft" }; + await localStorage.RemoveItemsAsync(continueDataKeys); + continueDataExists = false; + + StateHasChanged(); + } + CChar[]? Charecters; async void SelectedChunk() { @@ -142,4 +172,17 @@ isSavedLocally = true; StateHasChanged(); } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + continueDataExists = await localStorage.ContainKeyAsync("ContinueData"); + } + + if (continueDataExists) + { + continueCharectersLeft = await localStorage.GetItemAsync("ContinueCharectersLeft"); + } + } } \ No newline at end of file diff --git a/CCharLearn/Pages/Learn.razor b/CCharLearn/Pages/Learn.razor index ef881b5..dd00ad2 100644 --- a/CCharLearn/Pages/Learn.razor +++ b/CCharLearn/Pages/Learn.razor @@ -26,12 +26,16 @@ - @* - @if (!Answers.Any(x => x == null)) - { - Avoid - } - *@ + @*True if debug, false for not debug. (TODO: Use an extensĂ­onMethod: https://stackoverflow.com/questions/4696175/preprocessor-directives-in-razor)*@ + @if (true) + { + + @if (!Answers.Any(x => x == null)) + { + Avoid + } + + } @@ -118,6 +122,28 @@ { Program.UpdateUiEvent += OnUiUpdate; + bool continueLast = + await localStorage.ContainKeyAsync("ContinueLearning") + && await localStorage.ContainKeyAsync("ContinueData") + && await localStorage.GetItemAsync("ContinueLearning"); + + if (continueLast) + { + await LoadCharectersFromContinue(); + } + else + { + await LoadCharectersFromChunk(); + } + + Program.CCharsLeft = DontSkipTheseCChar.Count; + Program.InvokeUiUpdate(); + + GenerateQuestion(); + } + + async Task LoadCharectersFromChunk() + { isSavedLocally = await localStorage.ContainKeyAsync("Normalized_chunk_001.json"); int selectedChunk = await localStorage.GetItemAsync("SelectedChunk"); @@ -130,11 +156,15 @@ Charecters = JsonConvert.DeserializeObject(json); } - DontSkipTheseCChar = Charecters.Select(x=>new CCharStats(x)).ToList(); - Program.CCharsLeft = DontSkipTheseCChar.Count; - Program.InvokeUiUpdate(); + DontSkipTheseCChar = Charecters.Select(x => new CCharStats(x)).ToList(); + } - GenerateQuestion(); + async Task LoadCharectersFromContinue() + { + string continueDataJson = await localStorage.GetItemAsStringAsync("ContinueData"); + CCharStats[] charectersLeft = JsonConvert.DeserializeObject(continueDataJson); + + DontSkipTheseCChar = charectersLeft.ToList(); } void OnUiUpdate() => StateHasChanged(); @@ -170,9 +200,11 @@ Answers[i].isCorrect = true; } + + StateHasChanged(); } - void FinishAndKickBackToLearn() + async void FinishAndKickBackToLearn() { Snackbar.Add("Congrats, you have compleated this chunk!", Severity.Success, config => { @@ -182,6 +214,8 @@ Program.UpdateUiEvent -= OnUiUpdate; Program.CCharsLeft = 0; + await localStorage.RemoveItemAsync("ContinueData"); + navigator.NavigateTo(""); } @@ -221,9 +255,20 @@ } } + await SaveContinueData(); + GenerateQuestion(); } + async Task SaveContinueData() + { + CCharStats[] charectersLeft = DontSkipTheseCChar.ToArray(); + string continueDataJson = JsonConvert.SerializeObject(charectersLeft); + + await localStorage.SetItemAsStringAsync("ContinueData", continueDataJson); + await localStorage.SetItemAsync("ContinueCharectersLeft", charectersLeft.Length); + } + public class Answer { public Answer() @@ -260,6 +305,7 @@ CCharStats correctCCharStats = DontSkipTheseCChar.First(x => x.cchar == correctChar); return correctCCharStats; } + public void increaseCCharStat(CCharStats stats, StatType statType) { int correctStatsIndex = DontSkipTheseCChar.IndexOf(stats); @@ -275,7 +321,7 @@ } } - public void RemoveCCharFromSelection(bool ignoreSelection = false) + public async void RemoveCCharFromSelection(bool ignoreSelection = false) { CCharStats correctCCharStats = GetCorrectCCharStats(); @@ -294,6 +340,9 @@ Console.WriteLine("Remaining CChars: " + DontSkipTheseCChar); Program.CCharsLeft = DontSkipTheseCChar.Count; Program.InvokeUiUpdate(); + + await SaveContinueData(); + GenerateQuestion(); } diff --git a/CCharLearn/wwwroot/index.html b/CCharLearn/wwwroot/index.html index 9457910..6f53f7f 100644 --- a/CCharLearn/wwwroot/index.html +++ b/CCharLearn/wwwroot/index.html @@ -24,7 +24,7 @@ - +