Selaa lähdekoodia

Background can now send a "ListJobsRequest" message

jherve 1 vuosi sitten
vanhempi
commit
0d76dc6d30

+ 13 - 1
native/src/job_search/messages.py

@@ -27,7 +27,11 @@ class BackgroundScriptMessage(Message):
 
         try:
             tag = message.pop("tag")
-            [values] = message.pop("values")
+            match message.pop("values"):
+                case []:
+                    values = {}
+                case [v]:
+                    values = v
         except KeyError:
             raise ValueError("messages from background script should contain a tag and values")
 
@@ -40,6 +44,8 @@ class BackgroundScriptMessage(Message):
                 return InitialConfigurationMessage(**values)
             case "NativeMessageAddJob":
                 return AddJobMessage(**values)
+            case "NativeMessageListJobsRequest":
+                return ListJobsRequestMessage(**values)
             case _:
                 raise ValueError(f"Got message with unknown tag {tag}")
 
@@ -105,6 +111,12 @@ class AddJobMessage(BackgroundScriptMessage):
     def serialize(self):
         return {"tag": "NativeMessageAddJob", "values": [asdict(self)]}
 
+
+@dataclass
+class ListJobsRequestMessage(BackgroundScriptMessage):
+    pass
+
+
 @dataclass
 class InitialConfigurationMessage(BackgroundScriptMessage):
     jobs_path: str

+ 5 - 0
native/src/job_search/writer.py

@@ -10,6 +10,7 @@ from job_search.messages import (
     AddJobMessage,
     InitialConfigurationMessage,
     StorageReadyMessage,
+    ListJobsRequestMessage,
     JobOfferListMessage,
     LogMessage,
     Message,
@@ -40,6 +41,10 @@ class Application:
                 except FileExistsError as e:
                     self.read_writer.send_message(JobAlreadyExistsMessage(message.id))
 
+            case ListJobsRequestMessage():
+                offers = list(self.job_storage.read_all().values())
+                self.read_writer.send_message(JobOfferListMessage(offers))
+
             case InitialConfigurationMessage(jobs_path):
                 self.job_storage = JobStorage(base_dir=Path(jobs_path))
                 self.read_writer.send_message(StorageReadyMessage())

+ 6 - 4
src/Background.purs

@@ -29,7 +29,8 @@ main :: Effect Unit
 main = do
   log "[bg] starting up"
   port <- connectToNativeApplication "job_search_background"
-  onNativeMessageAddListener port nativeMessageHandler
+-- TODO: This is redundant to send "port" to both addListener and the handler
+  onNativeMessageAddListener port $ nativeMessageHandler port
   onNativeDisconnectAddListener port \p -> log $ "disconnected from native port " <> p.name <> " (" <> p.error <> ")"
 
   sendConfigurationToNative port
@@ -85,13 +86,14 @@ cleanUpUrl u = do
   url <- URL.fromAbsolute u
   pure $ URL.toString $ URL.setSearch "" url
 
-nativeMessageHandler ∷ NativeMessage → Effect Unit
-nativeMessageHandler (NativeMessageJobOfferList job_offers) = do
+nativeMessageHandler ∷ Port -> NativeMessage → Effect Unit
+nativeMessageHandler _ (NativeMessageJobOfferList job_offers) = do
   clearAllJobs
   for_ job_offers \jo -> do
     storeJob jo
 
-nativeMessageHandler m = logShow m
+nativeMessageHandler port NativeMessageStorageReady = sendMessageToNative port $ NativeMessageListJobsRequest
+nativeMessageHandler _ m = logShow m
 
 sendConfigurationToNative ∷ Port → Effect Unit
 sendConfigurationToNative port = launchAff_ do

+ 1 - 0
src/NativeMessage.purs

@@ -26,6 +26,7 @@ data NativeMessage =
   | NativeMessageInitialConfiguration {jobsPath :: String}
   | NativeMessageStorageReady
   | NativeMessageAddJob NativePythonJobOffer
+  | NativeMessageListJobsRequest
   | NativeMessageVisitedJobPage {
     url :: String,
     jobTitle :: String,