diff options
author | Lia Lenckowski <lialenck@protonmail.com> | 2023-07-30 17:33:19 +0200 |
---|---|---|
committer | Lia Lenckowski <lialenck@protonmail.com> | 2023-07-30 17:33:19 +0200 |
commit | 780ec2ff85736836f1d5d5ead3eb8fc5b145654c (patch) | |
tree | 0ee596819bc54e56f522f65dcf90433b0959f522 /src/BangState.hs | |
parent | 61293ea8970bb89cde53dff14362f4aa3858ebe9 (diff) | |
download | fastbangs-780ec2ff85736836f1d5d5ead3eb8fc5b145654c.tar fastbangs-780ec2ff85736836f1d5d5ead3eb8fc5b145654c.tar.bz2 fastbangs-780ec2ff85736836f1d5d5ead3eb8fc5b145654c.tar.zst |
bang accept/reject api
Diffstat (limited to 'src/BangState.hs')
-rw-r--r-- | src/BangState.hs | 6 |
1 files changed, 5 insertions, 1 deletions
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 |