BNIBookingWebView.swift 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. //
  2. // BNIBookingWebView.swift
  3. // FMDB
  4. //
  5. // Created by Qindi on 01/04/22.
  6. //
  7. import UIKit
  8. import WebKit
  9. class BNIBookingWebView: UIViewController, WKNavigationDelegate, UIScrollViewDelegate, UIGestureRecognizerDelegate, WKScriptMessageHandler {
  10. var webView = WKWebView()
  11. let closeButton = UIButton()
  12. var customUrl = ""
  13. override var preferredStatusBarStyle: UIStatusBarStyle {
  14. return .default
  15. }
  16. override func viewDidLoad() {
  17. super.viewDidLoad()
  18. view.addSubview(webView)
  19. webView.translatesAutoresizingMaskIntoConstraints = false
  20. webView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
  21. webView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
  22. webView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
  23. webView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
  24. webView.navigationDelegate = self
  25. webView.allowsBackForwardNavigationGestures = true
  26. webView.scrollView.delegate = self
  27. let contentController = webView.configuration.userContentController
  28. contentController.add(self, name: "sendQueueBNI")
  29. let source: String = "var meta = document.createElement('meta');" +
  30. "meta.name = 'viewport';" +
  31. "meta.content = 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no';" +
  32. "var head = document.getElementsByTagName('head')[0];" +
  33. "head.appendChild(meta);"
  34. let script: WKUserScript = WKUserScript(source: source, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
  35. contentController.addUserScript(script)
  36. let refreshControl = UIRefreshControl()
  37. refreshControl.addTarget(self, action: #selector(reloadWebView(_:)), for: .valueChanged)
  38. webView.scrollView.addSubview(refreshControl)
  39. webView.isOpaque = false
  40. webView.backgroundColor = .white
  41. webView.scrollView.backgroundColor = .white
  42. var stringQMS = "https://sqbni.murni.id:4200/bnibookingonline/#/?userid="
  43. if !customUrl.isEmpty {
  44. stringQMS = customUrl
  45. }
  46. if stringQMS.lowercased().contains("?userid=") {
  47. let name = User.getData(pin: User.getMyPin())!.fullName
  48. stringQMS += name
  49. } else if stringQMS.lowercased().contains("?f_pin=") {
  50. stringQMS += User.getMyPin()!
  51. }
  52. if stringQMS.contains("<<f_pin>>") {
  53. stringQMS = stringQMS.replacingOccurrences(of: "<<f_pin>>", with: User.getMyPin()!)
  54. }
  55. let url = URL(string: "\(stringQMS)")!
  56. webView.load(URLRequest(url: url))
  57. }
  58. func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
  59. return true
  60. }
  61. func scrollViewDidScroll(_ scrollView: UIScrollView) {
  62. }
  63. func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
  64. if message.name == "sendQueueBNI" {
  65. guard let dict = message.body as? [String: AnyObject],
  66. let param1 = dict["param1"] as? String else {
  67. return
  68. }
  69. DispatchQueue.global().async {
  70. let _ = Nexilis.writeSync(message: CoreMessage_TMessageBank.queueBNI(service_id: param1), timeout: 30 * 1000)
  71. }
  72. }
  73. }
  74. @objc func reloadWebView(_ sender: UIRefreshControl) {
  75. webView.reload()
  76. sender.endRefreshing()
  77. }
  78. }