OSDN Git Service

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