Background.purs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. module ExampleWebExt.Background where
  2. import Prelude
  3. import Browser.WebExt.BrowserAction (onClickedAddListener)
  4. import Browser.WebExt.Listener (mkListener)
  5. import Browser.WebExt.Port (Port)
  6. import Browser.WebExt.Runtime (onMessageAddListener)
  7. import Browser.WebExt.Tabs (Tab)
  8. import Data.Argonaut.Decode (printJsonDecodeError)
  9. import Data.Either (Either(..))
  10. import Effect (Effect)
  11. import Effect.Aff (launchAff_)
  12. import Effect.Class (class MonadEffect, liftEffect)
  13. import Effect.Class.Console (log, logShow)
  14. import ExampleWebExt.NativeMessage (NativeMessage(..), connectToNativeApplication, onNativeMessageAddListener, sendMessageToNative)
  15. import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), mkRuntimeMessageHandler, sendMessageToContent)
  16. import ExampleWebExt.Storage (getJobsPath)
  17. main :: Effect Unit
  18. main = do
  19. log "[bg] starting up"
  20. port <- connectToNativeApplication "job_search_writer"
  21. onNativeMessageAddListener port nativeMessageHandler
  22. sendConfigurationToNative port
  23. onClickedAddListener $ mkListener browserActionOnClickedHandler
  24. onMessageAddListener $ mkRuntimeMessageHandler contentScriptMessageHandler
  25. browserActionOnClickedHandler :: Tab -> Effect Unit
  26. browserActionOnClickedHandler tab = do
  27. logShow tab
  28. _ <- sendMessageToContent tab.id RuntimeMessageRequestPageContent
  29. pure unit
  30. contentScriptMessageHandler ∷ ∀ m. MonadEffect m => RuntimeMessage → m Unit
  31. contentScriptMessageHandler m = logShow m
  32. nativeMessageHandler ∷ ∀ m. MonadEffect m ⇒ NativeMessage → m Unit
  33. nativeMessageHandler m = logShow m
  34. sendConfigurationToNative ∷ Port → Effect Unit
  35. sendConfigurationToNative port = launchAff_ do
  36. path <- getJobsPath
  37. case path of
  38. Left l' -> log $ "Could not read value of jobsPath : " <> printJsonDecodeError l'
  39. Right path' -> liftEffect $ sendMessageToNative port $ NativeMessageInitialConfiguration {jobsPath: path'}