hfsevents-0.1.3: test/trace.hs
{-
simple event tracer that monitors the current
directory and prints all events
-}
import System.OSX.FSEvents
import Data.Bits
import Data.List (unwords)
import Data.Word
main = do
es <- eventStreamCreate ["."] 1.0 True True True trace
getLine
eventStreamDestroy es
return ()
trace :: Event -> IO ()
trace e = do
putStrLn $ "id: " ++ show (eventId e)
putStrLn $ "path: " ++ eventPath e
putStrLn $ "flags: " ++ showEventFlags (eventFlags e)
putStrLn ""
showEventFlags :: Word64 -> String
showEventFlags fl = unwords (map fst . filter hasFlag $ flagList)
where
hasFlag (_,f) = fl .&. f /= 0
-- fixme come up with some better way to make this list
flagList :: [(String, Word64)]
flagList = [ ("MustScanSubDirs" , 0x00000001)
, ("UserDropped" , 0x00000002)
, ("KernelDropped" , 0x00000004)
, ("EventIdsWrapped" , 0x00000008)
, ("HistoryDone" , 0x00000010)
, ("RootChanged" , 0x00000020)
, ("Mount" , 0x00000040)
, ("Unmount" , 0x00000080)
, ("ItemCreated" , 0x00000100)
, ("ItemRemoved" , 0x00000200)
, ("ItemInodeMetaMod" , 0x00000400)
, ("ItemRenamed" , 0x00000800)
, ("ItemModified" , 0x00001000)
, ("ItemFinderInfoMod" , 0x00002000)
, ("ItemChangeOwner" , 0x00004000)
, ("ItemXattrMod" , 0x00008000)
, ("ItemIsFile" , 0x00010000)
, ("ItemIsDir" , 0x00020000)
, ("ItemIsSymlink" , 0x00040000)
]