mirror of
https://github.com/TelegramMessenger/Telegram-iOS.git
synced 2026-07-06 03:33:41 +02:00
Postbox refactor wave 277: cachedWallpaper(account:) → cachedWallpaper(engine:network:)
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) <noreply@anthropic.com>
This commit is contained in:
parent
ab7fc69e16
commit
ea0f6a685c
10 changed files with 26 additions and 29 deletions
|
|
@ -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<TelegramWallpaper, NoError>
|
||||
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<TelegramWallpaper, NoError>
|
||||
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<TelegramWallpaper, NoError>
|
||||
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<TelegramWallpaper?, NoError>
|
||||
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<TelegramWallpaper?, NoError> = .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()
|
||||
|
|
|
|||
|
|
@ -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<TelegramWallpaper?, NoError> in
|
||||
if let wallpaper = wallpaper, case let .file(file) = wallpaper.wallpaper {
|
||||
var convertedRepresentations: [ImageRepresentationWithReference] = []
|
||||
|
|
|
|||
|
|
@ -539,7 +539,7 @@ public func themeAutoNightSettingsController(context: AccountContext) -> ViewCon
|
|||
|
||||
let resolvedWallpaper: Signal<TelegramWallpaper?, NoError>
|
||||
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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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<TelegramWallpaper, NoError>
|
||||
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<TelegramWallpaper, NoError>
|
||||
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<TelegramWallpaper, NoError>
|
||||
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<TelegramWallpaper?, NoError>
|
||||
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<TelegramWallpaper?, NoError> = .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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1112,7 +1112,7 @@ final class UserAppearanceScreenComponent: Component {
|
|||
if let presentationTheme {
|
||||
let resolvedWallpaper: Signal<TelegramWallpaper?, NoError>
|
||||
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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ final class ThemeUpdateManagerImpl: ThemeUpdateManager {
|
|||
|
||||
let resolvedWallpaper: Signal<TelegramWallpaper?, NoError>
|
||||
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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<CachedWallpaper?, NoError> {
|
||||
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<CachedWallpaper?, NoError> {
|
||||
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<CachedWallpaper?, NoError> 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<TelegramWallpaper?, NoError> in
|
||||
return .single(nil)
|
||||
}
|
||||
|> mapToSignal { wallpaper -> Signal<CachedWallpaper?, NoError> 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()
|
||||
|
|
|
|||
|
|
@ -1247,7 +1247,7 @@ public func themeImage(account: Account, accountManager: AccountManager<Telegram
|
|||
|> 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<Tele
|
|||
backgroundColor = (theme.chatList.backgroundColor, nil, [])
|
||||
}
|
||||
|
||||
wallpaperSignal = cachedWallpaper(account: account, slug: file.slug, settings: file.settings)
|
||||
wallpaperSignal = cachedWallpaper(engine: TelegramEngine(account: account), network: account.network, slug: file.slug, settings: file.settings)
|
||||
|> mapToSignal { wallpaper in
|
||||
if let wallpaper = wallpaper, case let .file(file) = wallpaper.wallpaper {
|
||||
var effectiveBackgroundColor = backgroundColor
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue