// Zoe AIM Away Message RSS Feed Generator // // Seth King and Douglas Thrift // // $Id$ #include "Publisher.hpp" #include "Rss.hpp" #include "Atom.hpp" Publisher::Publisher(const std::set& buddies, const Database& database, bool start) : buddies(buddies), database(database), start(start) { if (start) publish(); } void Publisher::publish() { api::Cerr << bright << yellow << "Started updating feeds at " << Stamp() << ".\n" << reset; Stamp stamp; ext::Handle driver(dbi::GetDriver(database.driver)); ext::Handle db(driver->Connect(database.host, database.user, database.password, database.db)); db->Execute("DELETE FROM messages WHERE stamp<'" + ext::String(stamp - Day(30)) + "'"); for (std::set::const_iterator buddy(buddies.begin()); buddy != buddies.end(); ++buddy) { ext::Handle messages(db->Execute(ios::String() << "SELECT stamp, message FROM messages WHERE id='" << buddy->getId() << "'")); std::set > messages_; while (messages->MoveNext()) messages_.insert(AwayMessage(messages->GetString("message"), messages->GetString("stamp"))); ext::String display(buddy->getDisplay(database)); Rss rss(*buddy, display, messages_.begin(), messages_.end(), stamp); Atom atom(*buddy, display, messages_.begin(), messages_.end(), stamp); api::Cerr << bright << yellow << "Updated feeds for " << blue << *buddy << yellow << ".\n" << reset; } api::Cerr << bright << yellow << "Finished updating feeds at " << Stamp() << ".\n" << reset; }