fix bugs
continuous-integration/drone/push Build is passing Details

master
Maxime BATISTA 2 years ago
parent e25a1042b2
commit 629d2f3cb1

@ -143,43 +143,12 @@ namespace LocalServices.Data
return JsonSerializer.Deserialize<Dictionary<K, V>>(text); return JsonSerializer.Deserialize<Dictionary<K, V>>(text);
} }
private async void Save<K, T>(string fileName, Dictionary<K, T> dict) private void Save<K, T>(string fileName, Dictionary<K, T> dict)
{ {
string json = JsonSerializer.Serialize(dict); string json = JsonSerializer.Serialize(dict);
using (var stream = WaitForFile(dbPath + "/" + fileName, FileMode.Open, FileAccess.Write, FileShare.Write)) Debug.WriteLine(json);
{
var bytes = Encoding.ASCII.GetBytes(json); File.WriteAllText(dbPath + "/" + fileName, json);
await stream.WriteAsync(bytes, 0, bytes.Length);
}
}
// This is a workaround function to wait for a file to be released before opening it.
// This was to fix the Save method that used to throw sometimes as the file were oftenly being scanned by the androids' antivirus.
// Simply wait until the file is released and return it. This function will never return until
private static FileStream WaitForFile(string fullPath, FileMode mode, FileAccess access, FileShare share)
{
for (int attempt = 0 ; attempt < 40; attempt++)
{
FileStream? fs = null;
try
{
fs = new FileStream(fullPath, mode, access, share);
return fs;
}
catch (FileNotFoundException e)
{
throw e;
}
catch (IOException e)
{
Debug.WriteLine(e.Message + " in thread " + Thread.CurrentThread.Name + " " + Thread.CurrentThread.ManagedThreadId);
if (fs != null)
fs.Dispose();
Thread.Sleep(200);
}
}
throw new TimeoutException("Could not access file '" + fullPath + "', maximum attempts reached.");
} }
} }
} }

@ -18,6 +18,7 @@ public partial class OwnedRecipeView : ContentView
BindingContext = info; BindingContext = info;
this.clickCallback = onClickCallback; this.clickCallback = onClickCallback;
this.removeCallback = onRemoveCallback; this.removeCallback = onRemoveCallback;
this.recipeInfo = info;
} }
public bool IsViewing(RecipeInfo info) public bool IsViewing(RecipeInfo info)

@ -1,5 +1,4 @@
using Services; using Services;
using Services;
using Models; using Models;
using ShoopNCook.Views; using ShoopNCook.Views;
@ -11,9 +10,7 @@ public partial class MyRecipesPage : ContentPage
private IRecipesService service; private IRecipesService service;
private Account account; private Account account;
public MyRecipesPage( public MyRecipesPage(Account account, IRecipesService service)
Account account,
IRecipesService service)
{ {
InitializeComponent(); InitializeComponent();
@ -30,7 +27,12 @@ public partial class MyRecipesPage : ContentPage
{ {
RecipesLayout.Children.Add(new OwnedRecipeView(info, () => RecipesLayout.Children.Add(new OwnedRecipeView(info, () =>
{ {
Recipe recipe = service.GetRecipe(info); Recipe? recipe = service.GetRecipe(info);
if (recipe == null)
{
UserNotifier.Error("Could not find recipe");
return;
}
IAccountRecipesPreferencesService preferences = service.GetPreferencesOf(account); IAccountRecipesPreferencesService preferences = service.GetPreferencesOf(account);
Shell.Current.Navigation.PushAsync(new RecipePage(recipe, preferences, 1)); Shell.Current.Navigation.PushAsync(new RecipePage(recipe, preferences, 1));
}, },

Loading…
Cancel
Save