OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Functions / AppcastReader.cs
1 /*  RssReader.cs $\r
2     This file is part of the HandBrake source code.\r
3     Homepage: <http://handbrake.fr>.\r
4     It may be used under the terms of the GNU General Public License. */\r
5 \r
6 namespace Handbrake.Functions\r
7 {\r
8     using System;\r
9     using System.IO;\r
10     using System.Text.RegularExpressions;\r
11     using System.Xml;\r
12 \r
13     /// <summary>\r
14     /// Appcast Reader - Used for parsing HandBrakes update file\r
15     /// </summary>\r
16     public class AppcastReader\r
17     {\r
18         /// <summary>\r
19         /// Gets Information about an update to HandBrake\r
20         /// </summary>\r
21         public Uri DescriptionUrl { get; private set; }\r
22 \r
23         /// <summary>\r
24         /// Gets HandBrake's version from the appcast.xml file.\r
25         /// </summary>\r
26         public string Version { get; private set; }\r
27 \r
28         /// <summary>\r
29         /// Gets HandBrake's Build from the appcast.xml file.\r
30         /// </summary>\r
31         public string Build { get; private set; }\r
32 \r
33         /// <summary>\r
34         /// Gets the URL for update file.\r
35         /// </summary>\r
36         public string DownloadFile { get; private set; }\r
37 \r
38         /// <summary>\r
39         /// Get the build information from the required appcasts. Run before accessing the public vars.\r
40         /// </summary>\r
41         /// <param name="input">\r
42         /// The input.\r
43         /// </param>\r
44         public void GetInfo(string input)\r
45         {\r
46             try\r
47             {\r
48                 // Get the correct Appcast and set input.\r
49                 XmlNode nodeItem = ReadRss(new XmlTextReader(new StringReader(input)));\r
50                 string result = nodeItem.InnerXml;\r
51 \r
52                 // Regular Expressions\r
53                 Match ver = Regex.Match(result, @"sparkle:version=""([0-9]*)\""");\r
54                 Match verShort = Regex.Match(result, @"sparkle:shortVersionString=""(([svn]*)([0-9.\s]*))\""");\r
55 \r
56                 this.Build = ver.ToString().Replace("sparkle:version=", string.Empty).Replace("\"", string.Empty);\r
57                 this.Version = verShort.ToString().Replace("sparkle:shortVersionString=", string.Empty).Replace("\"", \r
58                                                                                                                 string.\r
59                                                                                                                     Empty);\r
60                 this.DownloadFile = nodeItem["windows"].InnerText;\r
61                 this.DescriptionUrl = new Uri(nodeItem["sparkle:releaseNotesLink"].InnerText);\r
62             }\r
63             catch (Exception)\r
64             {\r
65                 return;\r
66             }\r
67         }\r
68 \r
69         /// <summary>\r
70         /// Read the RSS file.\r
71         /// </summary>\r
72         /// <param name="rssReader">\r
73         /// The RSS reader\r
74         /// </param>\r
75         /// <returns>\r
76         /// The read rss.\r
77         /// </returns>\r
78         private static XmlNode ReadRss(XmlReader rssReader)\r
79         {\r
80             XmlNode nodeItem = null;\r
81             XmlNode nodeChannel = null;\r
82             XmlNode nodeRss = null;\r
83 \r
84             XmlDocument rssDoc = new XmlDocument();\r
85             rssDoc.Load(rssReader);\r
86 \r
87             foreach (XmlNode t in rssDoc.ChildNodes)\r
88             {\r
89                 if (t.Name == "rss")\r
90                 {\r
91                     nodeRss = t;\r
92                 }\r
93             }\r
94 \r
95             if (nodeRss != null)\r
96             {\r
97                 foreach (XmlNode t in nodeRss.ChildNodes)\r
98                 {\r
99                     if (t.Name == "channel")\r
100                     {\r
101                         nodeChannel = t;\r
102                     }\r
103                 }\r
104             }\r
105 \r
106             if (nodeChannel != null)\r
107             {\r
108                 foreach (XmlNode t in nodeChannel.ChildNodes)\r
109                 {\r
110                     if (t.Name == "item")\r
111                     {\r
112                         nodeItem = t;\r
113                     }\r
114                 }\r
115             }\r
116 \r
117             return nodeItem;\r
118         }\r
119     }\r
120 }