Prechádzať zdrojové kódy

Send extracted data to background

jherve 1 rok pred
rodič
commit
23fc548793

+ 17 - 15
src/Content.purs

@@ -6,11 +6,10 @@ import Browser.DOM (getBrowserDom)
 import Browser.WebExt.Runtime (onMessageAddListener)
 import Data.Either (Either(..))
 import Effect (Effect)
-import Effect.Class (class MonadEffect)
-import Effect.Class.Console (logShow)
+import Effect.Class.Console (logShow, warn)
 import Effect.Console (log)
 import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), mkRuntimeMessageHandler, sendMessageToBackground)
-import LinkedIn (extractFromDocument, getContext)
+import LinkedIn (extractFromDocument)
 
 main :: Effect Unit
 main = do
@@ -19,16 +18,19 @@ main = do
   onMessageAddListener $ mkRuntimeMessageHandler backgroundMessageHandler
   _ <- sendMessageToBackground RuntimeMessageContentInit
 
+  extractDataAndSendToBackground
+
+backgroundMessageHandler ∷ RuntimeMessage → Effect Unit
+backgroundMessageHandler = case _ of
+  RuntimeMessageRequestPageContent -> extractDataAndSendToBackground
+
+  m -> logShow m
+
+extractDataAndSendToBackground ∷ Effect Unit
+extractDataAndSendToBackground = do
   dom <- getBrowserDom
-  getContext dom >>= logShow
-  extractFromDocument dom >>= logShow
-
-  ctx <- getContext dom
-  case ctx of
-    Right ctx' -> do
-      _ <- sendMessageToBackground $ RuntimeMessageContext ctx'
-      pure unit
-    Left _ -> log "Could not send context"
-
-backgroundMessageHandler ∷ ∀ m. MonadEffect m => RuntimeMessage → m Unit
-backgroundMessageHandler m = logShow m
+  data_ <- extractFromDocument dom
+  sendMessageToBackground RuntimeMessageContentInit
+  case data_ of
+    Left err -> warn $ "[content] " <> show err
+    Right data_' -> sendMessageToBackground $ RuntimeMessagePageContent data_'

+ 3 - 0
src/LinkedIn/Jobs/JobOffer.purs

@@ -2,6 +2,8 @@ module LinkedIn.Jobs.JobOffer where
 
 import Prelude
 
+import Data.Argonaut.Decode (class DecodeJson, decodeJson)
+import Data.Argonaut.Decode.Generic (genericDecodeJson)
 import Data.Argonaut.Encode (class EncodeJson)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
 import Data.Either (Either, note)
@@ -33,6 +35,7 @@ derive instance Eq JobOffer
 derive instance Generic JobOffer _
 instance Show JobOffer where show = genericShow
 instance EncodeJson JobOffer where encodeJson a = genericEncodeJson a
+instance DecodeJson JobOffer where decodeJson a = genericDecodeJson a
 
 fromUI ∷ JobsUnifiedTopCardElement UIElement → Either String JobOffer
 fromUI card = ado

+ 3 - 0
src/LinkedIn/Output/Types.purs

@@ -2,6 +2,8 @@ module LinkedIn.Output.Types where
 
 import Prelude
 
+import Data.Argonaut.Decode (class DecodeJson)
+import Data.Argonaut.Decode.Generic (genericDecodeJson)
 import Data.Argonaut.Encode (class EncodeJson)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
 import Data.Generic.Rep (class Generic)
@@ -24,6 +26,7 @@ derive instance Generic Output _
 derive instance Eq Output
 instance Show Output where show = genericShow
 instance EncodeJson Output where encodeJson a = genericEncodeJson a
+instance DecodeJson Output where decodeJson a = genericDecodeJson a
 
 
 data OutputError =

+ 4 - 1
src/LinkedIn/Profile/Project.purs

@@ -2,14 +2,16 @@ module LinkedIn.Profile.Project where
 
 import Prelude
 
+import Data.Argonaut.Decode (class DecodeJson)
+import Data.Argonaut.Decode.Generic (genericDecodeJson)
 import Data.Argonaut.Encode (class EncodeJson)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
 import Data.Either (Either, note)
 import Data.Generic.Rep (class Generic)
 import Data.List as L
 import Data.List.Types (NonEmptyList(..))
-import Data.NonEmpty ((:|))
 import Data.Maybe (Maybe(..))
+import Data.NonEmpty ((:|))
 import Data.Show.Generic (genericShow)
 import LinkedIn.UI.Basic.Types (TimeSpan)
 import LinkedIn.UI.Components.ArtDecoCard (ArtDecoCardElement, toCenterContent, toHeaderBold, toHeaderNormal)
@@ -27,6 +29,7 @@ derive instance Generic Project _
 derive instance Eq Project
 instance Show Project where show = genericShow
 instance EncodeJson Project where encodeJson a = genericEncodeJson a
