aboutsummaryrefslogtreecommitdiff
path: root/src/BangState.hs
diff options
context:
space:
mode:
authorLia Lenckowski <lialenck@protonmail.com>2023-07-30 17:33:19 +0200
committerLia Lenckowski <lialenck@protonmail.com>2023-07-30 17:33:19 +0200
commit780ec2ff85736836f1d5d5ead3eb8fc5b145654c (patch)
tree0ee596819bc54e56f522f65dcf90433b0959f522 /src/BangState.hs
parent61293ea8970bb89cde53dff14362f4aa3858ebe9 (diff)
downloadfastbangs-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.hs6
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