From 780ec2ff85736836f1d5d5ead3eb8fc5b145654c Mon Sep 17 00:00:00 2001 From: Lia Lenckowski Date: Sun, 30 Jul 2023 17:33:19 +0200 Subject: bang accept/reject api --- src/BangState.hs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/BangState.hs') diff --git a/src/BangState.hs b/src/BangState.hs index d53fc47..019f219 100644 --- a/src/BangState.hs +++ b/src/BangState.hs @@ -12,6 +12,7 @@ module BangState ( import Codec.Compression.Brotli (compress) import Control.Applicative ((<|>)) import Control.Concurrent.STM.TChan +import Control.Concurrent.STM.TVar import Control.Monad (forever) import Crypto.Hash (hashlazy, Digest, SHA512) import Data.Aeson @@ -70,6 +71,7 @@ loadOwnBangs = eitherDecodeFileStrict "bangs.json" <|> return (Left "") >>= \cas -- also spawns a thread for disk synchronization initBangState :: IO BangState initBangState = do + -- TODO error handling for ddg bang polling, as well as regular polling ans <- (httpJSON "https://duckduckgo.com/bang.v255.js") :: IO (Response DDGBangs) s <- BangState <$> (loadOwnBangs >>= newTVarIO) @@ -89,7 +91,9 @@ getBangsBrotli :: BangState -> IO ByteString getBangsBrotli s = readTVarIO $ brotliBangs s addBang :: Text -> Text -> Text -> BangState -> IO () -addBang _ _ _ _ = error $ "TODO" +addBang bn bu bdp s = atomically $ do + modifyTVar (ownBangs s) (singletonBangs bn bu bdp <>) + reserialize s getBangsHash :: BangState -> IO Text getBangsHash s = readTVarIO $ serializedHash s -- cgit v1.2.3-70-g09d2