@@ -2,19 +2,27 @@
22module Language.Javascript.JSaddle.CLib
33 ( jsaddleInit
44 , NativeCallbacks (..)
5+ , AppCallbacks (..)
6+ , AppConfig (..)
7+ , pokeAppConfig
8+ , appConfigToAppCallbacks
59 ) where
610
711import Control.Monad (void)
812import Control.Concurrent (forkIO)
913
10−import Data.Monoid ((<>))
14+import Data.Aeson (encode, decode)
1115import Data.ByteString (useAsCString, packCString)
12−import Data.ByteString.Lazy (ByteString, toStrict, fromStrict)
1316import Data.ByteString.Char8 (unpack)
14−import Data.Aeson (encode, decode)
17+import Data.ByteString.Lazy (ByteString, toStrict, fromStrict)
18+import Data.Default (def, Default)
19+import Data.Monoid ((<>))
20+import Data.Text (Text)
21+import qualified Data.Text as T
1522
16−import Foreign.C.String (CString, newCString)
23+import Foreign.C.String (CString, newCString, peekCString)
1724import Foreign.Ptr (FunPtr, Ptr)
25+import Foreign.Storable (poke)
1826import Foreign.Marshal.Utils (new)
1927
2028import Language.Javascript.JSaddle (JSM)
@@ -53,6 +61,22 @@ jsaddleInit jsm evaluateJavascriptAsyncPtr = do
5361 , _nativeCallbacks_jsaddleHtmlData = jsaddleHtmlPtr
5462 }
5563
64+data AppConfig = AppConfig
65+ { _appConfig_firebaseInstanceIdServiceSendRegistrationToServer :: Text -> IO ()
66+ }
67+
68+instance Default AppConfig where
69+ def = AppConfig (\_ -> return ())
70+
71+appConfigToAppCallbacks :: AppConfig -> IO AppCallbacks
72+appConfigToAppCallbacks (AppConfig firebaseReg) = do
73+ firebaseRegPtr <- wrapMessageCallback $ \token ->
74+ firebaseReg =<< (T.pack <$> peekCString token)
75+ return $ AppCallbacks firebaseRegPtr
76+
77+pokeAppConfig :: Ptr AppCallbacks -> AppConfig -> IO ()
78+pokeAppConfig ptr cfg = poke ptr =<< appConfigToAppCallbacks cfg
79+
5680jsaddleJs :: ByteString
5781jsaddleJs = ghcjsHelpers <> "\
5882 \runJSaddleBatch = (function() {\n\