mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Multiaccount improvements
This commit is contained in:
parent
91c72ab5d8
commit
2db304cc4d
@ -117,10 +117,14 @@ class NotificationViewController: UIViewController, UNNotificationContentExtensi
|
||||
|
||||
let appVersion = (Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String) ?? "unknown"
|
||||
|
||||
sharedAccountContext = SharedAccountContext(mainWindow: nil, accountManager: accountManager, applicationBindings: applicationBindings, initialPresentationDataAndSettings: initialPresentationDataAndSettings!, networkArguments: NetworkInitializationArguments(apiId: apiId, languagesCategory: languagesCategory, appVersion: appVersion, voipMaxLayer: 0), rootPath: rootPath, apsNotificationToken: .never(), voipNotificationToken: .never(), setNotificationCall: { _ in }, navigateToChat: { _, _, _ in })
|
||||
sharedAccountContext = SharedAccountContext(mainWindow: nil, accountManager: accountManager, applicationBindings: applicationBindings, initialPresentationDataAndSettings: initialPresentationDataAndSettings!, networkArguments: NetworkInitializationArguments(apiId: apiId, languagesCategory: languagesCategory, appVersion: appVersion, voipMaxLayer: 0), rootPath: rootPath, legacyBasePath: nil, legacyCache: nil, apsNotificationToken: .never(), voipNotificationToken: .never(), setNotificationCall: { _ in }, navigateToChat: { _, _, _ in })
|
||||
}
|
||||
}
|
||||
|
||||
override func viewWillDisappear(_ animated: Bool) {
|
||||
super.viewWillDisappear(animated)
|
||||
}
|
||||
|
||||
func didReceive(_ notification: UNNotification) {
|
||||
if let accountIdValue = notification.request.content.userInfo["accountId"] as? Int64, let peerIdValue = notification.request.content.userInfo["peerId"] as? Int64, let messageIdNamespace = notification.request.content.userInfo["messageId.namespace"] as? Int32, let messageIdId = notification.request.content.userInfo["messageId.id"] as? Int32, let dict = notification.request.content.userInfo["mediaInfo"] as? [String: Any] {
|
||||
let messageId = MessageId(peerId: PeerId(peerIdValue), namespace: messageIdNamespace, id: messageIdId)
|
||||
|
@ -190,7 +190,7 @@ class NotificationService: UNNotificationServiceExtension {
|
||||
|
||||
if accountsData.count > 1 {
|
||||
if let title = self.bestAttemptContent?.title, !account.peerName.isEmpty {
|
||||
self.bestAttemptContent?.title = "[\(account.peerName)] \(title)"
|
||||
self.bestAttemptContent?.title = "\(title) [\(account.peerName)]"
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -160,7 +160,7 @@ class ShareRootController: UIViewController {
|
||||
})
|
||||
semaphore.wait()
|
||||
|
||||
let sharedContext = SharedAccountContext(mainWindow: nil, accountManager: accountManager, applicationBindings: applicationBindings, initialPresentationDataAndSettings: initialPresentationDataAndSettings!, networkArguments: NetworkInitializationArguments(apiId: apiId, languagesCategory: languagesCategory, appVersion: appVersion, voipMaxLayer: 0), rootPath: rootPath, apsNotificationToken: .never(), voipNotificationToken: .never(), setNotificationCall: { _ in }, navigateToChat: { _, _, _ in })
|
||||
let sharedContext = SharedAccountContext(mainWindow: nil, accountManager: accountManager, applicationBindings: applicationBindings, initialPresentationDataAndSettings: initialPresentationDataAndSettings!, networkArguments: NetworkInitializationArguments(apiId: apiId, languagesCategory: languagesCategory, appVersion: appVersion, voipMaxLayer: 0), rootPath: rootPath, legacyBasePath: nil, legacyCache: nil, apsNotificationToken: .never(), voipNotificationToken: .never(), setNotificationCall: { _ in }, navigateToChat: { _, _, _ in })
|
||||
sharedExtensionContext = SharedExtensionContext(sharedContext: sharedContext)
|
||||
globalSharedExtensionContext = sharedExtensionContext
|
||||
}
|
||||
@ -207,7 +207,6 @@ class ShareRootController: UIViewController {
|
||||
}
|
||||
|> deliverOnMainQueue
|
||||
|> afterNext { [weak self] context, accessChallengeData, otherAccounts in
|
||||
setupAccount(context.account)
|
||||
setupLegacyComponents(context: context)
|
||||
initializeLegacyComponents(application: nil, currentSizeClassGetter: { return .compact }, currentHorizontalClassGetter: { return .compact }, documentsPath: "", currentApplicationBounds: { return CGRect() }, canOpenUrl: { _ in return false}, openUrl: { _ in })
|
||||
|
||||
|
@ -236,7 +236,6 @@
|
||||
D02CF61B215DA24900E0F56A /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D02CF61A215DA24900E0F56A /* TelegramCore.framework */; };
|
||||
D02CF61C215E51D500E0F56A /* BuildConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = D09250011FE52D2A003F693F /* BuildConfig.m */; };
|
||||
D02E31231BD803E800CD3F01 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D02E31221BD803E800CD3F01 /* main.m */; };
|
||||
D039FB172170F06A00BD1BAD /* PreFetchedLegacyResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D039FB162170F06A00BD1BAD /* PreFetchedLegacyResource.swift */; };
|
||||
D03B0E7B1D63484500955575 /* ShareRootController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0E7A1D63484500955575 /* ShareRootController.swift */; };
|
||||
D03B0E821D63484500955575 /* Share.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = D03B0E781D63484500955575 /* Share.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
D03B0E8A1D634B1100955575 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03B0E871D634B1100955575 /* Display.framework */; };
|
||||
@ -948,7 +947,6 @@
|
||||
D0369C8B1D3E2C9500D91AFC /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; };
|
||||
D0369C8D1D3E2E4800D91AFC /* VideoToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VideoToolbox.framework; path = System/Library/Frameworks/VideoToolbox.framework; sourceTree = SDKROOT; };
|
||||
D0369C8F1D3E2E5000D91AFC /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; };
|
||||
D039FB162170F06A00BD1BAD /* PreFetchedLegacyResource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreFetchedLegacyResource.swift; sourceTree = "<group>"; };
|
||||
D03B0E781D63484500955575 /* Share.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = Share.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
D03B0E7A1D63484500955575 /* ShareRootController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareRootController.swift; sourceTree = "<group>"; };
|
||||
D03B0E7F1D63484500955575 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
@ -2348,7 +2346,6 @@
|
||||
D0ADF962212C9AA900310BBC /* TGProxyItem.h */,
|
||||
D0ADF963212C9AA900310BBC /* TGProxyItem.m */,
|
||||
D051DB5C21602D6E00F30F92 /* LegacyDataImportSplash.swift */,
|
||||
D039FB162170F06A00BD1BAD /* PreFetchedLegacyResource.swift */,
|
||||
);
|
||||
name = "Legacy Data Import";
|
||||
sourceTree = "<group>";
|
||||
@ -3218,7 +3215,6 @@
|
||||
09C50E912173B247009E676F /* TGBridgeSubscriptions.m in Sources */,
|
||||
09D304262174341A00C00567 /* TGBridgeLocationVenue.m in Sources */,
|
||||
09D304312174344900C00567 /* TGBridgeImageMediaAttachment.m in Sources */,
|
||||
D039FB172170F06A00BD1BAD /* PreFetchedLegacyResource.swift in Sources */,
|
||||
09D304292174343300C00567 /* TGBridgeBotInfo.m in Sources */,
|
||||
09D304272174341E00C00567 /* TGBridgeChatMessages.m in Sources */,
|
||||
D0B21B0F220438E9003F741D /* SharedNotificationManager.swift in Sources */,
|
||||
|
@ -171,32 +171,6 @@ private final class SharedApplicationContext {
|
||||
|
||||
private var replyFromNotificationsDisposables = DisposableSet()
|
||||
|
||||
private var replyFromNotificationsTokensValue = Set<Int32>() {
|
||||
didSet {
|
||||
assert(Queue.mainQueue().isCurrent())
|
||||
self.replyFromNotificationsTokensPromise.set(.single(self.replyFromNotificationsTokensValue))
|
||||
}
|
||||
}
|
||||
private let replyFromNotificationsTokensPromise = Promise<Set<Int32>>(Set())
|
||||
private var nextToken: Int32 = 0
|
||||
private func takeNextToken() -> Int32 {
|
||||
let value = self.nextToken
|
||||
self.nextToken = value + 1
|
||||
return value
|
||||
}
|
||||
private func addReplyFromNotificationsToken() -> Int32 {
|
||||
let token = self.takeNextToken()
|
||||
var value = self.replyFromNotificationsTokensValue
|
||||
value.insert(token)
|
||||
self.replyFromNotificationsTokensValue = value
|
||||
return token
|
||||
}
|
||||
private func removeReplyFromNotificationsToken(_ token: Int32) {
|
||||
var value = self.replyFromNotificationsTokensValue
|
||||
value.remove(token)
|
||||
self.replyFromNotificationsTokensValue = value
|
||||
}
|
||||
|
||||
private var _notificationTokenPromise: Promise<Data>?
|
||||
private let voipTokenPromise = Promise<Data>()
|
||||
|
||||
@ -211,11 +185,6 @@ private final class SharedApplicationContext {
|
||||
}
|
||||
}
|
||||
|
||||
//private var queuedNotifications: [[AnyHashable: Any]] = []
|
||||
//private var queuedNotificationRequests: [(String, String, String?, NotificationManagedNotificationRequestId)] = []
|
||||
private var queuedMutePolling = false
|
||||
private var queuedAnnouncements: [String] = []
|
||||
private var queuedWakeups = Set<QueuedWakeup>()
|
||||
private var clearNotificationsManager: ClearNotificationsManager?
|
||||
|
||||
private let idleTimerExtensionSubscribers = Bag<Void>()
|
||||
@ -618,8 +587,11 @@ private final class SharedApplicationContext {
|
||||
})
|
||||
semaphore.wait()
|
||||
|
||||
let legacyBasePath = appGroupUrl.path
|
||||
let legacyCache = LegacyCache(path: legacyBasePath + "/Caches")
|
||||
|
||||
var setPresentationCall: ((PresentationCall?) -> Void)?
|
||||
let sharedContext = SharedAccountContext(mainWindow: self.mainWindow, accountManager: accountManager, applicationBindings: applicationBindings, initialPresentationDataAndSettings: initialPresentationDataAndSettings!, networkArguments: networkArguments, rootPath: rootPath, apsNotificationToken: self.notificationTokenPromise.get() |> map(Optional.init), voipNotificationToken: self.voipTokenPromise.get() |> map(Optional.init), setNotificationCall: { call in
|
||||
let sharedContext = SharedAccountContext(mainWindow: self.mainWindow, accountManager: accountManager, applicationBindings: applicationBindings, initialPresentationDataAndSettings: initialPresentationDataAndSettings!, networkArguments: networkArguments, rootPath: rootPath, legacyBasePath: legacyBasePath, legacyCache: legacyCache, apsNotificationToken: self.notificationTokenPromise.get() |> map(Optional.init), voipNotificationToken: self.voipTokenPromise.get() |> map(Optional.init), setNotificationCall: { call in
|
||||
setPresentationCall?(call)
|
||||
}, navigateToChat: { accountId, peerId, messageId in
|
||||
self.openChatWhenReady(accountId: accountId, peerId: peerId, messageId: messageId)
|
||||
@ -758,15 +730,6 @@ private final class SharedApplicationContext {
|
||||
})
|
||||
|
||||
let watchManagerArgumentsPromise = Promise<WatchManagerArguments?>()
|
||||
|
||||
let replyFromNotificationsActive = self.replyFromNotificationsTokensPromise.get()
|
||||
|> map {
|
||||
!$0.isEmpty
|
||||
}
|
||||
|> distinctUntilChanged
|
||||
|
||||
let backgroundAudioActive = self.hasActiveAudioSession.get()
|
||||
|> distinctUntilChanged
|
||||
|
||||
self.context.set(self.sharedContextPromise.get()
|
||||
|> deliverOnMainQueue
|
||||
@ -800,7 +763,7 @@ private final class SharedApplicationContext {
|
||||
|> map { accountAndSettings -> AuthorizedApplicationContext? in
|
||||
return accountAndSettings.flatMap { account, limitsConfiguration, callListSettings in
|
||||
let context = AccountContext(sharedContext: sharedApplicationContext.sharedContext, account: account, limitsConfiguration: limitsConfiguration)
|
||||
return AuthorizedApplicationContext(mainWindow: self.mainWindow, replyFromNotificationsActive: replyFromNotificationsActive, backgroundAudioActive: backgroundAudioActive, watchManagerArguments: watchManagerArgumentsPromise.get(), context: context, accountManager: sharedApplicationContext.sharedContext.accountManager, legacyBasePath: appGroupUrl.path, showCallsTab: callListSettings.showTab, reinitializedNotificationSettings: {
|
||||
return AuthorizedApplicationContext(mainWindow: self.mainWindow, watchManagerArguments: watchManagerArgumentsPromise.get(), context: context, accountManager: sharedApplicationContext.sharedContext.accountManager, showCallsTab: callListSettings.showTab, reinitializedNotificationSettings: {
|
||||
let _ = (self.context.get()
|
||||
|> take(1)
|
||||
|> deliverOnMainQueue).start(next: { context in
|
||||
@ -1607,8 +1570,6 @@ private final class SharedApplicationContext {
|
||||
} else if response.actionIdentifier == "reply", let peerId = peerIdFromNotification(response.notification) {
|
||||
if let response = response as? UNTextInputNotificationResponse, !response.userText.isEmpty {
|
||||
let text = response.userText
|
||||
let token = addReplyFromNotificationsToken()
|
||||
|
||||
let signal = self.authorizedContext()
|
||||
|> take(1)
|
||||
|> mapToSignal { context -> Signal<Void, NoError> in
|
||||
@ -1659,7 +1620,6 @@ private final class SharedApplicationContext {
|
||||
if let disposable = disposable {
|
||||
self.replyFromNotificationsDisposables.remove(disposable)
|
||||
}
|
||||
self.removeReplyFromNotificationsToken(token)
|
||||
completionHandler()
|
||||
}
|
||||
}).start())
|
||||
|
@ -50,16 +50,12 @@ final class AuthorizedApplicationContext {
|
||||
let lockedCoveringView: LockedWindowCoveringView
|
||||
|
||||
let context: AccountContext
|
||||
let replyFromNotificationsActive: Signal<Bool, NoError>
|
||||
let backgroundAudioActive: Signal<Bool, NoError>
|
||||
|
||||
let rootController: TelegramRootController
|
||||
let notificationController: NotificationContainerController
|
||||
|
||||
private var scheduledOperChatWithPeerId: PeerId?
|
||||
private var scheduledOpenExternalUrl: URL?
|
||||
|
||||
//let notificationManager: NotificationManager
|
||||
|
||||
private let passcodeStatusDisposable = MetaDisposable()
|
||||
private let passcodeLockDisposable = MetaDisposable()
|
||||
@ -103,7 +99,7 @@ final class AuthorizedApplicationContext {
|
||||
private var showCallsTabDisposable: Disposable?
|
||||
private var enablePostboxTransactionsDiposable: Disposable?
|
||||
|
||||
init(mainWindow: Window1, replyFromNotificationsActive: Signal<Bool, NoError>, backgroundAudioActive: Signal<Bool, NoError>, watchManagerArguments: Signal<WatchManagerArguments?, NoError>, context: AccountContext, accountManager: AccountManager, legacyBasePath: String, showCallsTab: Bool, reinitializedNotificationSettings: @escaping () -> Void) {
|
||||
init(mainWindow: Window1, watchManagerArguments: Signal<WatchManagerArguments?, NoError>, context: AccountContext, accountManager: AccountManager, showCallsTab: Bool, reinitializedNotificationSettings: @escaping () -> Void) {
|
||||
setupLegacyComponents(context: context)
|
||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||
|
||||
@ -111,8 +107,6 @@ final class AuthorizedApplicationContext {
|
||||
self.lockedCoveringView = LockedWindowCoveringView(theme: presentationData.theme)
|
||||
|
||||
self.context = context
|
||||
self.replyFromNotificationsActive = replyFromNotificationsActive
|
||||
self.backgroundAudioActive = backgroundAudioActive
|
||||
|
||||
let runningWatchTasksPromise = Promise<WatchRunningTasks?>(nil)
|
||||
|
||||
@ -126,49 +120,8 @@ final class AuthorizedApplicationContext {
|
||||
}
|
||||
|> distinctUntilChanged
|
||||
|
||||
//self.wakeupManager = WakeupManager(accountManager: context.sharedContext.accountManager, inForeground: context.sharedContext.applicationBindings.applicationInForeground, runningServiceTasks: context.account.importantTasksRunning, runningBackgroundLocationTasks: runningBackgroundLocationTasks, runningWatchTasks: runningWatchTasksPromise.get(), runningDownloadTasks: runningDownloadTasks)
|
||||
|
||||
self.showCallsTab = showCallsTab
|
||||
|
||||
//self.notificationManager = NotificationManager()
|
||||
//self.notificationManager.isApplicationInForeground = false
|
||||
|
||||
/*let shouldBeServiceTaskMaster = combineLatest(context.sharedContext.applicationBindings.applicationInForeground, self.wakeupManager.isWokenUp, replyFromNotificationsActive, backgroundAudioActive, callManager.hasActiveCalls)
|
||||
|> map { foreground, wokenUp, replyFromNotificationsActive, backgroundAudioActive, hasActiveCalls -> AccountServiceTaskMasterMode in
|
||||
if foreground || wokenUp || replyFromNotificationsActive || hasActiveCalls {
|
||||
return .always
|
||||
} else {
|
||||
return .never
|
||||
}
|
||||
}
|
||||
context.account.shouldBeServiceTaskMaster.set(shouldBeServiceTaskMaster)
|
||||
self.enablePostboxTransactionsDiposable = (combineLatest(shouldBeServiceTaskMaster, backgroundAudioActive)
|
||||
|> map { shouldBeServiceTaskMaster, backgroundAudioActive -> Bool in
|
||||
switch shouldBeServiceTaskMaster {
|
||||
case .never:
|
||||
break
|
||||
default:
|
||||
return true
|
||||
}
|
||||
if backgroundAudioActive {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|> deliverOnMainQueue).start(next: { [weak context] next in
|
||||
if let context = context {
|
||||
Logger.shared.log("ApplicationContext", "setting canBeginTransactions to \(next)")
|
||||
context.account.postbox.setCanBeginTransactions(next)
|
||||
}
|
||||
})*/
|
||||
//context.account.shouldExplicitelyKeepWorkerConnections.set(backgroundAudioActive)
|
||||
|
||||
let cache = TGCache(cachesPath: legacyBasePath + "/Caches")!
|
||||
|
||||
setupAccount(context.account, fetchCachedResourceRepresentation: fetchCachedResourceRepresentation, transformOutgoingMessageMedia: transformOutgoingMessageMedia, preFetchedResourcePath: { resource in
|
||||
preFetchedLegacyResourcePath(basePath: legacyBasePath, resource: resource, cache: cache)
|
||||
})
|
||||
|
||||
self.notificationController = NotificationContainerController(context: context)
|
||||
|
||||
self.mainWindow.previewThemeAccentColor = presentationData.theme.rootController.navigationBar.accentTextColor
|
||||
|
@ -1,20 +0,0 @@
|
||||
import Foundation
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
|
||||
import LegacyComponents
|
||||
|
||||
func preFetchedLegacyResourcePath(basePath: String, resource: MediaResource, cache: TGCache) -> String? {
|
||||
|
||||
if let resource = resource as? CloudDocumentMediaResource {
|
||||
let videoPath = "\(basePath)/Documents/video/remote\(String(resource.fileId, radix: 16)).mov"
|
||||
if FileManager.default.fileExists(atPath: videoPath) {
|
||||
return videoPath
|
||||
}
|
||||
let fileName = resource.fileName?.replacingOccurrences(of: "/", with: "_") ?? "file"
|
||||
return pathFromLegacyFile(basePath: basePath, fileId: resource.fileId, isLocal: false, fileName: fileName)
|
||||
} else if let resource = resource as? CloudFileMediaResource {
|
||||
return cache.path(forCachedData: "\(resource.datacenterId)_\(resource.volumeId)_\(resource.localId)_\(resource.secret)")
|
||||
}
|
||||
return nil
|
||||
}
|
@ -1441,6 +1441,7 @@
|
||||
"Target.InviteToGroupConfirmation" = "Add the bot to \"%@\"?";
|
||||
"Target.InviteToGroupErrorAlreadyInvited" = "The bot is already a member of the group.";
|
||||
"Bot.GenericBotStatus" = "bot";
|
||||
"Bot.GenericSupportStatus" = "bot";
|
||||
"Bot.DescriptionTitle" = "What can this bot do?";
|
||||
"Bot.GroupStatusReadsHistory" = "has access to messages";
|
||||
"Bot.GroupStatusDoesNotReadHistory" = "has no access to messages";
|
||||
@ -4026,3 +4027,18 @@ Unused sets are archived when you add more.";
|
||||
"ChatSettings.AutoDownloadSettings.TypeFile" = "Files (%@)";
|
||||
"ChatSettings.AutoDownloadSettings.OffForAll" = "Disabled";
|
||||
"ChatSettings.AutoDownloadSettings.Delimeter" = ", ";
|
||||
|
||||
"LogoutOptions.Title" = "Log out";
|
||||
"LogoutOptions.AlternativeOptionsSection" = "ALTERNATIVE OPTIONS";
|
||||
"LogoutOptions.AddAccountTitle" = "Add another account";
|
||||
"LogoutOptions.AddAccountText" = "Set up multiple phone numbers and easily switch between them.";
|
||||
"LogoutOptions.SetPasscodeTitle" = "Set a Passcode";
|
||||
"LogoutOptions.SetPasscodeText" = "Lock the app with a passcode so that others can't open it.";
|
||||
"LogoutOptions.ClearCacheTitle" = "Clear Cache";
|
||||
"LogoutOptions.ClearCacheText" = "Free up disk space on your device; your media will stay in the cloud.";
|
||||
"LogoutOptions.ChangePhoneNumberTitle" = "Change Phone Number";
|
||||
"LogoutOptions.ChangePhoneNumberText" = "Move your contacts, groups, messages and media to a new number.";
|
||||
"LogoutOptions.ContactSupportTitle" = "Contact Support";
|
||||
"LogoutOptions.ContactSupportText" = "Tell us about any issues; logging out doesn't usually help.";
|
||||
"LogoutOptions.LogOut" = "Log Out";
|
||||
"LogoutOptions.LogOutInfo" = "Remember, logging out kills all your Secret Chats.";
|
||||
|
@ -94,11 +94,9 @@ class TodayViewController: UIViewController, NCWidgetProviding {
|
||||
}
|
||||
}
|
||||
|
||||
let applicationInterface = account |> afterNext { account in
|
||||
setupAccount(account)
|
||||
} |> deliverOnMainQueue |> afterNext { [weak self] account in
|
||||
account.resetStateManagement()
|
||||
|
||||
let applicationInterface = account
|
||||
|> deliverOnMainQueue
|
||||
|> afterNext { [weak self] account in
|
||||
let _ = (recentPeers(account: account)
|
||||
|> deliverOnMainQueue).start(next: { peers in
|
||||
if let strongSelf = self {
|
||||
@ -106,7 +104,7 @@ class TodayViewController: UIViewController, NCWidgetProviding {
|
||||
case let .peers(peers):
|
||||
strongSelf.setPeers(account: account, peers: peers.filter { !$0.isDeleted })
|
||||
case .disabled:
|
||||
break
|
||||
strongSelf.setPeers(account: account, peers: [])
|
||||
}
|
||||
}
|
||||
})
|
||||
@ -210,9 +208,6 @@ class TodayViewController: UIViewController, NCWidgetProviding {
|
||||
if let path = self.getSnapshotPath() {
|
||||
DispatchQueue.main.async {
|
||||
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, false, 0.0)
|
||||
/*let context = UIGraphicsGetCurrentContext()
|
||||
context?.setFillColor(UIColor.blue.cgColor)
|
||||
context?.fill(CGRect(origin: CGPoint(), size: self.view.bounds.size))*/
|
||||
self.view.drawHierarchy(in: self.view.bounds, afterScreenUpdates: false)
|
||||
let image = UIGraphicsGetImageFromCurrentImageContext()
|
||||
UIGraphicsEndImageContext()
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 2777cc3f38f6693b6cb7bf6416a1e550a0c621d9
|
||||
Subproject commit 5cf9244c99b24d7780cbe2b920e04f3bc1fdbc87
|
@ -1 +1 @@
|
||||
Subproject commit e908f22334e715845848373679ce592ad162fe52
|
||||
Subproject commit 9a2b81c465c26a823bec6aaecc42e51de4773562
|
@ -1 +1 @@
|
||||
Subproject commit 67e60e8e8b4ab11daa5b52e732d1a62232b2d31a
|
||||
Subproject commit dd02b83037bc296d3fc0c7d1962a58c828788537
|
@ -1 +1 @@
|
||||
Subproject commit 0b8a19f5c9766f4a7c418e9d9ec2f0472b956e9e
|
||||
Subproject commit f027996caa7b7b4174dcb8622d321b143f746628
|
@ -1 +1 @@
|
||||
Subproject commit 92afd48eea5f74d882ff33b8dd3322f01890e020
|
||||
Subproject commit 2d16542a27fb3d43eedaea8ddddaf506e249be1d
|
@ -1 +1 @@
|
||||
Subproject commit 1eba45ce51f1ec05acaf1ca782d4e228ae02137a
|
||||
Subproject commit 5149354c84e030f92949ed2038aab8b7ed3083fc
|
Loading…
x
Reference in New Issue
Block a user