added push notifier thread, currently a no-op
Hooked up everything that needs to notify on pushes. Note that syncNewRemote does not notify. This is probably ok, and I'd need to thread more state through to make it do so. This is only set up to support a single push notification method; I didn't use a NotificationBroadcaster. Partly because I don't yet know what info about pushes needs to be communicated, so my data types are only preliminary.
This commit is contained in:
parent
6b6ce30b42
commit
ae8a3ab31e
7 changed files with 100 additions and 50 deletions
|
@ -10,6 +10,7 @@ module Assistant.Pushes where
|
|||
import Common.Annex
|
||||
|
||||
import Control.Concurrent.STM
|
||||
import Control.Concurrent.MSampleVar
|
||||
import Data.Time.Clock
|
||||
import qualified Data.Map as M
|
||||
|
||||
|
@ -17,6 +18,9 @@ import qualified Data.Map as M
|
|||
type PushMap = M.Map Remote UTCTime
|
||||
type FailedPushMap = TMVar PushMap
|
||||
|
||||
{- Used to notify about successful pushes. -}
|
||||
newtype PushNotifier = PushNotifier (MSampleVar ())
|
||||
|
||||
{- The TMVar starts empty, and is left empty when there are no
|
||||
- failed pushes. This way we can block until there are some failed pushes.
|
||||
-}
|
||||
|
@ -44,3 +48,12 @@ changeFailedPushMap v a = atomically $
|
|||
store m
|
||||
| m == M.empty = noop
|
||||
| otherwise = putTMVar v $! m
|
||||
|
||||
newPushNotifier :: IO PushNotifier
|
||||
newPushNotifier = PushNotifier <$> newEmptySV
|
||||
|
||||
notifyPush :: PushNotifier -> IO ()
|
||||
notifyPush (PushNotifier sv) = writeSV sv ()
|
||||
|
||||
waitPush :: PushNotifier -> IO ()
|
||||
waitPush (PushNotifier sv) = readSV sv
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue