/// <summary> /// Method fired when the user clicks on compare /// </summary> private void Compare_Click(object sender, RoutedEventArgs e) { BookDiff baseFile = ParseBook(Convert.ToString(this.baseFile.ToolTip)); BookDiff timingFile = ParseBook(Convert.ToString(this.timingFile.ToolTip)); this.difference = CompareBooks(baseFile, timingFile); this.statusTxt.Text = "save differences"; this.saveBtn.IsEnabled = true; }
/// <summary> /// Helper for parsing the book. /// </summary> /// <param name="file">The file to parse.</param> /// <returns>The parsed book.</returns> private BookDiff ParseBook(string file) { BookDiff book = new BookDiff(); XmlDocument doc = new XmlDocument(); doc.Load(file); book.CompletedTime = TimeSpan.Parse(((XmlElement)doc.GetElementsByTagName("Book").Item(0)).GetAttribute("CompletedTime")); XmlNodeList chapters = doc.GetElementsByTagName("Chapter"); int chapterIndex = 0; foreach (XmlElement chapter in chapters) { book.Chapters.Add(new ChapterDiff()); int sentenceIndex = 0; XmlNodeList sentences = chapter.GetElementsByTagName("Sentence"); foreach (XmlElement sentence in sentences) { book.Chapters[chapterIndex].Sentences.Add(new AudioPosition()); book.Chapters[chapterIndex].Sentences[sentenceIndex] = new AudioPosition(); book.Chapters[chapterIndex].Sentences[sentenceIndex].Position = TimeSpan.Parse(sentence.GetAttribute("AudioPosition")); book.Chapters[chapterIndex].Sentences[sentenceIndex].Duration = TimeSpan.Parse(sentence.GetAttribute("Duration")); /* * book.Chapters[chapterIndex].Sentences[sentenceIndex] = new AudioPosition() * { * Position = TimeSpan.Parse(sentence.GetAttribute("AudioPosition")), * Duration = TimeSpan.Parse(sentence.GetAttribute("Duration")) * };*/ sentenceIndex++; } chapterIndex++; } return(book); }
/// <summary> /// Helper for comparing two books. /// </summary> /// <param name="a">The baseline book.</param> /// <param name="b">The book to compare.</param> /// <returns>The differences.</returns> private BookDiff CompareBooks(BookDiff a, BookDiff b) { BookDiff value = new BookDiff(); value.CompletedTime = a.CompletedTime - b.CompletedTime; for (int i = 0; i < a.Chapters.Count; i++) { value.Chapters.Add(new ChapterDiff()); for (int j = 0; j < a.Chapters[i].Sentences.Count; j++) { value.Chapters[i].Sentences.Add(new AudioPosition()); value.Chapters[i].Sentences[j] = b.Chapters[i].Sentences[j] - a.Chapters[i].Sentences[j]; } } return(value); }