summaryrefslogtreecommitdiff
path: root/Assistant/Threads/PushNotifier.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-10-27 00:42:14 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-10-27 00:42:14 -0400
commitce5b38aa1dbd1e320c5247d95344e373bf03e7cf (patch)
tree99e55c492457520f016188e00ba553c23f8bc187 /Assistant/Threads/PushNotifier.hs
parent5b7d00b6e9f79f4e0a2093feea58ad164a766ab2 (diff)
reconnect XMPP when NetWatcher notices a change
Diffstat (limited to 'Assistant/Threads/PushNotifier.hs')
-rw-r--r--Assistant/Threads/PushNotifier.hs18
1 files changed, 12 insertions, 6 deletions
diff --git a/Assistant/Threads/PushNotifier.hs b/Assistant/Threads/PushNotifier.hs
index 46a1d3ebf..f6058b465 100644
--- a/Assistant/Threads/PushNotifier.hs
+++ b/Assistant/Threads/PushNotifier.hs
@@ -28,12 +28,19 @@ import Data.Time.Clock
thisThread :: ThreadName
thisThread = "PushNotifier"
+controllerThread :: PushNotifier -> IO () -> IO ()
+controllerThread pushnotifier a = forever $ do
+ tid <- forkIO a
+ waitRestart pushnotifier
+ killThread tid
+
pushNotifierThread :: ThreadState -> DaemonStatusHandle -> PushNotifier -> NamedThread
-pushNotifierThread st dstatus pushnotifier = NamedThread thisThread $ do
- v <- runThreadState st $ getXMPPCreds
- case v of
- Nothing -> return () -- no creds? exit thread
- Just c -> loop c =<< getCurrentTime
+pushNotifierThread st dstatus pushnotifier = NamedThread thisThread $
+ controllerThread pushnotifier $ do
+ v <- runThreadState st $ getXMPPCreds
+ case v of
+ Nothing -> noop
+ Just c -> loop c =<< getCurrentTime
where
loop c starttime = do
void $ connectXMPP c $ \jid -> do
@@ -53,7 +60,6 @@ pushNotifierThread st dstatus pushnotifier = NamedThread thisThread $ do
threadDelaySeconds (Seconds 300)
loop c =<< getCurrentTime
-
sendnotifications = forever $ do
us <- liftIO $ waitPush pushnotifier
let payload = [extendedAway, encodePushNotification us]