diff options
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 |