aboutsummaryrefslogtreecommitdiff
path: root/src/BangState.hs
diff options
context:
space:
mode:
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