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);
}
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);
using (var stream = WaitForFile(dbPath + "/" + fileName, FileMode.Open, FileAccess.Write, FileShare.Write))
{
var bytes = Encoding.ASCII.GetBytes(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.");
Debug.WriteLine(json);
File.WriteAllText(dbPath + "/" + fileName, json);
}
}
}

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

@ -1,5 +1,4 @@
using Services;
using Services;
using Models;
using ShoopNCook.Views;
@ -11,9 +10,7 @@ public partial class MyRecipesPage : ContentPage
private IRecipesService service;
private Account account;
public MyRecipesPage(
Account account,
IRecipesService service)
public MyRecipesPage(Account account, IRecipesService service)
{
InitializeComponent();
@ -30,7 +27,12 @@ public partial class MyRecipesPage : ContentPage
{
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);
Shell.Current.Navigation.PushAsync(new RecipePage(recipe, preferences, 1));
},

Loading…
Cancel
Save