I think this would work to terminate immediaate mode...
[irker.git] / irkerd
diff --git a/irkerd b/irkerd
index ddc008c5895bbe30651424a8c7e1bb26f59155f4..40cef48e50c348db90c648209f21bae61ec0166f 100755 (executable)
--- a/irkerd
+++ b/irkerd
@@ -683,11 +683,13 @@ class Irker:
         self.irc.add_event_handler("disconnect", self._handle_disconnect)
         self.irc.add_event_handler("kick", self._handle_kick)
         self.irc.add_event_handler("every_raw_message", self._handle_every_raw_message)
+        self.servers = {}
+        self.until = None
+    def thread_launch(self):
         thread = threading.Thread(target=self.irc.spin)
         thread.setDaemon(True)
         self.irc._thread = thread
         thread.start()
-        self.servers = {}
     def logerr(self, errmsg):
         "Log a processing error."
         sys.stderr.write("irkerd: " + errmsg + "\n")
@@ -748,6 +750,9 @@ class Irker:
             with open(logfile, "a") as logfp:
                 logfp.write("%03f|%s|%s\n" % \
                              (time.time(), event.source, event.arguments[0]))
+        if self.until is not None:
+            if self.until == event.arguments[0]:
+                raise SystemExit, 1
     def pending(self):
         "Do we have any pending message traffic?"
         return [k for (k, v) in self.servers.items() if v.pending()]
@@ -869,9 +874,10 @@ if __name__ == '__main__':
     if immediate:
         (to, privmsg) = val.split(",")
         irker.handle('{"to":"%s","privmsg":"%s"}' % (to, privmsg))
+        irker.until = privmsg
         irker.irc.spin()
-        # FIXME: This mode does not yet terminate
     else:
+        irker.thread_launch()
         try:
             tcpserver = SocketServer.TCPServer((HOST, PORT), IrkerTCPHandler)
             udpserver = SocketServer.UDPServer((HOST, PORT), IrkerUDPHandler)