Remote tabs: finishing touches

This commit is contained in:
James Magahern
2022-08-05 18:55:19 -07:00
parent 61773b97db
commit e8c6111592
11 changed files with 273 additions and 62 deletions

View File

@@ -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)

View File

@@ -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)