Просмотр исходного кода

Send extracted data to background

jherve 1 год назад
Родитель
Сommit
ca1fe6a567

+ 17 - 15
src/Content.purs

@@ -6,11 +6,10 @@ import Browser.DOM (getBrowserDom)
 import Browser.WebExt.Runtime (onMessageAddListener)
 import Browser.WebExt.Runtime (onMessageAddListener)
 import Data.Either (Either(..))
 import Data.Either (Either(..))
 import Effect (Effect)
 import Effect (Effect)
-import Effect.Class (class MonadEffect)
-import Effect.Class.Console (logShow)
+import Effect.Class.Console (logShow, warn)
 import Effect.Console (log)
 import Effect.Console (log)
 import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), mkRuntimeMessageHandler, sendMessageToBackground)
 import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), mkRuntimeMessageHandler, sendMessageToBackground)
-import LinkedIn (extractFromDocument, getContext)
+import LinkedIn (extractFromDocument)
 
 
 main :: Effect Unit
 main :: Effect Unit
 main = do
 main = do
@@ -19,16 +18,19 @@ main = do
   onMessageAddListener $ mkRuntimeMessageHandler backgroundMessageHandler
   onMessageAddListener $ mkRuntimeMessageHandler backgroundMessageHandler
   _ <- sendMessageToBackground RuntimeMessageContentInit
   _ <- sendMessageToBackground RuntimeMessageContentInit
 
 
+  extractDataAndSendToBackground
+
+backgroundMessageHandler ∷ RuntimeMessage → Effect Unit
+backgroundMessageHandler = case _ of
+  RuntimeMessageRequestPageContent -> extractDataAndSendToBackground
+
+  m -> logShow m
+
+extractDataAndSendToBackground ∷ Effect Unit
+extractDataAndSendToBackground = do
   dom <- getBrowserDom
   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 Prelude
 
 
+import Data.Argonaut.Decode (class DecodeJson, decodeJson)
+import Data.Argonaut.Decode.Generic (genericDecodeJson)
 import Data.Argonaut.Encode (class EncodeJson)
 import Data.Argonaut.Encode (class EncodeJson)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
 import Data.Either (Either, note)
 import Data.Either (Either, note)
@@ -33,6 +35,7 @@ derive instance Eq JobOffer
 derive instance Generic JobOffer _
 derive instance Generic JobOffer _
 instance Show JobOffer where show = genericShow
 instance Show JobOffer where show = genericShow
 instance EncodeJson JobOffer where encodeJson a = genericEncodeJson a
 instance EncodeJson JobOffer where encodeJson a = genericEncodeJson a
+instance DecodeJson JobOffer where decodeJson a = genericDecodeJson a
 
 
 fromUI ∷ JobsUnifiedTopCardElement UIElement → Either String JobOffer
 fromUI ∷ JobsUnifiedTopCardElement UIElement → Either String JobOffer
 fromUI card = ado
 fromUI card = ado

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

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

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

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

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

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

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

@@ -2,6 +2,8 @@ module LinkedIn.Profile.WorkExperience where
 
 
 import Prelude
 import Prelude
 
 
+import Data.Argonaut.Decode (class DecodeJson)
+import Data.Argonaut.Decode.Generic (genericDecodeJson)
 import Data.Argonaut.Encode (class EncodeJson)
 import Data.Argonaut.Encode (class EncodeJson)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
 import Data.Either (Either, note)
 import Data.Either (Either, note)
@@ -32,6 +34,7 @@ derive instance Generic WorkExperience _
 derive instance Eq WorkExperience
 derive instance Eq WorkExperience
 instance Show WorkExperience where show = genericShow
 instance Show WorkExperience where show = genericShow
 instance EncodeJson WorkExperience where encodeJson a = genericEncodeJson a
 instance EncodeJson WorkExperience where encodeJson a = genericEncodeJson a
+instance DecodeJson WorkExperience where decodeJson a = genericDecodeJson a
 
 
 fromUI ∷ ArtDecoCardElement UIElement → Either String WorkExperience
 fromUI ∷ ArtDecoCardElement UIElement → Either String WorkExperience
 fromUI card = ado
 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 (class DecodeJson, JsonDecodeError(..))
 import Data.Argonaut.Decode.Decoders (decodeNumber)
 import Data.Argonaut.Decode.Decoders (decodeNumber)
