diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/BangState.hs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/BangState.hs b/src/BangState.hs index 6175289..582deca 100644 --- a/src/BangState.hs +++ b/src/BangState.hs @@ -8,6 +8,7 @@ module BangState ( addBang, ) where +import Codec.Compression.Brotli (compress) import Control.Concurrent.STM.TChan import Control.Monad (forever) import Data.Aeson @@ -23,6 +24,7 @@ data BangState = BangState { ownBangs :: TVar Bangs, ddgBangs :: TVar Bangs, serializedBangs :: TVar ByteString, + brotliBangs :: TVar ByteString, syncFileNotifications :: TChan () } @@ -30,7 +32,10 @@ reserialize :: BangState -> STM () reserialize s = do own <- readTVar $ ownBangs s ddg <- readTVar $ ddgBangs s - writeTVar (serializedBangs s) $ toStrict $ encode $ own <> ddg -- left biased union + + let jsonBs = encode $ own <> ddg -- left biased union + writeTVar (serializedBangs s) $ toStrict $ jsonBs + writeTVar (brotliBangs s) $ toStrict $ compress jsonBs writeTChan (syncFileNotifications s) () -- spawns a thread for syncing the current state to disk. do *NOT* use forkIO on this @@ -61,6 +66,7 @@ initBangState = do <$> (loadOwnBangs >>= newTVarIO) <*> newTVarIO (toBangs $ getResponseBody ans) <*> newTVarIO empty -- initially filled in by 'spawnFileSyncThread' + <*> newTVarIO empty -- same as above <*> newBroadcastTChanIO spawnFileSyncThread s @@ -70,7 +76,7 @@ getBangsJSON :: BangState -> IO ByteString getBangsJSON s = readTVarIO $ serializedBangs s getBangsBrotli :: BangState -> IO ByteString -getBangsBrotli s = error "TODO" +getBangsBrotli s = readTVarIO $ brotliBangs s addBang :: Text -> Text -> BangState -> IO () addBang bang url s = error "TODO" |