فهرست منبع

Add support for storage of jobs in local storage

jherve 1 سال پیش
والد
کامیت
9b36804f1a
4فایلهای تغییر یافته به همراه54 افزوده شده و 3 حذف شده
  1. 9 3
      src/Background.purs
  2. 11 0
      src/Browser/WebExt/Storage/Local.js
  3. 25 0
      src/Browser/WebExt/Storage/Local.purs
  4. 9 0
      src/Storage.purs

+ 9 - 3
src/Background.purs

@@ -9,14 +9,15 @@ import Browser.WebExt.Runtime (MessageSender(..))
 import Browser.WebExt.Tabs (Tab)
 import Browser.WebExt.Tabs (Tab)
 import Data.Argonaut.Decode (printJsonDecodeError)
 import Data.Argonaut.Decode (printJsonDecodeError)
 import Data.Either (Either(..))
 import Data.Either (Either(..))
+import Data.Foldable (for_)
 import Data.Maybe (Maybe(..))
 import Data.Maybe (Maybe(..))
 import Effect (Effect)
 import Effect (Effect)
 import Effect.Aff (launchAff_)
 import Effect.Aff (launchAff_)
-import Effect.Class (class MonadEffect, liftEffect)
+import Effect.Class (liftEffect)
 import Effect.Class.Console (error, log, logShow)
 import Effect.Class.Console (error, log, logShow)
 import ExampleWebExt.NativeMessage (NativeMessage(..), connectToNativeApplication, onNativeDisconnectAddListener, onNativeMessageAddListener, sendMessageToNative)
 import ExampleWebExt.NativeMessage (NativeMessage(..), connectToNativeApplication, onNativeDisconnectAddListener, onNativeMessageAddListener, sendMessageToNative)
 import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), onRuntimeMessageAddListener, sendMessageToContent)
 import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), onRuntimeMessageAddListener, sendMessageToContent)
-import ExampleWebExt.Storage (getJobsPath)
+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(..))
 import LinkedIn.UI.Basic.Types (JobFlexibility(..))
 import LinkedIn.UI.Basic.Types (JobFlexibility(..))
@@ -73,7 +74,12 @@ contentScriptMessageHandler _ m sender = do
   logShow m
   logShow m
   logShow sender
   logShow sender
 
 
-nativeMessageHandler ∷ ∀ m. MonadEffect m ⇒ NativeMessage → m Unit
+nativeMessageHandler ∷ NativeMessage → Effect Unit
+nativeMessageHandler (NativeMessageJobOfferList {job_offers}) = do
+  clearAllJobs
+  for_ job_offers \jo -> do
+    storeJob jo
+
 nativeMessageHandler m = logShow m
 nativeMessageHandler m = logShow m
 
 
 sendConfigurationToNative ∷ Port → Effect Unit
 sendConfigurationToNative ∷ Port → Effect Unit

+ 11 - 0
src/Browser/WebExt/Storage/Local.js

@@ -0,0 +1,11 @@
+export function setImpl (obj) {
+  return browser.storage.local.set(obj);
+}
+
+export function getImpl (key) {
+  return browser.storage.local.get(key);
+}
+
+export function clearImpl () {
+  return browser.storage.local.clear();
+}

+ 25 - 0
src/Browser/WebExt/Storage/Local.purs

@@ -0,0 +1,25 @@
+module Browser.WebExt.Storage.Local where
+
+import Prelude
+
+import Data.Argonaut.Core (Json)
+import Effect (Effect)
+import Effect.Aff (Aff)
+import Effect.Uncurried (EffectFn1, runEffectFn1)
+import Promise (Promise)
+import Promise.Aff (toAffE)
+
+type Key = String
+
+foreign import setImpl :: EffectFn1 Json Unit
+foreign import getImpl :: EffectFn1 Key (Promise Json)
+foreign import clearImpl :: Effect Unit
+
+set ∷ Json → Effect Unit
+set = runEffectFn1 setImpl
+
+get :: Key -> Aff Json
+get k = toAffE $ runEffectFn1 getImpl k
+
+clear :: Effect Unit
+clear = clearImpl

+ 9 - 0
src/Storage.purs

@@ -2,12 +2,15 @@ module ExampleWebExt.Storage where
 
 
 import Prelude
 import Prelude
 
 
+import Browser.WebExt.Storage.Local as Local
 import Browser.WebExt.Storage.Sync as Sync
 import Browser.WebExt.Storage.Sync as Sync
 import Data.Argonaut.Decode (JsonDecodeError, decodeJson)
 import Data.Argonaut.Decode (JsonDecodeError, decodeJson)
 import Data.Argonaut.Encode (encodeJson)
 import Data.Argonaut.Encode (encodeJson)
 import Data.Either (Either)
 import Data.Either (Either)
 import Effect (Effect)
 import Effect (Effect)
 import Effect.Aff (Aff)
 import Effect.Aff (Aff)
+import ExampleWebExt.NativeMessage (NativePythonJobOffer)
+import Foreign.Object (singleton)
 
 
 type SyncStorage = { jobsPath :: String }
 type SyncStorage = { jobsPath :: String }
 
 
@@ -22,3 +25,9 @@ getJobsPath = do
     asStorage = decodeJson s
     asStorage = decodeJson s
 
 
   pure $ map (\{jobsPath} -> jobsPath) asStorage
   pure $ map (\{jobsPath} -> jobsPath) asStorage
+
+clearAllJobs :: Effect Unit
+clearAllJobs = Local.clear
+
+storeJob :: NativePythonJobOffer -> Effect Unit
+storeJob jo@{id} = Local.set $ encodeJson $ singleton id jo