public void Select(DBNode item) { async Task <QDocument> loader() { var siDoc = await SelectAsync(item); return(new QDocument(siDoc, _storageContextViewModel) { FileName = siDoc.Package.Name, Changed = true }); }; OnNewItem(new DocumentLoaderViewModel(item.Name, loader)); }
public async void LoadChildren(DBNode node) { IsProgress = true; node.Children = null; try { node.Children = await LoadNodes(node.Key); } catch (Exception exc) { OnError(exc); } finally { IsProgress = false; } if (node.Children.Length == 0) { Select(node); } }
internal async Task <SIDocument> SelectAsync(DBNode item) { var doc = await Utils.GetXml(item.Key); var manager = new XmlNamespaceManager(doc.NameTable); var siDoc = SIDocument.Create(doc.SelectNodes(@"/tournament/Title", manager)[0].InnerText.GrowFirstLetter().ClearPoints(), Resources.EmptyValue); siDoc.Package.Info.Comments.Text += string.Format(Resources.DBStorageComment, doc["tournament"]["FileName"].InnerText); string s = doc["tournament"]["Info"].InnerText; if (s.Length > 0) { siDoc.Package.Info.Comments.Text += string.Format("\r\nИнфо: {0}", s); } s = doc["tournament"]["URL"].InnerText; if (s.Length > 0) { siDoc.Package.Info.Comments.Text += string.Format("\r\nURL: {0}", s); } s = doc["tournament"]["PlayedAt"].InnerText; if (s.Length > 0) { siDoc.Package.Info.Comments.Text += string.Format("\r\nИграно: {0}", s); } s = doc["tournament"]["Editors"].InnerText; if (s.Length > 0) { siDoc.Package.Info.Authors[0] = $"{Resources.Editors}: {s}"; } var round = siDoc.Package.CreateRound(RoundTypes.Standart, Resources.EmptyValue); var nodeList2 = doc.SelectNodes(@"/tournament/question", manager); foreach (XmlNode node2 in nodeList2) { var text = node2["Question"].InnerText.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries); var ans = node2["Answer"].InnerText.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries); var sour = node2["Sources"].InnerText.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries); int i = 0, j = 0; var themeName = new StringBuilder(); while (i < text.Length && !(text[i].Length > 3 && text[i].Substring(0, 3) == " ")) { if (themeName.Length > 0) { themeName.Append(' '); } themeName.Append(text[i++]); } var theme = round.CreateTheme(themeName.ToString().GrowFirstLetter().ClearPoints()); var authorsText = node2["Authors"].InnerText; if (!string.IsNullOrWhiteSpace(authorsText)) { theme.Info.Authors.Add(authorsText); } var themeComments = new StringBuilder(node2["Comments"].InnerText); while (i < text.Length && text[i].Length > 4 && text[i].Substring(0, 3) == " " && !char.IsDigit(text[i][3])) { if (themeComments.Length > 0) { themeComments.Append(' '); } themeComments.Append(text[i++]); } theme.Info.Comments.Text = themeComments.ToString(); bool final = true; Question quest = null; var qText = new StringBuilder(); i--; #region questionsReading while (++i < text.Length) { text[i] = text[i].Trim(); string js = (j + 1).ToString(); if (text[i].Substring(0, js.Length) == js && (text[i].Length > 3 && text[i].Substring(js.Length, 2) == ". " || text[i].Length > 4 && text[i].Substring(js.Length, 3) == "0. ")) { j++; final = false; if (qText.Length > 0) { quest = theme.CreateQuestion(10 * (j - 1)); quest.Type.Name = QuestionTypes.Simple; quest.Scenario.Clear(); quest.Scenario.Add(qText.ToString().GrowFirstLetter().ClearPoints()); } int add = 3; if (text[i].Substring(js.Length, 2) == ". ") { add = 2; } qText = new StringBuilder(text[i].Substring(js.Length + add)); } else { if (qText.Length > 0) { qText.Append(' '); } qText.Append(text[i]); } } if (final) { quest = theme.CreateQuestion(0); quest.Right[0] = node2["Answer"].InnerText.Trim().GrowFirstLetter().ClearPoints(); } else { quest = theme.CreateQuestion(10 * j); } quest.Scenario.Clear(); quest.Scenario.Add(qText.ToString().GrowFirstLetter().ClearPoints()); quest.Type.Name = QuestionTypes.Simple; #endregion #region answersReading int number = 0, number2 = -1, multiplier = 1; if (!final) { i = -1; qText = new StringBuilder(); while (++i < ans.Length) { ans[i] = ans[i].Trim(); number = 0; int k = 0; while (char.IsDigit(ans[i][k])) { number = number * 10 + int.Parse(ans[i][k++].ToString()); } if (!((ans[i].Length > k + 2 && ans[i].Substring(k, 2) == ". " || ans[i].Length > 3 + k && ans[i].Substring(k, 3) == "0. "))) { number = -1; } if (number >= 0) { if (qText.Length > 0 && theme.Questions.Count > number2) { theme.Questions[number2].Right[0] = qText.ToString().GrowFirstLetter().ClearPoints(); } if (number2 == -1) { multiplier = number; } number2 = number / multiplier - 1; int add = 3; if (ans[i].Substring(k, 2) == ". ") { add = 2; } qText = new StringBuilder(ans[i].Substring(k + add)); } else { if (qText.Length > 0) { qText.Append(' '); } qText.Append(ans[i]); } } if (theme.Questions.Count > number2) { theme.Questions[number2].Right[0] = qText.ToString().GrowFirstLetter().ClearPoints(); } } #endregion #region sourcesReading i = -1; qText = new StringBuilder(); number = 0; number2 = 0; while (++i < sour.Length) { sour[i] = sour[i].Trim(); number = 0; int k = 0; while (char.IsDigit(sour[i][k])) { number = number * 10 + int.Parse(sour[i][k++].ToString()); } number--; if (!((sour[i].Length > k + 2 && sour[i].Substring(k, 2) == ". " || sour[i].Length > 3 + k && sour[i].Substring(k, 3) == "0. "))) { number = -1; } if (number >= 0) { if (qText.Length > 0 && theme.Questions.Count > number2) { theme.Questions[number2].Info.Sources.Add(qText.ToString().GrowFirstLetter().ClearPoints()); } number2 = number; int add = 3; if (sour[i].Substring(k, 2) == ". ") { add = 2; } qText = new StringBuilder(sour[i].Substring(k + add)); } else { if (qText.Length > 0) { qText.Append(' '); } qText.Append(sour[i]); } } if (theme.Questions.Count > number2 && qText.Length > 0) { theme.Questions[number2].Info.Sources.Add(qText.ToString().GrowFirstLetter().ClearPoints()); } if (number2 == -1) { theme.Info.Sources.Add(node2["Sources"].InnerText); } #endregion } return(siDoc); }