From 4879d89a92c53bb50806cb2a5dbd84c294d45000 Mon Sep 17 00:00:00 2001 From: isaac <> Date: Tue, 21 Apr 2026 03:51:11 +0400 Subject: [PATCH] Postbox -> TelegramEngine wave 22: storeResourceData facade + consumer sweep Same shape as wave 21. Adds TelegramEngine.Resources.storeResourceData(id:, data:, synchronous:) and sweeps 46 context.account.postbox.mediaBox.storeResourceData sites across 17 files. The range-store overload and accountManager.mediaBox sites are explicitly out of scope. Co-Authored-By: Claude Opus 4.7 (1M context) --- CLAUDE.md | 41 +++++++++++++++++++ .../BrowserUI/Sources/BrowserWebContent.swift | 2 +- .../Sources/DebugController.swift | 16 ++++---- .../ImportStickerPackControllerNode.swift | 4 +- .../Sources/Themes/EditThemeController.swift | 2 +- .../Themes/ThemePreviewController.swift | 2 +- .../Resources/TelegramEngineResources.swift | 4 ++ .../LegacyInstantVideoController.swift | 4 +- .../Sources/CreateLinkOptions.swift | 2 +- .../Sources/MediaEditorScreen.swift | 6 +-- .../Sources/PeerInfoScreenAvatarSetup.swift | 4 +- .../Sources/WallpaperUtils.swift | 12 +++--- ...StoryItemSetContainerViewSendMessage.swift | 6 +-- .../Sources/VideoMessageCameraScreen.swift | 4 +- .../Chat/ChatControllerMediaRecording.swift | 4 +- .../ChatControllerOpenDocumentScanner.swift | 6 +-- .../Sources/Chat/ChatControllerPaste.swift | 2 +- .../Sources/CreateChannelController.swift | 8 ++-- .../Sources/CreateGroupController.swift | 8 ++-- 19 files changed, 91 insertions(+), 46 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index d50de878be..4c6e381efa 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -564,6 +564,47 @@ Net: 14 files changed. TelegramEngineResources.swift: +4 / -0. Consumer files: + Plan / record: `memory/project_postbox_wave21_plan.md` (deleted post-commit per the plan's own housekeeping instructions). +### Wave 22 outcome (2026-04-21) + +Follows wave 21's pattern: facade addition + consumer sweep in a single atomic commit. Adds `TelegramEngine.Resources.storeResourceData(id: EngineMediaResource.Id, data: Data, synchronous: Bool = false)` facade; sweeps 46 consumer sites across 17 files. + +**Facade added at `TelegramCore/Sources/TelegramEngine/Resources/TelegramEngineResources.swift:464`.** Body: `self.account.postbox.mediaBox.storeResourceData(MediaResourceId(id.stringRepresentation), data: data, synchronous: synchronous)`. Wraps Postbox's `MediaBox.storeResourceData(_ id: MediaResourceId, data: Data, synchronous: Bool)` full-file overload. The range-store overload (`MediaBox.storeResourceData(_:range:data:)`) is used at a single site inside `HLSVideoJSNativeContentNode.swift:302` via a local `postbox: Postbox` field (Shape D), which is out of scope for this wave; the range overload gets no facade wrapper this round. + +**46 Shape-A consumer sites migrated:** +- `ImportStickerPackUI/Sources/ImportStickerPackControllerNode.swift` (2) +- `DebugSettingsUI/Sources/DebugController.swift` (8 — 6 identical `gzippedData` batched via `replace_all=true`; `logData`, `allStatsData` handled individually) +- `BrowserUI/Sources/BrowserWebContent.swift` (1) +- `TelegramUI/Sources/CreateChannelController.swift` (4) +- `TelegramUI/Sources/CreateGroupController.swift` (4) +- `TelegramUI/Sources/Chat/ChatControllerPaste.swift` (1) +- `TelegramUI/Sources/Chat/ChatControllerOpenDocumentScanner.swift` (3) +- `TelegramUI/Sources/Chat/ChatControllerMediaRecording.swift` (2) +- `TelegramUI/Components/LegacyInstantVideoController/Sources/LegacyInstantVideoController.swift` (2) +- `TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreenAvatarSetup.swift` (2) +- `TelegramUI/Components/Settings/WallpaperGridScreen/Sources/WallpaperUtils.swift` (6 — 3 `thumbnailResource`, 3 `resource`; both handled via `replace_all=true`) +- `SettingsUI/Sources/Themes/ThemePreviewController.swift` (1) +- `SettingsUI/Sources/Themes/EditThemeController.swift` (1) +- `TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerViewSendMessage.swift` (3) +- `TelegramUI/Components/VideoMessageCameraScreen/Sources/VideoMessageCameraScreen.swift` (2) +- `TelegramUI/Components/MediaEditorScreen/Sources/CreateLinkOptions.swift` (1) +- `TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift` (3) + +**Out of scope — not migrated this wave:** +- `accountManager.mediaBox.storeResourceData(...)` sites (Account-manager-scoped, not account-scoped) — 13+ sites across WallpaperGalleryItem, WallpaperGalleryController, ThemeAccentColorController, WallpaperUtils, WebBrowserSettingsController, ThemeUpdateManager, OpenResolvedUrl, and others. These are a different migration path entirely (not a `TelegramEngine.Resources.*` target) and stay raw. +- `account.postbox.mediaBox.storeResourceData(...)` (raw `Account`, no `AccountContext`) — ~9 sites in LegacyMediaPickerUI, TelegramCallsUI, InAppPurchaseManager, AuthorizationUI, PeerInfoScreenAvatarSetup closures, WallpaperResources. Shape C from wave-21 taxonomy. Needs per-module rework. +- `self.postbox.mediaBox.storeResourceData(...)` / `postbox.mediaBox.storeResourceData(...)` inside TelegramCore internals (`TransformOutgoingMessageMedia.swift`, `AccountStateManager.swift`, `AvailableReactions.swift`, `SaveSecureIdValue.swift`, `PeerPhotoUpdater.swift`, `NotificationSoundList.swift`, `Stories.swift`, `Authorization.swift`, `WebpagePreview.swift`). These are Postbox-internal layer by design — keep as-is. +- `HLSVideoJSNativeContentNode.swift:302` — uses the range-store overload via local `postbox: Postbox` field. Out of scope. + +**No modules became Postbox-free.** Matches waves 19/20/21 expectation — each consumer has other Postbox usage. + +**Build validation.** `bazel build Telegram/Telegram --keep_going` — clean first-pass build (571 processes, 1554 action cache hits + 30 local + 532 worker, 229s, 0 errors, `Telegram.ipa` up-to-date). + +**Pattern validation.** Wave-shape G (facade + consumer sweep in one commit) scales well up to 46 sites in 17 files when the pattern is mechanical. Heavy `replace_all=true` usage where call-text is identical across sites (DebugController's 6 `gzippedData` sites, WallpaperUtils' 6 sites split into 2 batches by first-arg variable, ChatControllerOpenDocumentScanner's identical `(resource.id, data: data, synchronous: true)` pattern) keeps diff noise to the minimum. 46 sites, mostly done via replace_all + a few individual edits. + +Net: 17 consumer files + 1 TelegramCore file + CLAUDE.md. TelegramEngineResources.swift: +4 / -0. Consumer files: +46 / -46 (mechanical rewrite). + +Plan / record: (no plan doc this wave — mechanical sweep following wave-21 recipe). + ### Modules currently free of `import Postbox` (running tally) Consumer modules that no longer import Postbox, across all waves and standalone commits: diff --git a/submodules/BrowserUI/Sources/BrowserWebContent.swift b/submodules/BrowserUI/Sources/BrowserWebContent.swift index 09d96a19d3..835a5a9144 100644 --- a/submodules/BrowserUI/Sources/BrowserWebContent.swift +++ b/submodules/BrowserUI/Sources/BrowserWebContent.swift @@ -1673,7 +1673,7 @@ final class BrowserWebContent: UIView, BrowserContent, WKNavigationDelegate, WKU if let favicon, let imageData = favicon.pngData() { let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - self.context.account.postbox.mediaBox.storeResourceData(resource.id, data: imageData) + self.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: imageData) image = TelegramMediaImage( imageId: MediaId(namespace: Namespaces.Media.LocalImage, id: Int64.random(in: Int64.min ... Int64.max)), representations: [ diff --git a/submodules/DebugSettingsUI/Sources/DebugController.swift b/submodules/DebugSettingsUI/Sources/DebugController.swift index d1bc366fcd..60d9804b22 100644 --- a/submodules/DebugSettingsUI/Sources/DebugController.swift +++ b/submodules/DebugSettingsUI/Sources/DebugController.swift @@ -358,7 +358,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { let id = Int64.random(in: Int64.min ... Int64.max) let fileResource = LocalFileMediaResource(fileId: id, size: Int64(gzippedData.count), isSecretRelated: false) - context.account.postbox.mediaBox.storeResourceData(fileResource.id, data: gzippedData) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(fileResource.id), data: gzippedData) let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: id), partialReference: nil, resource: fileResource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "application/text", size: Int64(gzippedData.count), attributes: [.FileName(fileName: "Log-iOS-Full.txt.zip")], alternativeRepresentations: []) let message: EnqueueMessage = .message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: file), threadId: nil, replyToMessageId: nil, replyToStoryId: nil, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: []) @@ -438,7 +438,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { let id = Int64.random(in: Int64.min ... Int64.max) let fileResource = LocalFileMediaResource(fileId: id, size: Int64(logData.count), isSecretRelated: false) - context.account.postbox.mediaBox.storeResourceData(fileResource.id, data: logData) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(fileResource.id), data: logData) let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: id), partialReference: nil, resource: fileResource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "application/text", size: Int64(logData.count), attributes: [.FileName(fileName: "Log-iOS-Short.txt")], alternativeRepresentations: []) let message: EnqueueMessage = .message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: file), threadId: nil, replyToMessageId: nil, replyToStoryId: nil, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: []) @@ -524,7 +524,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { let id = Int64.random(in: Int64.min ... Int64.max) let fileResource = LocalFileMediaResource(fileId: id, size: Int64(gzippedData.count), isSecretRelated: false) - context.account.postbox.mediaBox.storeResourceData(fileResource.id, data: gzippedData) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(fileResource.id), data: gzippedData) let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: id), partialReference: nil, resource: fileResource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "application/text", size: Int64(gzippedData.count), attributes: [.FileName(fileName: "Log-iOS-Full.txt.zip")], alternativeRepresentations: []) let message: EnqueueMessage = .message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: file), threadId: nil, replyToMessageId: nil, replyToStoryId: nil, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: []) @@ -608,7 +608,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { let id = Int64.random(in: Int64.min ... Int64.max) let fileResource = LocalFileMediaResource(fileId: id, size: Int64(gzippedData.count), isSecretRelated: false) - context.account.postbox.mediaBox.storeResourceData(fileResource.id, data: gzippedData) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(fileResource.id), data: gzippedData) let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: id), partialReference: nil, resource: fileResource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "application/text", size: Int64(gzippedData.count), attributes: [.FileName(fileName: "Log-iOS-Full.txt.zip")], alternativeRepresentations: []) let message: EnqueueMessage = .message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: file), threadId: nil, replyToMessageId: nil, replyToStoryId: nil, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: []) @@ -693,7 +693,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { let id = Int64.random(in: Int64.min ... Int64.max) let fileResource = LocalFileMediaResource(fileId: id, size: Int64(gzippedData.count), isSecretRelated: false) - context.account.postbox.mediaBox.storeResourceData(fileResource.id, data: gzippedData) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(fileResource.id), data: gzippedData) let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: id), partialReference: nil, resource: fileResource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "application/text", size: Int64(gzippedData.count), attributes: [.FileName(fileName: "Log-iOS-Full.txt.zip")], alternativeRepresentations: []) let message: EnqueueMessage = .message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: file), threadId: nil, replyToMessageId: nil, replyToStoryId: nil, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: []) @@ -855,7 +855,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { let id = Int64.random(in: Int64.min ... Int64.max) let fileResource = LocalFileMediaResource(fileId: id, size: Int64(gzippedData.count), isSecretRelated: false) - context.account.postbox.mediaBox.storeResourceData(fileResource.id, data: gzippedData) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(fileResource.id), data: gzippedData) let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: id), partialReference: nil, resource: fileResource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "application/zip", size: Int64(gzippedData.count), attributes: [.FileName(fileName: "Log-iOS-All.txt.zip")], alternativeRepresentations: []) let message: EnqueueMessage = .message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: file), threadId: nil, replyToMessageId: nil, replyToStoryId: nil, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: []) @@ -910,7 +910,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { let id = Int64.random(in: Int64.min ... Int64.max) let fileResource = LocalFileMediaResource(fileId: id, size: Int64(allStatsData.count), isSecretRelated: false) - context.account.postbox.mediaBox.storeResourceData(fileResource.id, data: allStatsData) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(fileResource.id), data: allStatsData) let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: id), partialReference: nil, resource: fileResource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "application/zip", size: Int64(allStatsData.count), attributes: [.FileName(fileName: "StorageReport.txt")], alternativeRepresentations: []) let message: EnqueueMessage = .message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: file), threadId: nil, replyToMessageId: nil, replyToStoryId: nil, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: []) @@ -1779,7 +1779,7 @@ public func triggerDebugSendLogsUI(context: AccountContext, additionalInfo: Stri let id = Int64.random(in: Int64.min ... Int64.max) let fileResource = LocalFileMediaResource(fileId: id, size: Int64(gzippedData.count), isSecretRelated: false) - context.account.postbox.mediaBox.storeResourceData(fileResource.id, data: gzippedData) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(fileResource.id), data: gzippedData) let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: id), partialReference: nil, resource: fileResource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "application/text", size: Int64(gzippedData.count), attributes: [.FileName(fileName: "Log-iOS-Full.txt.zip")], alternativeRepresentations: []) let message: EnqueueMessage = .message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: file), threadId: nil, replyToMessageId: nil, replyToStoryId: nil, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: []) diff --git a/submodules/ImportStickerPackUI/Sources/ImportStickerPackControllerNode.swift b/submodules/ImportStickerPackUI/Sources/ImportStickerPackControllerNode.swift index fe689873f6..5359770e18 100644 --- a/submodules/ImportStickerPackUI/Sources/ImportStickerPackControllerNode.swift +++ b/submodules/ImportStickerPackUI/Sources/ImportStickerPackControllerNode.swift @@ -637,7 +637,7 @@ final class ImportStickerPackControllerNode: ViewControllerTracingNode, ASScroll dimensions = PixelDimensions(image.size) } let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - self.context.account.postbox.mediaBox.storeResourceData(resource.id, data: thumbnail.data) + self.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: thumbnail.data) thumbnailSticker = ImportSticker(resource: .standalone(resource: resource), emojis: [], dimensions: dimensions, duration: nil, mimeType: thumbnail.mimeType, keywords: thumbnail.keywords) } @@ -796,7 +796,7 @@ final class ImportStickerPackControllerNode: ViewControllerTracingNode, ASScroll item.resource = resource } else { let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - self.context.account.postbox.mediaBox.storeResourceData(resource.id, data: item.data) + self.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: item.data) item.resource = EngineMediaResource(resource) self.stickerResources[item.uuid] = EngineMediaResource(resource) } diff --git a/submodules/SettingsUI/Sources/Themes/EditThemeController.swift b/submodules/SettingsUI/Sources/Themes/EditThemeController.swift index b43059b02a..4d0df6bd2a 100644 --- a/submodules/SettingsUI/Sources/Themes/EditThemeController.swift +++ b/submodules/SettingsUI/Sources/Themes/EditThemeController.swift @@ -575,7 +575,7 @@ public func editThemeController(context: AccountContext, mode: EditThemeControll let themeThumbnailData: Data? if let theme = theme, let themeString = encodePresentationTheme(theme), let data = themeString.data(using: .utf8) { let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - context.account.postbox.mediaBox.storeResourceData(resource.id, data: data, synchronous: true) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data, synchronous: true) context.sharedContext.accountManager.mediaBox.storeResourceData(resource.id, data: data, synchronous: true) themeResource = resource themeData = data diff --git a/submodules/SettingsUI/Sources/Themes/ThemePreviewController.swift b/submodules/SettingsUI/Sources/Themes/ThemePreviewController.swift index dc564fdf2f..3297c12c37 100644 --- a/submodules/SettingsUI/Sources/Themes/ThemePreviewController.swift +++ b/submodules/SettingsUI/Sources/Themes/ThemePreviewController.swift @@ -267,7 +267,7 @@ public final class ThemePreviewController: ViewController { case .media: if let strings = encodePresentationTheme(previewTheme), let data = strings.data(using: .utf8) { let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - context.account.postbox.mediaBox.storeResourceData(resource.id, data: data) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data) context.sharedContext.accountManager.mediaBox.storeResourceData(resource.id, data: data) theme = .single(.local(PresentationLocalTheme(title: previewTheme.name.string, resource: resource, resolvedWallpaper: nil))) } else { diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Resources/TelegramEngineResources.swift b/submodules/TelegramCore/Sources/TelegramEngine/Resources/TelegramEngineResources.swift index 453fb1b6a8..c53d0a9670 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Resources/TelegramEngineResources.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Resources/TelegramEngineResources.swift @@ -460,5 +460,9 @@ public extension TelegramEngine { public func completedResourcePath(id: EngineMediaResource.Id, pathExtension: String? = nil) -> String? { return self.account.postbox.mediaBox.completedResourcePath(id: MediaResourceId(id.stringRepresentation), pathExtension: pathExtension) } + + public func storeResourceData(id: EngineMediaResource.Id, data: Data, synchronous: Bool = false) { + self.account.postbox.mediaBox.storeResourceData(MediaResourceId(id.stringRepresentation), data: data, synchronous: synchronous) + } } } diff --git a/submodules/TelegramUI/Components/LegacyInstantVideoController/Sources/LegacyInstantVideoController.swift b/submodules/TelegramUI/Components/LegacyInstantVideoController/Sources/LegacyInstantVideoController.swift index 798088a4d5..c856324ebd 100644 --- a/submodules/TelegramUI/Components/LegacyInstantVideoController/Sources/LegacyInstantVideoController.swift +++ b/submodules/TelegramUI/Components/LegacyInstantVideoController/Sources/LegacyInstantVideoController.swift @@ -189,7 +189,7 @@ public func legacyInstantVideoController(theme: PresentationTheme, forStory: Boo let thumbnailSize = finalDimensions.aspectFitted(CGSize(width: 320.0, height: 320.0)) let thumbnailImage = TGScaleImageToPixelSize(previewImage, thumbnailSize)! if let thumbnailData = thumbnailImage.jpegData(compressionQuality: 0.4) { - context.account.postbox.mediaBox.storeResourceData(resource.id, data: thumbnailData) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: thumbnailData) previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(thumbnailSize), resource: resource, progressiveSizes: [], immediateThumbnailData: nil, hasVideo: false, isPersonal: false)) } } @@ -216,7 +216,7 @@ public func legacyInstantVideoController(theme: PresentationTheme, forStory: Boo let resource: TelegramMediaResource if let liveUploadData = liveUploadData as? LegacyLiveUploadInterfaceResult, resourceAdjustments == nil, let data = try? Data(contentsOf: videoUrl) { resource = LocalFileMediaResource(fileId: liveUploadData.id) - context.account.postbox.mediaBox.storeResourceData(resource.id, data: data, synchronous: true) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data, synchronous: true) } else { resource = LocalFileVideoMediaResource(randomId: Int64.random(in: Int64.min ... Int64.max), path: videoUrl.path, adjustments: resourceAdjustments) } diff --git a/submodules/TelegramUI/Components/MediaEditorScreen/Sources/CreateLinkOptions.swift b/submodules/TelegramUI/Components/MediaEditorScreen/Sources/CreateLinkOptions.swift index 6e33cd4f93..60ace4c4be 100644 --- a/submodules/TelegramUI/Components/MediaEditorScreen/Sources/CreateLinkOptions.swift +++ b/submodules/TelegramUI/Components/MediaEditorScreen/Sources/CreateLinkOptions.swift @@ -90,7 +90,7 @@ private func linkOptions(context: AccountContext, selfController: CreateLinkScre if let image = snapshotImage { let wallpaperResource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) if let wallpaperData = image.jpegData(compressionQuality: 0.87) { - context.account.postbox.mediaBox.storeResourceData(wallpaperResource.id, data: wallpaperData, synchronous: true) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(wallpaperResource.id), data: wallpaperData, synchronous: true) } let wallpaperRepresentation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(image.size), resource: wallpaperResource, progressiveSizes: [], immediateThumbnailData: nil) wallpaper = .image([wallpaperRepresentation], WallpaperSettings()) diff --git a/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift b/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift index 4c8fe8af11..5602a7bcba 100644 --- a/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift +++ b/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift @@ -7732,10 +7732,10 @@ public final class MediaEditorScreenImpl: ViewController, MediaEditorScreen, UID let imagesReady = ValuePromise(false, ignoreRepeated: true) Queue.concurrentDefaultQueue().async { if !isVideo, let data = try? WebP.convert(toWebP: image, quality: 90.0) { - self.context.account.postbox.mediaBox.storeResourceData(isVideo ? thumbnailResource.id : resource.id, data: data, synchronous: true) + self.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(isVideo ? thumbnailResource.id : resource.id), data: data, synchronous: true) } if let thumbnailImage = generateScaledImage(image: image, size: CGSize(width: 320.0, height: 320.0), opaque: false, scale: 1.0), let data = try? WebP.convert(toWebP: thumbnailImage, quality: 90.0) { - self.context.account.postbox.mediaBox.storeResourceData(thumbnailResource.id, data: data, synchronous: true) + self.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(thumbnailResource.id), data: data, synchronous: true) } imagesReady.set(true) } @@ -8444,7 +8444,7 @@ public final class MediaEditorScreenImpl: ViewController, MediaEditorScreen, UID self.videoExport = nil if let toStickerResource { if let data = try? Data(contentsOf: URL(fileURLWithPath: outputPath)) { - self.context.account.postbox.mediaBox.storeResourceData(toStickerResource.id, data: data, synchronous: true) + self.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(toStickerResource.id), data: data, synchronous: true) } } else { saveToPhotos(outputPath, true) diff --git a/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreenAvatarSetup.swift b/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreenAvatarSetup.swift index 2168b28e01..68c1045bf8 100644 --- a/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreenAvatarSetup.swift +++ b/submodules/TelegramUI/Components/PeerInfo/PeerInfoScreen/Sources/PeerInfoScreenAvatarSetup.swift @@ -25,7 +25,7 @@ private func sharedSetupProfilePhotoUpload(context: AccountContext, image: UIIma } let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - context.account.postbox.mediaBox.storeResourceData(resource.id, data: data) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data) let representation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 640, height: 640), resource: resource, progressiveSizes: [], immediateThumbnailData: nil, hasVideo: false, isPersonal: mode == .custom) let _ = representation @@ -768,7 +768,7 @@ extension PeerInfoScreenImpl { self.controllerNode.scrollNode.view.setContentOffset(CGPoint(), animated: false) let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - self.context.account.postbox.mediaBox.storeResourceData(resource.id, data: data) + self.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data) let representation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 640, height: 640), resource: resource, progressiveSizes: [], immediateThumbnailData: nil, hasVideo: false, isPersonal: mode == .custom) if [.suggest, .fallback].contains(mode) { diff --git a/submodules/TelegramUI/Components/Settings/WallpaperGridScreen/Sources/WallpaperUtils.swift b/submodules/TelegramUI/Components/Settings/WallpaperGridScreen/Sources/WallpaperUtils.swift index 9d373b29c7..c93b26a06d 100644 --- a/submodules/TelegramUI/Components/Settings/WallpaperGridScreen/Sources/WallpaperUtils.swift +++ b/submodules/TelegramUI/Components/Settings/WallpaperGridScreen/Sources/WallpaperUtils.swift @@ -101,11 +101,11 @@ public func uploadCustomWallpaper(context: AccountContext, wallpaper: WallpaperG if let data = croppedImage.jpegData(compressionQuality: 0.8), let thumbnailImage = thumbnailImage, let thumbnailData = thumbnailImage.jpegData(compressionQuality: 0.4) { let thumbnailResource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) context.sharedContext.accountManager.mediaBox.storeResourceData(thumbnailResource.id, data: thumbnailData, synchronous: true) - context.account.postbox.mediaBox.storeResourceData(thumbnailResource.id, data: thumbnailData, synchronous: true) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(thumbnailResource.id), data: thumbnailData, synchronous: true) let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) context.sharedContext.accountManager.mediaBox.storeResourceData(resource.id, data: data, synchronous: true) - context.account.postbox.mediaBox.storeResourceData(resource.id, data: data, synchronous: true) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data, synchronous: true) let autoNightModeTriggered = context.sharedContext.currentPresentationData.with {$0 }.autoNightModeTriggered let accountManager = context.sharedContext.accountManager @@ -235,11 +235,11 @@ public func getTemporaryCustomPeerWallpaper(context: AccountContext, wallpaper: if let data = croppedImage.jpegData(compressionQuality: 0.8), let thumbnailImage = thumbnailImage, let thumbnailData = thumbnailImage.jpegData(compressionQuality: 0.4) { let thumbnailResource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) context.sharedContext.accountManager.mediaBox.storeResourceData(thumbnailResource.id, data: thumbnailData, synchronous: true) - context.account.postbox.mediaBox.storeResourceData(thumbnailResource.id, data: thumbnailData, synchronous: true) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(thumbnailResource.id), data: thumbnailData, synchronous: true) let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) context.sharedContext.accountManager.mediaBox.storeResourceData(resource.id, data: data, synchronous: true) - context.account.postbox.mediaBox.storeResourceData(resource.id, data: data, synchronous: true) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data, synchronous: true) let _ = context.sharedContext.accountManager.mediaBox.cachedResourceRepresentation(resource, representation: CachedBlurredWallpaperRepresentation(), complete: true, fetch: true).start() @@ -348,11 +348,11 @@ public func uploadCustomPeerWallpaper(context: AccountContext, wallpaper: Wallpa if let data = croppedImage.jpegData(compressionQuality: 0.8), let thumbnailImage = thumbnailImage, let thumbnailData = thumbnailImage.jpegData(compressionQuality: 0.4) { let thumbnailResource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) context.sharedContext.accountManager.mediaBox.storeResourceData(thumbnailResource.id, data: thumbnailData, synchronous: true) - context.account.postbox.mediaBox.storeResourceData(thumbnailResource.id, data: thumbnailData, synchronous: true) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(thumbnailResource.id), data: thumbnailData, synchronous: true) let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) context.sharedContext.accountManager.mediaBox.storeResourceData(resource.id, data: data, synchronous: true) - context.account.postbox.mediaBox.storeResourceData(resource.id, data: data, synchronous: true) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data, synchronous: true) let _ = context.sharedContext.accountManager.mediaBox.cachedResourceRepresentation(resource, representation: CachedBlurredWallpaperRepresentation(), complete: true, fetch: true).start() diff --git a/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerViewSendMessage.swift b/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerViewSendMessage.swift index 3c26bf9b38..e374ef17e8 100644 --- a/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerViewSendMessage.swift +++ b/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerViewSendMessage.swift @@ -1059,7 +1059,7 @@ final class StoryItemSetContainerSendMessage: @unchecked(Sendable) { let _ = (convertToWebP(image: image, targetSize: size, targetBoundingSize: size, quality: 0.9) |> deliverOnMainQueue).start(next: { [weak self, weak view] data in if let self, let view, !data.isEmpty { let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - component.context.account.postbox.mediaBox.storeResourceData(resource.id, data: data) + component.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data) var fileAttributes: [TelegramMediaFileAttribute] = [] fileAttributes.append(.FileName(fileName: "sticker.webp")) @@ -1173,7 +1173,7 @@ final class StoryItemSetContainerSendMessage: @unchecked(Sendable) { let randomId = Int64.random(in: Int64.min ... Int64.max) let resource = LocalFileMediaResource(fileId: randomId) - component.context.account.postbox.mediaBox.storeResourceData(resource.id, data: data.compressedData) + component.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data.compressedData) let waveformBuffer: Data? = data.waveform @@ -1228,7 +1228,7 @@ final class StoryItemSetContainerSendMessage: @unchecked(Sendable) { } else if let waveform = data.waveform { let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max), size: Int64(data.compressedData.count)) - component.context.account.postbox.mediaBox.storeResourceData(resource.id, data: data.compressedData) + component.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data.compressedData) self.recordedAudioPreview = .audio(ChatRecordedMediaPreview.Audio(resource: resource, fileSize: Int32(data.compressedData.count), duration: Int32(data.duration), waveform: AudioWaveform(bitstream: waveform, bitsPerSample: 5))) view.state?.updated(transition: ComponentTransition(animation: .curve(duration: 0.3, curve: .spring))) } diff --git a/submodules/TelegramUI/Components/VideoMessageCameraScreen/Sources/VideoMessageCameraScreen.swift b/submodules/TelegramUI/Components/VideoMessageCameraScreen/Sources/VideoMessageCameraScreen.swift index 99a8cd5fe5..28039854e9 100644 --- a/submodules/TelegramUI/Components/VideoMessageCameraScreen/Sources/VideoMessageCameraScreen.swift +++ b/submodules/TelegramUI/Components/VideoMessageCameraScreen/Sources/VideoMessageCameraScreen.swift @@ -1955,7 +1955,7 @@ public class VideoMessageCameraScreen: ViewController { } if !hasAdjustments, let liveUploadData, let data = try? Data(contentsOf: URL(fileURLWithPath: video.videoPath)) { resource = LocalFileMediaResource(fileId: liveUploadData.id) - self.context.account.postbox.mediaBox.storeResourceData(resource.id, data: data, synchronous: true) + self.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data, synchronous: true) } else { resource = LocalFileVideoMediaResource(randomId: Int64.random(in: Int64.min ... Int64.max), paths: videoPaths, adjustments: resourceAdjustments) } @@ -1965,7 +1965,7 @@ public class VideoMessageCameraScreen: ViewController { let thumbnailResource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) let thumbnailSize = video.dimensions.cgSize.aspectFitted(CGSize(width: 320.0, height: 320.0)) if let thumbnailData = scaleImageToPixelSize(image: thumbnailImage, size: thumbnailSize)?.jpegData(compressionQuality: 0.4) { - self.context.account.postbox.mediaBox.storeResourceData(thumbnailResource.id, data: thumbnailData) + self.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(thumbnailResource.id), data: thumbnailData) previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(thumbnailSize), resource: thumbnailResource, progressiveSizes: [], immediateThumbnailData: nil, hasVideo: false, isPersonal: false)) } diff --git a/submodules/TelegramUI/Sources/Chat/ChatControllerMediaRecording.swift b/submodules/TelegramUI/Sources/Chat/ChatControllerMediaRecording.swift index 353aef3200..f326bf2524 100644 --- a/submodules/TelegramUI/Sources/Chat/ChatControllerMediaRecording.swift +++ b/submodules/TelegramUI/Sources/Chat/ChatControllerMediaRecording.swift @@ -311,7 +311,7 @@ extension ChatControllerImpl { } else if let waveform = data.waveform { if resource == nil { resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max), size: Int64(data.compressedData.count)) - strongSelf.context.account.postbox.mediaBox.storeResourceData(resource!.id, data: data.compressedData) + strongSelf.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource!.id), data: data.compressedData) } let audioWaveform: AudioWaveform @@ -361,7 +361,7 @@ extension ChatControllerImpl { let randomId = Int64.random(in: Int64.min ... Int64.max) let resource = LocalFileMediaResource(fileId: randomId) - strongSelf.context.account.postbox.mediaBox.storeResourceData(resource.id, data: data.compressedData) + strongSelf.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data.compressedData) let waveformBuffer: Data? = data.waveform diff --git a/submodules/TelegramUI/Sources/Chat/ChatControllerOpenDocumentScanner.swift b/submodules/TelegramUI/Sources/Chat/ChatControllerOpenDocumentScanner.swift index d90e71ce45..da32ec1cf0 100644 --- a/submodules/TelegramUI/Sources/Chat/ChatControllerOpenDocumentScanner.swift +++ b/submodules/TelegramUI/Sources/Chat/ChatControllerOpenDocumentScanner.swift @@ -49,12 +49,12 @@ extension ChatControllerImpl: VNDocumentCameraViewControllerDelegate { arc4random_buf(&randomId, 8) let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - self.context.account.postbox.mediaBox.storeResourceData(resource.id, data: data, synchronous: true) + self.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data, synchronous: true) var previewResource: LocalFileMediaResource? if let image = generatePdfPreviewImage(data: data, size: CGSize(width: 256, height: 256.0)), let jpegData = image.jpegData(compressionQuality: 0.5) { let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - self.context.account.postbox.mediaBox.storeResourceData(resource.id, data: jpegData, synchronous: true) + self.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: jpegData, synchronous: true) previewResource = resource } @@ -65,7 +65,7 @@ extension ChatControllerImpl: VNDocumentCameraViewControllerDelegate { let image = scan.imageOfPage(at: i) if let data = image.jpegData(compressionQuality: 0.87) { let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - self.context.account.postbox.mediaBox.storeResourceData(resource.id, data: data, synchronous: true) + self.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data, synchronous: true) var fileTitle = title if scan.pageCount > 1 { diff --git a/submodules/TelegramUI/Sources/Chat/ChatControllerPaste.swift b/submodules/TelegramUI/Sources/Chat/ChatControllerPaste.swift index 31d157dab2..4fe4e938ce 100644 --- a/submodules/TelegramUI/Sources/Chat/ChatControllerPaste.swift +++ b/submodules/TelegramUI/Sources/Chat/ChatControllerPaste.swift @@ -106,7 +106,7 @@ extension ChatControllerImpl { self.enqueueMediaMessageDisposable.set((convertToWebP(image: image, targetSize: size, targetBoundingSize: size, quality: 0.9) |> deliverOnMainQueue).startStrict(next: { [weak self] data in if let strongSelf = self, !data.isEmpty { let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - strongSelf.context.account.postbox.mediaBox.storeResourceData(resource.id, data: data) + strongSelf.context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data) var fileAttributes: [TelegramMediaFileAttribute] = [] fileAttributes.append(.FileName(fileName: "sticker.webp")) diff --git a/submodules/TelegramUI/Sources/CreateChannelController.swift b/submodules/TelegramUI/Sources/CreateChannelController.swift index 1dc9068a68..1aac1f9485 100644 --- a/submodules/TelegramUI/Sources/CreateChannelController.swift +++ b/submodules/TelegramUI/Sources/CreateChannelController.swift @@ -501,7 +501,7 @@ public func createChannelController(context: AccountContext, mode: CreateChannel let completedChannelPhotoImpl: (UIImage) -> Void = { image in if let data = image.jpegData(compressionQuality: 0.6) { let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - context.account.postbox.mediaBox.storeResourceData(resource.id, data: data) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data) let representation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 640, height: 640), resource: resource, progressiveSizes: [], immediateThumbnailData: nil, hasVideo: false, isPersonal: false) uploadedAvatar.set(context.engine.peers.uploadedPeerPhoto(resource: EngineMediaResource(resource))) uploadedVideoAvatar = nil @@ -516,7 +516,7 @@ public func createChannelController(context: AccountContext, mode: CreateChannel let completedChannelVideoImpl: (UIImage, Any?, TGVideoEditAdjustments?) -> Void = { image, asset, adjustments in if let data = image.jpegData(compressionQuality: 0.6) { let photoResource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - context.account.postbox.mediaBox.storeResourceData(photoResource.id, data: data) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(photoResource.id), data: data) let representation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 640, height: 640), resource: photoResource, progressiveSizes: [], immediateThumbnailData: nil, hasVideo: false, isPersonal: false) updateState { state in var state = state @@ -569,7 +569,7 @@ public func createChannelController(context: AccountContext, mode: CreateChannel let signalDisposable = signal.start(next: { next in if let result = next as? TGMediaVideoConversionResult { if let image = result.coverImage, let data = image.jpegData(compressionQuality: 0.7) { - context.account.postbox.mediaBox.storeResourceData(photoResource.id, data: data) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(photoResource.id), data: data) } if let timestamp = videoStartTimestamp { @@ -585,7 +585,7 @@ public func createChannelController(context: AccountContext, mode: CreateChannel } else { resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) } - context.account.postbox.mediaBox.storeResourceData(resource.id, data: data, synchronous: true) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data, synchronous: true) subscriber.putNext(resource) EngineTempBox.shared.dispose(tempFile) diff --git a/submodules/TelegramUI/Sources/CreateGroupController.swift b/submodules/TelegramUI/Sources/CreateGroupController.swift index 8c03b1f3a9..ce7fbe0ccb 100644 --- a/submodules/TelegramUI/Sources/CreateGroupController.swift +++ b/submodules/TelegramUI/Sources/CreateGroupController.swift @@ -920,7 +920,7 @@ public func createGroupControllerImpl(context: AccountContext, peerIds: [PeerId] let completedGroupPhotoImpl: (UIImage) -> Void = { image in if let data = image.jpegData(compressionQuality: 0.6) { let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - context.account.postbox.mediaBox.storeResourceData(resource.id, data: data) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data) let representation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 640, height: 640), resource: resource, progressiveSizes: [], immediateThumbnailData: nil, hasVideo: false, isPersonal: false) uploadedAvatar.set(context.engine.peers.uploadedPeerPhoto(resource: EngineMediaResource(resource))) uploadedVideoAvatar = nil @@ -935,7 +935,7 @@ public func createGroupControllerImpl(context: AccountContext, peerIds: [PeerId] let completedGroupVideoImpl: (UIImage, Any?, TGVideoEditAdjustments?) -> Void = { image, asset, adjustments in if let data = image.jpegData(compressionQuality: 0.6) { let photoResource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) - context.account.postbox.mediaBox.storeResourceData(photoResource.id, data: data) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(photoResource.id), data: data) let representation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 640, height: 640), resource: photoResource, progressiveSizes: [], immediateThumbnailData: nil, hasVideo: false, isPersonal: false) updateState { state in var state = state @@ -988,7 +988,7 @@ public func createGroupControllerImpl(context: AccountContext, peerIds: [PeerId] let signalDisposable = signal.start(next: { next in if let result = next as? TGMediaVideoConversionResult { if let image = result.coverImage, let data = image.jpegData(compressionQuality: 0.7) { - context.account.postbox.mediaBox.storeResourceData(photoResource.id, data: data) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(photoResource.id), data: data) } if let timestamp = videoStartTimestamp { @@ -1004,7 +1004,7 @@ public func createGroupControllerImpl(context: AccountContext, peerIds: [PeerId] } else { resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max)) } - context.account.postbox.mediaBox.storeResourceData(resource.id, data: data, synchronous: true) + context.engine.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: data, synchronous: true) subscriber.putNext(resource) EngineTempBox.shared.dispose(tempFile)