Remote tabs: finishing touches
This commit is contained in:
@@ -68,6 +68,9 @@ extension BrowserViewController: WKNavigationDelegate, WKUIDelegate
|
||||
let title = webView.title ?? ""
|
||||
BrowserHistory.shared.didNavigate(toURL: url, title: title)
|
||||
}
|
||||
|
||||
// Publish Tabs
|
||||
AttractorServer.shared.publishTabInfo(tabController.tabs.map { $0.tabInfo })
|
||||
}
|
||||
|
||||
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, preferences: WKWebpagePreferences, decisionHandler: @escaping (WKNavigationActionPolicy, WKWebpagePreferences) -> Void)
|
||||
|
||||
@@ -145,12 +145,12 @@ class BrowserViewController: UIViewController
|
||||
tabPickerController.tabObserver = tabController.$tabs
|
||||
.receive(on: RunLoop.main)
|
||||
.sink(receiveValue: { (newTabs: [Tab]) in
|
||||
tabPickerController.setTabIdentifiers(newTabs.map { $0.identifier }, forHost: TabPickerViewController.localHostIdentifier)
|
||||
tabPickerController.setTabInfos(newTabs.map { $0.tabInfo }, forHost: TabPickerViewController.localHostIdentifier)
|
||||
})
|
||||
|
||||
// Set localhost tabs
|
||||
let tabIdentifiers = tabController.tabs.map { $0.identifier }
|
||||
tabPickerController.setTabIdentifiers(tabIdentifiers, forHost: TabPickerViewController.localHostIdentifier)
|
||||
let tabInfos = tabController.tabs.map { $0.tabInfo }
|
||||
tabPickerController.setTabInfos(tabInfos, forHost: TabPickerViewController.localHostIdentifier)
|
||||
tabPickerController.selectedTabHost = TabPickerViewController.localHostIdentifier
|
||||
|
||||
let remoteTabPickerController = TabPickerViewController()
|
||||
@@ -160,6 +160,20 @@ class BrowserViewController: UIViewController
|
||||
remoteTabPickerController.newTabButton.isEnabled = false
|
||||
remoteTabPickerController.editButtonItem.isEnabled = false
|
||||
|
||||
// Fetch tabs now
|
||||
AttractorServer.shared.getTabInfos { [weak remoteTabPickerController] result in
|
||||
guard let picker = remoteTabPickerController else { return }
|
||||
|
||||
switch result {
|
||||
case .success(let tabInfos):
|
||||
tabInfos.forEach { (key: String, value: [TabInfo]) in
|
||||
picker.setTabInfos(value, forHost: key)
|
||||
}
|
||||
case .failure(let error):
|
||||
picker.displayedError = error
|
||||
}
|
||||
}
|
||||
|
||||
let tabBarController = UITabBarController(nibName: nil, bundle: nil)
|
||||
tabBarController.viewControllers = [
|
||||
UINavigationController(rootViewController: tabPickerController),
|
||||
@@ -522,7 +536,7 @@ class BrowserViewController: UIViewController
|
||||
|
||||
override func target(forAction action: Selector, withSender sender: Any?) -> Any? {
|
||||
var findActions: [Selector] = []
|
||||
if #available(macCatalyst 16.0, *) {
|
||||
if #available(macCatalyst 16.0, iOS 16.0, *) {
|
||||
findActions = [
|
||||
#selector(UIResponder.find(_:)),
|
||||
#selector(UIResponder.findNext(_:)),
|
||||
@@ -645,8 +659,15 @@ extension BrowserViewController: TabPickerViewControllerDelegate
|
||||
return tab.tabInfo
|
||||
}
|
||||
|
||||
func tabPicker(_ picker: TabPickerViewController, didSelectTabIdentifier tabIdentifier: UUID) {
|
||||
guard let tab = tabController.tab(forIdentifier: tabIdentifier) else { return }
|
||||
func tabPicker(_ picker: TabPickerViewController, didSelectTabInfo info: TabInfo, fromHost host: String) {
|
||||
var tab: Tab?
|
||||
if host == TabPickerViewController.localHostIdentifier {
|
||||
tab = tabController.tab(forIdentifier: info.identifier)
|
||||
} else if let urlString = info.urlString {
|
||||
tab = tabController.createNewTab(url: URL(string: urlString))
|
||||
}
|
||||
|
||||
guard let tab else { return }
|
||||
|
||||
self.tab = tab
|
||||
picker.dismiss(animated: true, completion: nil)
|
||||
|
||||
Reference in New Issue
Block a user