소스 검색

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.Listener (mkListener)
+import Browser.WebExt.Port (Port)
 import Browser.WebExt.Runtime (onMessageAddListener)
 import Browser.WebExt.Tabs (Tab)
+import Data.Argonaut.Decode (printJsonDecodeError)
+import Data.Either (Either(..))
 import Effect (Effect)
 import Effect.Aff (launchAff_)
-import Effect.Class (class MonadEffect)
+import Effect.Class (class MonadEffect, liftEffect)
 import Effect.Class.Console (log, logShow)
 import ExampleWebExt.NativeMessage (NativeMessage(..), connectToNativeApplication, onNativeMessageAddListener, sendMessageToNative)
 import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), mkRuntimeMessageHandler, sendMessageToContent)
@@ -20,11 +23,8 @@ main = do
   port <- connectToNativeApplication "job_search_writer"
   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
   onMessageAddListener $ mkRuntimeMessageHandler contentScriptMessageHandler
@@ -40,3 +40,10 @@ contentScriptMessageHandler m = logShow m
 
 nativeMessageHandler ∷ ∀ m. MonadEffect m ⇒ NativeMessage → m Unit
 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.Decode (class DecodeJson, JsonDecodeError, decodeJson, printJsonDecodeError)
 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.Either (Either(..))
 import Data.Generic.Rep (class Generic)
@@ -21,13 +21,18 @@ import Effect.Class.Console (log)
 data NativeMessage =
   NativeMessageBackground String
   | NativeMessageLog {level :: String, content :: String}
+  | NativeMessageInitialConfiguration {jobsPath :: String}
 
 type NativePythonMessage m = {tag :: String | m}
 type NativePythonMessageLog = NativePythonMessage (level :: String, content :: String)
+type NativePythonMessageInitialConfiguration = NativePythonMessage (jobsPath :: String)
 
 derive instance Generic NativeMessage _
 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
   decodeJson json = case decodeNative json of
     Right {level, content} -> Right (NativeMessageLog {level, content})