Skip to content

Commit

Permalink
Merge pull request #919 from WalletConnect/fix-web-view-refresh
Browse files Browse the repository at this point in the history
[W3I] Fix web view refresh
  • Loading branch information
llbartekll authored Jun 23, 2023
2 parents ef59231 + 549c599 commit 7f20c7c
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 4 deletions.
7 changes: 5 additions & 2 deletions Sources/Web3Inbox/Web3InboxClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ public final class Web3InboxClient {
private let chatWebviewProxy: WebViewProxy
private let pushWebviewProxy: WebViewProxy

private let webViewRefreshHandler: WebViewRefreshHandler

private let chatWebviewSubscriber: WebViewRequestSubscriber
private let pushWebviewSubscriber: WebViewRequestSubscriber

Expand All @@ -30,7 +32,8 @@ init(
chatWebviewSubscriber: WebViewRequestSubscriber,
pushWebviewSubscriber: WebViewRequestSubscriber,
pushClientProxy: PushClientProxy,
pushClientSubscriber: PushClientRequestSubscriber
pushClientSubscriber: PushClientRequestSubscriber,
webViewRefreshHandler: WebViewRefreshHandler
) {
self.webView = webView
self.account = account
Expand All @@ -43,7 +46,7 @@ init(
self.pushWebviewSubscriber = pushWebviewSubscriber
self.pushClientProxy = pushClientProxy
self.pushClientSubscriber = pushClientSubscriber

self.webViewRefreshHandler = webViewRefreshHandler
setupSubscriptions()
}

Expand Down
7 changes: 5 additions & 2 deletions Sources/Web3Inbox/Web3InboxClientFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ final class Web3InboxClientFactory {
let pushClientProxy = PushClientProxy(client: pushClient, onSign: onSign)
let pushClientSubscriber = PushClientRequestSubscriber(client: pushClient, logger: logger)

let webViewRefreshHandler = WebViewRefreshHandler(webView: webView, initUrl: url, logger: logger)

return Web3InboxClient(
webView: webView,
account: account,
Expand All @@ -35,13 +37,14 @@ final class Web3InboxClientFactory {
chatWebviewSubscriber: chatWebviewSubscriber,
pushWebviewSubscriber: pushWebviewSubscriber,
pushClientProxy: pushClientProxy,
pushClientSubscriber: pushClientSubscriber
pushClientSubscriber: pushClientSubscriber,
webViewRefreshHandler: webViewRefreshHandler
)
}

private static func buildUrl(account: Account, config: [ConfigParam: Bool]) -> URL {
var urlComponents = URLComponents(string: "https://web3inbox-dev-hidden.vercel.app/")!
var queryItems = [URLQueryItem(name: "chatProvider", value: "ios"), URLQueryItem(name: "pushProvider", value: "ios"), URLQueryItem(name: "account", value: account.address)]
var queryItems = [URLQueryItem(name: "chatProvider", value: "ios"), URLQueryItem(name: "pushProvider", value: "ios"), URLQueryItem(name: "account", value: account.address), URLQueryItem(name: "authProvider", value: "ios")]

for param in config.filter({ $0.value == false}) {
queryItems.append(URLQueryItem(name: "\(param.key)", value: "false"))
Expand Down
1 change: 1 addition & 0 deletions Sources/Web3Inbox/WebView/WebViewProxy.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ actor WebViewProxy {
self.webView = webView
self.scriptFormatter = scriptFormatter
self.logger = logger

}

@MainActor
Expand Down
37 changes: 37 additions & 0 deletions Sources/Web3Inbox/WebView/WebViewRefreshHandler.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import WebKit
import Foundation

class WebViewRefreshHandler {
private var webViewURLObserver: NSKeyValueObservation!
private let webView: WKWebView
private let initUrl: URL
private var isReloadingContent = false
private let logger: ConsoleLogging

init(webView: WKWebView,
initUrl: URL,
logger: ConsoleLogging) {
self.webView = webView
self.initUrl = initUrl
self.logger = logger
setUpWebViewObserver()
}

func setUpWebViewObserver() {
self.webViewURLObserver = webView.observe(\.url, options: .new) { [unowned self] webview, change in
logger.debug("URL: \(String(describing: change.newValue))")
if let newValue = change.newValue,
let url = newValue?.absoluteString,
url.contains("/login"),
!isReloadingContent {
isReloadingContent = true
let request = URLRequest(url: initUrl)

webview.load(request)
_ = Timer.scheduledTimer(withTimeInterval: 5.0, repeats: false) { [unowned self] timer in
isReloadingContent = false
}
}
}
}
}

0 comments on commit 7f20c7c

Please sign in to comment.