Skip to content

Commit

Permalink
unpack 0.3 tarball
Browse files Browse the repository at this point in the history
  • Loading branch information
gregwebs committed Feb 10, 2015
1 parent bb9965c commit ad5b449
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions src/System/Win32/Notify.hs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ data WatchId = WatchId ThreadId ThreadId Handle deriving (Eq, Ord, Show)
type WatchMap = Map WatchId Handler
data WatchManager = WatchManager (MVar WatchMap)

void :: IO ()
void = return ()

initWatchManager :: IO WatchManager
initWatchManager = do
mvarMap <- newMVar Map.empty
Expand Down Expand Up @@ -94,7 +97,7 @@ watchDirectory (WatchManager mvarMap) dir watchSubTree varieties handler = do
tid1 <- forkIO $ dispatcher chanEvents
tid2 <- forkIO $ osEventsReader watchHandle chanEvents
modifyMVar_ mvarMap $ \watchMap -> return (Map.insert (WatchId tid1 tid2 watchHandle) handler watchMap)
return (WatchId tid1 tid2)
return (WatchId tid1 tid2 watchHandle)
where
dispatcher :: Chan [Event] -> IO ()
dispatcher chanEvents = do
Expand All @@ -108,15 +111,15 @@ watchDirectory (WatchManager mvarMap) dir watchSubTree varieties handler = do
osEventsReader watchHandle chanEvents
maybeHandle :: Handler
maybeHandle event =
if (==) (eventToVariety event) `any` varieties then handler event else return ()
if (==) (eventToVariety event) `any` varieties then handler event else void

watch :: WatchManager -> FilePath -> Bool -> [EventVariety] -> IO (WatchId, Chan [Event])
watch (WatchManager mvarMap) dir watchSubTree varieties = do
watchHandle <- getWatchHandle dir
chanEvents <- newChan
tid <- forkIO $ osEventsReader watchHandle chanEvents
modifyMVar_ mvarMap $ \watchMap -> return (Map.insert (WatchId tid tid watchHandle) (\_ -> return ()) watchMap)
return ((WatchId tid tid), chanEvents)
modifyMVar_ mvarMap $ \watchMap -> return (Map.insert (WatchId tid tid watchHandle) (\_ -> void) watchMap)
return ((WatchId tid tid watchHandle), chanEvents)
where
osEventsReader :: Handle -> Chan [Event] -> IO ()
osEventsReader watchHandle chanEvents = do
Expand Down

0 comments on commit ad5b449

Please sign in to comment.