using System.Data.Common; using System.IdentityModel.Tokens.Jwt; using System.Web; using HandlebarsDotNet; using InnovEnergy.App.RemoteSupportConsole; using static System.Text.Json.JsonSerializer; using InnovEnergy.App.VrmGrabber.Database; using InnovEnergy.Lib.Victron.VictronVRM; using Microsoft.AspNetCore.Mvc; using FILE=System.IO.File; using VrmInstallation = InnovEnergy.Lib.Victron.VictronVRM.Installation; using Installation = InnovEnergy.App.VrmGrabber.DataTypes.Installation; using System.Diagnostics.CodeAnalysis; namespace InnovEnergy.App.VrmGrabber; [Controller] public class Controller : ControllerBase { [HttpGet] [Route("/")] [Produces("text/html")] public ActionResult Index() { String source = @" {{#inst}} {{> installations}} {{/inst}}
"; String partialSource = @"{{Name}} {{online}} {{Ip}} VRM Grafana {{Identifier}} {{LastSeen}} {{Serial}} "; var instList = Db.Installations.ToList(); if (instList.Count == 0) return new ContentResult { ContentType = "text/html", Content = "

Please wait page is still loading

" }; Handlebars.RegisterTemplate("installations", partialSource); var template = Handlebars.Compile(source); // var insts = instList.Select(i => // { // var ip = Ip(i); // return new Install( // i.Name, // ip[0], // i.Vrm, // i.Identifier, // i.Serial, // i.EscapedName, // ip[1], // LastSeen(i)); // }); var data = new { inst = instList }; var result = template(data); return new ContentResult { ContentType = "text/html", Content = result }; } private String? LastSeen(Installation installation) { return Db.GetInstallationByIdentifier(installation.Identifier)?.Details.ToString(); } [UnconditionalSuppressMessage("Trimming", "IL2026:Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code", Justification = "")] public static String? Serial(Installation installation) { return Deserialize>(installation.Details).MachineSerial(); } // [HttpGet(nameof(GetInstallation))] // [UnconditionalSuppressMessage("Trimming", "IL2026:Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code", Justification = "")] // public Object GetInstallation(UInt64 serialNumber) // { // var instList = Db.InstallationsAndDetails.Values.ToList(); // foreach (var detailList in instList.Select((value, index) => new { Value = value, Index = index})) // { // if (detailList.Value.All(detail => detail.Json["idSite"]?.GetValue() != serialNumber)) continue; // var retour = Db.InstallationsAndDetails.Keys.ToList()[detailList.Index].Json; // retour["details"] = JsonSerializer.Deserialize(JsonSerializer.Serialize(detailList.Value.Select(d => d.Json).ToArray())); // return retour; // } // // return new NotFoundResult(); // } }