RadioDld.RssServer.RssFeed C# (CSharp) Method

RssFeed() private method

private RssFeed ( HttpListenerContext context ) : void
context System.Net.HttpListenerContext
return void
        private void RssFeed(HttpListenerContext context)
        {
            context.Response.ContentType = "text/xml";

            using (XmlTextWriter writer = new XmlTextWriter(context.Response.OutputStream, Encoding.UTF8))
            {
                writer.WriteStartElement("rss");
                writer.WriteAttributeString("version", "2.0");
                writer.WriteAttributeString("xmlns", "itunes", null, ItunesNS);

                writer.WriteStartElement("channel");
                writer.WriteElementString("title", Application.ProductName);
                writer.WriteElementString("description", "The latest episodes downloaded by Radio Downloader.");
                writer.WriteElementString("link", "http://" + context.Request.UserHostName);

                writer.WriteStartElement("image");
                writer.WriteAttributeString("url", "http://" + context.Request.UserHostName + "/feed-image");
                writer.WriteAttributeString("title", Application.ProductName);
                writer.WriteAttributeString("link", "http://" + context.Request.UserHostName);
                writer.WriteEndElement();

                writer.WriteStartElement("image", ItunesNS);
                writer.WriteAttributeString("href", "http://" + context.Request.UserHostName + "/feed-image");
                writer.WriteEndElement();

                List<Model.Download> downloads = Model.Download.FetchLatest(Settings.RssServerNumRecentEps);

                foreach (Model.Download download in downloads)
                {
                    FileInfo file = new FileInfo(download.DownloadPath);

                    if (file.Exists)
                    {
                        writer.WriteStartElement("item");
                        writer.WriteElementString("title", download.Name);
                        writer.WriteElementString("description", this.DescriptionHTML(download.Description));
                        writer.WriteElementString("pubDate", download.Date.ToString("r", CultureInfo.InvariantCulture));
                        writer.WriteElementString("duration", ItunesNS, this.DurationString(download));

                        writer.WriteStartElement("image", ItunesNS);
                        writer.WriteAttributeString("href", string.Format(CultureInfo.InvariantCulture, "http://{0}/episode-image?epid={1}", context.Request.UserHostName, download.Epid));
                        writer.WriteEndElement();

                        writer.WriteStartElement("guid");
                        writer.WriteAttributeString("isPermaLink", "false");
                        writer.WriteString(string.Format(CultureInfo.InvariantCulture, "{0}:{1}:{2}", Settings.UniqueUserId, download.Progid, download.Epid));
                        writer.WriteEndElement();

                        writer.WriteStartElement("enclosure");
                        writer.WriteAttributeString("url", string.Format(CultureInfo.InvariantCulture, "http://{0}/file?epid={1}", context.Request.UserHostName, download.Epid));
                        writer.WriteAttributeString("length", file.Length.ToString(CultureInfo.InvariantCulture));
                        writer.WriteAttributeString("type", this.MimeTypeForFile(download.DownloadPath));
                        writer.WriteEndElement();

                        writer.WriteEndElement(); // item
                        writer.Flush();
                    }
                }

                writer.WriteEndElement(); // channel
                writer.WriteEndElement(); // rss
            }
        }