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