| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- module ExampleWebExt.NativeMessage where
- import Prelude
- import Browser.WebExt.Listener (mkListener)
- import Browser.WebExt.Message (Message, mkMessage, unwrapMessage)
- import Browser.WebExt.Port (Port, onDisconnectAddListener, onMessageAddListener)
- import Browser.WebExt.Port as Port
- import Browser.WebExt.Runtime (Application, connectNative)
- import Data.Argonaut.Decode (class DecodeJson, printJsonDecodeError)
- import Data.Argonaut.Decode.Generic (genericDecodeJson)
- import Data.Argonaut.Encode (class EncodeJson)
- import Data.Argonaut.Encode.Generic (genericEncodeJson)
- import Data.Either (Either(..))
- import Data.Generic.Rep (class Generic)
- import Data.Maybe (Maybe)
- import Data.Show.Generic (genericShow)
- import Effect (Effect)
- import Effect.Class.Console (log)
- data NativeMessage =
- NativeMessageBackground String
- | NativeMessageLog {level :: String, content :: String}
- | NativeMessageInitialConfiguration {jobsPath :: String}
- | NativeMessageVisitedJobPage {
- url :: String,
- jobTitle :: String,
- pageTitle :: String,
- company :: String,
- companyDomain :: Maybe String,
- companyUrl :: String,
- location :: String,
- hasSimplifiedProcess :: Boolean,
- flexibility :: String
- }
- | NativeMessageJobAlreadyExists {job_id :: String}
- | NativeMessageJobAdded {job :: NativePythonJobOffer}
- | NativeMessageJobOfferList (Array NativePythonJobOffer)
- type NativePythonJobOffer = {
- id :: String,
- title :: String,
- url :: String,
- application_date :: Maybe String,
- application_rejection_date :: Maybe String
- }
- derive instance Generic NativeMessage _
- instance Show NativeMessage where show = genericShow
- instance EncodeJson NativeMessage where encodeJson a = genericEncodeJson a
- instance DecodeJson NativeMessage where
- decodeJson json = genericDecodeJson json
- connectToNativeApplication ∷ Application → Effect Port
- connectToNativeApplication = connectNative
- decodeNativeMessage ∷ Message → Either String NativeMessage
- decodeNativeMessage m =
- case unwrapMessage m of
- Left err -> Left $ printJsonDecodeError err
- Right m' -> Right m'
- onNativeMessageAddListener ∷ Port → (NativeMessage → Effect Unit) → Effect Unit
- onNativeMessageAddListener port f = onMessageAddListener port $ runtimeMessageHandler
- where
- runtimeMessageHandler = mkListener \m -> do
- case decodeNativeMessage m of
- Left err -> log err
- Right m' -> f m'
- onNativeDisconnectAddListener :: Port -> (Port -> Effect Unit) -> Effect Unit
- onNativeDisconnectAddListener port f = onDisconnectAddListener port $ mkListener f
- sendMessageToNative :: Port -> NativeMessage -> Effect Unit
- sendMessageToNative port msg = do
- _ <- Port.postMessage port $ mkMessage msg
- pure unit
|