RuntimeMessage.purs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. module ExampleWebExt.RuntimeMessage where
  2. import Prelude
  3. import Browser.WebExt.Listener (Listener, mkListener)
  4. import Browser.WebExt.Message (Message, mkMessage, unwrapMessage)
  5. import Browser.WebExt.Runtime (onMessageAddListener)
  6. import Browser.WebExt.Runtime as Runtime
  7. import Browser.WebExt.Tabs (TabId)
  8. import Browser.WebExt.Tabs as Tabs
  9. import Data.Argonaut.Core (Json)
  10. import Data.Argonaut.Decode (class DecodeJson, printJsonDecodeError)
  11. import Data.Argonaut.Decode.Generic (genericDecodeJson)
  12. import Data.Argonaut.Encode (class EncodeJson)
  13. import Data.Argonaut.Encode.Generic (genericEncodeJson)
  14. import Data.Either (Either(..))
  15. import Data.Generic.Rep (class Generic)
  16. import Data.Show.Generic (genericShow)
  17. import Effect (Effect)
  18. import Effect.Class.Console (log)
  19. import LinkedIn.Output (Output)
  20. import LinkedIn.PageUrl (PageUrl)
  21. data RuntimeMessage =
  22. RuntimeMessageContentInit
  23. | RuntimeMessageRequestPageContent
  24. | RuntimeMessagePageContent PageUrl Output
  25. derive instance Generic RuntimeMessage _
  26. instance Show RuntimeMessage where show = genericShow
  27. instance EncodeJson RuntimeMessage where encodeJson a = genericEncodeJson a
  28. instance DecodeJson RuntimeMessage where decodeJson a = genericDecodeJson a
  29. sendMessageToBackground ∷ RuntimeMessage → Effect Unit
  30. sendMessageToBackground msg = do
  31. _ <- Runtime.sendMessage $ mkMessage msg
  32. pure unit
  33. sendMessageToContent :: TabId -> RuntimeMessage -> Effect Unit
  34. sendMessageToContent tabId msg = do
  35. _ <- Tabs.sendMessage tabId $ mkMessage msg
  36. pure unit
  37. decodeRuntimeMessage ∷ Message → Either String RuntimeMessage
  38. decodeRuntimeMessage m =
  39. case unwrapMessage m of
  40. Left err -> Left $ printJsonDecodeError err
  41. Right m' -> Right m'
  42. onRuntimeMessageAddListener ∷ (RuntimeMessage → Effect Unit) → Effect Unit
  43. onRuntimeMessageAddListener f = onMessageAddListener runtimeMessageHandler
  44. where
  45. runtimeMessageHandler = mkListener \m -> do
  46. case decodeRuntimeMessage m of
  47. Left err -> log err
  48. Right m' -> f m'