// Zoe AIM Away Message RSS Feed Generator // // Seth King and Douglas Thrift // // $Id$ #ifndef _Rss_hpp_ #define _Rss_hpp_ #include "AwayMessage.hpp" struct Rss { template Rss(const Buddy& buddy, const ext::String& display, const Iterator& messagesBegin, const Iterator& messagesEnd, const Stamp& stamp); }; template Rss::Rss(const Buddy& buddy, const ext::String& display, const Iterator& messagesBegin, const Iterator& messagesEnd, const Stamp& stamp) { api::FileWriter fout(buddy.getRss() != "-" ? buddy.getRss() : "/dev/null"); xml::TextWriter rss(buddy.getRss() != "-" ? fout : api::Cout.GetStream()); xml::ScopeElement root(rss, "rss"); rss.SetAttribute("version", "2.0"); xml::ScopeElement channel(rss, "channel"); rss.OpenElement("title"); rss.OutputText(display + "'s Away Messages"); rss.CloseElement(); rss.OpenElement("link"); rss.OutputText(buddy.getLink()); rss.CloseElement(); rss.OpenElement("description"); rss.OutputText(display + "'s AIM Away Messages from the past 30 " "days."); rss.CloseElement(); rss.OpenElement("lastBuildDate"); rss.OutputText(stamp.get822()); rss.CloseElement(); rss.OpenElement("generator"); rss.OutputText(Zoe::generator()); rss.CloseElement(); rss.OpenElement("docs"); rss.OutputText("http://blogs.law.harvard.edu/tech/rss"); rss.CloseElement(); rss.OpenElement("ttl"); rss.OutputText("60"); rss.CloseElement(); for (Iterator message(messagesBegin); message != messagesEnd; ++message) { xml::ScopeElement item(rss, "item"); rss.OpenElement("link"); rss.OutputText(message->getLink(buddy)); rss.CloseElement(); rss.OpenElement("description"); rss.OutputText(*message); rss.CloseElement(); rss.OpenElement("guid"); rss.OutputText(message->getTag(buddy)); rss.CloseElement(); rss.OpenElement("pubDate"); rss.OutputText(message->getStamp().get822()); rss.CloseElement(); } } #endif // _Rss_hpp_