From de77745fb1d570bbd9fff5c0a24d814e29e357c0 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Tue, 22 Jun 2021 22:12:24 +0400 Subject: [PATCH] Wallpaper fixes --- .../Sources/Themes/ThemeColorPresets.swift | 8 +++--- .../Sources/Themes/WallpaperGalleryItem.swift | 8 +++--- .../Sources/FetchedMediaResource.swift | 26 ++++++++++++++++--- .../Sources/WallpaperBackgroundNode.swift | 17 ++++++++++-- 4 files changed, 44 insertions(+), 15 deletions(-) diff --git a/submodules/SettingsUI/Sources/Themes/ThemeColorPresets.swift b/submodules/SettingsUI/Sources/Themes/ThemeColorPresets.swift index 5f4c5f699b..98410c1f7b 100644 --- a/submodules/SettingsUI/Sources/Themes/ThemeColorPresets.swift +++ b/submodules/SettingsUI/Sources/Themes/ThemeColorPresets.swift @@ -38,11 +38,9 @@ var dayColorPresets: [PresentationThemeAccentColor] = [ PresentationThemeAccentColor(index: 104, baseColor: .preset, accentColor: 0xea8ced, bubbleColors: (0xea8ced, 0x00c2ed), wallpaper: nil) ] -//CJNyxPMgSVAEAAAAvW9sMwc51cw?bg_color=7fa381~fff5c5~336f55~fbe37d&intensity=-20 - var nightColorPresets: [PresentationThemeAccentColor] = [ - PresentationThemeAccentColor(index: 101, baseColor: .preset, accentColor: 0x007aff, bubbleColors: (0x007aff, 0xff53f4), wallpaper: nil), + PresentationThemeAccentColor(index: 101, baseColor: .preset, accentColor: 0x007aff, bubbleColors: (0x007aff, 0xff53f4), wallpaper: patternWallpaper(data: .variant4, colors: [0xe4b2ea, 0x8376c2, 0xeab9d9, 0xb493e6], intensity: -35, rotation: nil)), PresentationThemeAccentColor(index: 102, baseColor: .preset, accentColor: 0x00b09b, bubbleColors: (0xaee946, 0x00b09b), wallpaper: patternWallpaper(data: .variant9, colors: [0xe4b2ea, 0x8376c2, 0xeab9d9, 0xb493e6], intensity: -35, rotation: nil)), - PresentationThemeAccentColor(index: 103, baseColor: .preset, accentColor: 0xd33213, bubbleColors: (0xf9db00, 0xd33213), wallpaper: nil), - PresentationThemeAccentColor(index: 104, baseColor: .preset, accentColor: 0xea8ced, bubbleColors: (0xea8ced, 0x00c2ed), wallpaper: nil) + PresentationThemeAccentColor(index: 103, baseColor: .preset, accentColor: 0xd33213, bubbleColors: (0xf9db00, 0xd33213), wallpaper: patternWallpaper(data: .variant2, colors: [0xfec496, 0xdd6cb9, 0x962fbf, 0x4f5bd5], intensity: -40, rotation: nil)), + PresentationThemeAccentColor(index: 104, baseColor: .preset, accentColor: 0xea8ced, bubbleColors: (0xea8ced, 0x00c2ed), wallpaper: patternWallpaper(data: .variant6, colors: [0x8adbf2, 0x888dec, 0xe39fea, 0x679ced], intensity: -30, rotation: nil)) ] diff --git a/submodules/SettingsUI/Sources/Themes/WallpaperGalleryItem.swift b/submodules/SettingsUI/Sources/Themes/WallpaperGalleryItem.swift index 10f2131129..fd23e6eb45 100644 --- a/submodules/SettingsUI/Sources/Themes/WallpaperGalleryItem.swift +++ b/submodules/SettingsUI/Sources/Themes/WallpaperGalleryItem.swift @@ -72,11 +72,11 @@ class WallpaperGalleryItem: GalleryItem { private let progressDiameter: CGFloat = 50.0 private let motionAmount: CGFloat = 32.0 -private func reference(for resource: MediaResource, media: Media, message: Message?) -> MediaResourceReference { +private func reference(for resource: MediaResource, media: Media, message: Message?, slug: String?) -> MediaResourceReference { if let message = message { return .media(media: .message(message: MessageReference(message), media: media), resource: resource) } - return .wallpaper(wallpaper: nil, resource: resource) + return .wallpaper(wallpaper: slug.flatMap(WallpaperReference.slug), resource: resource) } final class WallpaperGalleryItemNode: GalleryItemNode { @@ -382,9 +382,9 @@ final class WallpaperGalleryItemNode: GalleryItemNode { var convertedRepresentations: [ImageRepresentationWithReference] = [] for representation in file.file.previewRepresentations { - convertedRepresentations.append(ImageRepresentationWithReference(representation: representation, reference: reference(for: representation.resource, media: file.file, message: message))) + convertedRepresentations.append(ImageRepresentationWithReference(representation: representation, reference: reference(for: representation.resource, media: file.file, message: message, slug: file.slug))) } - convertedRepresentations.append(ImageRepresentationWithReference(representation: .init(dimensions: dimensions, resource: file.file.resource, progressiveSizes: [], immediateThumbnailData: nil), reference: reference(for: file.file.resource, media: file.file, message: message))) + convertedRepresentations.append(ImageRepresentationWithReference(representation: .init(dimensions: dimensions, resource: file.file.resource, progressiveSizes: [], immediateThumbnailData: nil), reference: reference(for: file.file.resource, media: file.file, message: message, slug: file.slug))) if wallpaper.isPattern { var patternColors: [UIColor] = [] diff --git a/submodules/TelegramCore/Sources/FetchedMediaResource.swift b/submodules/TelegramCore/Sources/FetchedMediaResource.swift index 8196b509b6..132264cce9 100644 --- a/submodules/TelegramCore/Sources/FetchedMediaResource.swift +++ b/submodules/TelegramCore/Sources/FetchedMediaResource.swift @@ -69,6 +69,19 @@ public func stickerPackFileReference(_ file: TelegramMediaFile) -> FileMediaRefe return .standalone(media: file) } +private func areResourcesEqual(_ lhs: MediaResource, _ rhs: MediaResource) -> Bool { + if let lhsResource = lhs as? CloudDocumentMediaResource, let rhsResource = rhs as? CloudDocumentMediaResource { + if lhsResource.fileId == rhsResource.fileId { + return true + } + } else if let lhsResource = lhs as? CloudDocumentSizeMediaResource, let rhsResource = rhs as? CloudDocumentSizeMediaResource { + if lhsResource.documentId == rhsResource.documentId && lhsResource.sizeSpec == rhsResource.sizeSpec { + return true + } + } + return lhs.id.isEqual(to: rhs.id) +} + private func findMediaResource(media: Media, previousMedia: Media?, resource: MediaResource) -> TelegramMediaResource? { if let image = media as? TelegramMediaImage { for representation in image.representations { @@ -87,11 +100,11 @@ private func findMediaResource(media: Media, previousMedia: Media?, resource: Me } } } else if let file = media as? TelegramMediaFile { - if file.resource.id.isEqual(to: resource.id) { + if areResourcesEqual(file.resource, resource) { return file.resource } else { for representation in file.previewRepresentations { - if representation.resource.id.isEqual(to: resource.id) { + if areResourcesEqual(representation.resource, resource) { return representation.resource } } @@ -387,7 +400,13 @@ final class MediaReferenceRevalidationContext { } func wallpapers(postbox: Postbox, network: Network, background: Bool, wallpaper: WallpaperReference?) -> Signal<[TelegramWallpaper], RevalidateMediaReferenceError> { - return self.genericItem(key: .wallpapers, background: background, request: { next, error in + let key: MediaReferenceRevalidationKey + if let wallpaper = wallpaper { + key = .wallpaper(wallpaper: wallpaper) + } else { + key = .wallpapers + } + return self.genericItem(key: key, background: background, request: { next, error in let signal: Signal<[TelegramWallpaper]?, RevalidateMediaReferenceError> if let wallpaper = wallpaper, case let .slug(slug) = wallpaper { signal = getWallpaper(network: network, slug: slug) @@ -399,7 +418,6 @@ final class MediaReferenceRevalidationContext { signal = telegramWallpapers(postbox: postbox, network: network, forceUpdate: true) |> last |> mapError { _ -> RevalidateMediaReferenceError in - return .generic } } return (signal diff --git a/submodules/WallpaperBackgroundNode/Sources/WallpaperBackgroundNode.swift b/submodules/WallpaperBackgroundNode/Sources/WallpaperBackgroundNode.swift index 09b8399382..1450eba4b7 100644 --- a/submodules/WallpaperBackgroundNode/Sources/WallpaperBackgroundNode.swift +++ b/submodules/WallpaperBackgroundNode/Sources/WallpaperBackgroundNode.swift @@ -550,15 +550,22 @@ public final class WallpaperBackgroundNode: ASDisplayNode { let contentAlpha = abs(intensity) self.gradientBackgroundNode?.contentView.alpha = contentAlpha self.contentNode.alpha = contentAlpha + if self.patternImageNode.image != nil { + self.patternImageNode.backgroundColor = nil + } else { + self.patternImageNode.backgroundColor = .black + } } else { self.backgroundColor = nil self.gradientBackgroundNode?.contentView.alpha = 1.0 self.contentNode.alpha = 1.0 + self.patternImageNode.backgroundColor = nil } default: self.patternImageDisposable.set(nil) self.validPatternImage = nil self.patternImageNode.isHidden = true + self.patternImageNode.backgroundColor = nil self.backgroundColor = nil self.gradientBackgroundNode?.contentView.alpha = 1.0 self.contentNode.alpha = 1.0 @@ -574,7 +581,7 @@ public final class WallpaperBackgroundNode: ASDisplayNode { var patternIsLight: Bool = false switch wallpaper { - case let .file(_, _, _, _, isPattern, _, _, file, settings) where isPattern: + case let .file(_, _, _, _, isPattern, _, slug, file, settings) where isPattern: var updated = true let brightness = UIColor.average(of: settings.colors.map(UIColor.init(rgb:))).hsb.b patternIsLight = brightness > 0.3 @@ -600,7 +607,7 @@ public final class WallpaperBackgroundNode: ASDisplayNode { if let message = message { return .media(media: .message(message: MessageReference(message), media: media), resource: resource) } - return .wallpaper(wallpaper: nil, resource: resource) + return .wallpaper(wallpaper: .slug(slug), resource: resource) } var convertedRepresentations: [ImageRepresentationWithReference] = [] @@ -642,6 +649,11 @@ public final class WallpaperBackgroundNode: ASDisplayNode { if invertPattern { patternColor = .clear patternBackgroundColor = .clear + if self.patternImageNode.image == nil { + self.patternImageNode.backgroundColor = .black + } else { + self.patternImageNode.backgroundColor = nil + } } else { if patternIsLight { patternColor = .black @@ -649,6 +661,7 @@ public final class WallpaperBackgroundNode: ASDisplayNode { patternColor = .white } patternBackgroundColor = .clear + self.patternImageNode.backgroundColor = nil } let updatedGeneratedImage = ValidPatternGeneratedImage(wallpaper: validPatternImage.wallpaper, size: size, patternColor: patternColor.rgb, backgroundColor: patternBackgroundColor.rgb, invertPattern: invertPattern)