Make the remote settings hook usable within the app extensions. (#4342)

This commit is contained in:
Doug
2025-07-22 17:09:53 +01:00
committed by GitHub
parent f65b191c8a
commit b7867dac85
20 changed files with 245 additions and 139 deletions

View File

@@ -11,11 +11,19 @@ import SwiftUI
class ShareExtensionViewController: UIViewController {
private static var targetConfiguration: Target.Configuration?
private let appSettings: CommonSettingsProtocol = AppSettings()
private var appHooks: AppHooks!
private let keychainController = KeychainController(service: .sessions,
accessGroup: InfoPlistReader.main.keychainAccessGroupIdentifier)
private let hostingController = UIHostingController(rootView: ShareExtensionView())
override func viewDidLoad() {
super.viewDidLoad()
appHooks = AppHooks()
appHooks.setUp()
if Self.targetConfiguration == nil {
Self.targetConfiguration = Target.shareExtension.configure(logLevel: appSettings.logLevel,
traceLogPacks: appSettings.traceLogPacks,
@@ -30,6 +38,14 @@ class ShareExtensionViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if let credentials = keychainController.restorationTokens().first {
let homeserverURL = credentials.restorationToken.session.homeserverUrl
appHooks.remoteSettingsHook.loadCache(forHomeserver: homeserverURL, applyingTo: appSettings)
} else {
// We should really show a different state when there isn't a logged in user, but for now this is fine.
MXLog.error("Not logged in, launching app to show the authentication flow.")
}
Task {
if let payload = await prepareSharePayload() {
await self.openMainApp(payload: payload)