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("\"", string.Empty);\r
58                 this.DownloadFile = nodeItem["windows"].InnerText;\r
59                 this.DescriptionUrl = new Uri(nodeItem["sparkle:releaseNotesLink"].InnerText);\r
60             }\r
61             catch (Exception)\r
62             {\r
63                 return;\r
64             }\r
65         }\r
66 \r
67         /// <summary>\r
68         /// Read the RSS file.\r
69         /// </summary>\r
70         /// <param name="rssReader">\r
71         /// The RSS reader\r
72         /// </param>\r
73         /// <returns>\r
74         /// The read rss.\r
75         /// </returns>\r
76         private static XmlNode ReadRss(XmlReader rssReader)\r
77         {\r
78             XmlNode nodeItem = null;\r
79             XmlNode nodeChannel = null;\r
80             XmlNode nodeRss = null;\r
81 \r
82             XmlDocument rssDoc = new XmlDocument();\r
83             rssDoc.Load(rssReader);\r
84 \r
85             foreach (XmlNode t in rssDoc.ChildNodes)\r
86             {\r
87                 if (t.Name == "rss")\r
88                 {\r
89                     nodeRss = t;\r
90                 }\r
91             }\r
92 \r
93             if (nodeRss != null)\r
94             {\r
95                 foreach (XmlNode t in nodeRss.ChildNodes)\r
96                 {\r
97                     if (t.Name == "channel")\r
98                     {\r
99                         nodeChannel = t;\r
100                     }\r
101                 }\r
102             }\r
103 \r
104             if (nodeChannel != null)\r
105             {\r
106                 foreach (XmlNode t in nodeChannel.ChildNodes)\r
107                 {\r
108                     if (t.Name == "item")\r
109                     {\r
110                         nodeItem = t;\r
111                     }\r
112                 }\r
113             }\r
114 \r
115             return nodeItem;\r
116         }\r
117     }\r
118 }