aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/BangState.hs10
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"