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

Display a badge on ext icon depending on result of parsing process

jherve пре 1 година
родитељ
комит
3257aae83d
2 измењених фајлова са 31 додато и 18 уклоњено
  1. 23 13
      src/Background.purs
  2. 8 5
      src/Content.purs

+ 23 - 13
src/Background.purs

@@ -2,11 +2,11 @@ module ExampleWebExt.Background where
 
 
 import Prelude
 import Prelude
 
 
-import Browser.WebExt.BrowserAction (onClickedAddListener)
+import Browser.WebExt.BrowserAction (onClickedAddListener, setBadgeBackgroundColor, setBadgeText)
 import Browser.WebExt.Listener (mkListener)
 import Browser.WebExt.Listener (mkListener)
 import Browser.WebExt.Port (Port)
 import Browser.WebExt.Port (Port)
 import Browser.WebExt.Runtime (MessageSender(..))
 import Browser.WebExt.Runtime (MessageSender(..))
-import Browser.WebExt.Tabs (Tab)
+import Browser.WebExt.Tabs (TabId)
 import Data.Argonaut.Decode (printJsonDecodeError)
 import Data.Argonaut.Decode (printJsonDecodeError)
 import Data.Either (Either(..))
 import Data.Either (Either(..))
 import Data.Foldable (for_)
 import Data.Foldable (for_)
@@ -17,7 +17,7 @@ import Effect.Aff (launchAff_)
 import Effect.Class (liftEffect)
 import Effect.Class (liftEffect)
 import Effect.Class.Console (debug, error, log, logShow)
 import Effect.Class.Console (debug, error, log, logShow)
 import ExampleWebExt.NativeMessage (ApplicationProcess(..), NativeMessage(..), connectToNativeApplication, onNativeDisconnectAddListener, onNativeMessageAddListener, sendMessageToNative)
 import ExampleWebExt.NativeMessage (ApplicationProcess(..), NativeMessage(..), connectToNativeApplication, onNativeDisconnectAddListener, onNativeMessageAddListener, sendMessageToNative)
-import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), onRuntimeMessageAddListener, sendMessageToContent)
+import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), onRuntimeMessageAddListener)
 import ExampleWebExt.Storage (clearAllJobs, getJobsPath, storeJob)
 import ExampleWebExt.Storage (clearAllJobs, getJobsPath, storeJob)
 import LinkedIn.Jobs.JobOffer (JobOffer(..))
 import LinkedIn.Jobs.JobOffer (JobOffer(..))
 import LinkedIn.Output.Types (Output(..))
 import LinkedIn.Output.Types (Output(..))
@@ -35,23 +35,20 @@ main = do
 
 
   sendConfigurationToNative port
   sendConfigurationToNative port
 
 
-  onClickedAddListener $ mkListener browserActionOnClickedHandler
   onRuntimeMessageAddListener $ contentScriptMessageHandler port
   onRuntimeMessageAddListener $ contentScriptMessageHandler port
 
 
-browserActionOnClickedHandler :: Tab -> Effect Unit
-browserActionOnClickedHandler tab = do
-  logShow tab
-  _ <- sendMessageToContent tab.id RuntimeMessageRequestPageContent
-  pure unit
-
 contentScriptMessageHandler ∷ Port -> RuntimeMessage -> MessageSender → Effect Unit
 contentScriptMessageHandler ∷ Port -> RuntimeMessage -> MessageSender → Effect Unit
 contentScriptMessageHandler
 contentScriptMessageHandler
   port
   port
   (RuntimeMessagePageContent (UrlJobOffer (JobOfferId jobId)) (OutJobOffer offer))
   (RuntimeMessagePageContent (UrlJobOffer (JobOfferId jobId)) (OutJobOffer offer))
-  (MessageSender {tab: Just {url}}) =
+  (MessageSender {tab: Just {id, url}}) =
     case maybeMsg offer of
     case maybeMsg offer of
-      Just msg -> sendMessageToNative port msg
-      Nothing -> error "Job offer sent by content script could not be sent"
+      Just msg -> do
+        sendMessageToNative port msg
+        displayBadgeUntilClick id "OK" "green"
+      Nothing -> do
+        error "Job offer sent by content script could not be sent"
+        displayBadgeUntilClick id "KO" "red"
 
 
   where
   where
     maybeMsg (JobOffer jo) = ado
     maybeMsg (JobOffer jo) = ado
@@ -74,6 +71,13 @@ contentScriptMessageHandler
         application_considered: Nothing
         application_considered: Nothing
       }
       }
 
 
+contentScriptMessageHandler
+  _
+  (RuntimeMessageError err)
+  (MessageSender {tab: Just {id, url}}) = do
+    displayBadgeUntilClick id "KO" "red"
+    error $ "tab " <> show url <> " sent an error : " <> show err
+
 contentScriptMessageHandler _ m (MessageSender {tab, id}) = do
 contentScriptMessageHandler _ m (MessageSender {tab, id}) = do
   let
   let
     senderMsg = case tab of
     senderMsg = case tab of
@@ -83,6 +87,12 @@ contentScriptMessageHandler _ m (MessageSender {tab, id}) = do
 
 
   debug msg
   debug msg
 
 
+displayBadgeUntilClick ∷ TabId → String → String → Effect Unit
+displayBadgeUntilClick tabId text color = do
+  setBadgeText text tabId
+  setBadgeBackgroundColor color tabId
+  onClickedAddListener $ mkListener $ const $ setBadgeText "" tabId
+
 cleanUpUrl :: String -> Maybe String
 cleanUpUrl :: String -> Maybe String
 cleanUpUrl u = do
 cleanUpUrl u = do
   url <- URL.fromAbsolute u
   url <- URL.fromAbsolute u

+ 8 - 5
src/Content.purs

@@ -8,7 +8,7 @@ import Data.Either (Either(..))
 import Effect (Effect)
 import Effect (Effect)
 import Effect.Aff (Aff, launchAff_)
 import Effect.Aff (Aff, launchAff_)
 import Effect.Class (liftEffect)
 import Effect.Class (liftEffect)
-import Effect.Class.Console (logShow, warn)
+import Effect.Class.Console (logShow)
 import Effect.Console (log)
 import Effect.Console (log)
 import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), onRuntimeMessageAddListener, sendMessageToBackground)
 import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), onRuntimeMessageAddListener, sendMessageToBackground)
 import LinkedIn (extractFromDocument, getContext)
 import LinkedIn (extractFromDocument, getContext)
@@ -54,7 +54,10 @@ extractDataAndSendToBackground = do
   ctx <- getContext dom
   ctx <- getContext dom
   data_ <- extractFromDocument dom
   data_ <- extractFromDocument dom
 
 
-  case data_, ctx of
-    Left err, _ -> warn $ "[content] " <> show err
-    _, Left err -> warn $ "[content] " <> show err
-    Right data_', Right ctx' -> sendMessageToBackground $ RuntimeMessagePageContent ctx' data_'
+  let
+    msg = case data_, ctx of
+      Left err, _ -> RuntimeMessageError err
+      _, Left err -> RuntimeMessageError err
+      Right data_', Right ctx' -> RuntimeMessagePageContent ctx' data_'
+
+  sendMessageToBackground msg