aboutsummaryrefslogtreecommitdiff
path: root/src/BangState.hs
diff options
context:
space:
mode:
authorLia Lenckowski <lialenck@protonmail.com>2023-07-23 20:22:05 +0200
committerLia Lenckowski <lialenck@protonmail.com>2023-07-23 20:22:05 +0200
commit5a1201ec1f47b393ce40437bf9b3a478538bac51 (patch)
tree9e545e7d6e5c85777d15185e424f8b9b07dde959 /src/BangState.hs
parente0fc75b65132b125623ce1c562ac36d93d5a2da2 (diff)
downloadfastbangs-5a1201ec1f47b393ce40437bf9b3a478538bac51.tar
fastbangs-5a1201ec1f47b393ce40437bf9b3a478538bac51.tar.bz2
fastbangs-5a1201ec1f47b393ce40437bf9b3a478538bac51.tar.zst
implement brotli precompression
Diffstat (limited to 'src/BangState.hs')
-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"