diff options
-rw-r--r-- | Sluift/Examples/RemoveUnreachableContacts.lua | 37 | ||||
-rw-r--r-- | Sluift/sluift.cpp | 6 |
2 files changed, 40 insertions, 3 deletions
diff --git a/Sluift/Examples/RemoveUnreachableContacts.lua b/Sluift/Examples/RemoveUnreachableContacts.lua new file mode 100644 index 0000000..90122df --- /dev/null +++ b/Sluift/Examples/RemoveUnreachableContacts.lua @@ -0,0 +1,37 @@ +-- +-- Copyright (c) 2010 Remko Tronçon +-- Licensed under the GNU General Public License v3. +-- See Documentation/Licenses/GPLv3.txt for more information. +-- + +-- This script logs into an XMPP server, iterates over all roster items, +-- and checks if their server is still alive. If not, the script asks you +-- whether it should remove the contact from your contact list. +-- +-- The following environment variables are used: +-- * SLUIFT_JID, SWIFT_PASS: JID and password to log in with +-- * SLUIFT_DEBUG: Sets whether debugging should be turned on + +require "sluift" +sluift.debug = os.getenv("SLUIFT_DEBUG") + +print "Connecting ..." +c = sluift.new_client(os.getenv("SLUIFT_JID"), os.getenv("SLUIFT_PASS")) +c:connect() + +print "Checking for unreachable contacts ..." +for jid, _ in pairs(c:get_contacts()) do + _, err = c:get_version(sluift.jid_domain(jid), 10000) + if err == "Remote server not found" or err == "Timeout" then + print("Delete " .. jid .. " (" .. err .. ") ? [y/n/q]") + answer = io.read() + if answer == "y" then + c:remove_contact(jid) + elseif answer == "q" then + break + end + end +end + +print "Done. Exiting ..." +c:disconnect() diff --git a/Sluift/sluift.cpp b/Sluift/sluift.cpp index abfde24..0545089 100644 --- a/Sluift/sluift.cpp +++ b/Sluift/sluift.cpp @@ -300,7 +300,7 @@ static int sluift_client_get_version(lua_State *L) { ResponseSink<SoftwareVersion> sink; GetSoftwareVersionRequest::ref request = GetSoftwareVersionRequest::create(std::string(luaL_checkstring(L, 2)), client->getClient()->getIQRouter()); - request->onResponse.connect(boost::ref(sink)); + boost::signals::scoped_connection c = request->onResponse.connect(boost::ref(sink)); request->send(); Watchdog watchdog(timeout, networkFactories.getTimerFactory()); @@ -580,7 +580,7 @@ static int sluift_client_add_contact(lua_State* L) { ResponseSink<RosterPayload> sink; SetRosterRequest::ref request = SetRosterRequest::create(roster, client->getClient()->getIQRouter()); - request->onResponse.connect(boost::ref(sink)); + boost::signals::scoped_connection c = request->onResponse.connect(boost::ref(sink)); request->send(); while (!sink.hasResponse()) { eventLoop.runUntilEvents(); @@ -609,7 +609,7 @@ static int sluift_client_remove_contact(lua_State* L) { roster->addItem(RosterItemPayload(JID(luaL_checkstring(L, 2)), "", RosterItemPayload::Remove)); ResponseSink<RosterPayload> sink; SetRosterRequest::ref request = SetRosterRequest::create(roster, client->getClient()->getIQRouter()); - request->onResponse.connect(boost::ref(sink)); + boost::signals::scoped_connection c = request->onResponse.connect(boost::ref(sink)); request->send(); while (!sink.hasResponse()) { eventLoop.runUntilEvents(); |