// -------------------------------------------------------------------------------------------------------------------- // // This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. // // // An object representing a Chapter aosciated with a Title, in a DVD // // -------------------------------------------------------------------------------------------------------------------- namespace HandBrake.ApplicationServices.Parsing { using System; using System.Collections.Generic; using System.IO; using System.Text.RegularExpressions; /// /// An object representing a Chapter aosciated with a Title, in a DVD /// public class Chapter { /// /// Initializes a new instance of the class. /// public Chapter() { } /// /// Initializes a new instance of the class. /// /// /// The number. /// /// /// The name. /// /// /// The duration. /// public Chapter(int number, string name, TimeSpan duration) { this.ChapterName = name; this.ChapterNumber = number; this.Duration = duration; } /// /// Gets or sets The number of this Chapter, in regards to it's parent Title /// public int ChapterNumber { get; set; } /// /// Gets or sets ChapterName. /// public string ChapterName { get; set; } /// /// Gets or sets The length in time this Chapter spans /// public TimeSpan Duration { get; set; } /// /// Parse a CLI string to a Chapter object /// /// /// The output. /// /// /// A chapter Object /// public static Chapter Parse(StringReader output) { // TODO add support for reading chapter names to the regex. Match m = Regex.Match( output.ReadLine(), @"^ \+ ([0-9]*): cells ([0-9]*)->([0-9]*), ([0-9]*) blocks, duration ([0-9]{2}:[0-9]{2}:[0-9]{2})"); if (m.Success) { var thisChapter = new Chapter { ChapterNumber = int.Parse(m.Groups[1].Value.Trim()), ChapterName = string.Empty, Duration = TimeSpan.Parse(m.Groups[5].Value) }; return thisChapter; } return null; } /// /// Prase a list of strings / chatpers /// /// /// The output. /// /// /// An array of chapter objects /// public static Chapter[] ParseList(StringReader output) { var chapters = new List(); // this is to read the " + chapters:" line from the buffer // so we can start reading the chapters themselvs output.ReadLine(); while (true) { // Start of the chapter list for this Title Chapter thisChapter = Parse(output); if (thisChapter != null) chapters.Add(thisChapter); else break; } return chapters.ToArray(); } /// /// Override of the ToString method to make this object easier to use in the UI /// /// A string formatted as: {chapter #} public override string ToString() { return ChapterNumber.ToString(); } } }