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
}
}