Эх сурвалжийг харах

webxdc: set update listener promise (#1544)

see https://github.com/deltachat/deltachat-core-rust/issues/3203
Simon Laux 3 жил өмнө
parent
commit
80fbe72b1e

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

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