diff --git a/AutoCat.xcodeproj/project.pbxproj b/AutoCat.xcodeproj/project.pbxproj index b042c6c..c2dcf49 100644 --- a/AutoCat.xcodeproj/project.pbxproj +++ b/AutoCat.xcodeproj/project.pbxproj @@ -1158,7 +1158,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 117; + CURRENT_PROJECT_VERSION = 121; DEVELOPMENT_TEAM = 46DTTB8X4S; INFOPLIST_FILE = AutoCat/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = AutoCat; @@ -1186,7 +1186,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 117; + CURRENT_PROJECT_VERSION = 121; DEVELOPMENT_TEAM = 46DTTB8X4S; INFOPLIST_FILE = AutoCat/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = AutoCat; diff --git a/AutoCat/Controllers/Osago/DkbmController.swift b/AutoCat/Controllers/Osago/DkbmController.swift index ecae7eb..3c33df6 100644 --- a/AutoCat/Controllers/Osago/DkbmController.swift +++ b/AutoCat/Controllers/Osago/DkbmController.swift @@ -2,12 +2,13 @@ import UIKit import WebKit import PKHUD -class DkbmController: UIViewController, WKScriptMessageHandler { +class DkbmController: UIViewController, WKScriptMessageHandlerWithReply { private var webView: WKWebView! private var captchaAdded = false var onDone: ((String) -> Void)? + var checkSource: OsagoCheckSource? override func viewDidLoad() { super.viewDidLoad() @@ -18,7 +19,9 @@ class DkbmController: UIViewController, WKScriptMessageHandler { let contentController = WKUserContentController() let script = WKUserScript(source: js!, injectionTime: .atDocumentEnd, forMainFrameOnly: false) contentController.addUserScript(script) - contentController.add(self, name: "dkbmHandler") + if #available(iOS 14.0, *) { + contentController.addScriptMessageHandler(self, contentWorld: .page, name: "dkbmHandler") + } config.userContentController = contentController } @@ -42,21 +45,21 @@ class DkbmController: UIViewController, WKScriptMessageHandler { // MARK: - WKScriptMessageHandler - func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { - guard let msg = message.body as? [String:String] else { return } - print(msg) + func userContentController(_ userContentController: WKUserContentController, + didReceive message: WKScriptMessage, + replyHandler: @escaping (Any?, String?) -> Void) { - if let event = msg["event"] { - if event == "show-challenge" { - if self.captchaAdded { - HUD.hide() - self.webView.isHidden = false - } - } else if event == "show-checkbox" { - self.captchaAdded = true + guard let msg = message.body as? [String:String], let checkSource else { return } + + if msg.contains(where: { $0.key == "loaded" }) { + switch checkSource { + case .plateNumber(let number): + replyHandler(["plateNumber": number], nil) + case .vin(let number): + replyHandler(["vin", number], nil) } - } else if let token = msg["token"] { - self.onDone?(token) + } else if let urlString = msg["url"], let url = URL(string: urlString) { + } } } diff --git a/AutoCat/Controllers/Osago/OsagoAddController.swift b/AutoCat/Controllers/Osago/OsagoAddController.swift index 4b8ee33..557f18d 100644 --- a/AutoCat/Controllers/Osago/OsagoAddController.swift +++ b/AutoCat/Controllers/Osago/OsagoAddController.swift @@ -42,25 +42,14 @@ class OsagoAddController: FormViewController { form +++ Section() <<< ButtonRow() { $0.title = NSLocalizedString("Check", comment: "verb") }.onCellSelection { _, _ in -// HUD.show(.progress) -// Api.checkOsago(number: "Н133РО161", vin: nil, date: Date(), token: "") -// .observeOn(MainScheduler.instance) -// .subscribe { vehicle in -// HUD.hide() -// self.onDone?(vehicle) -// } onError: { err in -// HUD.show(error: err) -// } -// .disposed(by: self.bag) -// return - + guard let source = (self.form.rowBy(tag: "SourcePicker") as? PickerInlineRow)?.value, + let date = (self.form.rowBy(tag: "date") as? DateTimeInlineRow)?.value + else { return } let controller = DkbmController() + controller.checkSource = source controller.onDone = { token in self.navigationController?.popViewController(animated: true, completion: { - guard let source = (self.form.rowBy(tag: "SourcePicker") as? PickerInlineRow)?.value, - let date = (self.form.rowBy(tag: "date") as? DateTimeInlineRow)?.value - else { return } var number, vin: String? switch source { diff --git a/AutoCat/JS/dkbm.js b/AutoCat/JS/dkbm.js index c6aaeb8..6f9f725 100644 --- a/AutoCat/JS/dkbm.js +++ b/AutoCat/JS/dkbm.js @@ -1,28 +1,37 @@ -const sitekey = '6Lf2uycUAAAAALo3u8D10FqNuSpUvUXlfP7BzHOk'; +//const sitekey = '6Lf2uycUAAAAALo3u8D10FqNuSpUvUXlfP7BzHOk'; let verifyCallback = (response) => { console.log('verifyCallback: ', response); window.webkit.messageHandlers.dkbmHandler.postMessage({ token: response }); }; -window.addEventListener('load', (event) => { +var timerId; + +function getImages() { + let nodes = document.querySelectorAll(".policies-tbl img"); + let urls = Array(...nodes).map(img => img.src); + if(urls.length > 1) { + window.webkit.messageHandlers.dkbmHandler.postMessage({ "url": urls[1] }); + clearInterval(timerId); + } +} + +timerId = setInterval(getImages, 1000); + +window.addEventListener('load', async (event) => { if(window.top == window.self) { - let meta = document.createElement('meta'); meta - meta.setAttribute( 'name', 'viewport' ); - meta.setAttribute( 'content', 'width = device-width' ); - document.getElementsByTagName('head')[0].appendChild(meta); + + let { plateNumber, vin } = await window.webkit.messageHandlers.dkbmHandler.postMessage({ "loaded": "true" }); + switchTab('tsBlock'); - document.body.innerHTML = ''; - window.webkit.messageHandlers.dkbmHandler.postMessage({ event: 'show-checkbox' }); - grecaptcha.render(document.body, { - 'sitekey' : sitekey, - 'callback' : verifyCallback - }); - } else { - let checkbox = document.getElementById('recaptcha-anchor'); - if(checkbox) { - checkbox.click(); - window.webkit.messageHandlers.dkbmHandler.postMessage({ event: 'show-challenge', location: location.href }); + if(plateNumber) { + let licencePlateInput = document.getElementById('licensePlate'); + licencePlateInput.value = plateNumber; + } + + if(vin) { + let vinInput = document.getElementById('vin'); + vinInput.value = vin; } } -}); +})