aboutsummaryrefslogtreecommitdiff
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
parente0fc75b65132b125623ce1c562ac36d93d5a2da2 (diff)
downloadfastbangs-5a1201ec1f47b393ce40437bf9b3a478538bac51.tar
fastbangs-5a1201ec1f47b393ce40437bf9b3a478538bac51.tar.bz2
fastbangs-5a1201ec1f47b393ce40437bf9b3a478538bac51.tar.zst
implement brotli precompression
-rw-r--r--TODO1
-rw-r--r--bangs-ddgless.cabal1
-rw-r--r--package.yaml2
-rw-r--r--src/BangState.hs10
4 files changed, 12 insertions, 2 deletions
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..cb70d6d
--- /dev/null
+++ b/TODO
@@ -0,0 +1 @@
+- testen, ob das brotli-ding im browser funktioniert (braucht vermutlich eine https proxy)
diff --git a/bangs-ddgless.cabal b/bangs-ddgless.cabal
index 1136542..ff5e79c 100644
--- a/bangs-ddgless.cabal
+++ b/bangs-ddgless.cabal
@@ -27,6 +27,7 @@ executable bangs-ddgless
aeson
, atomic-write
, base >=4.7 && <5
+ , brotli
, bytestring
, containers
, ghc-prim
diff --git a/package.yaml b/package.yaml
index c9a6703..49cf0f7 100644
--- a/package.yaml
+++ b/package.yaml
@@ -22,6 +22,8 @@ dependencies:
- ghc-prim
- atomic-write
- stm
+- warp
+- brotli
ghc-options:
- -Wall
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"