--- trunk/Collector.cpp 2004/07/17 23:29:02 25 +++ trunk/Collector.cpp 2004/07/20 23:49:06 34 @@ -16,9 +16,8 @@ extern "C" #include } -Collector::Collector(const ext::String& login, ext::String& password, const - std::set& buddies, const Database& database, bool start) : - login(login), password(password), buddies(buddies), database(database), +Collector::Collector(const ext::String& login, ext::String& password, const std::set& buddies, + const Database& database, bool start) : login(login), password(password), buddies(buddies), database(database), start(start), prompted(false) { if (start) @@ -53,8 +52,8 @@ int Collector::collect() net::Oscar::StringSet buddies; - for (std::set::const_iterator buddy(this->buddies.begin()); buddy != - this->buddies.end(); ++buddy) buddies.Insert(*buddy); + for (std::set::const_iterator buddy(this->buddies.begin()); buddy != this->buddies.end(); ++buddy) + buddies.Insert(*buddy); buddy.Insert(buddies); icbm.RequestParams(); @@ -62,11 +61,12 @@ int Collector::collect() net::Oscar::Capabilities capabilities; capabilities.Insert(net::Oscar::ChatCapability); - info.SetProfile("I am Zoe. :-*", "Mommy told me not to talk to strangers. O:-)", capabilities); + info.SetProfile("I am Zoe." + " :-*", "Mommy told me not to talk to strangers. O:-)", capabilities); // figure out whether or not we logged in - while (true) sleep(60); + while (true) sleep(Minute(1)); } void Collector::prompt() @@ -78,21 +78,37 @@ void Collector::prompt() this->password = password; - for (size_t index(std::strlen(password)); index > 0; --index) - password[index - 1] = '\0'; + for (size_t index(std::strlen(password)); index > 0; --index) password[index - 1] = '\0'; } void Collector::status(const net::Oscar::UserInfo& user) { - Stamp stamp; Buddy buddy(*buddies.find(user)); + AwayMessage message(buddy, *info); - cerr << red << ext::String(stamp) << ' ' << blue << ext::String(buddy) - << '\n' << reset; + if (!ext::String(message).IsEmpty()) // XXX + { + ext::Handle db(dbi::Connect(database.driver, database.host, database.user, database.password, + database.db)); + ext::Handle previous(db->Execute("SELECT message FROM messages WHERE stamp=(SELECT MAX(stamp) " + "FROM messages WHERE id='" + lexical_cast(buddy.getId()) + "') AND id='" + + lexical_cast(buddy.getId()) + "'")); + + if (previous->MoveNext()) if (ext::String(message) == previous->GetString("message")) return; + + cerr << bright << red << "Collector::status(" << blue << buddy << red << ", " << reset << message << bright << red + << ")\n" << reset; + + db->Execute("INSERT INTO messages (stamp, message, id) VALUES ('" + ext::String(message.getStamp()) + "', '" + + db->Escape(message) + "', '" + lexical_cast(buddy.getId()) + "')"); + } } void Collector::receive(const ext::String& buddy, const ext::String& message) { + cerr << bright << red << "Collector::receive(" << blue << Buddy(buddy) << red << ", " << reset << message << bright + << red << ")\n" << reset; + if (buddies.find(buddy) != buddies.end()) { Stamp stamp; @@ -105,6 +121,6 @@ void Collector::receive(const ext::Strin { sleep(1); - icbm->Simple(buddy, "Mommy told me not to talk to strangers. O:-)"); + icbm->Simple(buddy, "Mommy told me not to talk to strangers. O:-)"); } }