diff options
author | Lia Lenckowski <lialenck@protonmail.com> | 2023-07-23 20:22:05 +0200 |
---|---|---|
committer | Lia Lenckowski <lialenck@protonmail.com> | 2023-07-23 20:22:05 +0200 |
commit | 5a1201ec1f47b393ce40437bf9b3a478538bac51 (patch) | |
tree | 9e545e7d6e5c85777d15185e424f8b9b07dde959 /src/BangState.hs | |
parent | e0fc75b65132b125623ce1c562ac36d93d5a2da2 (diff) | |
download | fastbangs-5a1201ec1f47b393ce40437bf9b3a478538bac51.tar fastbangs-5a1201ec1f47b393ce40437bf9b3a478538bac51.tar.bz2 fastbangs-5a1201ec1f47b393ce40437bf9b3a478538bac51.tar.zst |
implement brotli precompression
Diffstat (limited to 'src/BangState.hs')
-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" |