From 2264087322607bbc8b7b62f4275b1c3d8ee0ebb5 Mon Sep 17 00:00:00 2001
From: BOT Alex <44818698+MagicBOTAlex@users.noreply.github.com>
Date: Fri, 14 Jul 2023 04:02:51 +0800
Subject: [PATCH] Added continue learning support!!!
---
CCharLearn/Pages/Index.razor | 45 ++++++++++++++++++++-
CCharLearn/Pages/Learn.razor | 73 +++++++++++++++++++++++++++++------
CCharLearn/wwwroot/index.html | 2 +-
3 files changed, 106 insertions(+), 14 deletions(-)
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 @@
-
+