diff --git a/AideDeJeu/AideDeJeu.Android/AideDeJeu.Android.csproj b/AideDeJeu/AideDeJeu.Android/AideDeJeu.Android.csproj
index 4bd64e2f..604ac510 100644
--- a/AideDeJeu/AideDeJeu.Android/AideDeJeu.Android.csproj
+++ b/AideDeJeu/AideDeJeu.Android/AideDeJeu.Android.csproj
@@ -66,7 +66,7 @@
-
+
diff --git a/AideDeJeu/AideDeJeu.Android/Version.cs b/AideDeJeu/AideDeJeu.Android/NativeAPI.cs
similarity index 74%
rename from AideDeJeu/AideDeJeu.Android/Version.cs
rename to AideDeJeu/AideDeJeu.Android/NativeAPI.cs
index 9c513a23..606132e7 100644
--- a/AideDeJeu/AideDeJeu.Android/Version.cs
+++ b/AideDeJeu/AideDeJeu.Android/NativeAPI.cs
@@ -1,10 +1,12 @@
using AideDeJeu.Tools;
using Android.Content.PM;
+using System;
+using System.IO;
[assembly: Xamarin.Forms.Dependency(typeof(AideDeJeu.Droid.Version_Android))]
namespace AideDeJeu.Droid
{
- public class Version_Android : IAppVersion
+ public class Version_Android : INativeAPI
{
public string GetVersion()
{
@@ -24,5 +26,10 @@ namespace AideDeJeu.Droid
return info.VersionCode;
}
+
+ public string GetDatabasePath(string databaseName)
+ {
+ return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), databaseName);
+ }
}
}
\ No newline at end of file
diff --git a/AideDeJeu/AideDeJeu.UWP/AideDeJeu.UWP.csproj b/AideDeJeu/AideDeJeu.UWP/AideDeJeu.UWP.csproj
index 356baae9..f2299d1d 100644
--- a/AideDeJeu/AideDeJeu.UWP/AideDeJeu.UWP.csproj
+++ b/AideDeJeu/AideDeJeu.UWP/AideDeJeu.UWP.csproj
@@ -95,6 +95,7 @@
MainPage.xaml
+
diff --git a/AideDeJeu/AideDeJeu.UWP/NativeAPI.cs b/AideDeJeu/AideDeJeu.UWP/NativeAPI.cs
new file mode 100644
index 00000000..72d24e5c
--- /dev/null
+++ b/AideDeJeu/AideDeJeu.UWP/NativeAPI.cs
@@ -0,0 +1,24 @@
+using AideDeJeu.Tools;
+using System.IO;
+
+[assembly: Xamarin.Forms.Dependency(typeof(AideDeJeu.Droid.Version_Android))]
+namespace AideDeJeu.Droid
+{
+ public class Version_Android : INativeAPI
+ {
+ public string GetVersion()
+ {
+ return "";
+ }
+
+ public int GetBuild()
+ {
+ return 0;
+ }
+
+ public string GetDatabasePath(string databaseName)
+ {
+ return Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, databaseName);
+ }
+ }
+}
\ No newline at end of file
diff --git a/AideDeJeu/AideDeJeu/AideDeJeu.csproj b/AideDeJeu/AideDeJeu/AideDeJeu.csproj
index c8469c8b..aa24de82 100644
--- a/AideDeJeu/AideDeJeu/AideDeJeu.csproj
+++ b/AideDeJeu/AideDeJeu/AideDeJeu.csproj
@@ -4,11 +4,18 @@
netstandard2.0
+
+ pdbonly
+ true
+
+
+
+
@@ -34,7 +41,6 @@
-
\ No newline at end of file
diff --git a/AideDeJeu/AideDeJeu/Services/ItemDatabaseContext.cs b/AideDeJeu/AideDeJeu/Services/ItemDatabaseContext.cs
new file mode 100644
index 00000000..27c85577
--- /dev/null
+++ b/AideDeJeu/AideDeJeu/Services/ItemDatabaseContext.cs
@@ -0,0 +1,43 @@
+using AideDeJeu.Tools;
+using AideDeJeuLib.Monsters;
+using AideDeJeuLib.Spells;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using Xamarin.Forms;
+
+namespace AideDeJeu.Services
+{
+ public class ItemDatabaseContext : DbContext
+ {
+ private const string databaseName = "database.db";
+
+ public DbSet Spells { get; set; }
+
+ public DbSet Monsters { get; set; }
+
+ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+ {
+ String databasePath = "";
+ switch (Device.RuntimePlatform)
+ {
+ case Device.iOS:
+ SQLitePCL.Batteries_V2.Init();
+ databasePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "..", "Library", databaseName); ;
+ break;
+ case Device.Android:
+ databasePath = DependencyService.Get().GetDatabasePath(databaseName);
+ break;
+ case Device.UWP:
+ databasePath = DependencyService.Get().GetDatabasePath(databaseName);
+ break;
+ default:
+ throw new NotImplementedException("Platform not supported");
+ }
+ // Specify that we will use sqlite and the path of the database here
+ optionsBuilder.UseSqlite($"Filename={databasePath}");
+ }
+ }
+}
diff --git a/AideDeJeu/AideDeJeu/Services/ItemDatabaseHelper.cs b/AideDeJeu/AideDeJeu/Services/ItemDatabaseHelper.cs
new file mode 100644
index 00000000..2e3f9eb9
--- /dev/null
+++ b/AideDeJeu/AideDeJeu/Services/ItemDatabaseHelper.cs
@@ -0,0 +1,46 @@
+using AideDeJeuLib.Spells;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AideDeJeu.Services
+{
+ public class ItemDatabaseHelper where T : ItemDatabaseContext
+ {
+ protected T CreateContext()
+ {
+ T postDatabaseContext = (T)Activator.CreateInstance(typeof(T));
+ postDatabaseContext.Database.EnsureCreated();
+ postDatabaseContext.Database.Migrate();
+ return postDatabaseContext;
+ }
+
+ public async Task> GetSpellsAsync()
+ {
+ using (var context = CreateContext())
+ {
+ //We use OrderByDescending because Posts are generally displayed from most recent to oldest
+ return await context.Spells
+ .AsNoTracking()
+ .OrderByDescending(spell => spell.Id)
+ .ToListAsync();
+ }
+ }
+
+ public async Task AddOrUpdateSpellsAsync(IEnumerable spells)
+ {
+ using (var context = CreateContext())
+ {
+ // add posts that do not exist in the database
+ var newSpells = spells.Where(
+ spell => context.Spells.Any(dbSpell => dbSpell.Id == spell.Id) == false
+ );
+ await context.Spells.AddRangeAsync(newSpells);
+ await context.SaveChangesAsync();
+ }
+ }
+ }
+}
diff --git a/AideDeJeu/AideDeJeu/Tools/Version.cs b/AideDeJeu/AideDeJeu/Tools/NativeAPI.cs
similarity index 66%
rename from AideDeJeu/AideDeJeu/Tools/Version.cs
rename to AideDeJeu/AideDeJeu/Tools/NativeAPI.cs
index 33d67abd..14ebd250 100644
--- a/AideDeJeu/AideDeJeu/Tools/Version.cs
+++ b/AideDeJeu/AideDeJeu/Tools/NativeAPI.cs
@@ -4,9 +4,10 @@ using System.Text;
namespace AideDeJeu.Tools
{
- public interface IAppVersion
+ public interface INativeAPI
{
string GetVersion();
int GetBuild();
+ string GetDatabasePath(string databaseName);
}
}
diff --git a/AideDeJeu/AideDeJeu/ViewModels/AboutViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/AboutViewModel.cs
index 79a442d9..ece38a10 100644
--- a/AideDeJeu/AideDeJeu/ViewModels/AboutViewModel.cs
+++ b/AideDeJeu/AideDeJeu/ViewModels/AboutViewModel.cs
@@ -20,7 +20,7 @@ namespace AideDeJeu.ViewModels
public string Version {
get
{
- return DependencyService.Get().GetVersion();
+ return DependencyService.Get().GetVersion();
}
}
}
diff --git a/AideDeJeu/AideDeJeu/ViewModels/SpellsViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/SpellsViewModel.cs
index aaf58af6..834e0539 100644
--- a/AideDeJeu/AideDeJeu/ViewModels/SpellsViewModel.cs
+++ b/AideDeJeu/AideDeJeu/ViewModels/SpellsViewModel.cs
@@ -1,4 +1,5 @@
-using AideDeJeu.Tools;
+using AideDeJeu.Services;
+using AideDeJeu.Tools;
using AideDeJeuLib;
using AideDeJeuLib.Spells;
using System;
@@ -170,7 +171,18 @@ namespace AideDeJeu.ViewModels
{
AllItems.Clear();
var items = await SpellsScrappers.GetSpells(classe: Classes[Classe].Key, niveauMin: Niveaux[NiveauMin].Key, niveauMax: Niveaux[NiveauMax].Key, ecole: Ecoles[Ecole].Key, rituel: Rituels[Rituel].Key, source: Sources[Source].Key);
- var aitems = items.ToArray();
+
+ //try
+ //{
+ ItemDatabaseHelper helper = new ItemDatabaseHelper();
+ await helper.AddOrUpdateSpellsAsync(items);
+ var items2 = await helper.GetSpellsAsync();
+ //}
+ //catch(Exception ex)
+ //{
+ // Debug.WriteLine(ex);
+ //}
+ var aitems = items2.ToArray();
Array.Sort(aitems, new ItemComparer());
foreach (var item in aitems)
{
diff --git a/AideDeJeu/AideDeJeuLib/AideDeJeuLib.csproj b/AideDeJeu/AideDeJeuLib/AideDeJeuLib.csproj
index adc0fa2e..f00454fa 100644
--- a/AideDeJeu/AideDeJeuLib/AideDeJeuLib.csproj
+++ b/AideDeJeu/AideDeJeuLib/AideDeJeuLib.csproj
@@ -8,4 +8,10 @@
+
+
+ ..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SDKs\UWPNuGetPackages\microsoft.netcore.universalwindowsplatform\6.1.4\ref\uap10.0.15138\System.ComponentModel.Annotations.dll
+
+
+
diff --git a/AideDeJeu/AideDeJeuLib/Item.cs b/AideDeJeu/AideDeJeuLib/Item.cs
index 916f35a0..40499c71 100644
--- a/AideDeJeu/AideDeJeuLib/Item.cs
+++ b/AideDeJeu/AideDeJeuLib/Item.cs
@@ -1,11 +1,13 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
using System.Text;
namespace AideDeJeuLib
{
public class Item
{
+ [Key]
public string Id { get; set; }
public string Name { get; set; }
public string NameVO { get; set; }
diff --git a/AideDeJeu/AideDeJeuLib/Monsters/Monster.cs b/AideDeJeu/AideDeJeuLib/Monsters/Monster.cs
index 7bece44a..32ccb0a6 100644
--- a/AideDeJeu/AideDeJeuLib/Monsters/Monster.cs
+++ b/AideDeJeu/AideDeJeuLib/Monsters/Monster.cs
@@ -1,6 +1,9 @@
using HtmlAgilityPack;
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
@@ -35,8 +38,33 @@ namespace AideDeJeuLib.Monsters
public string Description { get; set; }
public string Picture { get; set; }
+ [IgnoreDataMember]
+ [NotMapped]
public List SpecialFeatures { get; set; }
+ //public List SpecialFeaturesPersist
+ //{
+ // get
+ // {
+ // return SpecialFeatures.Select(node => node.OuterHtml).ToList();
+ // }
+ // set
+ // {
+ // List nodes = new List();
+ // foreach (var str in value)
+ // {
+ // HtmlDocument doc = new HtmlDocument();
+ // doc.LoadHtml(str);
+ // nodes.Add(doc.DocumentNode);
+ // }
+ // SpecialFeatures = nodes;
+ // }
+ //}
+
+ [IgnoreDataMember]
+ [NotMapped]
public List Actions { get; set; }
+ [IgnoreDataMember]
+ [NotMapped]
public List LegendaryActions { get; set; }
diff --git a/AideDeJeu/AideDeJeuLib/Spells/Spell.cs b/AideDeJeu/AideDeJeuLib/Spells/Spell.cs
index 4d2a3857..f7a0e0f6 100644
--- a/AideDeJeu/AideDeJeuLib/Spells/Spell.cs
+++ b/AideDeJeu/AideDeJeuLib/Spells/Spell.cs
@@ -1,6 +1,8 @@
using HtmlAgilityPack;
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
@@ -26,9 +28,16 @@ namespace AideDeJeuLib.Spells
}
set
{
- HtmlDocument doc = new HtmlDocument();
- doc.LoadHtml(value);
- DescriptionDiv = doc.DocumentNode;
+ if (value != null)
+ {
+ HtmlDocument doc = new HtmlDocument();
+ doc.LoadHtml(value);
+ DescriptionDiv = doc.DocumentNode;
+ }
+ else
+ {
+ DescriptionDiv = null;
+ }
}
}
public string DescriptionText
@@ -39,7 +48,9 @@ namespace AideDeJeuLib.Spells
}
}
[IgnoreDataMember]
+ [NotMapped]
public HtmlNode DescriptionDiv { get; set; }
+
public string Overflow { get; set; }
public string NoOverflow { get; set; }
public string Source { get; set; }