jherve 1 год назад
Родитель
Сommit
2766afc40e
4 измененных файлов с 58 добавлено и 0 удалено
  1. 6 0
      src/Background.purs
  2. 7 0
      src/Browser/WebExt/Storage/Sync.js
  3. 21 0
      src/Browser/WebExt/Storage/Sync.purs
  4. 24 0
      src/Storage.purs

+ 6 - 0
src/Background.purs

@@ -7,10 +7,12 @@ import Browser.WebExt.Listener (mkListener)
 import Browser.WebExt.Runtime (onMessageAddListener)
 import Browser.WebExt.Runtime (onMessageAddListener)
 import Browser.WebExt.Tabs (Tab)
 import Browser.WebExt.Tabs (Tab)
 import Effect (Effect)
 import Effect (Effect)
+import Effect.Aff (launchAff_)
 import Effect.Class (class MonadEffect)
 import Effect.Class (class MonadEffect)
 import Effect.Class.Console (log, logShow)
 import Effect.Class.Console (log, logShow)
 import ExampleWebExt.NativeMessage (NativeMessage(..), connectToNativeApplication, onNativeMessageAddListener, sendMessageToNative)
 import ExampleWebExt.NativeMessage (NativeMessage(..), connectToNativeApplication, onNativeMessageAddListener, sendMessageToNative)
 import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), mkRuntimeMessageHandler, sendMessageToContent)
 import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), mkRuntimeMessageHandler, sendMessageToContent)
+import ExampleWebExt.Storage (getJobsPath, setJobsPath)
 
 
 main :: Effect Unit
 main :: Effect Unit
 main = do
 main = do
@@ -19,6 +21,10 @@ main = do
   onNativeMessageAddListener port nativeMessageHandler
   onNativeMessageAddListener port nativeMessageHandler
 
 
   sendMessageToNative port $ NativeMessageBackground "hello"
   sendMessageToNative port $ NativeMessageBackground "hello"
+  setJobsPath "/path/to/jobs"
+  launchAff_ do
+    path <- getJobsPath
+    log $ "Read value of jobsPath : " <> show path
 
 
   onClickedAddListener $ mkListener browserActionOnClickedHandler
   onClickedAddListener $ mkListener browserActionOnClickedHandler
   onMessageAddListener $ mkRuntimeMessageHandler contentScriptMessageHandler
   onMessageAddListener $ mkRuntimeMessageHandler contentScriptMessageHandler

+ 7 - 0
src/Browser/WebExt/Storage/Sync.js

@@ -0,0 +1,7 @@
+export function setImpl (obj) {
+  return browser.storage.sync.set(obj);
+}
+
+export function getImpl (key) {
+  return browser.storage.sync.get(key);
+}

+ 21 - 0
src/Browser/WebExt/Storage/Sync.purs

@@ -0,0 +1,21 @@
+module Browser.WebExt.Storage.Sync 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)
+
+set ∷ Json → Effect Unit
+set = runEffectFn1 setImpl
+
+get :: Key -> Aff Json
+get k = toAffE $ runEffectFn1 getImpl k

+ 24 - 0
src/Storage.purs

@@ -0,0 +1,24 @@
+module ExampleWebExt.Storage where
+
+import Prelude
+
+import Browser.WebExt.Storage.Sync as Sync
+import Data.Argonaut.Decode (JsonDecodeError, decodeJson)
+import Data.Argonaut.Encode (encodeJson)
+import Data.Either (Either)
+import Effect (Effect)
+import Effect.Aff (Aff)
+
+type SyncStorage = { jobsPath :: String }
+
+setJobsPath ∷ String → Effect Unit
+setJobsPath path = Sync.set $ encodeJson {jobsPath: path}
+
+getJobsPath ∷ Aff (Either JsonDecodeError String)
+getJobsPath = do
+  s <- Sync.get "jobsPath"
+  let 
+    asStorage :: Either JsonDecodeError SyncStorage
+    asStorage = decodeJson s
+
+  pure $ map (\{jobsPath} -> jobsPath) asStorage