Procházet zdrojové kódy

[wip] Add a "AddJob" message

jherve před 1 rokem
rodič
revize
60819ac9c2
3 změnil soubory, kde provedl 40 přidání a 14 odebrání
  1. 20 0
      native/src/job_search/messages.py
  2. 19 14
      src/Background.purs
  3. 1 0
      src/NativeMessage.purs

+ 20 - 0
native/src/job_search/messages.py

@@ -38,6 +38,8 @@ class BackgroundScriptMessage(Message):
                 return VisitedLinkedInJobPageMessage(**values)
             case "NativeMessageInitialConfiguration":
                 return InitialConfigurationMessage(**values)
+            case "NativeMessageAddJob":
+                return AddJobMessage(**values)
             case _:
                 raise ValueError(f"Got message with unknown tag {tag}")
 
@@ -84,6 +86,24 @@ class VisitedLinkedInJobPageMessage(BackgroundScriptMessage):
         )
 
 
+@dataclass
+class AddJobMessage(BackgroundScriptMessage):
+    id: str
+    title: str
+    url: str
+    company: str
+    location: Optional[str] = None
+    company_domain: Optional[str] = None
+    company_url: Optional[str] = None
+    flexibility: Optional[Flexibility] = None
+    application_process: Optional[ApplicationProcess] = None
+    application_considered: Optional[bool] = None
+    application_date: Optional[str] = None
+    application_rejection_date: Optional[str] = None
+
+    def serialize(self):
+        return {"tag": "NativeMessageAddJob", "values": [asdict(self)]}
+
 @dataclass
 class InitialConfigurationMessage(BackgroundScriptMessage):
     jobs_path: str

+ 19 - 14
src/Background.purs

@@ -10,16 +10,19 @@ import Browser.WebExt.Tabs (Tab)
 import Data.Argonaut.Decode (printJsonDecodeError)
 import Data.Either (Either(..))
 import Data.Foldable (for_)
+import Data.Int64 as I64
 import Data.Maybe (Maybe(..))
 import Effect (Effect)
 import Effect.Aff (launchAff_)
 import Effect.Class (liftEffect)
 import Effect.Class.Console (debug, error, log, logShow)
-import ExampleWebExt.NativeMessage (NativeMessage(..), connectToNativeApplication, onNativeDisconnectAddListener, onNativeMessageAddListener, sendMessageToNative)
+import ExampleWebExt.NativeMessage (ApplicationProcess(..), NativeMessage(..), connectToNativeApplication, onNativeDisconnectAddListener, onNativeMessageAddListener, sendMessageToNative)
 import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), onRuntimeMessageAddListener, sendMessageToContent)
 import ExampleWebExt.Storage (clearAllJobs, getJobsPath, storeJob)
 import LinkedIn.Jobs.JobOffer (JobOffer(..))
 import LinkedIn.Output.Types (Output(..))
+import LinkedIn.PageUrl (PageUrl(..))
+import LinkedIn.UI.Basic.Types (JobOfferId(..))
 import Web.URL as URL
 
 main :: Effect Unit
@@ -43,7 +46,7 @@ browserActionOnClickedHandler tab = do
 contentScriptMessageHandler ∷ Port -> RuntimeMessage -> MessageSender → Effect Unit
 contentScriptMessageHandler
   port
-  (RuntimeMessagePageContent _ (OutJobOffer offer))
+  (RuntimeMessagePageContent (UrlJobOffer (JobOfferId jobId)) (OutJobOffer offer))
   (MessageSender {tab: Just {url, title}}) =
     case maybeMsg offer of
       Just msg -> sendMessageToNative port msg
@@ -51,19 +54,21 @@ contentScriptMessageHandler
 
   where
     maybeMsg (JobOffer jo) = ado
-      location <- jo.location
       url <- cleanUpUrl url
-    in NativeMessageVisitedJobPage {
-      url: url,
-      jobTitle: jo.title,
-      pageTitle: title,
-      company: jo.companyName,
-      companyDomain: jo.companyDomain,
-      companyUrl: jo.companyLink,
-      location,
-      hasSimplifiedProcess: jo.hasSimplifiedApplicationProcess,
-      flexibility: jo.flexibility
-    }
+    in NativeMessageAddJob {
+        id: I64.toString jobId,
+        title: jo.title,
+        url,
+        company: jo.companyName,
+        location: jo.location,
+        company_domain: jo.companyDomain,
+        company_url: Just jo.companyLink,
+        flexibility: jo.flexibility,
+        application_process: Just $ if jo.hasSimplifiedApplicationProcess then ApplicationProcessLinkedInSimplified else ApplicationProcessRegular,
+        application_date: Nothing,
+        application_rejection_date: Nothing,
+        application_considered: Nothing
+      }
 
 contentScriptMessageHandler _ m (MessageSender {tab, id}) = do
   let

+ 1 - 0
src/NativeMessage.purs

@@ -24,6 +24,7 @@ data NativeMessage =
   NativeMessageBackground String
   | NativeMessageLog {level :: String, content :: String}
   | NativeMessageInitialConfiguration {jobsPath :: String}
+  | NativeMessageAddJob NativePythonJobOffer
   | NativeMessageVisitedJobPage {
     url :: String,
     jobTitle :: String,