+++ /dev/null
-// --------------------------------------------------------------------------------------------------------------------\r
-// <copyright file="PlistHelper.cs" company="HandBrake Project (http://handbrake.fr)">\r
-// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.\r
-// </copyright>\r
-// <summary>\r
-// A Plist Helper\r
-// </summary>\r
-// --------------------------------------------------------------------------------------------------------------------\r
-\r
-namespace HandBrake.ApplicationServices.Utilities\r
-{\r
- using System;\r
- using System.Collections.Generic;\r
- using System.IO;\r
- using System.Xml;\r
-\r
- /// <summary>\r
- /// A Plist Helper\r
- /// </summary>\r
- public class PlistHelper\r
- {\r
- /// <summary>\r
- /// Get the Audio Track XML Nodes from a plist preset file\r
- /// </summary>\r
- /// <param name="filename">\r
- /// A Plist preset file\r
- /// </param>\r
- /// <returns>\r
- /// A List of XmlNodes which contain audio tracks\r
- /// </returns>\r
- public static List<XmlNode> GetAudioTracks(string filename)\r
- {\r
- // Data Store\r
- List<XmlNode> audioTracks = new List<XmlNode>();\r
-\r
- // Load the file and get the Root note, or return if none found\r
- XmlNode root = LoadFile(filename);\r
- if (root == null)\r
- {\r
- return null;\r
- }\r
-\r
- // Get the Audio Tracks\r
- XmlNode audioListDict = root.ChildNodes[2].ChildNodes[0].FirstChild.ChildNodes[1];\r
- for (int i = 0; i < audioListDict.ChildNodes.Count; i++)\r
- {\r
- XmlNode audioChannel = audioListDict.ChildNodes[i]; // <dict>\r
- audioTracks.Add(audioChannel);\r
- }\r
-\r
- return audioTracks;\r
- }\r
-\r
- /// <summary>\r
- /// Get the settings portion of a presets file\r
- /// </summary>\r
- /// <param name="filename">\r
- /// A Plist preset file\r
- /// </param>\r
- /// <returns>\r
- /// A Dictionary of plist key against an XML node containing the setting.\r
- /// </returns>\r
- public static Dictionary<string, XmlNode> GetPresetSettings(string filename)\r
- {\r
- // Data Store\r
- Dictionary<string, XmlNode> settings = new Dictionary<string, XmlNode>();\r
-\r
- // Load the file and get the Root note, or return if none found\r
- XmlNode root = LoadFile(filename);\r
- if (root == null)\r
- {\r
- return null;\r
- }\r
-\r
- // Get the Preset Settings, starting from the 3rd node (skipping the audio notes we've just prcessed)\r
- XmlNode presetSettings = root.ChildNodes[2].ChildNodes[0].FirstChild;\r
- for (int i = 2; i < presetSettings.ChildNodes.Count; i += 2)\r
- {\r
- string key = presetSettings.ChildNodes[i].InnerText;\r
- XmlNode node = presetSettings.ChildNodes[i + 1];\r
- settings.Add(key, node);\r
- }\r
-\r
- return settings;\r
- }\r
-\r
- /// <summary>\r
- /// Load a Plist Preset file and return it as an XML document\r
- /// </summary>\r
- /// <param name="filename">\r
- /// A Plist preset file\r
- /// </param>\r
- /// <returns>\r
- /// An XML document\r
- /// </returns>\r
- private static XmlNode LoadFile(string filename)\r
- {\r
- try\r
- {\r
- if (!File.Exists(filename))\r
- {\r
- return null;\r
- }\r
-\r
- StreamReader sr = File.OpenText(filename);\r
- string fromfile = string.Empty;\r
- int fileChar;\r
- while ((fileChar = sr.Read()) != -1)\r
- {\r
- fromfile += Convert.ToChar(fileChar);\r
- }\r
-\r
- XmlDocument doc = new XmlDocument();\r
- doc.LoadXml(fromfile);\r
-\r
- XmlNode root = doc;\r
- if (!root.HasChildNodes)\r
- {\r
- return null;\r
- }\r
-\r
- return root;\r
- }\r
- catch (Exception)\r
- {\r
- return null;\r
- }\r
- }\r
- }\r
-}\r
}\r
set\r
{\r
- if (!Equals(this.selectedTitle, value))\r
+ if (!object.Equals(this.selectedTitle, value))\r
{\r
this.selectedTitle = value;\r
\r
- if (selectedTitle == null)\r
+ if (this.selectedTitle == null)\r
{\r
return;\r
}\r
\r
// Default the Start and End Point dropdowns\r
this.SelectedStartPoint = 1;\r
- this.SelectedEndPoint = selectedTitle.Chapters.Last().ChapterNumber;\r
+ this.SelectedEndPoint = this.selectedTitle.Chapters != null &&\r
+ this.selectedTitle.Chapters.Count != 0\r
+ ? this.selectedTitle.Chapters.Last().ChapterNumber\r
+ : 1;\r
+\r
this.SelectedPointToPoint = PointToPointMode.Chapters;\r
this.SelectedAngle = 1;\r
\r
}\r
this.NotifyOfPropertyChange(() => this.CurrentTask);\r
\r
- this.Duration = selectedTitle.Duration.ToString();\r
+ this.Duration = this.selectedTitle.Duration.ToString();\r
\r
// Setup the tab controls\r
this.SetupTabs();\r