浏览代码

Background can now send its configuration

jherve 2 年之前
父节点
当前提交
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})