Переглянути джерело

Add support for native disconnect listener

jherve 1 рік тому
батько
коміт
23e9ef9598

+ 2 - 1
src/Background.purs

@@ -12,7 +12,7 @@ import Effect (Effect)
 import Effect.Aff (launchAff_)
 import Effect.Class (class MonadEffect, liftEffect)
 import Effect.Class.Console (log, logShow)
-import ExampleWebExt.NativeMessage (NativeMessage(..), connectToNativeApplication, onNativeMessageAddListener, sendMessageToNative)
+import ExampleWebExt.NativeMessage (NativeMessage(..), connectToNativeApplication, onNativeDisconnectAddListener, onNativeMessageAddListener, sendMessageToNative)
 import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), onRuntimeMessageAddListener, sendMessageToContent)
 import ExampleWebExt.Storage (getJobsPath)
 
@@ -21,6 +21,7 @@ main = do
   log "[bg] starting up"
   port <- connectToNativeApplication "job_search_writer"
   onNativeMessageAddListener port nativeMessageHandler
+  onNativeDisconnectAddListener port \_ -> log "disconnected from native"
 
   sendConfigurationToNative port
 

+ 4 - 0
src/Browser/WebExt/Port.js

@@ -5,3 +5,7 @@ export function postMessageImpl (port, message) {
 export function onMessageAddListenerImpl (port, fn) {
   return port.onMessage.addListener(fn);
 }
+
+export function onDisconnectAddListenerImpl (port, fn) {
+  return port.onDisconnect.addListener(fn);
+}

+ 5 - 1
src/Browser/WebExt/Port.purs

@@ -1,4 +1,4 @@
-module Browser.WebExt.Port (Port, postMessage, onMessageAddListener) where
+module Browser.WebExt.Port (Port, postMessage, onMessageAddListener, onDisconnectAddListener) where
 
 import Prelude
 
@@ -11,9 +11,13 @@ foreign import data Port :: Type
 
 foreign import postMessageImpl :: EffectFn2 Port Message Unit
 foreign import onMessageAddListenerImpl :: EffectFn2 Port (Listener Message) Unit
+foreign import onDisconnectAddListenerImpl :: EffectFn2 Port (Listener Port) Unit
 
 postMessage ∷ Port → Message → Effect Unit
 postMessage = runEffectFn2 postMessageImpl
 
 onMessageAddListener ∷ Port -> Listener Message → Effect Unit
 onMessageAddListener = runEffectFn2 onMessageAddListenerImpl
+
+onDisconnectAddListener ∷ Port -> Listener Port → Effect Unit
+onDisconnectAddListener = runEffectFn2 onDisconnectAddListenerImpl

+ 4 - 1
src/NativeMessage.purs

@@ -4,7 +4,7 @@ import Prelude
 
 import Browser.WebExt.Listener (mkListener)
 import Browser.WebExt.Message (Message, mkMessage, unwrapMessage)
-import Browser.WebExt.Port (Port, onMessageAddListener)
+import Browser.WebExt.Port (Port, onDisconnectAddListener, onMessageAddListener)
 import Browser.WebExt.Port as Port
 import Browser.WebExt.Runtime (Application, connectNative)
 import Data.Argonaut.Core (Json)
@@ -58,6 +58,9 @@ onNativeMessageAddListener port f = onMessageAddListener port $ runtimeMessageHa
         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