diff --git a/AideDeJeu/AideDeJeu.Android/AideDeJeu.Android.csproj b/AideDeJeu/AideDeJeu.Android/AideDeJeu.Android.csproj
index 86fb8bf2..f05d2181 100644
--- a/AideDeJeu/AideDeJeu.Android/AideDeJeu.Android.csproj
+++ b/AideDeJeu/AideDeJeu.Android/AideDeJeu.Android.csproj
@@ -109,6 +109,9 @@
Assets\library.db
+
+ Assets\library.ver
+
diff --git a/AideDeJeu/AideDeJeu.Android/NativeAPI.cs b/AideDeJeu/AideDeJeu.Android/NativeAPI.cs
index 5ad1c48a..cd68568d 100644
--- a/AideDeJeu/AideDeJeu.Android/NativeAPI.cs
+++ b/AideDeJeu/AideDeJeu.Android/NativeAPI.cs
@@ -1,6 +1,5 @@
using AideDeJeu.Tools;
using Android.Content.PM;
-using System;
using System.IO;
using System.Threading.Tasks;
@@ -30,36 +29,60 @@ namespace AideDeJeu.Droid
public async Task GetDatabasePathAsync(string databaseName)
{
- //string path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
- //string dbPath = Path.Combine(path, databaseName);
- //return dbPath;
- var documentsDirectoryPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
- var path = Path.Combine(documentsDirectoryPath, $"{databaseName}.db");
+ if (await CheckDatabaseVersionAsync(databaseName))
+ {
+ await CopyOldToNewFileAsync(databaseName, "db");
+ await CopyOldToNewFileAsync(databaseName, "ver");
+ }
+ return GetNewFilePath(databaseName, "db");
+ }
- // This is where we copy in our pre-created database
+ public Stream GetOldFileStream(string fileName, string extension)
+ {
+ return Android.App.Application.Context.Assets.Open($"{fileName}.{extension}");
+ }
+ public string GetNewFilePath(string fileName, string extension)
+ {
+ var documentsDirectoryPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
+ return Path.Combine(documentsDirectoryPath, $"{fileName}.{extension}");
+ }
+ public async Task CopyOldToNewFileAsync(string fileName, string extension)
+ {
+ using (var inStream = GetOldFileStream(fileName, extension))
+ {
+ using (var outStream = new FileStream(GetNewFilePath(fileName, extension), FileMode.Create))
+ {
+ await inStream.CopyToAsync(outStream);
+ }
+ }
+ }
+
+ public async Task CheckDatabaseVersionAsync(string databaseName)
+ {
+ var path = GetNewFilePath(databaseName, "ver");
if (!File.Exists(path))
{
- using (var inStream = Android.App.Application.Context.Assets.Open($"{databaseName}.db"))
- {
- using (var outStream = new FileStream(path, FileMode.Create))
- {
- await inStream.CopyToAsync(outStream);
- }
- }
- //using (var binaryReader = new BinaryReader(Android.App.Application.Context.Assets.Open(databaseName)))
- //{
- // using (var binaryWriter = new BinaryWriter(new FileStream(path, FileMode.Create)))
- // {
- // byte[] buffer = new byte[2048];
- // int length = 0;
- // while ((length = binaryReader.Read(buffer, 0, buffer.Length)) > 0)
- // {
- // binaryWriter.Write(buffer, 0, length);
- // }
- // }
- //}
+ return true;
}
- return path;
+ int newVersion = 0;
+ int oldVersion = -1;
+ using (var newStream = GetOldFileStream(databaseName, "ver"))
+ {
+ using (var sr = new StreamReader(newStream))
+ {
+ var str = await sr.ReadToEndAsync();
+ int.TryParse(str, out newVersion);
+ }
+ }
+ using (var oldStream = new FileStream(path, FileMode.Open))
+ {
+ using (var sr = new StreamReader(oldStream))
+ {
+ var str = await sr.ReadToEndAsync();
+ int.TryParse(str, out oldVersion);
+ }
+ }
+ return newVersion > oldVersion;
}
}
}
\ No newline at end of file
diff --git a/Data/library.ver b/Data/library.ver
new file mode 100644
index 00000000..bf0d87ab
--- /dev/null
+++ b/Data/library.ver
@@ -0,0 +1 @@
+4
\ No newline at end of file