public MaterialFile(string author, string description, string link, string rootFolder, MaterialFileType materialFileType, DateTime date) { Author = author; Description = description; Link = link; RootFolder = rootFolder; MaterialFileType = materialFileType; Date = date; }
/// <summary> /// Returns all the student's school material files /// </summary> /// <returns>An array of MaterialFile objects that contain all the file data</returns> public async Task <MaterialFile[]> GetFilesAsync() { HttpResponseMessage msg = await _http.GetAsync("https://web.spaggiari.eu/fml/app/default/didattica_genitori.php"); HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(await msg.Content.ReadAsStringAsync()); HtmlNode[] dataTableNodes = doc.GetElementbyId("data_table").ChildNodes.ToArray(); List <MaterialFile> files = new List <MaterialFile>(); string currentAuthor = string.Empty; string currentFolder = string.Empty; for (int i = 10; i < dataTableNodes.Length; i++) { bool isFileNode = dataTableNodes[i].HasClass("row") && dataTableNodes[i].HasClass("contenuto"); bool isFolder = dataTableNodes[i].HasClass("row") && dataTableNodes[i].HasClass("row_parent"); bool isAuthor = dataTableNodes[i].GetAttributeValue("style", "none") == "height: 40px;"; if (isAuthor) { foreach (HtmlNode node in dataTableNodes[i].ChildNodes) { bool isAuthorNode = node.GetAttributeValue("colspan", "none") == "12"; if (isAuthorNode) { currentAuthor = node.InnerText.Trim(); } } } if (isFolder) { foreach (HtmlNode node in dataTableNodes[i].ChildNodes) { bool isFolderNode = node.GetAttributeValue("colspan", "none") == "44" && node.HasClass("folder"); if (isFolderNode) { currentFolder = node.ChildNodes[0].InnerText.Trim(); } } } if (isFileNode) { string description = string.Empty; string link = string.Empty; MaterialFileType materialFileType = MaterialFileType.File; DateTime date = DateTime.MinValue; foreach (HtmlNode node in dataTableNodes[i].ChildNodes) { bool isContent = node.GetAttributeValue("colspan", "none") == "36" && node.HasClass("contenuto_desc"); bool isButton = node.GetAttributeValue("colspan", "none") == "4" && node.HasClass("contenuto_action"); if (isContent) { foreach (HtmlNode subNode in node.ChildNodes[1].ChildNodes) { bool isDescription = subNode.HasClass("row_contenuto_desc") && subNode.HasClass("font_size_16"); bool isDate = !subNode.HasClass("row_contenuto_desc") && subNode.HasClass("font_size_9"); if (isDescription) { description = subNode.InnerText.Trim(); } if (isDate) { date = DateTime.ParseExact(subNode.InnerText.Replace("condiviso il: ", "").Trim(), "dd-MM-yyyy HH:mm:ss", null); } } } if (isButton) { bool isLink = node.ChildNodes[1].HasClass("action_link"); bool isFile = node.ChildNodes[1].HasClass("action_download"); if (isLink) { link = node.ChildNodes[1].GetAttributeValue("ref", "none"); materialFileType = MaterialFileType.Link; } if (isFile) { link = $"https://web.spaggiari.eu/fml/app/default/didattica_genitori.php?a=downloadContenuto&contenuto_id={node.ChildNodes[1].GetAttributeValue("contenuto_id", "none")}&cksum={node.ChildNodes[1].GetAttributeValue("cksum", "none")}"; materialFileType = MaterialFileType.File; } } } files.Add(new MaterialFile(currentAuthor, description, link, currentFolder, materialFileType, date)); } } return(files.ToArray()); }