+instance DecodeJson Project where decodeJson a = genericDecodeJson a
 
 fromUI ∷ ArtDecoCardElement UIElement → Either String Project
 fromUI card = ado

+ 3 - 0
src/LinkedIn/Profile/Skill.purs

@@ -2,6 +2,8 @@ module LinkedIn.Profile.Skill where
 
 import Prelude
 
+import Data.Argonaut.Decode (class DecodeJson)
+import Data.Argonaut.Decode.Generic (genericDecodeJson)
 import Data.Argonaut.Encode (class EncodeJson)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
 import Data.Either (Either, note)
@@ -19,6 +21,7 @@ derive instance Generic Skill _
 derive instance Eq Skill
 instance Show Skill where show = genericShow
 instance EncodeJson Skill where encodeJson a = genericEncodeJson a
+instance DecodeJson Skill where decodeJson a = genericDecodeJson a
 
 fromUI ∷ ArtDecoTabElement UIElement → Either String Skill
 fromUI tab = ado

+ 3 - 0
src/LinkedIn/Profile/WorkExperience.purs

@@ -2,6 +2,8 @@ module LinkedIn.Profile.WorkExperience where
 
 import Prelude
 
+import Data.Argonaut.Decode (class DecodeJson)
+import Data.Argonaut.Decode.Generic (genericDecodeJson)
 import Data.Argonaut.Encode (class EncodeJson)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
 import Data.Either (Either, note)
@@ -32,6 +34,7 @@ derive instance Generic WorkExperience _
 derive instance Eq WorkExperience
 instance Show WorkExperience where show = genericShow
 instance EncodeJson WorkExperience where encodeJson a = genericEncodeJson a
+instance DecodeJson WorkExperience where decodeJson a = genericDecodeJson a
 
 fromUI ∷ ArtDecoCardElement UIElement → Either String WorkExperience
 fromUI card = ado

+ 10 - 1
src/LinkedIn/UI/Basic/Types.purs

@@ -4,11 +4,13 @@ import Prelude
 
 import Data.Argonaut.Decode (class DecodeJson, JsonDecodeError(..))
 import Data.Argonaut.Decode.Decoders (decodeNumber)
+import Data.Argonaut.Decode.Generic (genericDecodeJson)
 import Data.Argonaut.Encode (class EncodeJson)
 import Data.Argonaut.Encode.Encoders (encodeNumber, encodeString)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
-import Data.Date (Month, Year)
+import Data.Date (Month(..), Year)
 import Data.Either (note)
+import Data.Enum (toEnum)
 import Data.Generic.Rep (class Generic)
 import Data.Int64 (Int64)
 import Data.Int64 as I64
@@ -34,6 +36,10 @@ derive instance Generic MonthYear _
 instance Show MonthYear where show = genericShow
 instance EncodeJson MonthYear where
   encodeJson _ = encodeString "monthyear" -- TODO
+instance DecodeJson MonthYear where
+  decodeJson _json = note MissingValue $ do
+    year <- toEnum 2000
+    pure $ MonthYear January year
 
 data TimeSpan =
   TimeSpanBounded MonthYear MonthYear
@@ -43,6 +49,7 @@ derive instance Eq TimeSpan
 derive instance Generic TimeSpan _
 instance Show TimeSpan where show = genericShow
 instance EncodeJson TimeSpan where encodeJson a = genericEncodeJson a
+instance DecodeJson TimeSpan where decodeJson a = genericDecodeJson a
 
 data MonthYearOrToday = MY MonthYear | Today
 
@@ -55,6 +62,7 @@ derive instance Eq Duration
 derive instance Generic Duration _
 instance Show Duration where show = genericShow
 instance EncodeJson Duration where encodeJson _ = encodeString "duration" -- TODO
+instance DecodeJson Duration where decodeJson a = genericDecodeJson a
 
 data JobFlexibility = JobFlexHybrid | JobFlexOnSite | JobFlexFullRemote
 
@@ -62,3 +70,4 @@ derive instance Eq JobFlexibility
 derive instance Generic JobFlexibility _
 instance Show JobFlexibility where show = genericShow
 instance EncodeJson JobFlexibility where encodeJson a = genericEncodeJson a
+instance DecodeJson JobFlexibility where decodeJson a = genericDecodeJson a

+ 2 - 0
src/RuntimeMessage.purs

@@ -17,12 +17,14 @@ import Data.Generic.Rep (class Generic)
 import Data.Show.Generic (genericShow)
 import Effect (Effect)
 import Effect.Class.Console (log)
+import LinkedIn.Output (Output)
 import LinkedIn.PageUrl (PageUrl)
 
 data RuntimeMessage =
   RuntimeMessageContentInit
   | RuntimeMessageContext PageUrl
   | RuntimeMessageRequestPageContent
+  | RuntimeMessagePageContent Output
 
 derive instance Generic RuntimeMessage _
 instance Show RuntimeMessage where show = genericShow