mirror of
				https://github.com/Nioux/AideDeJeu.git
				synced 2025-10-31 07:26:09 +00:00 
			
		
		
		
	Préparation multilingue
This commit is contained in:
		
							parent
							
								
									ee98ddea9d
								
							
						
					
					
						commit
						ac7c57a956
					
				
					 8 changed files with 123 additions and 78 deletions
				
			
		|  | @ -53,6 +53,10 @@ namespace AideDeJeu.Tools | ||||||
|             { |             { | ||||||
|                 HtmlNodesToFormatedString(node.ChildNodes, fs, attributes); |                 HtmlNodesToFormatedString(node.ChildNodes, fs, attributes); | ||||||
|             } |             } | ||||||
|  |             else if (node.NodeType == HtmlNodeType.Document) | ||||||
|  |             { | ||||||
|  |                 HtmlNodesToFormatedString(node.ChildNodes, fs, attributes); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         //public static void HtmlToFormatedString(HtmlNode parentNode, FormattedString fs, FontAttributes attributes = FontAttributes.None) |         //public static void HtmlToFormatedString(HtmlNode parentNode, FormattedString fs, FontAttributes attributes = FontAttributes.None) | ||||||
|  |  | ||||||
|  | @ -6,6 +6,21 @@ | ||||||
| 	<LangVersion>latest</LangVersion> | 	<LangVersion>latest</LangVersion> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
| 
 | 
 | ||||||
|  |   <ItemGroup> | ||||||
|  |     <Content Include="..\..\Data\monsters.json" Link="monsters.json"> | ||||||
|  |       <CopyToOutputDirectory>Always</CopyToOutputDirectory> | ||||||
|  |     </Content> | ||||||
|  |     <Content Include="..\..\Data\spells.json" Link="spells.json"> | ||||||
|  |       <CopyToOutputDirectory>Always</CopyToOutputDirectory> | ||||||
|  |     </Content> | ||||||
|  |   </ItemGroup> | ||||||
|  | 
 | ||||||
|  |   <ItemGroup> | ||||||
|  |     <Content Include="..\..\Data\database.db" Link="database.db"> | ||||||
|  |       <CopyToOutputDirectory>Always</CopyToOutputDirectory> | ||||||
|  |     </Content> | ||||||
|  |   </ItemGroup> | ||||||
|  | 
 | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.0.3" /> |     <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.0.3" /> | ||||||
|     <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.0.3" /> |     <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.0.3" /> | ||||||
|  |  | ||||||
|  | @ -25,24 +25,24 @@ namespace AideDeJeu.Services | ||||||
| 
 | 
 | ||||||
|         protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) |         protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) | ||||||
|         { |         { | ||||||
|             if (DatabasePath == null) |             //if (DatabasePath == null) | ||||||
|             { |             //{ | ||||||
|                 switch (Device.RuntimePlatform) |             //    switch (Device.RuntimePlatform) | ||||||
|                 { |             //    { | ||||||
|                     case Device.iOS: |             //        case Device.iOS: | ||||||
|                         SQLitePCL.Batteries_V2.Init(); |             //            SQLitePCL.Batteries_V2.Init(); | ||||||
|                         DatabasePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "..", "Library", DatabaseName); ; |             //            DatabasePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "..", "Library", DatabaseName); ; | ||||||
|                         break; |             //            break; | ||||||
|                     case Device.Android: |             //        case Device.Android: | ||||||
|                         DatabasePath = DependencyService.Get<INativeAPI>().GetDatabasePath(DatabaseName); |             //            DatabasePath = DependencyService.Get<INativeAPI>().GetDatabasePath(DatabaseName); | ||||||
|                         break; |             //            break; | ||||||
|                     case Device.UWP: |             //        case Device.UWP: | ||||||
|                         DatabasePath = DependencyService.Get<INativeAPI>().GetDatabasePath(DatabaseName); |             //            DatabasePath = DependencyService.Get<INativeAPI>().GetDatabasePath(DatabaseName); | ||||||
|                         break; |             //            break; | ||||||
|                     default: |             //        default: | ||||||
|                         throw new NotImplementedException("Platform not supported"); |             //            throw new NotImplementedException("Platform not supported"); | ||||||
|                 } |             //    } | ||||||
|             } |             //} | ||||||
|             // Specify that we will use sqlite and the path of the database here |             // Specify that we will use sqlite and the path of the database here | ||||||
|             optionsBuilder.UseSqlite($"Filename={DatabasePath}"); |             optionsBuilder.UseSqlite($"Filename={DatabasePath}"); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  | @ -1,8 +1,11 @@ | ||||||
| using AideDeJeu.Services; | using AideDeJeu.Services; | ||||||
|  | using AideDeJeuLib.Monsters; | ||||||
| using AideDeJeuLib.Spells; | using AideDeJeuLib.Spells; | ||||||
|  | using HtmlAgilityPack; | ||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.IO; | using System.IO; | ||||||
|  | using System.Net.Http; | ||||||
| using System.Runtime.Serialization.Json; | using System.Runtime.Serialization.Json; | ||||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||||
| 
 | 
 | ||||||
|  | @ -12,21 +15,61 @@ namespace AideDeJeuCmd | ||||||
|     { |     { | ||||||
|         static async Task Main(string[] args) |         static async Task Main(string[] args) | ||||||
|         { |         { | ||||||
|             var documentsDirectoryPath = @"C:\Users\yanma\Documents\Visual Studio 2017\Projects\AideDeJeu\Data\database.db"; // Windows.Storage.ApplicationData.Current.LocalFolder.Path; |             //var documentsDirectoryPath = @"database.db"; // Windows.Storage.ApplicationData.Current.LocalFolder.Path; | ||||||
|             ItemDatabaseHelper helper = new ItemDatabaseHelper(documentsDirectoryPath); |             //ItemDatabaseHelper helper = new ItemDatabaseHelper(documentsDirectoryPath); | ||||||
|             //var items = await helper.GetSpellsAsync(classe: "", niveauMin: "0", niveauMax: "9", ecole: "", rituel: "", source: "(SRD)"); |             //var spells = await helper.GetSpellsAsync(classe: "", niveauMin: "0", niveauMax: "9", ecole: "", rituel: "", source: "(SRD)"); | ||||||
|             var items = await helper.GetMonstersAsync(category: "", type: "", minPower: " 0 (0 PX)", maxPower: " 30 (155000 PX)", size: "", legendary: "", source: "(SRD)"); |             //var monsters = await helper.GetMonstersAsync(category: "", type: "", minPower: " 0 (0 PX)", maxPower: " 30 (155000 PX)", size: "", legendary: "", source: "(SRD)"); | ||||||
|  |             var pack = new HtmlDocument(); | ||||||
|  |             var client = new HttpClient(); | ||||||
| 
 | 
 | ||||||
|             foreach (var item in items) |             var spells = LoadJSon<IEnumerable<Spell>>("spells.json"); | ||||||
|  |             var monsters = LoadJSon<IEnumerable<Monster>>("monsters.json"); | ||||||
|  |             var spellsVO = new List<Spell>(); | ||||||
|  |             foreach(var spell in spells) | ||||||
|             { |             { | ||||||
|  |                 spell.ParseHtml(); | ||||||
|  |                 var htmlVO = await client.GetStringAsync(string.Format("https://www.aidedd.org/dnd/sorts.php?vo={0}", spell.IdVO)); | ||||||
|  |                 pack.LoadHtml(htmlVO); | ||||||
|  |                 var spellVO = Spell.FromHtml(pack.DocumentNode.SelectSingleNode("//div[contains(@class,'bloc')]")); | ||||||
|  |                 spellVO.IdVO = spell.IdVO; | ||||||
|  |                 spell.IdVF = spellVO.IdVF; | ||||||
|  |                 spellsVO.Add(spellVO); | ||||||
| 
 | 
 | ||||||
|  |                 Console.WriteLine(string.Format("{0} : {1} / {2} : {3}", spell.IdVF, spell.NamePHB, spellVO.IdVO, spellVO.NameVO)); | ||||||
|             } |             } | ||||||
|             DataContractJsonSerializer serializer = new DataContractJsonSerializer(items.GetType()); | 
 | ||||||
|             MemoryStream stream = new MemoryStream(); |             foreach(var monster in monsters) | ||||||
|             serializer.WriteObject(stream, items); |             { | ||||||
|             stream.Seek(0, SeekOrigin.Begin); |                 monster.ParseHtml(); | ||||||
|             string text = await new StreamReader(stream).ReadToEndAsync(); |             } | ||||||
|  |             SaveJSon<IEnumerable<Monster>>("monsters_vf.json", monsters); | ||||||
|  |             SaveJSon<IEnumerable<Spell>>("spells_vf.json", spells); | ||||||
|  |             //SaveJSon<IEnumerable<Monster>>("monsters_fr.json", monsters); | ||||||
|  |             SaveJSon<IEnumerable<Spell>>("spells_vo.json", spellsVO); | ||||||
|  |             //DataContractJsonSerializer serializer = new DataContractJsonSerializer(items.GetType()); | ||||||
|  |             //MemoryStream stream = new MemoryStream(); | ||||||
|  |             //serializer.WriteObject(stream, items); | ||||||
|  |             //stream.Seek(0, SeekOrigin.Begin); | ||||||
|  |             //string text = await new StreamReader(stream).ReadToEndAsync(); | ||||||
|             Console.WriteLine("Hello World!"); |             Console.WriteLine("Hello World!"); | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         private static T LoadJSon<T>(string filename) where T : class | ||||||
|  |         { | ||||||
|  |             var serializer = new DataContractJsonSerializer(typeof(T)); | ||||||
|  |             using (var stream = new FileStream(filename, FileMode.Open)) | ||||||
|  |             { | ||||||
|  |                 return serializer.ReadObject(stream) as T; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private static void SaveJSon<T>(string filename, T objT) where T : class | ||||||
|  |         { | ||||||
|  |             var serializer = new DataContractJsonSerializer(typeof(T)); | ||||||
|  |             using (var stream = new FileStream(filename, FileMode.Create)) | ||||||
|  |             { | ||||||
|  |                 serializer.WriteObject(stream, objT); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -8,10 +8,4 @@ | ||||||
|     <PackageReference Include="HtmlAgilityPack" Version="1.8.2" /> |     <PackageReference Include="HtmlAgilityPack" Version="1.8.2" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
| 
 | 
 | ||||||
|   <ItemGroup> |  | ||||||
|     <Reference Include="System.ComponentModel.Annotations"> |  | ||||||
|       <HintPath>..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SDKs\UWPNuGetPackages\microsoft.netcore.universalwindowsplatform\6.1.4\ref\uap10.0.15138\System.ComponentModel.Annotations.dll</HintPath> |  | ||||||
|     </Reference> |  | ||||||
|   </ItemGroup> |  | ||||||
| 
 |  | ||||||
| </Project> | </Project> | ||||||
|  |  | ||||||
|  | @ -1,14 +1,10 @@ | ||||||
| using System; | namespace AideDeJeuLib | ||||||
| using System.Collections.Generic; |  | ||||||
| using System.ComponentModel.DataAnnotations; |  | ||||||
| using System.Text; |  | ||||||
| 
 |  | ||||||
| namespace AideDeJeuLib |  | ||||||
| { | { | ||||||
|     public class Item |     public class Item | ||||||
|     { |     { | ||||||
|         [Key] |  | ||||||
|         public string Id { get; set; } |         public string Id { get; set; } | ||||||
|  |         public string IdVO { get; set; } | ||||||
|  |         public string IdVF { get; set; } | ||||||
|         public string Name { get; set; } |         public string Name { get; set; } | ||||||
|         public string NameVO { get; set; } |         public string NameVO { get; set; } | ||||||
|         public string NamePHB { get; set; } |         public string NamePHB { get; set; } | ||||||
|  |  | ||||||
|  | @ -1,10 +1,7 @@ | ||||||
| using HtmlAgilityPack; | using HtmlAgilityPack; | ||||||
| using System; |  | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.ComponentModel.DataAnnotations.Schema; |  | ||||||
| using System.Linq; | using System.Linq; | ||||||
| using System.Runtime.Serialization; | using System.Runtime.Serialization; | ||||||
| using System.Text; |  | ||||||
| using System.Text.RegularExpressions; | using System.Text.RegularExpressions; | ||||||
| 
 | 
 | ||||||
| namespace AideDeJeuLib.Monsters | namespace AideDeJeuLib.Monsters | ||||||
|  | @ -54,7 +51,6 @@ namespace AideDeJeuLib.Monsters | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         [IgnoreDataMember] |         [IgnoreDataMember] | ||||||
|         [NotMapped] |  | ||||||
|         public List<HtmlNode> SpecialFeatures { get; set; } |         public List<HtmlNode> SpecialFeatures { get; set; } | ||||||
|         //public List<string> SpecialFeaturesPersist |         //public List<string> SpecialFeaturesPersist | ||||||
|         //{ |         //{ | ||||||
|  | @ -76,10 +72,8 @@ namespace AideDeJeuLib.Monsters | ||||||
|         //} |         //} | ||||||
| 
 | 
 | ||||||
|         [IgnoreDataMember] |         [IgnoreDataMember] | ||||||
|         [NotMapped] |  | ||||||
|         public List<HtmlNode> Actions { get; set; } |         public List<HtmlNode> Actions { get; set; } | ||||||
|         [IgnoreDataMember] |         [IgnoreDataMember] | ||||||
|         [NotMapped] |  | ||||||
|         public List<HtmlNode> LegendaryActions { get; set; } |         public List<HtmlNode> LegendaryActions { get; set; } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,11 +1,7 @@ | ||||||
| using HtmlAgilityPack; | using HtmlAgilityPack; | ||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; |  | ||||||
| using System.ComponentModel.DataAnnotations; |  | ||||||
| using System.ComponentModel.DataAnnotations.Schema; |  | ||||||
| using System.Linq; | using System.Linq; | ||||||
| using System.Runtime.Serialization; | using System.Runtime.Serialization; | ||||||
| using System.Text; |  | ||||||
| using System.Text.RegularExpressions; | using System.Text.RegularExpressions; | ||||||
| 
 | 
 | ||||||
| namespace AideDeJeuLib.Spells | namespace AideDeJeuLib.Spells | ||||||
|  | @ -21,26 +17,7 @@ namespace AideDeJeuLib.Spells | ||||||
|         public string Range { get; set; } |         public string Range { get; set; } | ||||||
|         public string Components { get; set; } |         public string Components { get; set; } | ||||||
|         public string Duration { get; set; } |         public string Duration { get; set; } | ||||||
|         public string DescriptionHtml |         public string DescriptionHtml { get; set; } | ||||||
|         { |  | ||||||
|             get |  | ||||||
|             { |  | ||||||
|                 return DescriptionDiv?.InnerHtml; |  | ||||||
|             } |  | ||||||
|             set |  | ||||||
|             { |  | ||||||
|                 if (value != null) |  | ||||||
|                 { |  | ||||||
|                     HtmlDocument doc = new HtmlDocument(); |  | ||||||
|                     doc.LoadHtml(value); |  | ||||||
|                     DescriptionDiv = doc.DocumentNode; |  | ||||||
|                 } |  | ||||||
|                 else |  | ||||||
|                 { |  | ||||||
|                     DescriptionDiv = null; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         public string DescriptionText |         public string DescriptionText | ||||||
|         { |         { | ||||||
|             get |             get | ||||||
|  | @ -49,8 +26,23 @@ namespace AideDeJeuLib.Spells | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         [IgnoreDataMember] |         [IgnoreDataMember] | ||||||
|         [NotMapped] |         public HtmlNode DescriptionDiv | ||||||
|         public HtmlNode DescriptionDiv { get; set; } |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 if(DescriptionHtml != null) | ||||||
|  |                 { | ||||||
|  |                     HtmlDocument doc = new HtmlDocument(); | ||||||
|  |                     doc.LoadHtml(DescriptionHtml); | ||||||
|  |                     return doc.DocumentNode; | ||||||
|  |                 } | ||||||
|  |                 return null; | ||||||
|  |             } | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 DescriptionHtml = value?.OuterHtml; | ||||||
|  |             } | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|         public string Overflow { get; set; } |         public string Overflow { get; set; } | ||||||
|         public string NoOverflow { get; set; } |         public string NoOverflow { get; set; } | ||||||
|  | @ -67,7 +59,14 @@ namespace AideDeJeuLib.Spells | ||||||
|         public void ParseNode(HtmlNode nodeSpell) |         public void ParseNode(HtmlNode nodeSpell) | ||||||
|         { |         { | ||||||
|             this.Name = nodeSpell.SelectSingleNode("h1").InnerText; |             this.Name = nodeSpell.SelectSingleNode("h1").InnerText; | ||||||
|             var altNames = nodeSpell.SelectSingleNode("div[@class='trad']")?.InnerText; |             var divTrad = nodeSpell.SelectSingleNode("div[@class='trad']"); | ||||||
|  |              | ||||||
|  |             var linkVO = divTrad.SelectSingleNode("a").GetAttributeValue("href", ""); | ||||||
|  |             var matchIdVF = new Regex(@"\?vf=(?<idvf>.*)").Match(linkVO); | ||||||
|  |             this.IdVF = matchIdVF?.Groups["idvf"]?.Value; | ||||||
|  |             var matchIdVO = new Regex(@"\?vo=(?<idvo>.*)").Match(linkVO); | ||||||
|  |             this.IdVO = matchIdVO?.Groups["idvo"]?.Value; | ||||||
|  |             var altNames = divTrad?.InnerText; | ||||||
|             if (altNames != null) |             if (altNames != null) | ||||||
|             { |             { | ||||||
|                 var matchNames = new Regex(@"\[ (?<vo>.*?) \](?: \[ (?<alt>.*?) \])?").Match(altNames); |                 var matchNames = new Regex(@"\[ (?<vo>.*?) \](?: \[ (?<alt>.*?) \])?").Match(altNames); | ||||||
|  | @ -82,9 +81,9 @@ namespace AideDeJeuLib.Spells | ||||||
|             this.Level = this.LevelType.Split(new string[] { " - " }, StringSplitOptions.None)[0].Split(' ')[1]; |             this.Level = this.LevelType.Split(new string[] { " - " }, StringSplitOptions.None)[0].Split(' ')[1]; | ||||||
|             this.Type = this.LevelType.Split(new string[] { " - " }, StringSplitOptions.None)[1]; |             this.Type = this.LevelType.Split(new string[] { " - " }, StringSplitOptions.None)[1]; | ||||||
|             this.CastingTime = nodeSpell.SelectSingleNode("div[@class='paragraphe']").InnerText.Split(new string[] { ": " }, StringSplitOptions.None)[1]; |             this.CastingTime = nodeSpell.SelectSingleNode("div[@class='paragraphe']").InnerText.Split(new string[] { ": " }, StringSplitOptions.None)[1]; | ||||||
|             this.Range = nodeSpell.SelectSingleNode("div[strong/text()='Portée']").InnerText.Split(new string[] { " : " }, StringSplitOptions.None)[1]; |             this.Range = nodeSpell.SelectSingleNode("div[strong/text()='Portée' or strong/text()='Range']").InnerText.Split(new string[] { ": " }, StringSplitOptions.None)[1]; | ||||||
|             this.Components = nodeSpell.SelectSingleNode("div[strong/text()='Composantes']").InnerText.Split(new string[] { " : " }, StringSplitOptions.None)[1]; |             this.Components = nodeSpell.SelectSingleNode("div[strong/text()='Composantes' or strong/text()='Components']")?.InnerText?.Split(new string[] { ": " }, StringSplitOptions.None)?[1]; | ||||||
|             this.Duration = nodeSpell.SelectSingleNode("div[strong/text()='Durée']").InnerText.Split(new string[] { " : " }, StringSplitOptions.None)[1]; |             this.Duration = nodeSpell.SelectSingleNode("div[strong/text()='Durée' or strong/text()='Duration']").InnerText.Split(new string[] { ": " }, StringSplitOptions.None)[1]; | ||||||
|             this.DescriptionDiv = nodeSpell.SelectSingleNode("div[contains(@class,'description')]"); |             this.DescriptionDiv = nodeSpell.SelectSingleNode("div[contains(@class,'description')]"); | ||||||
|             this.Overflow = nodeSpell.SelectSingleNode("div[@class='overflow']")?.InnerText; |             this.Overflow = nodeSpell.SelectSingleNode("div[@class='overflow']")?.InnerText; | ||||||
|             this.NoOverflow = nodeSpell.SelectSingleNode("div[@class='nooverflow']")?.InnerText; |             this.NoOverflow = nodeSpell.SelectSingleNode("div[@class='nooverflow']")?.InnerText; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Yan Maniez
						Yan Maniez