1
0
Fork 0
mirror of https://github.com/Nioux/AideDeJeu.git synced 2025-10-31 15:36:07 +00:00

Async du get database path pour permettre création / copie async

This commit is contained in:
Yan Maniez 2018-10-20 21:57:17 +02:00
parent 7d72713cd4
commit f1a726e6b1
9 changed files with 96 additions and 124 deletions

View file

@ -2,6 +2,7 @@
using Android.Content.PM; using Android.Content.PM;
using System; using System;
using System.IO; using System.IO;
using System.Threading.Tasks;
[assembly: Xamarin.Forms.Dependency(typeof(AideDeJeu.Droid.Version_Android))] [assembly: Xamarin.Forms.Dependency(typeof(AideDeJeu.Droid.Version_Android))]
namespace AideDeJeu.Droid namespace AideDeJeu.Droid
@ -27,7 +28,7 @@ namespace AideDeJeu.Droid
return info.VersionCode; return info.VersionCode;
} }
public string GetDatabasePath(string databaseName) public async Task<string> GetDatabasePathAsync(string databaseName)
{ {
//string path = Environment.GetFolderPath(Environment.SpecialFolder.Personal); //string path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
//string dbPath = Path.Combine(path, databaseName); //string dbPath = Path.Combine(path, databaseName);

View file

@ -1,6 +1,7 @@
using AideDeJeu.Tools; using AideDeJeu.Tools;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using System.Threading.Tasks;
using Windows.ApplicationModel; using Windows.ApplicationModel;
[assembly: Xamarin.Forms.Dependency(typeof(AideDeJeu.UWP.Version_UWP))] [assembly: Xamarin.Forms.Dependency(typeof(AideDeJeu.UWP.Version_UWP))]
@ -22,7 +23,7 @@ namespace AideDeJeu.UWP
return 0; return 0;
} }
public string GetDatabasePath(string databaseName) public async Task<string> GetDatabasePathAsync(string databaseName)
{ {
var documentsDirectoryPath = Windows.Storage.ApplicationData.Current.LocalFolder.Path; var documentsDirectoryPath = Windows.Storage.ApplicationData.Current.LocalFolder.Path;
var path = Path.Combine(documentsDirectoryPath, databaseName); var path = Path.Combine(documentsDirectoryPath, databaseName);

View file

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using System.Threading.Tasks;
namespace AideDeJeu.Tools namespace AideDeJeu.Tools
{ {
@ -8,6 +9,6 @@ namespace AideDeJeu.Tools
{ {
string GetVersion(); string GetVersion();
int GetBuild(); int GetBuild();
string GetDatabasePath(string databaseName); Task<string> GetDatabasePathAsync(string databaseName);
} }
} }

View file

@ -59,7 +59,7 @@ namespace AideDeJeu.ViewModels
public async Task<IEnumerable<SearchedItem>> DeepSearchAllItemsAsync(string searchText) public async Task<IEnumerable<SearchedItem>> DeepSearchAllItemsAsync(string searchText)
{ {
using (var context = new StoreViewModel.AideDeJeuContext()) using (var context = await StoreViewModel.GetDatabaseContextAsync())
{ {
var primary = await context.Items. var primary = await context.Items.
Where(item => item.Name.Contains(searchText)). Where(item => item.Name.Contains(searchText)).

View file

@ -165,7 +165,7 @@ namespace AideDeJeu.ViewModels
return items.Where(item => return items.Where(item =>
{ {
var spell = item; var spell = item;
return return
( (
(Helpers.RemoveDiacritics(spell.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) || (Helpers.RemoveDiacritics(spell.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) ||
(Helpers.RemoveDiacritics(spell.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) (Helpers.RemoveDiacritics(spell.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower()))
@ -311,30 +311,27 @@ namespace AideDeJeu.ViewModels
{ {
public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default) public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default)
{ {
return await Task.Run(() => var levelComparer = new LevelComparer();
var classe = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Class).SelectedKey ?? "";
var niveauMin = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MinLevel).SelectedKey ?? "0";
var niveauMax = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MaxLevel).SelectedKey ?? "9";
var ecole = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.School).SelectedKey ?? "";
var ritual = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Ritual).SelectedKey ?? "";
var source = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Source).SelectedKey ?? "";
using (var context = await StoreViewModel.GetDatabaseContextAsync())
{ {
var levelComparer = new LevelComparer(); return context.SpellsVO.Where(spell =>
var classe = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Class).SelectedKey ?? ""; levelComparer.Compare(spell.Level, niveauMin) >= 0 &&
var niveauMin = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MinLevel).SelectedKey ?? "0"; levelComparer.Compare(spell.Level, niveauMax) <= 0 &&
var niveauMax = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MaxLevel).SelectedKey ?? "9"; spell.Type.ToLower().Contains(ecole.ToLower()) &&
var ecole = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.School).SelectedKey ?? ""; (spell.Source != null && spell.Source.Contains(source)) &&
var ritual = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Ritual).SelectedKey ?? ""; (spell.Classes != null && spell.Classes.Contains(classe)) &&
var source = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Source).SelectedKey ?? ""; (string.IsNullOrEmpty(ritual) || (spell.Ritual != null && spell.Ritual.Contains(ritual))) &&
using (var context = new StoreViewModel.AideDeJeuContext()) (
{ (Helpers.RemoveDiacritics(spell.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) ||
return context.SpellsVO.Where(spell => (Helpers.RemoveDiacritics(spell.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower()))
levelComparer.Compare(spell.Level, niveauMin) >= 0 && )).OrderBy(spell => spell.Name).ToList();
levelComparer.Compare(spell.Level, niveauMax) <= 0 && }
spell.Type.ToLower().Contains(ecole.ToLower()) &&
(spell.Source != null && spell.Source.Contains(source)) &&
(spell.Classes != null && spell.Classes.Contains(classe)) &&
(string.IsNullOrEmpty(ritual) || (spell.Ritual != null && spell.Ritual.Contains(ritual))) &&
(
(Helpers.RemoveDiacritics(spell.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) ||
(Helpers.RemoveDiacritics(spell.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower()))
)).OrderBy(spell => spell.Name).ToList();
}
}, token);
} }
public override List<KeyValuePair<string, string>> Classes { get; } = new List<KeyValuePair<string, string>>() public override List<KeyValuePair<string, string>> Classes { get; } = new List<KeyValuePair<string, string>>()
@ -394,30 +391,27 @@ namespace AideDeJeu.ViewModels
{ {
public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default) public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default)
{ {
return await Task.Run(() => var levelComparer = new LevelComparer();
var classe = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Class).SelectedKey ?? "";
var niveauMin = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MinLevel).SelectedKey ?? "0";
var niveauMax = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MaxLevel).SelectedKey ?? "9";
var ecole = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.School).SelectedKey ?? "";
var ritual = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Ritual).SelectedKey ?? "";
var source = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Source).SelectedKey ?? "";
using (var context = await StoreViewModel.GetDatabaseContextAsync())
{ {
var levelComparer = new LevelComparer(); return context.SpellsHD.Where(spell =>
var classe = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Class).SelectedKey ?? ""; levelComparer.Compare(spell.Level, niveauMin) >= 0 &&
var niveauMin = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MinLevel).SelectedKey ?? "0"; levelComparer.Compare(spell.Level, niveauMax) <= 0 &&
var niveauMax = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MaxLevel).SelectedKey ?? "9"; spell.Type.ToLower().Contains(ecole.ToLower()) &&
var ecole = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.School).SelectedKey ?? ""; (spell.Source != null && spell.Source.Contains(source)) &&
var ritual = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Ritual).SelectedKey ?? ""; (spell.Classes != null && spell.Classes.Contains(classe)) &&
var source = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Source).SelectedKey ?? ""; (string.IsNullOrEmpty(ritual) || (spell.Ritual != null && spell.Ritual.Contains(ritual))) &&
using (var context = new StoreViewModel.AideDeJeuContext()) (
{ (Helpers.RemoveDiacritics(spell.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) ||
return context.SpellsHD.Where(spell => (Helpers.RemoveDiacritics(spell.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower()))
levelComparer.Compare(spell.Level, niveauMin) >= 0 && )).OrderBy(spell => spell.Name).ToList();
levelComparer.Compare(spell.Level, niveauMax) <= 0 && }
spell.Type.ToLower().Contains(ecole.ToLower()) &&
(spell.Source != null && spell.Source.Contains(source)) &&
(spell.Classes != null && spell.Classes.Contains(classe)) &&
(string.IsNullOrEmpty(ritual) || (spell.Ritual != null && spell.Ritual.Contains(ritual))) &&
(
(Helpers.RemoveDiacritics(spell.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) ||
(Helpers.RemoveDiacritics(spell.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower()))
)).OrderBy(spell => spell.Name).ToList();
}
}, token);
} }
public override List<KeyValuePair<string, string>> Classes { get; } = new List<KeyValuePair<string, string>>() public override List<KeyValuePair<string, string>> Classes { get; } = new List<KeyValuePair<string, string>>()
@ -656,33 +650,30 @@ namespace AideDeJeu.ViewModels
{ {
public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default) public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default)
{ {
return await Task.Run(() => var powerComparer = new PowerComparer();
var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? "";
var minPower = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MinPower).SelectedKey ?? "0 (0 PX)";
var maxPower = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MaxPower).SelectedKey ?? "30 (155000 PX)";
var size = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Size).SelectedKey ?? "";
var source = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Source).SelectedKey ?? "";
token.ThrowIfCancellationRequested();
using (var context = await StoreViewModel.GetDatabaseContextAsync())
{ {
var powerComparer = new PowerComparer(); return context.MonstersVO.Where(monster =>
monster != null &&
var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? ""; monster.Type.Contains(type) &&
var minPower = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MinPower).SelectedKey ?? "0 (0 PX)"; (string.IsNullOrEmpty(size) || monster.Size.Equals(size)) &&
var maxPower = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MaxPower).SelectedKey ?? "30 (155000 PX)"; (string.IsNullOrEmpty(source) || (monster.Source != null && monster.Source.Contains(source))) &&
var size = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Size).SelectedKey ?? ""; powerComparer.Compare(monster.Challenge, minPower) >= 0 &&
var source = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Source).SelectedKey ?? ""; powerComparer.Compare(monster.Challenge, maxPower) <= 0 &&
token.ThrowIfCancellationRequested(); (
(Helpers.RemoveDiacritics(monster.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) ||
using (var context = new StoreViewModel.AideDeJeuContext()) (Helpers.RemoveDiacritics(monster.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower()))
{ )
return context.MonstersVO.Where(monster => ).OrderBy(monster => monster.Name).ToList();
monster != null && }
monster.Type.Contains(type) &&
(string.IsNullOrEmpty(size) || monster.Size.Equals(size)) &&
(string.IsNullOrEmpty(source) || (monster.Source != null && monster.Source.Contains(source))) &&
powerComparer.Compare(monster.Challenge, minPower) >= 0 &&
powerComparer.Compare(monster.Challenge, maxPower) <= 0 &&
(
(Helpers.RemoveDiacritics(monster.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) ||
(Helpers.RemoveDiacritics(monster.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower()))
)
).OrderBy(monster => monster.Name).ToListAsync();
}
}, token);
} }
@ -775,8 +766,6 @@ namespace AideDeJeu.ViewModels
{ {
public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default) public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default)
{ {
return await Task.Run(() =>
{
var powerComparer = new PowerComparer(); var powerComparer = new PowerComparer();
var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? ""; var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? "";
@ -786,7 +775,7 @@ namespace AideDeJeu.ViewModels
var source = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Source).SelectedKey ?? ""; var source = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Source).SelectedKey ?? "";
token.ThrowIfCancellationRequested(); token.ThrowIfCancellationRequested();
using (var context = new StoreViewModel.AideDeJeuContext()) using (var context = await StoreViewModel.GetDatabaseContextAsync())
{ {
return context.MonstersHD.Where(monster => return context.MonstersHD.Where(monster =>
monster != null && monster != null &&
@ -799,9 +788,8 @@ namespace AideDeJeu.ViewModels
(Helpers.RemoveDiacritics(monster.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) || (Helpers.RemoveDiacritics(monster.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) ||
(Helpers.RemoveDiacritics(monster.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) (Helpers.RemoveDiacritics(monster.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower()))
) )
).OrderBy(monster => monster.Name).ToListAsync(); ).OrderBy(monster => monster.Name).ToList();
} }
}, token);
} }
public override List<KeyValuePair<string, string>> Categories { get; } = new List<KeyValuePair<string, string>>() public override List<KeyValuePair<string, string>> Categories { get; } = new List<KeyValuePair<string, string>>()
@ -915,14 +903,12 @@ namespace AideDeJeu.ViewModels
public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default) public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default)
{ {
return await Task.Run(() =>
{
var priceComparer = new PriceComparer(); var priceComparer = new PriceComparer();
var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? ""; var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? "";
var minPrice = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MinPrice).SelectedKey ?? "0 pc"; var minPrice = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MinPrice).SelectedKey ?? "0 pc";
var maxPrice = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MaxPrice).SelectedKey ?? "1 000 000 po"; var maxPrice = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MaxPrice).SelectedKey ?? "1 000 000 po";
using (var context = new AideDeJeuContext()) using (var context = await GetDatabaseContextAsync())
{ {
return context.Equipments.Where(equipment => return context.Equipments.Where(equipment =>
equipment.Type.ToLower().Contains(type.ToLower()) && equipment.Type.ToLower().Contains(type.ToLower()) &&
@ -933,22 +919,8 @@ namespace AideDeJeu.ViewModels
(Helpers.RemoveDiacritics(equipment.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) (Helpers.RemoveDiacritics(equipment.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower()))
) )
).OrderBy(eq => eq.Name) ).OrderBy(eq => eq.Name)
.ToListAsync(); .ToList();
} }
//return items.Where(item =>
//{
// var equipment = item as Equipment;
// return equipment.Type.ToLower().Contains(type.ToLower()) &&
// priceComparer.Compare(equipment.Price, minPrice) >= 0 &&
// priceComparer.Compare(equipment.Price, maxPrice) <= 0 &&
// (
// (Helpers.RemoveDiacritics(equipment.Name).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())) ||
// (Helpers.RemoveDiacritics(equipment.AltNameText ?? string.Empty).ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower()))
// );
//}).OrderBy(eq => eq.Name)
// .AsEnumerable();
}, token);
} }
public abstract List<KeyValuePair<string, string>> Types { get; } public abstract List<KeyValuePair<string, string>> Types { get; }
@ -1031,35 +1003,20 @@ namespace AideDeJeu.ViewModels
public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default) public override async Task<IEnumerable<Item>> FilterItems(IEnumerable<Item> items, CancellationToken token = default)
{ {
return await Task.Run(() =>
{
var priceComparer = new PriceComparer(); var priceComparer = new PriceComparer();
var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? ""; var type = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Type).SelectedKey ?? "";
var rarity = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Rarity).SelectedKey ?? ""; var rarity = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Rarity).SelectedKey ?? "";
var attunement = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Attunement).SelectedKey ?? ""; var attunement = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Attunement).SelectedKey ?? "";
using (var context = new AideDeJeuContext()) using (var context = await GetDatabaseContextAsync())
{ {
return context.MagicItems.Where(magicitem => return context.MagicItems.Where(magicitem =>
MatchContains(magicitem.Type, type) && MatchContains(magicitem.Type, type) &&
MatchContains(magicitem.Rarity, rarity) && MatchContains(magicitem.Rarity, rarity) &&
MatchContains(magicitem.Attunement, attunement) && MatchContains(magicitem.Attunement, attunement) &&
MatchSearch(magicitem) MatchSearch(magicitem)
).OrderBy(eq => eq.Name).ToListAsync(); ).OrderBy(eq => eq.Name).ToList();
} }
//return items.Where(item =>
//{
// var magicitem = item as MagicItem;
// if (magicitem == null) return false;
// var matchType = MatchContains(magicitem.Type, type);
// var matchRarity = MatchContains(magicitem.Rarity, rarity);
// var matchAttunement = MatchContains(magicitem.Attunement, attunement);
// var matchSearch = MatchSearch(magicitem);
// return matchType && matchRarity && matchAttunement && matchSearch;
//}).OrderBy(eq => eq.Name).AsEnumerable();
}, token);
} }
public abstract List<KeyValuePair<string, string>> Types { get; } public abstract List<KeyValuePair<string, string>> Types { get; }

