From ea0f6a685ce1cb845324197ada26de0099f90650 Mon Sep 17 00:00:00 2001 From: isaac <> Date: Tue, 5 May 2026 00:54:26 +0200 Subject: [PATCH] =?UTF-8?q?Postbox=20refactor=20wave=20277:=20cachedWallpa?= =?UTF-8?q?per(account:)=20=E2=86=92=20cachedWallpaper(engine:network:)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Migrate `cachedWallpaper(account: Account, ...)` in WallpaperCache.swift to take `(engine: TelegramEngine, network: Network, ...)` instead of the umbrella Account parameter. Body drops the local `let engine = TelegramEngine(account:)` since engine is now a parameter; `account.network` is now `network`. 19 context-based callers (`account: context.account` / `self.context.account` / `component.context.account`) update via perl sweep to pass `engine: context.engine, network: context.account.network`. 3 internal-Account-typed callers (WallpaperResources.swift × 2, ThemeUpdateManager.swift × 1) bridge with adhoc `engine: TelegramEngine(account: account), network: account.network` since they're inside functions that still take `account: Account` and have heavier Postbox uses we can't migrate yet. Drops `import Postbox` from WallpaperCache.swift since the only remaining Postbox-ish identifier was `ValueBoxKey`, which swaps to `EngineDataBuffer`. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../SettingsUI/Sources/ThemePickerController.swift | 12 ++++++------ .../Sources/Themes/EditThemeController.swift | 4 ++-- .../Themes/ThemeAutoNightSettingsController.swift | 2 +- .../Sources/Themes/ThemePreviewController.swift | 2 +- .../Sources/Themes/ThemeSettingsController.swift | 12 ++++++------ .../Sources/ChannelAppearanceScreen.swift | 2 +- .../Sources/UserApperanceScreen.swift | 2 +- .../TelegramUI/Sources/ThemeUpdateManager.swift | 2 +- .../WallpaperResources/Sources/WallpaperCache.swift | 13 +++++-------- .../Sources/WallpaperResources.swift | 4 ++-- 10 files changed, 26 insertions(+), 29 deletions(-) diff --git a/submodules/SettingsUI/Sources/ThemePickerController.swift b/submodules/SettingsUI/Sources/ThemePickerController.swift index b90159eb76..986b79cc0b 100644 --- a/submodules/SettingsUI/Sources/ThemePickerController.swift +++ b/submodules/SettingsUI/Sources/ThemePickerController.swift @@ -517,7 +517,7 @@ public func themePickerController(context: AccountContext, focusOnItemTag: Theme } |> mapToSignal { accentColor, wallpaper -> Signal<(PresentationThemeAccentColor?, TelegramWallpaper), NoError> in if case let .file(file) = wallpaper, file.id == 0 { - return cachedWallpaper(account: context.account, slug: file.slug, settings: file.settings) + return cachedWallpaper(engine: context.engine, network: context.account.network, slug: file.slug, settings: file.settings) |> map { cachedWallpaper in if let wallpaper = cachedWallpaper?.wallpaper, case .file = wallpaper { return (accentColor, wallpaper) @@ -578,7 +578,7 @@ public func themePickerController(context: AccountContext, focusOnItemTag: Theme let resolvedWallpaper: Signal if case let .file(file) = theme.chat.defaultWallpaper, file.id == 0 { - resolvedWallpaper = cachedWallpaper(account: context.account, slug: file.slug, settings: file.settings) + resolvedWallpaper = cachedWallpaper(engine: context.engine, network: context.account.network, slug: file.slug, settings: file.settings) |> map { cachedWallpaper -> TelegramWallpaper in return cachedWallpaper?.wallpaper ?? theme.chat.defaultWallpaper } @@ -745,7 +745,7 @@ public func themePickerController(context: AccountContext, focusOnItemTag: Theme let wallpaperSignal: Signal if case let .file(file) = effectiveWallpaper, file.id == 0 { - wallpaperSignal = cachedWallpaper(account: context.account, slug: file.slug, settings: file.settings) + wallpaperSignal = cachedWallpaper(engine: context.engine, network: context.account.network, slug: file.slug, settings: file.settings) |> map { cachedWallpaper in return cachedWallpaper?.wallpaper ?? effectiveWallpaper } @@ -825,7 +825,7 @@ public func themePickerController(context: AccountContext, focusOnItemTag: Theme let resolvedWallpaper: Signal if case let .file(file) = theme.chat.defaultWallpaper, file.id == 0 { - resolvedWallpaper = cachedWallpaper(account: context.account, slug: file.slug, settings: file.settings) + resolvedWallpaper = cachedWallpaper(engine: context.engine, network: context.account.network, slug: file.slug, settings: file.settings) |> map { cachedWallpaper -> TelegramWallpaper in return cachedWallpaper?.wallpaper ?? theme.chat.defaultWallpaper } @@ -1129,7 +1129,7 @@ public func themePickerController(context: AccountContext, focusOnItemTag: Theme let resolvedWallpaper: Signal if case let .file(file) = presentationTheme.chat.defaultWallpaper, file.id == 0 { - resolvedWallpaper = cachedWallpaper(account: context.account, slug: file.slug, settings: file.settings) + resolvedWallpaper = cachedWallpaper(engine: context.engine, network: context.account.network, slug: file.slug, settings: file.settings) |> map { wallpaper -> TelegramWallpaper? in return wallpaper?.wallpaper } @@ -1226,7 +1226,7 @@ public func themePickerController(context: AccountContext, focusOnItemTag: Theme selectAccentColorImpl = { currentBaseTheme, accentColor in var wallpaperSignal: Signal = .single(nil) if let colorWallpaper = accentColor?.wallpaper, case let .file(file) = colorWallpaper { - wallpaperSignal = cachedWallpaper(account: context.account, slug: file.slug, settings: colorWallpaper.settings) + wallpaperSignal = cachedWallpaper(engine: context.engine, network: context.account.network, slug: file.slug, settings: colorWallpaper.settings) |> mapToSignal { cachedWallpaper in if let wallpaper = cachedWallpaper?.wallpaper, case let .file(file) = wallpaper { let _ = context.engine.resources.fetch(reference: .wallpaper(wallpaper: .slug(file.slug), resource: file.file.resource), userLocation: .other, userContentType: .other).start() diff --git a/submodules/SettingsUI/Sources/Themes/EditThemeController.swift b/submodules/SettingsUI/Sources/Themes/EditThemeController.swift index 7513a800e6..32112be4b5 100644 --- a/submodules/SettingsUI/Sources/Themes/EditThemeController.swift +++ b/submodules/SettingsUI/Sources/Themes/EditThemeController.swift @@ -335,7 +335,7 @@ public func editThemeController(context: AccountContext, mode: EditThemeControll settingsPromise.set(.single(info.theme.settings?.first)) if let file = info.theme.file, let path = context.sharedContext.accountManager.resources.completedResourcePath(resource: EngineMediaResource(file.resource)), let data = try? Data(contentsOf: URL(fileURLWithPath: path)), let theme = makePresentationTheme(data: data, resolvedWallpaper: info.resolvedWallpaper) { if case let .file(file) = theme.chat.defaultWallpaper, file.id == 0 { - previewThemePromise.set(cachedWallpaper(account: context.account, slug: file.slug, settings: file.settings) + previewThemePromise.set(cachedWallpaper(engine: context.engine, network: context.account.network, slug: file.slug, settings: file.settings) |> map ({ wallpaper -> PresentationTheme in if let wallpaper = wallpaper { return theme.withUpdated(name: nil, defaultWallpaper: wallpaper.wallpaper) @@ -404,7 +404,7 @@ public func editThemeController(context: AccountContext, mode: EditThemeControll if let url = urls.first{ if let data = try? Data(contentsOf: url), let theme = makePresentationTheme(data: data) { if case let .file(file) = theme.chat.defaultWallpaper, file.id == 0 { - let _ = (cachedWallpaper(account: context.account, slug: file.slug, settings: file.settings) + let _ = (cachedWallpaper(engine: context.engine, network: context.account.network, slug: file.slug, settings: file.settings) |> mapToSignal { wallpaper -> Signal in if let wallpaper = wallpaper, case let .file(file) = wallpaper.wallpaper { var convertedRepresentations: [ImageRepresentationWithReference] = [] diff --git a/submodules/SettingsUI/Sources/Themes/ThemeAutoNightSettingsController.swift b/submodules/SettingsUI/Sources/Themes/ThemeAutoNightSettingsController.swift index 9d92ab1692..bc300e2812 100644 --- a/submodules/SettingsUI/Sources/Themes/ThemeAutoNightSettingsController.swift +++ b/submodules/SettingsUI/Sources/Themes/ThemeAutoNightSettingsController.swift @@ -539,7 +539,7 @@ public func themeAutoNightSettingsController(context: AccountContext) -> ViewCon let resolvedWallpaper: Signal if case let .file(file) = presentationTheme.chat.defaultWallpaper, file.id == 0 { - resolvedWallpaper = cachedWallpaper(account: context.account, slug: file.slug, settings: file.settings) + resolvedWallpaper = cachedWallpaper(engine: context.engine, network: context.account.network, slug: file.slug, settings: file.settings) |> map { wallpaper -> TelegramWallpaper? in return wallpaper?.wallpaper } diff --git a/submodules/SettingsUI/Sources/Themes/ThemePreviewController.swift b/submodules/SettingsUI/Sources/Themes/ThemePreviewController.swift index 7a0611c0ab..a251af569a 100644 --- a/submodules/SettingsUI/Sources/Themes/ThemePreviewController.swift +++ b/submodules/SettingsUI/Sources/Themes/ThemePreviewController.swift @@ -221,7 +221,7 @@ public final class ThemePreviewController: ViewController { if let initialWallpaper = initialWallpaper { self.controllerNode.wallpaperPromise.set(.single(initialWallpaper)) } else if case let .file(file) = previewTheme.chat.defaultWallpaper, file.id == 0 { - self.controllerNode.wallpaperPromise.set(cachedWallpaper(account: self.context.account, slug: file.slug, settings: file.settings) + self.controllerNode.wallpaperPromise.set(cachedWallpaper(engine: self.context.engine, network: self.context.account.network, slug: file.slug, settings: file.settings) |> mapToSignal { wallpaper in return .single(wallpaper?.wallpaper ?? .color(previewTheme.chatList.backgroundColor.argb)) }) diff --git a/submodules/SettingsUI/Sources/Themes/ThemeSettingsController.swift b/submodules/SettingsUI/Sources/Themes/ThemeSettingsController.swift index 38f2bb26ca..9fcf97c4a6 100644 --- a/submodules/SettingsUI/Sources/Themes/ThemeSettingsController.swift +++ b/submodules/SettingsUI/Sources/Themes/ThemeSettingsController.swift @@ -677,7 +677,7 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The } |> mapToSignal { accentColor, wallpaper -> Signal<(PresentationThemeAccentColor?, TelegramWallpaper), NoError> in if case let .file(file) = wallpaper, file.id == 0 { - return cachedWallpaper(account: context.account, slug: file.slug, settings: file.settings) + return cachedWallpaper(engine: context.engine, network: context.account.network, slug: file.slug, settings: file.settings) |> map { cachedWallpaper in if let wallpaper = cachedWallpaper?.wallpaper, case .file = wallpaper { return (accentColor, wallpaper) @@ -731,7 +731,7 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The let resolvedWallpaper: Signal if case let .file(file) = theme.chat.defaultWallpaper, file.id == 0 { - resolvedWallpaper = cachedWallpaper(account: context.account, slug: file.slug, settings: file.settings) + resolvedWallpaper = cachedWallpaper(engine: context.engine, network: context.account.network, slug: file.slug, settings: file.settings) |> map { cachedWallpaper -> TelegramWallpaper in return cachedWallpaper?.wallpaper ?? theme.chat.defaultWallpaper } @@ -896,7 +896,7 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The let wallpaperSignal: Signal if case let .file(file) = effectiveWallpaper, file.id == 0 { - wallpaperSignal = cachedWallpaper(account: context.account, slug: file.slug, settings: file.settings) + wallpaperSignal = cachedWallpaper(engine: context.engine, network: context.account.network, slug: file.slug, settings: file.settings) |> map { cachedWallpaper in return cachedWallpaper?.wallpaper ?? effectiveWallpaper } @@ -976,7 +976,7 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The let resolvedWallpaper: Signal if case let .file(file) = theme.chat.defaultWallpaper, file.id == 0 { - resolvedWallpaper = cachedWallpaper(account: context.account, slug: file.slug, settings: file.settings) + resolvedWallpaper = cachedWallpaper(engine: context.engine, network: context.account.network, slug: file.slug, settings: file.settings) |> map { cachedWallpaper -> TelegramWallpaper in return cachedWallpaper?.wallpaper ?? theme.chat.defaultWallpaper } @@ -1242,7 +1242,7 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The let resolvedWallpaper: Signal if case let .file(file) = presentationTheme.chat.defaultWallpaper, file.id == 0 { - resolvedWallpaper = cachedWallpaper(account: context.account, slug: file.slug, settings: file.settings) + resolvedWallpaper = cachedWallpaper(engine: context.engine, network: context.account.network, slug: file.slug, settings: file.settings) |> map { wallpaper -> TelegramWallpaper? in return wallpaper?.wallpaper } @@ -1319,7 +1319,7 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The selectAccentColorImpl = { accentColor in var wallpaperSignal: Signal = .single(nil) if let colorWallpaper = accentColor?.wallpaper, case let .file(file) = colorWallpaper { - wallpaperSignal = cachedWallpaper(account: context.account, slug: file.slug, settings: colorWallpaper.settings) + wallpaperSignal = cachedWallpaper(engine: context.engine, network: context.account.network, slug: file.slug, settings: colorWallpaper.settings) |> mapToSignal { cachedWallpaper in if let wallpaper = cachedWallpaper?.wallpaper, case let .file(file) = wallpaper { let _ = context.engine.resources.fetch(reference: .wallpaper(wallpaper: .slug(file.slug), resource: file.file.resource), userLocation: .other, userContentType: .other).start() diff --git a/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/ChannelAppearanceScreen.swift b/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/ChannelAppearanceScreen.swift index 8959e21dda..c00225f8a7 100644 --- a/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/ChannelAppearanceScreen.swift +++ b/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/ChannelAppearanceScreen.swift @@ -929,7 +929,7 @@ final class ChannelAppearanceScreenComponent: Component { if let temporaryPeerWallpaper = self.temporaryPeerWallpaper { resolvedWallpaper = .single(temporaryPeerWallpaper) } else if case let .file(file) = presentationTheme.chat.defaultWallpaper, file.id == 0 { - resolvedWallpaper = cachedWallpaper(account: component.context.account, slug: file.slug, settings: file.settings) + resolvedWallpaper = cachedWallpaper(engine: component.context.engine, network: component.context.account.network, slug: file.slug, settings: file.settings) |> map { wallpaper -> TelegramWallpaper? in return wallpaper?.wallpaper } diff --git a/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/UserApperanceScreen.swift b/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/UserApperanceScreen.swift index ce44581703..a0dac353e4 100644 --- a/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/UserApperanceScreen.swift +++ b/submodules/TelegramUI/Components/Settings/PeerNameColorScreen/Sources/UserApperanceScreen.swift @@ -1112,7 +1112,7 @@ final class UserAppearanceScreenComponent: Component { if let presentationTheme { let resolvedWallpaper: Signal if case let .file(file) = presentationTheme.chat.defaultWallpaper, file.id == 0 { - resolvedWallpaper = cachedWallpaper(account: component.context.account, slug: file.slug, settings: file.settings) + resolvedWallpaper = cachedWallpaper(engine: component.context.engine, network: component.context.account.network, slug: file.slug, settings: file.settings) |> map { wallpaper -> TelegramWallpaper? in return wallpaper?.wallpaper } diff --git a/submodules/TelegramUI/Sources/ThemeUpdateManager.swift b/submodules/TelegramUI/Sources/ThemeUpdateManager.swift index 36ac6f790c..f6f3f81488 100644 --- a/submodules/TelegramUI/Sources/ThemeUpdateManager.swift +++ b/submodules/TelegramUI/Sources/ThemeUpdateManager.swift @@ -91,7 +91,7 @@ final class ThemeUpdateManagerImpl: ThemeUpdateManager { let resolvedWallpaper: Signal if case let .file(file) = presentationTheme.chat.defaultWallpaper, file.id == 0 { - resolvedWallpaper = cachedWallpaper(account: account, slug: file.slug, settings: file.settings) + resolvedWallpaper = cachedWallpaper(engine: TelegramEngine(account: account), network: account.network, slug: file.slug, settings: file.settings) |> map { wallpaper in return wallpaper?.wallpaper } diff --git a/submodules/WallpaperResources/Sources/WallpaperCache.swift b/submodules/WallpaperResources/Sources/WallpaperCache.swift index 12d999635e..dffd5045ea 100644 --- a/submodules/WallpaperResources/Sources/WallpaperCache.swift +++ b/submodules/WallpaperResources/Sources/WallpaperCache.swift @@ -1,7 +1,6 @@ import Foundation import UIKit import SwiftSignalKit -import Postbox import TelegramApi import TelegramCore import TelegramUIPreferences @@ -27,10 +26,8 @@ public final class CachedWallpaper: Codable { } } -public func cachedWallpaper(account: Account, slug: String, settings: WallpaperSettings?, update: Bool = false) -> Signal { - let engine = TelegramEngine(account: account) - - let slugKey = ValueBoxKey(length: 8) +public func cachedWallpaper(engine: TelegramEngine, network: Network, slug: String, settings: WallpaperSettings?, update: Bool = false) -> Signal { + let slugKey = EngineDataBuffer(length: 8) slugKey.setInt64(0, value: Int64(bitPattern: slug.persistentHashValue)) return engine.data.get(TelegramEngine.EngineData.Item.ItemCache.Item(collectionId: ApplicationSpecificItemCacheCollectionId.cachedWallpapers, id: slugKey)) |> mapToSignal { entry -> Signal in @@ -41,13 +38,13 @@ public func cachedWallpaper(account: Account, slug: String, settings: WallpaperS return .single(entry) } } else { - return getWallpaper(network: account.network, slug: slug) + return getWallpaper(network: network, slug: slug) |> map(Optional.init) |> `catch` { _ -> Signal in return .single(nil) } |> mapToSignal { wallpaper -> Signal in - let slugKey = ValueBoxKey(length: 8) + let slugKey = EngineDataBuffer(length: 8) slugKey.setInt64(0, value: Int64(bitPattern: slug.persistentHashValue)) if var wallpaper = wallpaper { @@ -81,7 +78,7 @@ public func updateCachedWallpaper(engine: TelegramEngine, wallpaper: TelegramWal guard case let .file(file) = wallpaper, file.id != 0 else { return } - let key = ValueBoxKey(length: 8) + let key = EngineDataBuffer(length: 8) key.setInt64(0, value: Int64(bitPattern: file.slug.persistentHashValue)) let _ = engine.itemCache.put(collectionId: ApplicationSpecificItemCacheCollectionId.cachedWallpapers, id: key, item: CachedWallpaper(wallpaper: wallpaper)).start() diff --git a/submodules/WallpaperResources/Sources/WallpaperResources.swift b/submodules/WallpaperResources/Sources/WallpaperResources.swift index 438b4904d5..07dd9e52d0 100644 --- a/submodules/WallpaperResources/Sources/WallpaperResources.swift +++ b/submodules/WallpaperResources/Sources/WallpaperResources.swift @@ -1247,7 +1247,7 @@ public func themeImage(account: Account, accountManager: AccountManager mapToSignal { (theme, thumbnailData) -> Signal<(PresentationTheme?, WallpaperImage?, Data?), NoError> in if let theme = theme { if case let .file(file) = theme.chat.defaultWallpaper { - return cachedWallpaper(account: account, slug: file.slug, settings: file.settings) + return cachedWallpaper(engine: TelegramEngine(account: account), network: account.network, slug: file.slug, settings: file.settings) |> mapToSignal { wallpaper -> Signal<(PresentationTheme?, WallpaperImage?, Data?), NoError> in if let wallpaper = wallpaper, case let .file(file) = wallpaper.wallpaper { var convertedRepresentations: [ImageRepresentationWithReference] = [] @@ -1496,7 +1496,7 @@ public func themeIconImage(account: Account, accountManager: AccountManager mapToSignal { wallpaper in if let wallpaper = wallpaper, case let .file(file) = wallpaper.wallpaper { var effectiveBackgroundColor = backgroundColor