From b5670b561420a01b95b22b985c64fdcaa1a703d8 Mon Sep 17 00:00:00 2001 From: Yan Maniez Date: Tue, 28 Aug 2018 13:44:40 +0200 Subject: [PATCH] Test bookmarks --- AideDeJeu/AideDeJeu/App.xaml.cs | 1 + AideDeJeu/AideDeJeu/Models/HomeItem.cs | 17 +++- AideDeJeu/AideDeJeu/Models/Item.cs | 13 ++- .../AideDeJeu/ViewModels/BaseViewModel.cs | 7 ++ .../ViewModels/BookmarksViewModel.cs | 89 +++++++++++++++++-- AideDeJeu/AideDeJeu/ViewModels/Navigator.cs | 11 ++- 6 files changed, 124 insertions(+), 14 deletions(-) diff --git a/AideDeJeu/AideDeJeu/App.xaml.cs b/AideDeJeu/AideDeJeu/App.xaml.cs index 9b06662c..430cedba 100644 --- a/AideDeJeu/AideDeJeu/App.xaml.cs +++ b/AideDeJeu/AideDeJeu/App.xaml.cs @@ -15,6 +15,7 @@ namespace AideDeJeu InitializeComponent(); DependencyService.Register(); + DependencyService.Register(); var vm = DependencyService.Get(); var tabbeddPage = new AideDeJeu.Views.MainTabbedPage(); //var mainPage = new ItemDetailPage(new ItemDetailViewModel(new HomeItem()) { Title = "Haches & Dés" }); diff --git a/AideDeJeu/AideDeJeu/Models/HomeItem.cs b/AideDeJeu/AideDeJeu/Models/HomeItem.cs index 9224499e..6713b6a7 100644 --- a/AideDeJeu/AideDeJeu/Models/HomeItem.cs +++ b/AideDeJeu/AideDeJeu/Models/HomeItem.cs @@ -1,13 +1,28 @@ using System; using System.Collections.Generic; +using System.Runtime.Serialization; using System.Text; using Markdig.Syntax; namespace AideDeJeuLib { + [DataContract] public class HomeItem : Item { - public new string Markdown + [DataMember] + public override string Id + { + get + { + return "index.md"; + } + set + { + } + } + + [DataMember] + public override string Markdown { get { diff --git a/AideDeJeu/AideDeJeu/Models/Item.cs b/AideDeJeu/AideDeJeu/Models/Item.cs index 65d76749..6ab5a655 100644 --- a/AideDeJeu/AideDeJeu/Models/Item.cs +++ b/AideDeJeu/AideDeJeu/Models/Item.cs @@ -1,15 +1,22 @@ using System.Collections.Generic; +using System.Runtime.Serialization; using System.Text.RegularExpressions; using System.Xml; namespace AideDeJeuLib { + [DataContract] public class Item { - public string Id { get; set; } + [DataMember] + public virtual string Id { get; set; } + [DataMember] public string Name { get; set; } + [DataMember] public int NameLevel { get; set; } + [DataMember] public string AltName { get; set; } + [IgnoreDataMember] public string AltNameText { get @@ -32,7 +39,9 @@ namespace AideDeJeuLib } } } + [DataMember] public string Source { get; set; } - public string Markdown { get; set; } + [DataMember] + public virtual string Markdown { get; set; } } } diff --git a/AideDeJeu/AideDeJeu/ViewModels/BaseViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/BaseViewModel.cs index 42e82faa..809f1dfb 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/BaseViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/BaseViewModel.cs @@ -16,6 +16,13 @@ namespace AideDeJeu.ViewModels return DependencyService.Get(); } } + public BookmarksViewModel Bookmarks + { + get + { + return DependencyService.Get(); + } + } bool isBusy = false; public bool IsBusy diff --git a/AideDeJeu/AideDeJeu/ViewModels/BookmarksViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/BookmarksViewModel.cs index f170e6d9..023ffe00 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/BookmarksViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/BookmarksViewModel.cs @@ -1,21 +1,96 @@ using AideDeJeuLib; using System; using System.Collections.Generic; +using System.IO; +using System.Runtime.Serialization.Json; using System.Text; +using System.Threading.Tasks; namespace AideDeJeu.ViewModels { - public class BookmarksViewModel : BaseViewModel + public class BookmarksViewModel //: BaseViewModel { - public List>> BookmarksKeyValues { get; set; } = new List>>() + public BookmarksViewModel() { - new KeyValuePair>("Général", new List()), - new KeyValuePair>("Grimoire", new List()), - new KeyValuePair>("Bestiaire", new List()), - new KeyValuePair>("Sac", new List()), + LoadBookmarks(); + } + + public List>> BookmarksKeyValues { get; set; } = new List>>() + { + new KeyValuePair>("Général", new List()), + new KeyValuePair>("Grimoire", new List()), + new KeyValuePair>("Bestiaire", new List()), + new KeyValuePair>("Sac", new List()), }; public int BookmarksIndex { get; set; } = 0; - public IEnumerable Bookmarks { get; set; } + public List Bookmarks { get; set; } public int BookmarksCount { get; set; } = 0; + + public void LoadBookmarks() + { + foreach(var key in App.Current.Properties.Keys) + { + var property = App.Current.Properties[key] as string; + if(property != null) + { + BookmarksKeyValues.Add(new KeyValuePair>(key, ToItems(property))); + } + } + } + + public async Task SaveBookmarksAsync() + { + foreach(var keyValues in BookmarksKeyValues) + { + App.Current.Properties[keyValues.Key] = ToString(keyValues.Value); + } + await App.Current.SavePropertiesAsync(); + } + + public string ToString(List items) + { + var serializer = ItemJsonSerializer; + using(var stream = new MemoryStream()) + { + serializer.WriteObject(stream, items); + stream.Seek(0, SeekOrigin.Begin); + using (StreamReader reader = new StreamReader(stream)) + { + return reader.ReadToEnd(); + } + } + } + + public List ToItems(string str) + { + var serializer = ItemJsonSerializer; + byte[] byteArray = Encoding.UTF8.GetBytes(str); + using (var stream = new MemoryStream(byteArray)) + { + return serializer.ReadObject(stream) as List; + } + } + + public DataContractJsonSerializer ItemJsonSerializer + { + get + { + var settings = new DataContractJsonSerializerSettings(); + settings.KnownTypes = new List() + { + typeof(HomeItem), + typeof(Spell), + typeof(Monster), + //typeof(Items), + typeof(LinkItem), + typeof(Equipment), + //typeof(Spells), + //typeof(Monsters), + //typeof(Equipments), + typeof(PageItem), + }; + return new DataContractJsonSerializer(typeof(List), settings); + } + } } } diff --git a/AideDeJeu/AideDeJeu/ViewModels/Navigator.cs b/AideDeJeu/AideDeJeu/ViewModels/Navigator.cs index 2598517a..d154bb53 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/Navigator.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/Navigator.cs @@ -73,11 +73,14 @@ namespace AideDeJeu.ViewModels } else if(context is ItemsViewModel) { - item = (context as ItemsViewModel).Items; + item = (context as ItemsViewModel).AllItems; } - await Application.Current.MainPage.DisplayAlert("Id", item.Id, "OK"); - var vm = new BookmarksViewModel(); - await Application.Current.MainPage.DisplayActionSheet("Ajouter à", "Annuler", "Nouvelle liste", vm.BookmarksKeyValues.Select(kv => kv.Key).ToArray()); + //await Application.Current.MainPage.DisplayAlert("Id", item.Id, "OK"); + var vm = Main.Bookmarks; + var result = await Application.Current.MainPage.DisplayActionSheet("Ajouter à", "Annuler", "Nouvelle liste", vm.BookmarksKeyValues.Select(kv => kv.Key).ToArray()); + var kval = vm.BookmarksKeyValues.FirstOrDefault(kv => kv.Key == result); + kval.Value.Add(item); + await vm.SaveBookmarksAsync(); } public async Task GotoItemDetailPageAsync(Item item)