Преглед изворни кода

Background can now send its configuration

jherve пре 1 година
родитељ
комит
ac088e8514
2 измењених фајлова са 20 додато и 8 уклоњено
  1. 13 6
      src/Background.purs
  2. 7 2
      src/NativeMessage.purs

+ 13 - 6
src/Background.purs

@@ -4,11 +4,14 @@ import Prelude
 
 
 import Browser.WebExt.BrowserAction (onClickedAddListener)
 import Browser.WebExt.BrowserAction (onClickedAddListener)
 import Browser.WebExt.Listener (mkListener)
 import Browser.WebExt.Listener (mkListener)
+import Browser.WebExt.Port (Port)
 import Browser.WebExt.Runtime (onMessageAddListener)
 import Browser.WebExt.Runtime (onMessageAddListener)
 import Browser.WebExt.Tabs (Tab)
 import Browser.WebExt.Tabs (Tab)
+import Data.Argonaut.Decode (printJsonDecodeError)
+import Data.Either (Either(..))
 import Effect (Effect)
 import Effect (Effect)
 import Effect.Aff (launchAff_)
 import Effect.Aff (launchAff_)
-import Effect.Class (class MonadEffect)
+import Effect.Class (class MonadEffect, liftEffect)
 import Effect.Class.Console (log, logShow)
 import Effect.Class.Console (log, logShow)
 import ExampleWebExt.NativeMessage (NativeMessage(..), connectToNativeApplication, onNativeMessageAddListener, sendMessageToNative)
 import ExampleWebExt.NativeMessage (NativeMessage(..), connectToNativeApplication, onNativeMessageAddListener, sendMessageToNative)
 import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), mkRuntimeMessageHandler, sendMessageToContent)
 import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), mkRuntimeMessageHandler, sendMessageToContent)
@@ -20,11 +23,8 @@ main = do
   port <- connectToNativeApplication "job_search_writer"
   port <- connectToNativeApplication "job_search_writer"
   onNativeMessageAddListener port nativeMessageHandler
   onNativeMessageAddListener port nativeMessageHandler
 
 
-  sendMessageToNative port $ NativeMessageBackground "hello"
-  setJobsPath "/path/to/jobs"
-  launchAff_ do
-    path <- getJobsPath
-    log $ "Read value of jobsPath : " <> show path
+  setJobsPath "/tmp/dummy/path/value"
+  sendConfigurationToNative port
 
 
   onClickedAddListener $ mkListener browserActionOnClickedHandler
   onClickedAddListener $ mkListener browserActionOnClickedHandler
   onMessageAddListener $ mkRuntimeMessageHandler contentScriptMessageHandler
   onMessageAddListener $ mkRuntimeMessageHandler contentScriptMessageHandler
@@ -40,3 +40,10 @@ contentScriptMessageHandler m = logShow m
 
 
 nativeMessageHandler ∷ ∀ m. MonadEffect m ⇒ NativeMessage → m Unit
 nativeMessageHandler ∷ ∀ m. MonadEffect m ⇒ NativeMessage → m Unit
 nativeMessageHandler m = logShow m
 nativeMessageHandler m = logShow m
+
+sendConfigurationToNative ∷ Port → Effect Unit
+sendConfigurationToNative port = launchAff_ do
+  path <- getJobsPath
+  case path of
+    Left l' -> log $ "Could not read value of jobsPath : " <> printJsonDecodeError l'
+    Right path' -> liftEffect $ sendMessageToNative port $ NativeMessageInitialConfiguration {jobsPath: path'}

+ 7 - 2
src/NativeMessage.purs

@@ -10,7 +10,7 @@ import Browser.WebExt.Runtime (Application, connectNative)
 import Data.Argonaut.Core (Json)
 import Data.Argonaut.Core (Json)
 import Data.Argonaut.Decode (class DecodeJson, JsonDecodeError, decodeJson, printJsonDecodeError)
 import Data.Argonaut.Decode (class DecodeJson, JsonDecodeError, decodeJson, printJsonDecodeError)
 import Data.Argonaut.Decode.Generic (genericDecodeJson)
 import Data.Argonaut.Decode.Generic (genericDecodeJson)
-import Data.Argonaut.Encode (class EncodeJson)
+import Data.Argonaut.Encode (class EncodeJson, encodeJson)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
 import Data.Either (Either(..))
 import Data.Either (Either(..))
 import Data.Generic.Rep (class Generic)
 import Data.Generic.Rep (class Generic)
@@ -21,13 +21,18 @@ import Effect.Class.Console (log)
 data NativeMessage =
 data NativeMessage =
   NativeMessageBackground String
   NativeMessageBackground String
   | NativeMessageLog {level :: String, content :: String}
   | NativeMessageLog {level :: String, content :: String}
+  | NativeMessageInitialConfiguration {jobsPath :: String}
 
 
 type NativePythonMessage m = {tag :: String | m}
 type NativePythonMessage m = {tag :: String | m}
 type NativePythonMessageLog = NativePythonMessage (level :: String, content :: String)
 type NativePythonMessageLog = NativePythonMessage (level :: String, content :: String)
+type NativePythonMessageInitialConfiguration = NativePythonMessage (jobsPath :: String)
 
 
 derive instance Generic NativeMessage _
 derive instance Generic NativeMessage _
 instance Show NativeMessage where show = genericShow
 instance Show NativeMessage where show = genericShow
-instance EncodeJson NativeMessage where encodeJson a = genericEncodeJson a
+instance EncodeJson NativeMessage where
+  encodeJson (NativeMessageInitialConfiguration r) = encodeJson {tag: "initial_configuration", jobsPath: r.jobsPath}
+  encodeJson a = genericEncodeJson a
+
 instance DecodeJson NativeMessage where
 instance DecodeJson NativeMessage where
   decodeJson json = case decodeNative json of
   decodeJson json = case decodeNative json of
     Right {level, content} -> Right (NativeMessageLog {level, content})
     Right {level, content} -> Right (NativeMessageLog {level, content})