mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-16 13:57:02 +08:00
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added support for displaying title and summary fields in workspace pages. * Introduced a menu in the chat header with a "Clear History" option to remove chat history. * **Improvements** * Enhanced chat message handling with asynchronous context preparation and improved markdown processing. * Simplified chat input and assistant message rendering for better performance and maintainability. * Updated dependency versions for improved stability and compatibility. * **Bug Fixes** * Ensured chat features are available in all build configurations, not just debug mode. * **Chores** * Removed unused dependencies and internal code, and disabled certain function bar options. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
78 lines
2.6 KiB
Swift
78 lines
2.6 KiB
Swift
import Capacitor
|
|
import Intelligents
|
|
import UIKit
|
|
|
|
class AFFiNEViewController: CAPBridgeViewController {
|
|
var intelligentsButton: IntelligentsButton?
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
webView?.allowsBackForwardNavigationGestures = true
|
|
navigationController?.navigationBar.isHidden = true
|
|
extendedLayoutIncludesOpaqueBars = false
|
|
edgesForExtendedLayout = []
|
|
let intelligentsButton = installIntelligentsButton()
|
|
intelligentsButton.delegate = self
|
|
self.intelligentsButton = intelligentsButton
|
|
dismissIntelligentsButton()
|
|
}
|
|
|
|
override func webViewConfiguration(for instanceConfiguration: InstanceConfiguration) -> WKWebViewConfiguration {
|
|
let configuration = super.webViewConfiguration(for: instanceConfiguration)
|
|
return configuration
|
|
}
|
|
|
|
override func webView(with frame: CGRect, configuration: WKWebViewConfiguration) -> WKWebView {
|
|
super.webView(with: frame, configuration: configuration)
|
|
}
|
|
|
|
override func capacitorDidLoad() {
|
|
let plugins: [CAPPlugin] = [
|
|
AuthPlugin(),
|
|
CookiePlugin(),
|
|
HashcashPlugin(),
|
|
NavigationGesturePlugin(),
|
|
// IntelligentsPlugin(representController: self), // no longer put in use
|
|
NbStorePlugin(),
|
|
]
|
|
plugins.forEach { bridge?.registerPluginInstance($0) }
|
|
}
|
|
|
|
private var intelligentsButtonTimer: Timer?
|
|
private var isCheckingIntelligentEligibility = false
|
|
|
|
override func viewDidAppear(_ animated: Bool) {
|
|
super.viewDidAppear(animated)
|
|
IntelligentContext.shared.webView = webView
|
|
navigationController?.setNavigationBarHidden(false, animated: animated)
|
|
let timer = Timer.scheduledTimer(withTimeInterval: 3, repeats: true) { [weak self] _ in
|
|
self?.checkEligibilityOfIntelligent()
|
|
}
|
|
intelligentsButtonTimer = timer
|
|
RunLoop.main.add(timer, forMode: .common)
|
|
}
|
|
|
|
private func checkEligibilityOfIntelligent() {
|
|
guard !isCheckingIntelligentEligibility else { return }
|
|
assert(intelligentsButton != nil)
|
|
guard intelligentsButton?.isHidden ?? false else { return } // already eligible
|
|
isCheckingIntelligentEligibility = true
|
|
IntelligentContext.shared.webView = webView
|
|
IntelligentContext.shared.preparePresent { [self] result in
|
|
DispatchQueue.main.async {
|
|
defer { self.isCheckingIntelligentEligibility = false }
|
|
switch result {
|
|
case .failure: break
|
|
case .success:
|
|
self.presentIntelligentsButton()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
override func viewDidDisappear(_ animated: Bool) {
|
|
super.viewDidDisappear(animated)
|
|
intelligentsButtonTimer?.invalidate()
|
|
}
|
|
}
|