View file

@ -119,7 +119,7 @@ namespace AideDeJeu.ViewModels
{ {
if (Filter != null) if (Filter != null)
{ {
var items = await Filter.FilterItems(await AllItems.GetChildrenAsync(), cancellationToken: cancellationToken); var items = await Task.Run(async() => await Filter.FilterItems(await AllItems.GetChildrenAsync(), cancellationToken: cancellationToken));
Items = new Item(items.ToList()); Items = new Item(items.ToList());
Children = items; Children = items;
} }

View file

@ -366,6 +366,7 @@ namespace AideDeJeu.ViewModels
public class AideDeJeuContext : DbContext public class AideDeJeuContext : DbContext
{ {
public string DbPath { get; set; }
public DbSet<Item> Items { get; set; } public DbSet<Item> Items { get; set; }
public DbSet<Equipment> Equipments { get; set; } public DbSet<Equipment> Equipments { get; set; }
public DbSet<MagicItem> MagicItems { get; set; } public DbSet<MagicItem> MagicItems { get; set; }
@ -376,10 +377,14 @@ namespace AideDeJeu.ViewModels
public DbSet<SpellVO> SpellsVO { get; set; } public DbSet<SpellVO> SpellsVO { get; set; }
public DbSet<MonsterVO> MonstersVO { get; set; } public DbSet<MonsterVO> MonstersVO { get; set; }
public AideDeJeuContext(string dbPath)
{
this.DbPath = dbPath;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{ {
var dbPath = DependencyService.Get<INativeAPI>().GetDatabasePath("database.db"); optionsBuilder.UseSqlite($"Data Source='{DbPath}'");
optionsBuilder.UseSqlite($"Data Source='{dbPath}'");
} }
protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder)
@ -394,6 +399,12 @@ namespace AideDeJeu.ViewModels
} }
} }
public static async Task<AideDeJeuContext> GetDatabaseContextAsync()
{
var dbPath = await DependencyService.Get<INativeAPI>().GetDatabasePathAsync("database.db");
return new AideDeJeuContext(dbPath);
}
public async Task<Item> GetItemFromDataAsync(string source, string anchor) public async Task<Item> GetItemFromDataAsync(string source, string anchor)
{ {
var id = $"{source}.md".TrimStart('/'); var id = $"{source}.md".TrimStart('/');
@ -401,7 +412,7 @@ namespace AideDeJeu.ViewModels
{ {
id += $"#{anchor}"; id += $"#{anchor}";
} }
using (var context = new AideDeJeuContext()) using (var context = await GetDatabaseContextAsync())
{ {
return await context.Items.Where(item => item.Id == id).FirstOrDefaultAsync(); return await context.Items.Where(item => item.Id == id).FirstOrDefaultAsync();
} }

View file

@ -1,6 +1,7 @@
using AideDeJeu.Tools; using AideDeJeu.Tools;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using System.Threading.Tasks;
[assembly: Xamarin.Forms.Dependency(typeof(AideDeJeu.Cmd.Version_CMD))] [assembly: Xamarin.Forms.Dependency(typeof(AideDeJeu.Cmd.Version_CMD))]
namespace AideDeJeu.Cmd namespace AideDeJeu.Cmd
@ -22,7 +23,7 @@ namespace AideDeJeu.Cmd
return 0; return 0;
} }
public string GetDatabasePath(string databaseName) public async Task<string> GetDatabasePathAsync(string databaseName)
{ {
return Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), @"..\..\..\..\..\Data\" + databaseName); return Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), @"..\..\..\..\..\Data\" + databaseName);
} }

View file

@ -300,7 +300,7 @@ namespace AideDeJeuCmd
var store = new StoreViewModel(); var store = new StoreViewModel();
await store.PreloadAllItemsAsync(); await store.PreloadAllItemsAsync();
using (var context = new StoreViewModel.AideDeJeuContext()) using (var context = await StoreViewModel.GetDatabaseContextAsync())
{ {
await context.Database.EnsureDeletedAsync(); await context.Database.EnsureDeletedAsync();
await context.Database.EnsureCreatedAsync(); await context.Database.EnsureCreatedAsync();