diff --git a/.editorconfig b/.editorconfig index a0c05f8..8852f14 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,4 +1,7 @@ [*.cs] # CS0618: Le type ou le membre est obsolète -dotnet_diagnostic.CS0618.severity = silent +dotnet_diagnostic.CS0618.severity = silent + +# CS1998: Async method lacks 'await' operators and will run synchronously +dotnet_diagnostic.CS1998.severity = none \ No newline at end of file diff --git a/Controllers/MorePageController.cs b/Controllers/MorePageController.cs index 5b5fd56..b2ffb52 100644 --- a/Controllers/MorePageController.cs +++ b/Controllers/MorePageController.cs @@ -24,14 +24,14 @@ namespace ShoopNCook.Controllers app.ForceLogin(); } - public void GoToMyRecipesPage() + public async void GoToMyRecipesPage() { - Shell.Current.Navigation.PushAsync(new MyRecipesPage(account, endpoint.RecipesService)); + await Shell.Current.Navigation.PushAsync(new MyRecipesPage(account, endpoint.RecipesService)); } - public void GoToProfilePage() + public async void GoToProfilePage() { - Shell.Current.Navigation.PushAsync(new ProfilePage(account)); + await Shell.Current.Navigation.PushAsync(new ProfilePage(account)); } } } diff --git a/LocalServices/Data/CatastrophicPerformancesDatabase.cs b/LocalServices/Data/CatastrophicPerformancesDatabase.cs index 32c48c1..451a424 100644 --- a/LocalServices/Data/CatastrophicPerformancesDatabase.cs +++ b/LocalServices/Data/CatastrophicPerformancesDatabase.cs @@ -5,6 +5,8 @@ using System.Collections.Immutable; using System.Linq; using System.Runtime.Serialization; using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; using System.Threading.Tasks; namespace LocalEndpoint.Data @@ -62,9 +64,11 @@ namespace LocalEndpoint.Data Save(ACCOUNTS_FILENAME, ACCOUNTS_SERIALIZER, accountsData); } - public Recipe GetRecipe(Guid id) + public Recipe? GetRecipe(Guid id) { - return ConvertRecipeDataToRecipe(recipesData[id]); + if (recipesData.TryGetValue(id, out RecipeData? data)) + return ConvertRecipeDataToRecipe(data); + return null; } public RecipeRate GetRecipeRate(Guid user, Guid recipe) @@ -72,38 +76,38 @@ namespace LocalEndpoint.Data return usersData[user].Rates[recipe]; } - public void InsertInUserList(Guid userId, Guid recipeId, uint persAmount) + public async void InsertInUserList(Guid userId, Guid recipeId, uint persAmount) { usersData[userId].RecipesList[recipeId] = persAmount; Save(USERS_FILENAME, USERS_SERIALIZER, usersData); } - public void RemoveFromUserList(Guid userId, Guid recipeId) + public async void RemoveFromUserList(Guid userId, Guid recipeId) { usersData[userId].RecipesList.Remove(recipeId); Save(USERS_FILENAME, USERS_SERIALIZER, usersData); } - public void InsertRecipe(Recipe recipe) + public async void InsertRecipe(Recipe recipe) { recipesData[recipe.Info.Id] = new RecipeData(recipe.Info, recipe.Owner.Id, recipe.Ingredients, recipe.Steps); Save(RECIPES_FILENAME, RECIPES_SERIALIZER, recipesData); } - public void InsertUser(User user) + public async void InsertUser(User user) { usersData[user.Id] = new UserData(user, new Dictionary(), new Dictionary()); Save(USERS_FILENAME, USERS_SERIALIZER, usersData); } - public void InsertRate(Guid userId, Guid recipeId, RecipeRate rate) + public async void InsertRate(Guid userId, Guid recipeId, RecipeRate rate) { usersData[userId].Rates[recipeId] = rate; Save(USERS_FILENAME, USERS_SERIALIZER, usersData); } - public void RemoveRecipe(Guid id) + public async void RemoveRecipe(Guid id) { recipesData.Remove(id); Save(RECIPES_FILENAME, RECIPES_SERIALIZER, recipesData); @@ -141,19 +145,16 @@ namespace LocalEndpoint.Data if (fileInfo.Length == 0) return new Dictionary(); //file is empty thus there is nothing to deserialize - Console.WriteLine(File.ReadAllText(file)); - using (var stream = File.OpenRead(file)) - return deserializer.ReadObject(stream) as Dictionary ?? throw new Exception("object read from " + file + " is not a dictionnary"); + string text = File.ReadAllText(file); + + return JsonSerializer.Deserialize>(text); } - private void Save(string fileName, DataContractSerializer serializer, Dictionary dict) + private async void Save(string fileName, DataContractSerializer serializer, Dictionary dict) { - using (var stream = File.OpenWrite(dbPath + "/" + fileName)) - { - serializer.WriteObject(stream, dict); - stream.Flush(); - } + string json = JsonSerializer.Serialize(dict); + File.WriteAllText(dbPath + "/" + fileName, json); } } diff --git a/LocalServices/Data/Database.cs b/LocalServices/Data/Database.cs index 130093a..03f3975 100644 --- a/LocalServices/Data/Database.cs +++ b/LocalServices/Data/Database.cs @@ -9,7 +9,7 @@ namespace LocalEndpoint.Data public interface Database { - public Recipe GetRecipe(Guid id); + public Recipe? GetRecipe(Guid id); public RecipeRate GetRecipeRate(Guid user, Guid recipe); diff --git a/LocalServices/RecipesService.cs b/LocalServices/RecipesService.cs index 8969e9e..f47b19e 100644 --- a/LocalServices/RecipesService.cs +++ b/LocalServices/RecipesService.cs @@ -21,7 +21,7 @@ namespace LocalEndpoint return db.ListAllRecipes().Take(4).ToImmutableList().ConvertAll(v => v.Info); } - public Recipe GetRecipe(RecipeInfo info) + public Recipe? GetRecipe(RecipeInfo info) { return db.GetRecipe(info.Id); } diff --git a/Services/IRecipesService.cs b/Services/IRecipesService.cs index 88e8b65..232da18 100644 --- a/Services/IRecipesService.cs +++ b/Services/IRecipesService.cs @@ -8,7 +8,7 @@ namespace Endpoint { public ImmutableList PopularRecipes(); - public Recipe GetRecipe(RecipeInfo info); + public Recipe? GetRecipe(RecipeInfo info); public IAccountOwnedRecipes GetRecipesOf(Account account); public IAccountRecipesPreferences GetPreferencesOf(Account account); diff --git a/Views/ConfirmMail.xaml b/Views/ConfirmMail.xaml index ae22bca..a4458ea 100644 --- a/Views/ConfirmMail.xaml +++ b/Views/ConfirmMail.xaml @@ -37,11 +37,9 @@ + RowDefinitions="*, Auto, Auto">