@@ -2,19 +2,27 @@
2module Language.Javascript.JSaddle.CLib
2module Language.Javascript.JSaddle.CLib
3 ( jsaddleInit
3 ( jsaddleInit
4 , NativeCallbacks (..)
4 , NativeCallbacks (..)
8+ , appConfigToAppCallbacks
7import Control.Monad (void)
11import Control.Monad (void)
8import Control.Concurrent (forkIO)
12import Control.Concurrent (forkIO)
10−import Data.Monoid ((<>))
14+import Data.Aeson (encode, decode)
11import Data.ByteString (useAsCString, packCString)
15import Data.ByteString (useAsCString, packCString)
12−import Data.ByteString.Lazy (ByteString, toStrict, fromStrict)
13import Data.ByteString.Char8 (unpack)
16import 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
16−import Foreign.C.String (CString, newCString)
23+import Foreign.C.String (CString, newCString, peekCString)
17import Foreign.Ptr (FunPtr, Ptr)
24import Foreign.Ptr (FunPtr, Ptr)
25+import Foreign.Storable (poke)
18import Foreign.Marshal.Utils (new)
26import Foreign.Marshal.Utils (new)
20import Language.Javascript.JSaddle (JSM)
28import Language.Javascript.JSaddle (JSM)
@@ -53,6 +61,22 @@ jsaddleInit jsm evaluateJavascriptAsyncPtr = do
53 , _nativeCallbacks_jsaddleHtmlData = jsaddleHtmlPtr
61 , _nativeCallbacks_jsaddleHtmlData = jsaddleHtmlPtr
64+data AppConfig = AppConfig
65+ { _appConfig_firebaseInstanceIdServiceSendRegistrationToServer :: Text -> IO ()
68+instance Default AppConfig where
69+ def = AppConfig (\_ -> return ())
71+appConfigToAppCallbacks :: AppConfig -> IO AppCallbacks
72+appConfigToAppCallbacks (AppConfig firebaseReg) = do
73+ firebaseRegPtr <- wrapMessageCallback $ \token ->
74+ firebaseReg =<< (T.pack <$> peekCString token)
75+ return $ AppCallbacks firebaseRegPtr
77+pokeAppConfig :: Ptr AppCallbacks -> AppConfig -> IO ()
78+pokeAppConfig ptr cfg = poke ptr =<< appConfigToAppCallbacks cfg
56jsaddleJs :: ByteString
80jsaddleJs :: ByteString
57jsaddleJs = ghcjsHelpers <> "\
81jsaddleJs = ghcjsHelpers <> "\
58 \runJSaddleBatch = (function() {\n\
82 \runJSaddleBatch = (function() {\n\