import UIKit import UserNotifications import UserNotificationsUI import TelegramUI import BuildConfig @objc(NotificationViewController) class NotificationViewController: UIViewController, UNNotificationContentExtension { private var impl: NotificationViewControllerImpl? override func viewDidLoad() { super.viewDidLoad() 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 = NotificationViewControllerImpl(initializationData: NotificationViewControllerInitializationData(appGroupPath: appGroupUrl.path, apiId: buildConfig.apiId, languagesCategory: languagesCategory, encryptionParameters: encryptionParameters, appVersion: appVersion, bundleData: buildConfig.bundleData(withAppToken: nil)), setPreferredContentSize: { [weak self] size in self?.preferredContentSize = size }) } self.impl?.viewDidLoad(view: self.view) } func didReceive(_ notification: UNNotification) { self.impl?.didReceive(notification, view: self.view) } override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransition(to: size, with: coordinator) self.impl?.viewWillTransition(to: size) } }