Pārlūkot izejas kodu

visited_linkedin_job_page message is now sent just like in Python

jherve 1 gadu atpakaļ
vecāks
revīzija
f5e96a1bed
3 mainītis faili ar 52 papildinājumiem un 6 dzēšanām
  1. 38 5
      src/Background.purs
  2. 1 1
      src/Browser/WebExt/Tabs.purs
  3. 13 0
      src/NativeMessage.purs

+ 38 - 5
src/Background.purs

@@ -5,17 +5,21 @@ import Prelude
 import Browser.WebExt.BrowserAction (onClickedAddListener)
 import Browser.WebExt.Listener (mkListener)
 import Browser.WebExt.Port (Port)
-import Browser.WebExt.Runtime (MessageSender)
+import Browser.WebExt.Runtime (MessageSender(..))
 import Browser.WebExt.Tabs (Tab)
 import Data.Argonaut.Decode (printJsonDecodeError)
 import Data.Either (Either(..))
+import Data.Maybe (Maybe(..))
 import Effect (Effect)
 import Effect.Aff (launchAff_)
 import Effect.Class (class MonadEffect, liftEffect)
-import Effect.Class.Console (log, logShow)
+import Effect.Class.Console (error, log, logShow)
 import ExampleWebExt.NativeMessage (NativeMessage(..), connectToNativeApplication, onNativeDisconnectAddListener, onNativeMessageAddListener, sendMessageToNative)
 import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), onRuntimeMessageAddListener, sendMessageToContent)
 import ExampleWebExt.Storage (getJobsPath)
+import LinkedIn.Jobs.JobOffer (JobOffer(..))
+import LinkedIn.Output.Types (Output(..))
+import LinkedIn.UI.Basic.Types (JobFlexibility(..))
 
 main :: Effect Unit
 main = do
@@ -27,7 +31,7 @@ main = do
   sendConfigurationToNative port
 
   onClickedAddListener $ mkListener browserActionOnClickedHandler
-  onRuntimeMessageAddListener contentScriptMessageHandler
+  onRuntimeMessageAddListener $ contentScriptMessageHandler port
 
 browserActionOnClickedHandler :: Tab -> Effect Unit
 browserActionOnClickedHandler tab = do
@@ -35,8 +39,37 @@ browserActionOnClickedHandler tab = do
   _ <- sendMessageToContent tab.id RuntimeMessageRequestPageContent
   pure unit
 
-contentScriptMessageHandler ∷ ∀ m. MonadEffect m => RuntimeMessage -> MessageSender → m Unit
-contentScriptMessageHandler m sender = do
+contentScriptMessageHandler ∷ Port -> RuntimeMessage -> MessageSender → Effect Unit
+contentScriptMessageHandler
+  port
+  (RuntimeMessagePageContent _ (OutJobOffer offer))
+  (MessageSender {tab: Just {url, title}}) =
+    case maybeMsg offer of
+      Just msg -> sendMessageToNative port msg
+      Nothing -> error "Job offer sent by content script could not be sent"
+
+  where
+    maybeMsg (JobOffer jo) = ado
+      location <- jo.location
+      flexibility <- jo.flexibility
+      companyDomain <- jo.companyDomain
+      _companySize <- jo.companySize
+    in NativeMessageVisitedJobPage {
+      url: url,
+      jobTitle: jo.title,
+      pageTitle: title,
+      company: jo.companyName,
+      companyDomain,
+      companyUrl: jo.companyLink,
+      location,
+      hasSimplifiedProcess: jo.hasSimplifiedApplicationProcess,
+      flexibility: case flexibility of
+        JobFlexOnSite -> "on_site"
+        JobFlexHybrid -> "hybrid"
+        JobFlexFullRemote -> "full_remote"
+    }
+
+contentScriptMessageHandler _ m sender = do
   logShow m
   logShow sender
 

+ 1 - 1
src/Browser/WebExt/Tabs.purs

@@ -9,7 +9,7 @@ import Effect (Effect)
 import Effect.Uncurried (EffectFn2,runEffectFn2)
 import Promise (Promise)
 
-type Tab = { id :: Int, index :: Int }
+type Tab = { id :: Int, index :: Int, title :: String, url :: String }
 type TabId = Int
 
 foreign import sendMessageImpl :: EffectFn2 TabId Message (Promise Message)

+ 13 - 0
src/NativeMessage.purs

@@ -17,11 +17,23 @@ import Data.Generic.Rep (class Generic)
 import Data.Show.Generic (genericShow)
 import Effect (Effect)
 import Effect.Class.Console (log)
+import Record (union)
 
 data NativeMessage =
   NativeMessageBackground String
   | NativeMessageLog {level :: String, content :: String}
   | NativeMessageInitialConfiguration {jobsPath :: String}
+  | NativeMessageVisitedJobPage {
+    url :: String,
+    jobTitle :: String,
+    pageTitle :: String,
+    company :: String,
+    companyDomain :: String,
+    companyUrl :: String,
+    location :: String,
+    hasSimplifiedProcess :: Boolean,
+    flexibility :: String
+  }
 
 type NativePythonMessage m = {tag :: String | m}
 type NativePythonMessageLog = NativePythonMessage (level :: String, content :: String)
@@ -31,6 +43,7 @@ derive instance Generic NativeMessage _
 instance Show NativeMessage where show = genericShow
 instance EncodeJson NativeMessage where
   encodeJson (NativeMessageInitialConfiguration r) = encodeJson {tag: "initial_configuration", jobsPath: r.jobsPath}
+  encodeJson (NativeMessageVisitedJobPage r) = encodeJson $ union {tag: "visited_linkedin_job_page"} r
   encodeJson a = genericEncodeJson a
 
 instance DecodeJson NativeMessage where