瀏覽代碼

webxdc: set update listener promise (#1544)

see https://github.com/deltachat/deltachat-core-rust/issues/3203
Simon Laux 3 年之前
父節點
當前提交
80fbe72b1e
共有 1 個文件被更改,包括 10 次插入0 次删除
  1. 10 0
      deltachat-ios/Controller/WebxdcViewController.swift

+ 10 - 0
deltachat-ios/Controller/WebxdcViewController.swift

@@ -41,6 +41,7 @@ class WebxdcViewController: WebViewViewController {
     lazy var webxdcbridge: String = {
         let script = """
         window.webxdc = (() => {
+          let setUpdateListenerPromise = null
           var log = (s)=>webkit.messageHandlers.log.postMessage(s);
         
           var update_listener = () => {};
@@ -53,6 +54,11 @@ class WebxdcViewController: WebViewViewController {
                 });
             } catch (e) {
                 log("json error: "+ e.message)
+            } finally {
+              if (setUpdateListenerPromise) {
+                 setUpdateListenerPromise()
+                 setUpdateListenerPromise = null
+              }
             }
           }
 
@@ -63,7 +69,11 @@ class WebxdcViewController: WebViewViewController {
         
             setUpdateListener: (cb, serial) => {
                 update_listener = cb
+                const promise = new Promise((res, _rej) => {
+                   setUpdateListenerPromise = res
+                })
                 webkit.messageHandlers.setUpdateListener.postMessage(typeof serial === "undefined" ? 0 : parseInt(serial));
+                return promise
             },
 
             getAllUpdates: () => {