mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
97 lines
4.2 KiB
Swift
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)
|
|
}
|
|
}
|