Swiftgram/Telegram/Share/ShareRootController.swift
2024-05-27 20:03:25 +04:00

97 lines
4.2 KiB
Swift

import UIKit
import TelegramUI
import BuildConfig
import ShareExtensionContext
import SwiftSignalKit
import Postbox
import TelegramCore
@objc(ShareRootController)
class ShareRootController: UIViewController {
private var impl: ShareRootControllerImpl?
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
self.modalPresentationStyle = .fullScreen
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func loadView() {
super.loadView()
if self.impl == nil {
let appBundleIdentifier = Bundle.main.bundleIdentifier!
guard let lastDotRange = appBundleIdentifier.range(of: ".", options: [.backwards]) else {
return
}
let baseAppBundleId = String(appBundleIdentifier[..<lastDotRange.lowerBound])
let buildConfig = BuildConfig(baseAppBundleId: baseAppBundleId)
let languagesCategory = "ios"
let appGroupName = "group.\(baseAppBundleId)"
let maybeAppGroupUrl = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: appGroupName)
guard let appGroupUrl = maybeAppGroupUrl else {
return
}
let rootPath = appGroupUrl.path + "/telegram-data"
let deviceSpecificEncryptionParameters = BuildConfig.deviceSpecificEncryptionParameters(rootPath, baseAppBundleId: baseAppBundleId)
let encryptionParameters: (Data, Data) = (deviceSpecificEncryptionParameters.key, deviceSpecificEncryptionParameters.salt)
let appVersion = (Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String) ?? "unknown"
self.impl = ShareRootControllerImpl(initializationData: ShareRootControllerInitializationData(appBundleId: baseAppBundleId, appBuildType: buildConfig.isAppStoreBuild ? .public : .internal, appGroupPath: appGroupUrl.path, apiId: buildConfig.apiId, apiHash: buildConfig.apiHash, languagesCategory: languagesCategory, encryptionParameters: encryptionParameters, appVersion: appVersion, bundleData: buildConfig.bundleData(withAppToken: nil, tokenType: nil, tokenEnvironment: nil, signatureDict: nil), useBetaFeatures: !buildConfig.isAppStoreBuild, makeTempContext: { accountManager, appLockContext, applicationBindings, InitialPresentationDataAndSettings, networkArguments in
return makeTempContext(
sharedContainerPath: appGroupUrl.path,
rootPath: rootPath,
appGroupPath: appGroupUrl.path,
accountManager: accountManager,
appLockContext: appLockContext,
encryptionParameters: ValueBoxEncryptionParameters(
forceEncryptionIfNoSet: false,
key: ValueBoxEncryptionParameters.Key(data: encryptionParameters.0)!,
salt: ValueBoxEncryptionParameters.Salt(data: encryptionParameters.1)!
),
applicationBindings: applicationBindings,
initialPresentationDataAndSettings: InitialPresentationDataAndSettings,
networkArguments: networkArguments,
buildConfig: buildConfig
)
}), getExtensionContext: { [weak self] in
return self?.extensionContext
})
}
self.impl?.loadView()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.impl?.viewWillAppear()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.impl?.viewWillDisappear()
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
self.impl?.viewWillDisappear()
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.impl?.viewDidLayoutSubviews(view: self.view, traitCollection: self.traitCollection)
}
}