Statistics
| Branch: | Revision:

root / trunk / NetSparkle / NetSparkleAppCast.cs @ 049333d2

History | View | Annotate | Download (3.5 kB)

1 46426dbd Panagiotis Kanavos
using System;
2 46426dbd Panagiotis Kanavos
using System.Collections.Generic;
3 46426dbd Panagiotis Kanavos
using System.Linq;
4 46426dbd Panagiotis Kanavos
using System.Text;
5 46426dbd Panagiotis Kanavos
using System.IO;
6 46426dbd Panagiotis Kanavos
using System.Xml;
7 46426dbd Panagiotis Kanavos
using System.Net;
8 46426dbd Panagiotis Kanavos
9 46426dbd Panagiotis Kanavos
namespace AppLimit.NetSparkle
10 46426dbd Panagiotis Kanavos
{
11 46426dbd Panagiotis Kanavos
    public class NetSparkleAppCast
12 46426dbd Panagiotis Kanavos
    {
13 46426dbd Panagiotis Kanavos
        private NetSparkleConfiguration _config;
14 46426dbd Panagiotis Kanavos
        private String _castUrl;
15 46426dbd Panagiotis Kanavos
16 46426dbd Panagiotis Kanavos
        private const String itemNode = "item";
17 46426dbd Panagiotis Kanavos
        private const String enclosureNode = "enclosure";
18 46426dbd Panagiotis Kanavos
        private const String releaseNotesLinkNode = "sparkle:releaseNotesLink";
19 46426dbd Panagiotis Kanavos
        private const String versionAttribute = "sparkle:version";
20 46426dbd Panagiotis Kanavos
        private const String dasSignature = "sparkle:dsaSignature";
21 46426dbd Panagiotis Kanavos
        private const String urlAttribute = "url";
22 46426dbd Panagiotis Kanavos
23 46426dbd Panagiotis Kanavos
        public NetSparkleAppCast(String castUrl, NetSparkleConfiguration config)
24 46426dbd Panagiotis Kanavos
        {
25 46426dbd Panagiotis Kanavos
            _config     = config;
26 46426dbd Panagiotis Kanavos
            _castUrl    = castUrl;
27 46426dbd Panagiotis Kanavos
        }
28 46426dbd Panagiotis Kanavos
29 46426dbd Panagiotis Kanavos
        public NetSparkleAppCastItem GetLatestVersion()
30 46426dbd Panagiotis Kanavos
        {
31 46426dbd Panagiotis Kanavos
            NetSparkleAppCastItem latestVersion = null;
32 46426dbd Panagiotis Kanavos
          
33 46426dbd Panagiotis Kanavos
            // build a http web request stream
34 46426dbd Panagiotis Kanavos
            WebRequest request = HttpWebRequest.Create(_castUrl);
35 46426dbd Panagiotis Kanavos
36 46426dbd Panagiotis Kanavos
            // request the cast and build the stream
37 46426dbd Panagiotis Kanavos
            WebResponse response = request.GetResponse();
38 46426dbd Panagiotis Kanavos
39 46426dbd Panagiotis Kanavos
            Stream inputstream = response.GetResponseStream();
40 46426dbd Panagiotis Kanavos
41 46426dbd Panagiotis Kanavos
            NetSparkleAppCastItem currentItem = null;
42 46426dbd Panagiotis Kanavos
43 46426dbd Panagiotis Kanavos
            XmlTextReader reader = new XmlTextReader(inputstream);
44 46426dbd Panagiotis Kanavos
            while(reader.Read())
45 46426dbd Panagiotis Kanavos
            {
46 46426dbd Panagiotis Kanavos
                if ( reader.NodeType == XmlNodeType.Element)
47 46426dbd Panagiotis Kanavos
                {
48 46426dbd Panagiotis Kanavos
                    switch(reader.Name)
49 46426dbd Panagiotis Kanavos
                    {
50 46426dbd Panagiotis Kanavos
                        case itemNode:
51 46426dbd Panagiotis Kanavos
                            {
52 46426dbd Panagiotis Kanavos
                                currentItem = new NetSparkleAppCastItem();
53 46426dbd Panagiotis Kanavos
                                break;
54 46426dbd Panagiotis Kanavos
                            }
55 46426dbd Panagiotis Kanavos
                        case releaseNotesLinkNode:
56 46426dbd Panagiotis Kanavos
                            {
57 46426dbd Panagiotis Kanavos
                                currentItem.ReleaseNotesLink = reader.ReadString();
58 46426dbd Panagiotis Kanavos
                                currentItem.ReleaseNotesLink = currentItem.ReleaseNotesLink.Trim('\n');
59 46426dbd Panagiotis Kanavos
                                break;
60 46426dbd Panagiotis Kanavos
                            }                            
61 46426dbd Panagiotis Kanavos
                        case enclosureNode:
62 46426dbd Panagiotis Kanavos
                            {
63 46426dbd Panagiotis Kanavos
                                currentItem.Version = reader.GetAttribute(versionAttribute);
64 46426dbd Panagiotis Kanavos
                                currentItem.DownloadLink = reader.GetAttribute(urlAttribute);
65 46426dbd Panagiotis Kanavos
                                currentItem.DSASignature = reader.GetAttribute(dasSignature);
66 46426dbd Panagiotis Kanavos
67 46426dbd Panagiotis Kanavos
                                break;
68 46426dbd Panagiotis Kanavos
                            }
69 46426dbd Panagiotis Kanavos
                    }
70 46426dbd Panagiotis Kanavos
                }
71 46426dbd Panagiotis Kanavos
                else if (reader.NodeType == XmlNodeType.EndElement)
72 46426dbd Panagiotis Kanavos
                {
73 46426dbd Panagiotis Kanavos
                    switch (reader.Name)
74 46426dbd Panagiotis Kanavos
                    {
75 46426dbd Panagiotis Kanavos
                        case itemNode:
76 46426dbd Panagiotis Kanavos
                            {
77 46426dbd Panagiotis Kanavos
                                if (latestVersion == null)
78 46426dbd Panagiotis Kanavos
                                    latestVersion = currentItem;
79 46426dbd Panagiotis Kanavos
                                else if (currentItem.CompareTo(latestVersion) > 0 )
80 46426dbd Panagiotis Kanavos
                                {
81 46426dbd Panagiotis Kanavos
                                        latestVersion = currentItem;
82 46426dbd Panagiotis Kanavos
                                }
83 46426dbd Panagiotis Kanavos
                                break;
84 46426dbd Panagiotis Kanavos
                            }                            
85 46426dbd Panagiotis Kanavos
                    }
86 46426dbd Panagiotis Kanavos
                }                    
87 46426dbd Panagiotis Kanavos
            }
88 46426dbd Panagiotis Kanavos
89 46426dbd Panagiotis Kanavos
            // add some other attributes
90 46426dbd Panagiotis Kanavos
            latestVersion.AppName = _config.ApplicationName;
91 46426dbd Panagiotis Kanavos
            latestVersion.AppVersionInstalled = _config.InstalledVersion;
92 46426dbd Panagiotis Kanavos
            
93 46426dbd Panagiotis Kanavos
            // go ahead
94 46426dbd Panagiotis Kanavos
            return latestVersion;
95 46426dbd Panagiotis Kanavos
        }
96 46426dbd Panagiotis Kanavos
            
97 46426dbd Panagiotis Kanavos
    }
98 46426dbd Panagiotis Kanavos
}