+import Data.Argonaut.Decode.Generic (genericDecodeJson)
 import Data.Argonaut.Encode (class EncodeJson)
 import Data.Argonaut.Encode (class EncodeJson)
 import Data.Argonaut.Encode.Encoders (encodeNumber, encodeString)
 import Data.Argonaut.Encode.Encoders (encodeNumber, encodeString)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
-import Data.Date (Month, Year)
+import Data.Date (Month(..), Year)
 import Data.Either (note)
 import Data.Either (note)
+import Data.Enum (toEnum)
 import Data.Generic.Rep (class Generic)
 import Data.Generic.Rep (class Generic)
 import Data.Int64 (Int64)
 import Data.Int64 (Int64)
 import Data.Int64 as I64
 import Data.Int64 as I64
@@ -34,6 +36,10 @@ derive instance Generic MonthYear _
 instance Show MonthYear where show = genericShow
 instance Show MonthYear where show = genericShow
 instance EncodeJson MonthYear where
 instance EncodeJson MonthYear where
   encodeJson _ = encodeString "monthyear" -- TODO
   encodeJson _ = encodeString "monthyear" -- TODO
+instance DecodeJson MonthYear where
+  decodeJson _json = note MissingValue $ do
+    year <- toEnum 2000
+    pure $ MonthYear January year
 
 
 data TimeSpan =
 data TimeSpan =
   TimeSpanBounded MonthYear MonthYear
   TimeSpanBounded MonthYear MonthYear
@@ -43,6 +49,7 @@ derive instance Eq TimeSpan
 derive instance Generic TimeSpan _
 derive instance Generic TimeSpan _
 instance Show TimeSpan where show = genericShow
 instance Show TimeSpan where show = genericShow
 instance EncodeJson TimeSpan where encodeJson a = genericEncodeJson a
 instance EncodeJson TimeSpan where encodeJson a = genericEncodeJson a
+instance DecodeJson TimeSpan where decodeJson a = genericDecodeJson a
 
 
 data MonthYearOrToday = MY MonthYear | Today
 data MonthYearOrToday = MY MonthYear | Today
 
 
@@ -55,6 +62,7 @@ derive instance Eq Duration
 derive instance Generic Duration _
 derive instance Generic Duration _
 instance Show Duration where show = genericShow
 instance Show Duration where show = genericShow
 instance EncodeJson Duration where encodeJson _ = encodeString "duration" -- TODO
 instance EncodeJson Duration where encodeJson _ = encodeString "duration" -- TODO
+instance DecodeJson Duration where decodeJson a = genericDecodeJson a
 
 
 data JobFlexibility = JobFlexHybrid | JobFlexOnSite | JobFlexFullRemote
 data JobFlexibility = JobFlexHybrid | JobFlexOnSite | JobFlexFullRemote
 
 
@@ -62,3 +70,4 @@ derive instance Eq JobFlexibility
 derive instance Generic JobFlexibility _
 derive instance Generic JobFlexibility _
 instance Show JobFlexibility where show = genericShow
 instance Show JobFlexibility where show = genericShow
 instance EncodeJson JobFlexibility where encodeJson a = genericEncodeJson a
 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 Data.Show.Generic (genericShow)
 import Effect (Effect)
 import Effect (Effect)
 import Effect.Class.Console (log)
 import Effect.Class.Console (log)
+import LinkedIn.Output (Output)
 import LinkedIn.PageUrl (PageUrl)
 import LinkedIn.PageUrl (PageUrl)
 
 
 data RuntimeMessage =
 data RuntimeMessage =
   RuntimeMessageContentInit
   RuntimeMessageContentInit
   | RuntimeMessageContext PageUrl
   | RuntimeMessageContext PageUrl
   | RuntimeMessageRequestPageContent
   | RuntimeMessageRequestPageContent
+  | RuntimeMessagePageContent Output
 
 
 derive instance Generic RuntimeMessage _
 derive instance Generic RuntimeMessage _
 instance Show RuntimeMessage where show = genericShow
 instance Show RuntimeMessage where show = genericShow