Refactor HashtagSearchUI, StickerPackPreviewUI and related modules [skip ci]

This commit is contained in:
Peter 2019-08-15 00:56:18 +03:00
parent 191090f578
commit 519e74f476
148 changed files with 3421 additions and 5911 deletions

View file

@ -89,6 +89,9 @@
<Group
location = "container:"
name = "Image Processing">
<FileRef
location = "group:submodules/YuvConversion/YuvConversion.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/ImageBlur/ImageBlur_Xcode.xcodeproj">
</FileRef>
@ -278,6 +281,12 @@
<FileRef
location = "group:submodules/ChatListSearchItemHeader/ChatListSearchItemHeader_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/ItemListAvatarAndNameInfoItem/ItemListAvatarAndNameInfoItem_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/ItemListPeerActionItem/ItemListPeerActionItem_Xcode.xcodeproj">
</FileRef>
</Group>
<Group
location = "container:"
@ -403,6 +412,12 @@
<FileRef
location = "group:submodules/LanguageSuggestionUI/LanguageSuggestionUI_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/HashtagSearchUI/HashtagSearchUI_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/StickerPackPreviewUI/StickerPackPreviewUI_Xcode.xcodeproj">
</FileRef>
</Group>
<FileRef
location = "group:submodules/TelegramUI/TelegramUI_Xcode.xcodeproj">

View file

@ -277,6 +277,8 @@ public final class ChatEmbeddedInterfaceState: PeerChatListEmbeddedInterfaceStat
public protocol ChatController: ViewController {
var chatLocation: ChatLocation { get }
var canReadHistory: ValuePromise<Bool> { get }
var parentController: ViewController? { get set }
func updatePresentationMode(_ mode: ChatControllerPresentationMode)
func beginMessageSearch(_ query: String)
}

View file

@ -7,6 +7,22 @@
objects = {
/* Begin PBXBuildFile section */
D03E3E4A2304B4CC0049C28B /* RLottie.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E492304B4CC0049C28B /* RLottie.framework */; };
D03E3E4F2304B50A0049C28B /* AnimatedStickerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3E4D2304B50A0049C28B /* AnimatedStickerNode.swift */; };
D03E3E502304B50A0049C28B /* AnimatedStickerUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3E4E2304B50A0049C28B /* AnimatedStickerUtils.swift */; };
D03E3E522304B51A0049C28B /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E512304B51A0049C28B /* Postbox.framework */; };
D03E3E542304B51E0049C28B /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E532304B51E0049C28B /* TelegramCore.framework */; };
D03E3E562304B52F0049C28B /* libcompression.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E552304B52F0049C28B /* libcompression.tbd */; };
D03E3E582304B53B0049C28B /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E572304B53B0049C28B /* Display.framework */; };
D03E3E5A2304B5400049C28B /* GZip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E592304B5400049C28B /* GZip.framework */; };
D03E3E5C2304B5450049C28B /* Tuples.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E5B2304B5450049C28B /* Tuples.framework */; };
D03E3E5E2304B5490049C28B /* MediaResources.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E5D2304B5490049C28B /* MediaResources.framework */; };
D03E3E602304B54E0049C28B /* StickerResources.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E5F2304B54E0049C28B /* StickerResources.framework */; };
D03E3E622304B55F0049C28B /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E612304B55F0049C28B /* SwiftSignalKit.framework */; };
D03E3E642304B5640049C28B /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E632304B5640049C28B /* MobileCoreServices.framework */; };
D03E3E672304B61A0049C28B /* AnimationRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3E652304B61A0049C28B /* AnimationRenderer.swift */; };
D03E3E682304B61A0049C28B /* SoftwareAnimationRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3E662304B61A0049C28B /* SoftwareAnimationRenderer.swift */; };
D03E3E8E2304B6EC0049C28B /* YuvConversion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E8D2304B6EC0049C28B /* YuvConversion.framework */; };
D060187122F35FCD00796784 /* AnimationUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D060186F22F35FCD00796784 /* AnimationUI.h */; settings = {ATTRIBUTES = (Public, ); }; };
D06018A422F361E800796784 /* AnimationNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06018A322F361E800796784 /* AnimationNode.swift */; };
D06018A722F361F400796784 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D06018A622F361F400796784 /* Foundation.framework */; };
@ -17,6 +33,22 @@
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
D03E3E492304B4CC0049C28B /* RLottie.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RLottie.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E4D2304B50A0049C28B /* AnimatedStickerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatedStickerNode.swift; sourceTree = "<group>"; };
D03E3E4E2304B50A0049C28B /* AnimatedStickerUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatedStickerUtils.swift; sourceTree = "<group>"; };
D03E3E512304B51A0049C28B /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E532304B51E0049C28B /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E552304B52F0049C28B /* libcompression.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libcompression.tbd; path = usr/lib/libcompression.tbd; sourceTree = SDKROOT; };
D03E3E572304B53B0049C28B /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E592304B5400049C28B /* GZip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = GZip.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E5B2304B5450049C28B /* Tuples.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Tuples.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E5D2304B5490049C28B /* MediaResources.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MediaResources.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E5F2304B54E0049C28B /* StickerResources.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = StickerResources.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E612304B55F0049C28B /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E632304B5640049C28B /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
D03E3E652304B61A0049C28B /* AnimationRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimationRenderer.swift; sourceTree = "<group>"; };
D03E3E662304B61A0049C28B /* SoftwareAnimationRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SoftwareAnimationRenderer.swift; sourceTree = "<group>"; };
D03E3E8D2304B6EC0049C28B /* YuvConversion.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = YuvConversion.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D060186C22F35FCD00796784 /* AnimationUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AnimationUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D060186F22F35FCD00796784 /* AnimationUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AnimationUI.h; sourceTree = "<group>"; };
D060187022F35FCD00796784 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@ -33,6 +65,18 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
D03E3E8E2304B6EC0049C28B /* YuvConversion.framework in Frameworks */,
D03E3E642304B5640049C28B /* MobileCoreServices.framework in Frameworks */,
D03E3E622304B55F0049C28B /* SwiftSignalKit.framework in Frameworks */,
D03E3E602304B54E0049C28B /* StickerResources.framework in Frameworks */,
D03E3E5E2304B5490049C28B /* MediaResources.framework in Frameworks */,
D03E3E5C2304B5450049C28B /* Tuples.framework in Frameworks */,
D03E3E5A2304B5400049C28B /* GZip.framework in Frameworks */,
D03E3E582304B53B0049C28B /* Display.framework in Frameworks */,
D03E3E562304B52F0049C28B /* libcompression.tbd in Frameworks */,
D03E3E542304B51E0049C28B /* TelegramCore.framework in Frameworks */,
D03E3E522304B51A0049C28B /* Postbox.framework in Frameworks */,
D03E3E4A2304B4CC0049C28B /* RLottie.framework in Frameworks */,
D06018AD22F361FF00796784 /* Lottie.framework in Frameworks */,
D06018AB22F361FC00796784 /* AsyncDisplayKit.framework in Frameworks */,
D06018A922F361F900796784 /* UIKit.framework in Frameworks */,
@ -64,6 +108,10 @@
D060186E22F35FCD00796784 /* Sources */ = {
isa = PBXGroup;
children = (
D03E3E652304B61A0049C28B /* AnimationRenderer.swift */,
D03E3E662304B61A0049C28B /* SoftwareAnimationRenderer.swift */,
D03E3E4D2304B50A0049C28B /* AnimatedStickerNode.swift */,
D03E3E4E2304B50A0049C28B /* AnimatedStickerUtils.swift */,
D06018A322F361E800796784 /* AnimationNode.swift */,
D060186F22F35FCD00796784 /* AnimationUI.h */,
D06018AE22F3641F00796784 /* FrameworkBundle.swift */,
@ -74,6 +122,18 @@
D06018A522F361F400796784 /* Frameworks */ = {
isa = PBXGroup;
children = (
D03E3E8D2304B6EC0049C28B /* YuvConversion.framework */,
D03E3E632304B5640049C28B /* MobileCoreServices.framework */,
D03E3E612304B55F0049C28B /* SwiftSignalKit.framework */,
D03E3E5F2304B54E0049C28B /* StickerResources.framework */,
D03E3E5D2304B5490049C28B /* MediaResources.framework */,
D03E3E5B2304B5450049C28B /* Tuples.framework */,
D03E3E592304B5400049C28B /* GZip.framework */,
D03E3E572304B53B0049C28B /* Display.framework */,
D03E3E552304B52F0049C28B /* libcompression.tbd */,
D03E3E532304B51E0049C28B /* TelegramCore.framework */,
D03E3E512304B51A0049C28B /* Postbox.framework */,
D03E3E492304B4CC0049C28B /* RLottie.framework */,
D06018AC22F361FF00796784 /* Lottie.framework */,
D06018AA22F361FC00796784 /* AsyncDisplayKit.framework */,
D06018A822F361F800796784 /* UIKit.framework */,
@ -162,7 +222,11 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D03E3E672304B61A0049C28B /* AnimationRenderer.swift in Sources */,
D03E3E4F2304B50A0049C28B /* AnimatedStickerNode.swift in Sources */,
D06018AF22F3641F00796784 /* FrameworkBundle.swift in Sources */,
D03E3E502304B50A0049C28B /* AnimatedStickerUtils.swift in Sources */,
D03E3E682304B61A0049C28B /* SoftwareAnimationRenderer.swift in Sources */,
D06018A422F361E800796784 /* AnimationNode.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;

View file

@ -11,34 +11,6 @@ import Tuples
import MediaResources
import StickerResources
private final class AnimationFrameCache {
private var cache: [Int: NSPurgeableData] = [:]
func get(index: Int, _ f: (NSPurgeableData?) -> Void) {
guard let data = self.cache[index] else {
f(nil)
return
}
if data.beginContentAccess() {
f(data)
data.endContentAccess()
} else {
self.cache.removeValue(forKey: index)
f(nil)
}
}
func set(index: Int, bytes: UnsafeRawPointer, length: Int) {
let data = NSPurgeableData(bytes: bytes, length: length)
data.endContentAccess()
self.cache[index] = data
}
func removeAll() {
self.cache.removeAll()
}
}
private let sharedQueue = Queue()
private class AnimatedStickerNodeDisplayEvents: ASDisplayNode {
@ -70,12 +42,12 @@ private class AnimatedStickerNodeDisplayEvents: ASDisplayNode {
}
}
enum AnimatedStickerMode {
public enum AnimatedStickerMode {
case cached
case direct
}
enum AnimatedStickerPlaybackMode {
public enum AnimatedStickerPlaybackMode {
case once
case loop
}
@ -329,7 +301,7 @@ public struct AnimatedStickerStatus: Equatable {
}
}
final class AnimatedStickerNode: ASDisplayNode {
public final class AnimatedStickerNode: ASDisplayNode {
private let queue: Queue
private var account: Account?
private var fileReference: FileMediaReference?
@ -337,8 +309,8 @@ final class AnimatedStickerNode: ASDisplayNode {
private let fetchDisposable = MetaDisposable()
private let eventsNode: AnimatedStickerNodeDisplayEvents
var started: () -> Void = {}
var reportedStarted = false
public var started: () -> Void = {}
private var reportedStarted = false
private let timer = Atomic<SwiftSignalKit.Timer?>(value: nil)
@ -355,7 +327,7 @@ final class AnimatedStickerNode: ASDisplayNode {
return self.playbackStatus.get()
}
var visibility = false {
public var visibility = false {
didSet {
if self.visibility != oldValue {
self.updateIsPlaying()
@ -371,7 +343,7 @@ final class AnimatedStickerNode: ASDisplayNode {
}
}
override init() {
override public init() {
self.queue = sharedQueue
self.eventsNode = AnimatedStickerNodeDisplayEvents()
@ -392,7 +364,7 @@ final class AnimatedStickerNode: ASDisplayNode {
self.timer.swap(nil)?.invalidate()
}
override func didLoad() {
override public func didLoad() {
super.didLoad()
#if targetEnvironment(simulator)
@ -405,7 +377,7 @@ final class AnimatedStickerNode: ASDisplayNode {
self.addSubnode(self.renderer!)
}
func setup(account: Account, resource: MediaResource, fitzModifier: EmojiFitzModifier? = nil, width: Int, height: Int, playbackMode: AnimatedStickerPlaybackMode = .loop, mode: AnimatedStickerMode) {
public func setup(account: Account, resource: MediaResource, fitzModifier: EmojiFitzModifier? = nil, width: Int, height: Int, playbackMode: AnimatedStickerPlaybackMode = .loop, mode: AnimatedStickerMode) {
if width < 2 || height < 2 {
return
}
@ -437,7 +409,7 @@ final class AnimatedStickerNode: ASDisplayNode {
}
}
func reset() {
public func reset() {
self.disposable.set(nil)
self.fetchDisposable.set(nil)
}
@ -454,7 +426,7 @@ final class AnimatedStickerNode: ASDisplayNode {
}
}
func play() {
public func play() {
let directData = self.directData
let cachedData = self.cachedData
let queue = self.queue
@ -517,12 +489,12 @@ final class AnimatedStickerNode: ASDisplayNode {
}
}
func stop() {
public func stop() {
self.reportedStarted = false
self.timer.swap(nil)?.invalidate()
}
func seekToStart() {
public func seekToStart() {
self.isPlaying = false
let directData = self.directData
@ -576,7 +548,7 @@ final class AnimatedStickerNode: ASDisplayNode {
}
}
func playIfNeeded() -> Bool {
public func playIfNeeded() -> Bool {
if !self.isPlaying {
self.isPlaying = true
self.play()
@ -585,7 +557,7 @@ final class AnimatedStickerNode: ASDisplayNode {
return false
}
func updateLayout(size: CGSize) {
public func updateLayout(size: CGSize) {
self.renderer?.frame = CGRect(origin: CGPoint(), size: size)
}
}

View file

@ -4,13 +4,13 @@ import SwiftSignalKit
import Postbox
import Display
import TelegramCore
import TelegramUIPrivateModule
import Compression
import GZip
import RLottie
import MediaResources
import MobileCoreServices
import MediaResources
import YuvConversion
let colorKeyRegex = try? NSRegularExpression(pattern: "\"k\":\\[[\\d\\.]+\\,[\\d\\.]+\\,[\\d\\.]+\\,[\\d\\.]+\\]")
@ -85,7 +85,7 @@ private func transformedWithFitzModifier(data: Data, fitzModifier: EmojiFitzModi
}
}
func fetchCompressedLottieFirstFrameAJpeg(data: Data, size: CGSize, fitzModifier: EmojiFitzModifier? = nil, cacheKey: String) -> Signal<TempBoxFile, NoError> {
public func fetchCompressedLottieFirstFrameAJpeg(data: Data, size: CGSize, fitzModifier: EmojiFitzModifier? = nil, cacheKey: String) -> Signal<TempBoxFile, NoError> {
return Signal({ subscriber in
let queue = Queue()
@ -182,7 +182,7 @@ private let threadPool: ThreadPool = {
}()
@available(iOS 9.0, *)
func experimentalConvertCompressedLottieToCombinedMp4(data: Data, size: CGSize, fitzModifier: EmojiFitzModifier? = nil, cacheKey: String) -> Signal<String, NoError> {
public func experimentalConvertCompressedLottieToCombinedMp4(data: Data, size: CGSize, fitzModifier: EmojiFitzModifier? = nil, cacheKey: String) -> Signal<String, NoError> {
return Signal({ subscriber in
let cancelled = Atomic<Bool>(value: false)

View file

@ -3,7 +3,7 @@ import UIKit
import AsyncDisplayKit
import Display
import SwiftSignalKit
import TelegramUIPrivateModule
import YuvConversion
final class SoftwareAnimationRenderer: ASDisplayNode, AnimationRenderer {
func render(queue: Queue, width: Int, height: Int, bytesPerRow: Int, data: Data, type: AnimationRendererFrameType, completion: @escaping () -> Void) {

View file

@ -0,0 +1,587 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
D03E3D742304AC350049C28B /* HashtagSearchUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E3D722304AC350049C28B /* HashtagSearchUI.h */; settings = {ATTRIBUTES = (Public, ); }; };
D03E3D822304ACD90049C28B /* HashtagSearchControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3D802304ACD80049C28B /* HashtagSearchControllerNode.swift */; };
D03E3D832304ACD90049C28B /* HashtagSearchController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3D812304ACD80049C28B /* HashtagSearchController.swift */; };
D03E3D862304ACE80049C28B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3D852304ACE80049C28B /* Foundation.framework */; };
D03E3D882304ACEC0049C28B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3D872304ACEC0049C28B /* UIKit.framework */; };
D03E3D8A2304ACEF0049C28B /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3D892304ACEF0049C28B /* Display.framework */; };
D03E3D8C2304ACF30049C28B /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3D8B2304ACF30049C28B /* TelegramCore.framework */; };
D03E3D8E2304ACF70049C28B /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3D8D2304ACF70049C28B /* Postbox.framework */; };
D03E3D902304ACFB0049C28B /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3D8F2304ACFB0049C28B /* SwiftSignalKit.framework */; };
D03E3D922304ACFF0049C28B /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3D912304ACFF0049C28B /* TelegramPresentationData.framework */; };
D03E3D942304AD040049C28B /* TelegramBaseController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3D932304AD040049C28B /* TelegramBaseController.framework */; };
D03E3D962304AD090049C28B /* AccountContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3D952304AD090049C28B /* AccountContext.framework */; };
D03E3D982304AD0E0049C28B /* ChatListUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3D972304AD0E0049C28B /* ChatListUI.framework */; };
D03E3D9A2304AD1B0049C28B /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3D992304AD1B0049C28B /* AsyncDisplayKit.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
D03E3D6F2304AC350049C28B /* HashtagSearchUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HashtagSearchUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3D722304AC350049C28B /* HashtagSearchUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HashtagSearchUI.h; sourceTree = "<group>"; };
D03E3D732304AC350049C28B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
D03E3D802304ACD80049C28B /* HashtagSearchControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HashtagSearchControllerNode.swift; sourceTree = "<group>"; };
D03E3D812304ACD80049C28B /* HashtagSearchController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HashtagSearchController.swift; sourceTree = "<group>"; };
D03E3D852304ACE80049C28B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
D03E3D872304ACEC0049C28B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
D03E3D892304ACEF0049C28B /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3D8B2304ACF30049C28B /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3D8D2304ACF70049C28B /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3D8F2304ACFB0049C28B /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3D912304ACFF0049C28B /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3D932304AD040049C28B /* TelegramBaseController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramBaseController.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3D952304AD090049C28B /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3D972304AD0E0049C28B /* ChatListUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ChatListUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3D992304AD1B0049C28B /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D03E3D6C2304AC350049C28B /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
D03E3D9A2304AD1B0049C28B /* AsyncDisplayKit.framework in Frameworks */,
D03E3D982304AD0E0049C28B /* ChatListUI.framework in Frameworks */,
D03E3D962304AD090049C28B /* AccountContext.framework in Frameworks */,
D03E3D942304AD040049C28B /* TelegramBaseController.framework in Frameworks */,
D03E3D922304ACFF0049C28B /* TelegramPresentationData.framework in Frameworks */,
D03E3D902304ACFB0049C28B /* SwiftSignalKit.framework in Frameworks */,
D03E3D8E2304ACF70049C28B /* Postbox.framework in Frameworks */,
D03E3D8C2304ACF30049C28B /* TelegramCore.framework in Frameworks */,
D03E3D8A2304ACEF0049C28B /* Display.framework in Frameworks */,
D03E3D882304ACEC0049C28B /* UIKit.framework in Frameworks */,
D03E3D862304ACE80049C28B /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
D03E3D652304AC350049C28B = {
isa = PBXGroup;
children = (
D03E3D732304AC350049C28B /* Info.plist */,
D03E3D712304AC350049C28B /* Sources */,
D03E3D702304AC350049C28B /* Products */,
D03E3D842304ACE70049C28B /* Frameworks */,
);
sourceTree = "<group>";
};
D03E3D702304AC350049C28B /* Products */ = {
isa = PBXGroup;
children = (
D03E3D6F2304AC350049C28B /* HashtagSearchUI.framework */,
);
name = Products;
sourceTree = "<group>";
};
D03E3D712304AC350049C28B /* Sources */ = {
isa = PBXGroup;
children = (
D03E3D812304ACD80049C28B /* HashtagSearchController.swift */,
D03E3D802304ACD80049C28B /* HashtagSearchControllerNode.swift */,
D03E3D722304AC350049C28B /* HashtagSearchUI.h */,
);
path = Sources;
sourceTree = "<group>";
};
D03E3D842304ACE70049C28B /* Frameworks */ = {
isa = PBXGroup;
children = (
D03E3D992304AD1B0049C28B /* AsyncDisplayKit.framework */,
D03E3D972304AD0E0049C28B /* ChatListUI.framework */,
D03E3D952304AD090049C28B /* AccountContext.framework */,
D03E3D932304AD040049C28B /* TelegramBaseController.framework */,
D03E3D912304ACFF0049C28B /* TelegramPresentationData.framework */,
D03E3D8F2304ACFB0049C28B /* SwiftSignalKit.framework */,
D03E3D8D2304ACF70049C28B /* Postbox.framework */,
D03E3D8B2304ACF30049C28B /* TelegramCore.framework */,
D03E3D892304ACEF0049C28B /* Display.framework */,
D03E3D872304ACEC0049C28B /* UIKit.framework */,
D03E3D852304ACE80049C28B /* Foundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
D03E3D6A2304AC350049C28B /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
D03E3D742304AC350049C28B /* HashtagSearchUI.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
D03E3D6E2304AC350049C28B /* HashtagSearchUI */ = {
isa = PBXNativeTarget;
buildConfigurationList = D03E3D772304AC350049C28B /* Build configuration list for PBXNativeTarget "HashtagSearchUI" */;
buildPhases = (
D03E3D6A2304AC350049C28B /* Headers */,
D03E3D6B2304AC350049C28B /* Sources */,
D03E3D6C2304AC350049C28B /* Frameworks */,
D03E3D6D2304AC350049C28B /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = HashtagSearchUI;
productName = HashtagSearchUI;
productReference = D03E3D6F2304AC350049C28B /* HashtagSearchUI.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
D03E3D662304AC350049C28B /* Project object */ = {
isa = PBXProject;
attributes = {
DefaultBuildSystemTypeForWorkspace = Latest;
LastUpgradeCheck = 1030;
ORGANIZATIONNAME = "Telegram Messenger LLP";
TargetAttributes = {
D03E3D6E2304AC350049C28B = {
CreatedOnToolsVersion = 10.3;
LastSwiftMigration = 1030;
};
};
};
buildConfigurationList = D03E3D692304AC350049C28B /* Build configuration list for PBXProject "HashtagSearchUI_Xcode" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = D03E3D652304AC350049C28B;
productRefGroup = D03E3D702304AC350049C28B /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
D03E3D6E2304AC350049C28B /* HashtagSearchUI */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
D03E3D6D2304AC350049C28B /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
D03E3D6B2304AC350049C28B /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D03E3D832304ACD90049C28B /* HashtagSearchController.swift in Sources */,
D03E3D822304ACD90049C28B /* HashtagSearchControllerNode.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
D03E3D752304AC350049C28B /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugAppStoreLLC;
};
D03E3D762304AC350049C28B /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseAppStoreLLC;
};
D03E3D782304AC350049C28B /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.HashtagSearchUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugAppStoreLLC;
};
D03E3D792304AC350049C28B /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.HashtagSearchUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseAppStoreLLC;
};
D03E3D7A2304AC5C0049C28B /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugHockeyapp;
};
D03E3D7B2304AC5C0049C28B /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.HashtagSearchUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugHockeyapp;
};
D03E3D7C2304AC660049C28B /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseHockeyappInternal;
};
D03E3D7D2304AC660049C28B /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.HashtagSearchUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseHockeyappInternal;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
D03E3D692304AC350049C28B /* Build configuration list for PBXProject "HashtagSearchUI_Xcode" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D03E3D752304AC350049C28B /* DebugAppStoreLLC */,
D03E3D7A2304AC5C0049C28B /* DebugHockeyapp */,
D03E3D762304AC350049C28B /* ReleaseAppStoreLLC */,
D03E3D7C2304AC660049C28B /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
D03E3D772304AC350049C28B /* Build configuration list for PBXNativeTarget "HashtagSearchUI" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D03E3D782304AC350049C28B /* DebugAppStoreLLC */,
D03E3D7B2304AC5C0049C28B /* DebugHockeyapp */,
D03E3D792304AC350049C28B /* ReleaseAppStoreLLC */,
D03E3D7D2304AC660049C28B /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
/* End XCConfigurationList section */
};
rootObject = D03E3D662304AC350049C28B /* Project object */;
}

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
</dict>
</plist>

View file

@ -9,7 +9,7 @@ import TelegramBaseController
import AccountContext
import ChatListUI
final class HashtagSearchController: TelegramBaseController {
public final class HashtagSearchController: TelegramBaseController {
private let queue = Queue()
private let context: AccountContext
@ -24,7 +24,7 @@ final class HashtagSearchController: TelegramBaseController {
return self.displayNode as! HashtagSearchControllerNode
}
init(context: AccountContext, peer: Peer?, query: String) {
public init(context: AccountContext, peer: Peer?, query: String) {
self.context = context
self.peer = peer
self.query = query
@ -91,7 +91,7 @@ final class HashtagSearchController: TelegramBaseController {
self.openMessageFromSearchDisposable.dispose()
}
override func loadDisplayNode() {
override public func loadDisplayNode() {
self.displayNode = HashtagSearchControllerNode(context: self.context, peer: self.peer, query: self.query, theme: self.presentationData.theme, strings: self.presentationData.strings)
if let chatController = self.controllerNode.chatController {
chatController.parentController = self

View file

@ -13,7 +13,7 @@ final class HashtagSearchControllerNode: ASDisplayNode {
private let segmentedControl: UISegmentedControl
let listNode: ListView
var chatController: ChatControllerImpl?
var chatController: ChatController?
private let context: AccountContext
private let query: String
@ -40,7 +40,7 @@ final class HashtagSearchControllerNode: ASDisplayNode {
self.segmentedControl.selectedSegmentIndex = 0
if let peer = peer {
self.chatController = ChatControllerImpl(context: context, chatLocation: .peer(peer.id), botStart: nil, mode: .inline)
self.chatController = context.sharedContext.makeChatController(context: context, chatLocation: .peer(peer.id), subject: nil, botStart: nil, mode: .inline)
} else {
self.chatController = nil
}

View file

@ -0,0 +1,19 @@
//
// HashtagSearchUI.h
// HashtagSearchUI
//
// Created by Peter on 8/14/19.
// Copyright © 2019 Telegram Messenger LLP. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for HashtagSearchUI.
FOUNDATION_EXPORT double HashtagSearchUIVersionNumber;
//! Project version string for HashtagSearchUI.
FOUNDATION_EXPORT const unsigned char HashtagSearchUIVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <HashtagSearchUI/PublicHeader.h>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
</dict>
</plist>

View file

@ -0,0 +1,595 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
D03E3DAA2304AEDD0049C28B /* ItemListAvatarAndNameInfoItem.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E3DA82304AEDD0049C28B /* ItemListAvatarAndNameInfoItem.h */; settings = {ATTRIBUTES = (Public, ); }; };
D03E3DB52304AF2E0049C28B /* ItemListAvatarAndNameItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3DB42304AF2E0049C28B /* ItemListAvatarAndNameItem.swift */; };
D03E3DB82304AF3B0049C28B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DB72304AF3A0049C28B /* Foundation.framework */; };
D03E3DBA2304AF3E0049C28B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DB92304AF3E0049C28B /* UIKit.framework */; };
D03E3DBC2304AF410049C28B /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DBB2304AF410049C28B /* Display.framework */; };
D03E3DBE2304AF450049C28B /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DBD2304AF450049C28B /* AsyncDisplayKit.framework */; };
D03E3DC02304AF490049C28B /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DBF2304AF490049C28B /* Postbox.framework */; };
D03E3DC22304AF4D0049C28B /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DC12304AF4D0049C28B /* TelegramCore.framework */; };
D03E3DC42304AF5B0049C28B /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DC32304AF5B0049C28B /* SwiftSignalKit.framework */; };
D03E3DC62304AF5F0049C28B /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DC52304AF5F0049C28B /* TelegramPresentationData.framework */; };
D03E3DC82304AF640049C28B /* ItemListUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DC72304AF640049C28B /* ItemListUI.framework */; };
D03E3DCA2304AF670049C28B /* ActivityIndicator.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DC92304AF670049C28B /* ActivityIndicator.framework */; };
D03E3DCC2304AF6D0049C28B /* AvatarNode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DCB2304AF6D0049C28B /* AvatarNode.framework */; };
D03E3DCE2304AF720049C28B /* TelegramStringFormatting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DCD2304AF720049C28B /* TelegramStringFormatting.framework */; };
D03E3DD02304AF760049C28B /* PeerPresenceStatusManager.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DCF2304AF760049C28B /* PeerPresenceStatusManager.framework */; };
D03E3DD42304AFE80049C28B /* FrameworkBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3DD32304AFE80049C28B /* FrameworkBundle.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
D03E3DA52304AEDD0049C28B /* ItemListAvatarAndNameInfoItem.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ItemListAvatarAndNameInfoItem.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DA82304AEDD0049C28B /* ItemListAvatarAndNameInfoItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ItemListAvatarAndNameInfoItem.h; sourceTree = "<group>"; };
D03E3DA92304AEDD0049C28B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
D03E3DB42304AF2E0049C28B /* ItemListAvatarAndNameItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemListAvatarAndNameItem.swift; sourceTree = "<group>"; };
D03E3DB72304AF3A0049C28B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
D03E3DB92304AF3E0049C28B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
D03E3DBB2304AF410049C28B /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DBD2304AF450049C28B /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DBF2304AF490049C28B /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DC12304AF4D0049C28B /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DC32304AF5B0049C28B /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DC52304AF5F0049C28B /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DC72304AF640049C28B /* ItemListUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ItemListUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DC92304AF670049C28B /* ActivityIndicator.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ActivityIndicator.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DCB2304AF6D0049C28B /* AvatarNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AvatarNode.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DCD2304AF720049C28B /* TelegramStringFormatting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramStringFormatting.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DCF2304AF760049C28B /* PeerPresenceStatusManager.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PeerPresenceStatusManager.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DD32304AFE80049C28B /* FrameworkBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkBundle.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D03E3DA22304AEDD0049C28B /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
D03E3DD02304AF760049C28B /* PeerPresenceStatusManager.framework in Frameworks */,
D03E3DCE2304AF720049C28B /* TelegramStringFormatting.framework in Frameworks */,
D03E3DCC2304AF6D0049C28B /* AvatarNode.framework in Frameworks */,
D03E3DCA2304AF670049C28B /* ActivityIndicator.framework in Frameworks */,
D03E3DC82304AF640049C28B /* ItemListUI.framework in Frameworks */,
D03E3DC62304AF5F0049C28B /* TelegramPresentationData.framework in Frameworks */,
D03E3DC42304AF5B0049C28B /* SwiftSignalKit.framework in Frameworks */,
D03E3DC22304AF4D0049C28B /* TelegramCore.framework in Frameworks */,
D03E3DC02304AF490049C28B /* Postbox.framework in Frameworks */,
D03E3DBE2304AF450049C28B /* AsyncDisplayKit.framework in Frameworks */,
D03E3DBC2304AF410049C28B /* Display.framework in Frameworks */,
D03E3DBA2304AF3E0049C28B /* UIKit.framework in Frameworks */,
D03E3DB82304AF3B0049C28B /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
D03E3D9B2304AEDD0049C28B = {
isa = PBXGroup;
children = (
D03E3DA92304AEDD0049C28B /* Info.plist */,
D03E3DA72304AEDD0049C28B /* Sources */,
D03E3DA62304AEDD0049C28B /* Products */,
D03E3DB62304AF3A0049C28B /* Frameworks */,
);
sourceTree = "<group>";
};
D03E3DA62304AEDD0049C28B /* Products */ = {
isa = PBXGroup;
children = (
D03E3DA52304AEDD0049C28B /* ItemListAvatarAndNameInfoItem.framework */,
);
name = Products;
sourceTree = "<group>";
};
D03E3DA72304AEDD0049C28B /* Sources */ = {
isa = PBXGroup;
children = (
D03E3DB42304AF2E0049C28B /* ItemListAvatarAndNameItem.swift */,
D03E3DA82304AEDD0049C28B /* ItemListAvatarAndNameInfoItem.h */,
D03E3DD32304AFE80049C28B /* FrameworkBundle.swift */,
);
path = Sources;
sourceTree = "<group>";
};
D03E3DB62304AF3A0049C28B /* Frameworks */ = {
isa = PBXGroup;
children = (
D03E3DCF2304AF760049C28B /* PeerPresenceStatusManager.framework */,
D03E3DCD2304AF720049C28B /* TelegramStringFormatting.framework */,
D03E3DCB2304AF6D0049C28B /* AvatarNode.framework */,
D03E3DC92304AF670049C28B /* ActivityIndicator.framework */,
D03E3DC72304AF640049C28B /* ItemListUI.framework */,
D03E3DC52304AF5F0049C28B /* TelegramPresentationData.framework */,
D03E3DC32304AF5B0049C28B /* SwiftSignalKit.framework */,
D03E3DC12304AF4D0049C28B /* TelegramCore.framework */,
D03E3DBF2304AF490049C28B /* Postbox.framework */,
D03E3DBD2304AF450049C28B /* AsyncDisplayKit.framework */,
D03E3DBB2304AF410049C28B /* Display.framework */,
D03E3DB92304AF3E0049C28B /* UIKit.framework */,
D03E3DB72304AF3A0049C28B /* Foundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
D03E3DA02304AEDD0049C28B /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
D03E3DAA2304AEDD0049C28B /* ItemListAvatarAndNameInfoItem.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
D03E3DA42304AEDD0049C28B /* ItemListAvatarAndNameInfoItem */ = {
isa = PBXNativeTarget;
buildConfigurationList = D03E3DAD2304AEDD0049C28B /* Build configuration list for PBXNativeTarget "ItemListAvatarAndNameInfoItem" */;
buildPhases = (
D03E3DA02304AEDD0049C28B /* Headers */,
D03E3DA12304AEDD0049C28B /* Sources */,
D03E3DA22304AEDD0049C28B /* Frameworks */,
D03E3DA32304AEDD0049C28B /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = ItemListAvatarAndNameInfoItem;
productName = ItemListAvatarAndNameInfoItem;
productReference = D03E3DA52304AEDD0049C28B /* ItemListAvatarAndNameInfoItem.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
D03E3D9C2304AEDD0049C28B /* Project object */ = {
isa = PBXProject;
attributes = {
DefaultBuildSystemTypeForWorkspace = Latest;
LastUpgradeCheck = 1030;
ORGANIZATIONNAME = "Telegram Messenger LLP";
TargetAttributes = {
D03E3DA42304AEDD0049C28B = {
CreatedOnToolsVersion = 10.3;
LastSwiftMigration = 1030;
};
};
};
buildConfigurationList = D03E3D9F2304AEDD0049C28B /* Build configuration list for PBXProject "ItemListAvatarAndNameInfoItem_Xcode" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = D03E3D9B2304AEDD0049C28B;
productRefGroup = D03E3DA62304AEDD0049C28B /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
D03E3DA42304AEDD0049C28B /* ItemListAvatarAndNameInfoItem */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
D03E3DA32304AEDD0049C28B /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
D03E3DA12304AEDD0049C28B /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D03E3DD42304AFE80049C28B /* FrameworkBundle.swift in Sources */,
D03E3DB52304AF2E0049C28B /* ItemListAvatarAndNameItem.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
D03E3DAB2304AEDD0049C28B /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugAppStoreLLC;
};
D03E3DAC2304AEDD0049C28B /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseAppStoreLLC;
};
D03E3DAE2304AEDD0049C28B /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ItemListAvatarAndNameInfoItem;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugAppStoreLLC;
};
D03E3DAF2304AEDD0049C28B /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ItemListAvatarAndNameInfoItem;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseAppStoreLLC;
};
D03E3DB02304AF000049C28B /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugHockeyapp;
};
D03E3DB12304AF000049C28B /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ItemListAvatarAndNameInfoItem;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugHockeyapp;
};
D03E3DB22304AF080049C28B /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseHockeyappInternal;
};
D03E3DB32304AF080049C28B /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ItemListAvatarAndNameInfoItem;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseHockeyappInternal;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
D03E3D9F2304AEDD0049C28B /* Build configuration list for PBXProject "ItemListAvatarAndNameInfoItem_Xcode" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D03E3DAB2304AEDD0049C28B /* DebugAppStoreLLC */,
D03E3DB02304AF000049C28B /* DebugHockeyapp */,
D03E3DAC2304AEDD0049C28B /* ReleaseAppStoreLLC */,
D03E3DB22304AF080049C28B /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
D03E3DAD2304AEDD0049C28B /* Build configuration list for PBXNativeTarget "ItemListAvatarAndNameInfoItem" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D03E3DAE2304AEDD0049C28B /* DebugAppStoreLLC */,
D03E3DB12304AF000049C28B /* DebugHockeyapp */,
D03E3DAF2304AEDD0049C28B /* ReleaseAppStoreLLC */,
D03E3DB32304AF080049C28B /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
/* End XCConfigurationList section */
};
rootObject = D03E3D9C2304AEDD0049C28B /* Project object */;
}

View file

@ -0,0 +1,13 @@
import Foundation
import UIKit
private class FrameworkBundleClass: NSObject {
}
let frameworkBundle: Bundle = Bundle(for: FrameworkBundleClass.self)
extension UIImage {
convenience init?(bundleImageName: String) {
self.init(named: bundleImageName, in: frameworkBundle, compatibleWith: nil)
}
}

View file

@ -0,0 +1,19 @@
//
// ItemListAvatarAndNameInfoItem.h
// ItemListAvatarAndNameInfoItem
//
// Created by Peter on 8/15/19.
// Copyright © 2019 Telegram Messenger LLP. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for ItemListAvatarAndNameInfoItem.
FOUNDATION_EXPORT double ItemListAvatarAndNameInfoItemVersionNumber;
//! Project version string for ItemListAvatarAndNameInfoItem.
FOUNDATION_EXPORT const unsigned char ItemListAvatarAndNameInfoItemVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <ItemListAvatarAndNameInfoItem/PublicHeader.h>

View file

@ -18,148 +18,108 @@ private func generateClearIcon(color: UIColor) -> UIImage? {
return generateTintedImage(image: UIImage(bundleImageName: "Components/Search Bar/Clear"), color: color)
}
enum ItemListAvatarAndNameInfoItemTitleType {
public enum ItemListAvatarAndNameInfoItemTitleType {
case group
case channel
}
enum ItemListAvatarAndNameInfoItemName: Equatable {
public enum ItemListAvatarAndNameInfoItemName: Equatable {
case personName(firstName: String, lastName: String)
case title(title: String, type: ItemListAvatarAndNameInfoItemTitleType)
init(_ peer: Peer) {
public init(_ peer: Peer) {
switch peer.indexName {
case let .personName(first, last, _, _):
self = .personName(firstName: first, lastName: last)
case let .title(title, _):
let type: ItemListAvatarAndNameInfoItemTitleType
if let peer = peer as? TelegramChannel, case .broadcast = peer.info {
type = .channel
} else {
type = .group
}
self = .title(title: title, type: type)
case let .personName(first, last, _, _):
self = .personName(firstName: first, lastName: last)
case let .title(title, _):
let type: ItemListAvatarAndNameInfoItemTitleType
if let peer = peer as? TelegramChannel, case .broadcast = peer.info {
type = .channel
} else {
type = .group
}
self = .title(title: title, type: type)
}
}
var composedTitle: String {
public var composedTitle: String {
switch self {
case let .personName(firstName, lastName):
if !firstName.isEmpty && !lastName.isEmpty {
return firstName + " " + lastName
} else if !firstName.isEmpty {
return firstName
} else {
return lastName
}
case let .title(title, _):
return title
case let .personName(firstName, lastName):
if !firstName.isEmpty && !lastName.isEmpty {
return firstName + " " + lastName
} else if !firstName.isEmpty {
return firstName
} else {
return lastName
}
case let .title(title, _):
return title
}
}
func composedDisplayTitle(strings: PresentationStrings) -> String {
public func composedDisplayTitle(strings: PresentationStrings) -> String {
switch self {
case let .personName(firstName, lastName):
if !firstName.isEmpty && !lastName.isEmpty {
return firstName + " " + lastName
} else if !firstName.isEmpty {
return firstName
} else if !lastName.isEmpty {
return lastName
} else {
return strings.User_DeletedAccount
}
case let .title(title, _):
return title
case let .personName(firstName, lastName):
if !firstName.isEmpty && !lastName.isEmpty {
return firstName + " " + lastName
} else if !firstName.isEmpty {
return firstName
} else if !lastName.isEmpty {
return lastName
} else {
return strings.User_DeletedAccount
}
case let .title(title, _):
return title
}
}
var isEmpty: Bool {
public var isEmpty: Bool {
switch self {
case let .personName(firstName, _):
return firstName.isEmpty
case let .title(title, _):
return title.isEmpty
}
}
static func ==(lhs: ItemListAvatarAndNameInfoItemName, rhs: ItemListAvatarAndNameInfoItemName) -> Bool {
switch lhs {
case let .personName(firstName, lastName):
if case .personName(firstName, lastName) = rhs {
return true
} else {
return false
}
case let .title(title, type):
if case .title(title, type) = rhs {
return true
} else {
return false
}
case let .personName(firstName, _):
return firstName.isEmpty
case let .title(title, _):
return title.isEmpty
}
}
}
struct ItemListAvatarAndNameInfoItemState: Equatable {
let editingName: ItemListAvatarAndNameInfoItemName?
let updatingName: ItemListAvatarAndNameInfoItemName?
public struct ItemListAvatarAndNameInfoItemState: Equatable {
public var editingName: ItemListAvatarAndNameInfoItemName?
public var updatingName: ItemListAvatarAndNameInfoItemName?
init(editingName: ItemListAvatarAndNameInfoItemName? = nil, updatingName: ItemListAvatarAndNameInfoItemName? = nil) {
public init(editingName: ItemListAvatarAndNameInfoItemName? = nil, updatingName: ItemListAvatarAndNameInfoItemName? = nil) {
self.editingName = editingName
self.updatingName = updatingName
}
}
public final class ItemListAvatarAndNameInfoItemContext {
public var hiddenAvatarRepresentation: TelegramMediaImageRepresentation?
static func ==(lhs: ItemListAvatarAndNameInfoItemState, rhs: ItemListAvatarAndNameInfoItemState) -> Bool {
if lhs.editingName != rhs.editingName {
return false
}
if lhs.updatingName != rhs.updatingName {
return false
}
return true
public init(hiddenAvatarRepresentation: TelegramMediaImageRepresentation? = nil) {
self.hiddenAvatarRepresentation = hiddenAvatarRepresentation
}
}
final class ItemListAvatarAndNameInfoItemContext {
var hiddenAvatarRepresentation: TelegramMediaImageRepresentation?
}
enum ItemListAvatarAndNameInfoItemStyle {
public enum ItemListAvatarAndNameInfoItemStyle {
case plain
case blocks(withTopInset: Bool, withExtendedBottomInset: Bool)
}
enum ItemListAvatarAndNameInfoItemUpdatingAvatar: Equatable {
public enum ItemListAvatarAndNameInfoItemUpdatingAvatar: Equatable {
case image(TelegramMediaImageRepresentation, Bool)
case none
static func ==(lhs: ItemListAvatarAndNameInfoItemUpdatingAvatar, rhs: ItemListAvatarAndNameInfoItemUpdatingAvatar) -> Bool {
switch lhs {
case let .image(representation, activity):
if case .image(representation, activity) = rhs {
return true
} else {
return false
}
case .none:
if case .none = rhs {
return true
} else {
return false
}
}
}
}
enum ItemListAvatarAndNameInfoItemMode {
public enum ItemListAvatarAndNameInfoItemMode {
case generic
case contact
case settings
case editSettings
}
class ItemListAvatarAndNameInfoItem: ListViewItem, ItemListItem {
public class ItemListAvatarAndNameInfoItem: ListViewItem, ItemListItem {
let account: Account
let theme: PresentationTheme
let strings: PresentationStrings
@ -170,7 +130,7 @@ class ItemListAvatarAndNameInfoItem: ListViewItem, ItemListItem {
let label: String?
let cachedData: CachedPeerData?
let state: ItemListAvatarAndNameInfoItemState
let sectionId: ItemListSectionId
public let sectionId: ItemListSectionId
let style: ItemListAvatarAndNameInfoItemStyle
let editingNameUpdated: (ItemListAvatarAndNameInfoItemName) -> Void
let editingNameCompleted: () -> Void
@ -180,11 +140,11 @@ class ItemListAvatarAndNameInfoItem: ListViewItem, ItemListItem {
let call: (() -> Void)?
let action: (() -> Void)?
let longTapAction: (() -> Void)?
let tag: ItemListItemTag?
public let tag: ItemListItemTag?
let selectable: Bool
public let selectable: Bool
init(account: Account, theme: PresentationTheme, strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, mode: ItemListAvatarAndNameInfoItemMode, peer: Peer?, presence: PeerPresence?, label: String? = nil, cachedData: CachedPeerData?, state: ItemListAvatarAndNameInfoItemState, sectionId: ItemListSectionId, style: ItemListAvatarAndNameInfoItemStyle, editingNameUpdated: @escaping (ItemListAvatarAndNameInfoItemName) -> Void, editingNameCompleted: @escaping () -> Void = {}, avatarTapped: @escaping () -> Void, context: ItemListAvatarAndNameInfoItemContext? = nil, updatingImage: ItemListAvatarAndNameInfoItemUpdatingAvatar? = nil, call: (() -> Void)? = nil, action: (() -> Void)? = nil, longTapAction: (() -> Void)? = nil, tag: ItemListItemTag? = nil) {
public init(account: Account, theme: PresentationTheme, strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, mode: ItemListAvatarAndNameInfoItemMode, peer: Peer?, presence: PeerPresence?, label: String? = nil, cachedData: CachedPeerData?, state: ItemListAvatarAndNameInfoItemState, sectionId: ItemListSectionId, style: ItemListAvatarAndNameInfoItemStyle, editingNameUpdated: @escaping (ItemListAvatarAndNameInfoItemName) -> Void, editingNameCompleted: @escaping () -> Void = {}, avatarTapped: @escaping () -> Void, context: ItemListAvatarAndNameInfoItemContext? = nil, updatingImage: ItemListAvatarAndNameInfoItemUpdatingAvatar? = nil, call: (() -> Void)? = nil, action: (() -> Void)? = nil, longTapAction: (() -> Void)? = nil, tag: ItemListItemTag? = nil) {
self.account = account
self.theme = theme
self.strings = strings
@ -214,7 +174,7 @@ class ItemListAvatarAndNameInfoItem: ListViewItem, ItemListItem {
}
}
func nodeConfiguredForParams(async: @escaping (@escaping () -> Void) -> Void, params: ListViewItemLayoutParams, synchronousLoads: Bool, previousItem: ListViewItem?, nextItem: ListViewItem?, completion: @escaping (ListViewItemNode, @escaping () -> (Signal<Void, NoError>?, (ListViewItemApply) -> Void)) -> Void) {
public func nodeConfiguredForParams(async: @escaping (@escaping () -> Void) -> Void, params: ListViewItemLayoutParams, synchronousLoads: Bool, previousItem: ListViewItem?, nextItem: ListViewItem?, completion: @escaping (ListViewItemNode, @escaping () -> (Signal<Void, NoError>?, (ListViewItemApply) -> Void)) -> Void) {
async {
let node = ItemListAvatarAndNameInfoItemNode()
let (layout, apply) = node.asyncLayout()(self, params, itemListNeighbors(item: self, topItem: previousItem as? ItemListItem, bottomItem: nextItem as? ItemListItem))
@ -228,7 +188,7 @@ class ItemListAvatarAndNameInfoItem: ListViewItem, ItemListItem {
}
}
func updateNode(async: @escaping (@escaping () -> Void) -> Void, node: @escaping () -> ListViewItemNode, params: ListViewItemLayoutParams, previousItem: ListViewItem?, nextItem: ListViewItem?, animation: ListViewItemUpdateAnimation, completion: @escaping (ListViewItemNodeLayout, @escaping (ListViewItemApply) -> Void) -> Void) {
public func updateNode(async: @escaping (@escaping () -> Void) -> Void, node: @escaping () -> ListViewItemNode, params: ListViewItemLayoutParams, previousItem: ListViewItem?, nextItem: ListViewItem?, animation: ListViewItemUpdateAnimation, completion: @escaping (ListViewItemNodeLayout, @escaping (ListViewItemApply) -> Void) -> Void) {
Queue.mainQueue().async {
if let nodeValue = node() as? ItemListAvatarAndNameInfoItemNode {
var animated = true
@ -249,7 +209,7 @@ class ItemListAvatarAndNameInfoItem: ListViewItem, ItemListItem {
}
}
func selected(listView: ListView){
public func selected(listView: ListView){
listView.clearHighlightAnimated(true)
self.action?()
}
@ -259,7 +219,7 @@ private let avatarFont = UIFont(name: ".SFCompactRounded-Semibold", size: 28.0)!
private let nameFont = Font.medium(19.0)
private let statusFont = Font.regular(15.0)
class ItemListAvatarAndNameInfoItemNode: ListViewItemNode, ItemListItemNode, ItemListItemFocusableNode, UITextFieldDelegate {
public class ItemListAvatarAndNameInfoItemNode: ListViewItemNode, ItemListItemNode, ItemListItemFocusableNode, UITextFieldDelegate {
private let backgroundNode: ASDisplayNode
private let highlightedBackgroundNode: ASDisplayNode
private let topStripeNode: ASDisplayNode
@ -290,11 +250,11 @@ class ItemListAvatarAndNameInfoItemNode: ListViewItemNode, ItemListItemNode, Ite
private let hiddenAvatarRepresentationDisposable = MetaDisposable()
var tag: ItemListItemTag? {
public var tag: ItemListItemTag? {
return self.item?.tag
}
var callButtonFrame: CGRect? {
public var callButtonFrame: CGRect? {
if !self.callButton.alpha.isZero && self.callButton.supernode != nil {
return self.callButton.frame
} else {
@ -302,7 +262,7 @@ class ItemListAvatarAndNameInfoItemNode: ListViewItemNode, ItemListItemNode, Ite
}
}
init() {
public init() {
self.backgroundNode = ASDisplayNode()
self.backgroundNode.isLayerBacked = true
@ -365,13 +325,13 @@ class ItemListAvatarAndNameInfoItemNode: ListViewItemNode, ItemListItemNode, Ite
self.hiddenAvatarRepresentationDisposable.dispose()
}
override func didLoad() {
override public func didLoad() {
super.didLoad()
self.avatarNode.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.avatarTapGesture(_:))))
}
func asyncLayout() -> (_ item: ItemListAvatarAndNameInfoItem, _ params: ListViewItemLayoutParams, _ neighbors: ItemListNeighbors) -> (ListViewItemNodeLayout, (Bool, Bool) -> Void) {
public func asyncLayout() -> (_ item: ItemListAvatarAndNameInfoItem, _ params: ListViewItemLayoutParams, _ neighbors: ItemListNeighbors) -> (ListViewItemNodeLayout, (Bool, Bool) -> Void) {
let layoutNameNode = TextNode.asyncLayout(self.nameNode)
let layoutStatusNode = TextNode.asyncLayout(self.statusNode)
let currentOverlayImage = self.updatingAvatarOverlay.image
@ -976,7 +936,7 @@ class ItemListAvatarAndNameInfoItemNode: ListViewItemNode, ItemListItemNode, Ite
}
}
override func setHighlighted(_ highlighted: Bool, at point: CGPoint, animated: Bool) {
override public func setHighlighted(_ highlighted: Bool, at point: CGPoint, animated: Bool) {
super.setHighlighted(highlighted, at: point, animated: animated)
if highlighted {
@ -1021,7 +981,7 @@ class ItemListAvatarAndNameInfoItemNode: ListViewItemNode, ItemListItemNode, Ite
button.isHidden = !textField.isFirstResponder || (textField.text?.isEmpty ?? true)
}
@objc func textFieldDidChange(_ inputField: UITextField) {
@objc private func textFieldDidChange(_ inputField: UITextField) {
if let item = self.item, let currentEditingName = item.state.editingName {
var editingName: ItemListAvatarAndNameInfoItemName?
if let inputFirstField = self.inputFirstField, let inputSecondField = self.inputSecondField {
@ -1043,7 +1003,7 @@ class ItemListAvatarAndNameInfoItemNode: ListViewItemNode, ItemListItemNode, Ite
}
}
func textFieldDidBeginEditing(_ textField: UITextField) {
public func textFieldDidBeginEditing(_ textField: UITextField) {
if textField == self.inputFirstField {
self.updateClearButtonVisibility(self.inputFirstClearButton, textField: textField)
} else if textField == self.inputSecondField {
@ -1051,7 +1011,7 @@ class ItemListAvatarAndNameInfoItemNode: ListViewItemNode, ItemListItemNode, Ite
}
}
func textFieldDidEndEditing(_ textField: UITextField) {
public func textFieldDidEndEditing(_ textField: UITextField) {
if textField == self.inputFirstField {
self.updateClearButtonVisibility(self.inputFirstClearButton, textField: textField)
} else if textField == self.inputSecondField {
@ -1059,7 +1019,7 @@ class ItemListAvatarAndNameInfoItemNode: ListViewItemNode, ItemListItemNode, Ite
}
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == self.inputFirstField {
if let inputSecondField = self.inputSecondField {
inputSecondField.becomeFirstResponder()
@ -1072,20 +1032,20 @@ class ItemListAvatarAndNameInfoItemNode: ListViewItemNode, ItemListItemNode, Ite
return true
}
@objc func avatarTapGesture(_ recognizer: UITapGestureRecognizer) {
@objc private func avatarTapGesture(_ recognizer: UITapGestureRecognizer) {
if let item = self.item {
item.avatarTapped()
}
}
func avatarTransitionNode() -> ((ASDisplayNode, () -> (UIView?, UIView?)), CGRect) {
public func avatarTransitionNode() -> ((ASDisplayNode, () -> (UIView?, UIView?)), CGRect) {
let avatarNode = self.avatarNode
return ((self.avatarNode, { [weak avatarNode] in
return (avatarNode?.view.snapshotContentTree(unhide: true), nil)
}), self.avatarNode.bounds)
}
func updateAvatarHidden() {
public func updateAvatarHidden() {
var hidden = false
if let item = self.item, let context = item.context, let peer = item.peer, let hiddenAvatarRepresentation = context.hiddenAvatarRepresentation {
for representation in peer.profileImageRepresentations {
@ -1099,29 +1059,29 @@ class ItemListAvatarAndNameInfoItemNode: ListViewItemNode, ItemListItemNode, Ite
}
}
@objc func callButtonPressed() {
@objc private func callButtonPressed() {
self.item?.call?()
}
@objc func firstClearPressed() {
@objc private func firstClearPressed() {
self.inputFirstField?.text = nil
self.updateClearButtonVisibility(self.inputFirstClearButton, textField: self.inputFirstField)
}
@objc func secondClearPressed() {
@objc private func secondClearPressed() {
self.inputSecondField?.text = nil
self.updateClearButtonVisibility(self.inputSecondClearButton, textField: self.inputSecondField)
}
func focus() {
public func focus() {
self.inputFirstField?.becomeFirstResponder()
}
override func longTapped() {
override public func longTapped() {
self.item?.longTapAction?()
}
override var canBeLongTapped: Bool {
override public var canBeLongTapped: Bool {
return self.item?.longTapAction != nil
}
}

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
</dict>
</plist>

View file

@ -0,0 +1,567 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
D03E3DE42304B2030049C28B /* ItemListPeerActionItem.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E3DE22304B2030049C28B /* ItemListPeerActionItem.h */; settings = {ATTRIBUTES = (Public, ); }; };
D03E3DEF2304B25E0049C28B /* ItemListPeerActionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3DEE2304B25E0049C28B /* ItemListPeerActionItem.swift */; };
D03E3DF22304B2700049C28B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DF12304B2700049C28B /* Foundation.framework */; };
D03E3DF42304B2740049C28B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DF32304B2740049C28B /* UIKit.framework */; };
D03E3DF62304B2770049C28B /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DF52304B2770049C28B /* Display.framework */; };
D03E3DF82304B27A0049C28B /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DF72304B27A0049C28B /* AsyncDisplayKit.framework */; };
D03E3DFA2304B2800049C28B /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DF92304B2800049C28B /* SwiftSignalKit.framework */; };
D03E3DFC2304B2850049C28B /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DFB2304B2850049C28B /* TelegramPresentationData.framework */; };
D03E3DFE2304B2890049C28B /* ItemListUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DFD2304B2890049C28B /* ItemListUI.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
D03E3DDF2304B2030049C28B /* ItemListPeerActionItem.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ItemListPeerActionItem.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DE22304B2030049C28B /* ItemListPeerActionItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ItemListPeerActionItem.h; sourceTree = "<group>"; };
D03E3DE32304B2030049C28B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
D03E3DEE2304B25E0049C28B /* ItemListPeerActionItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemListPeerActionItem.swift; sourceTree = "<group>"; };
D03E3DF12304B2700049C28B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
D03E3DF32304B2740049C28B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
D03E3DF52304B2770049C28B /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DF72304B27A0049C28B /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DF92304B2800049C28B /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DFB2304B2850049C28B /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DFD2304B2890049C28B /* ItemListUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ItemListUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D03E3DDC2304B2030049C28B /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
D03E3DFE2304B2890049C28B /* ItemListUI.framework in Frameworks */,
D03E3DFC2304B2850049C28B /* TelegramPresentationData.framework in Frameworks */,
D03E3DFA2304B2800049C28B /* SwiftSignalKit.framework in Frameworks */,
D03E3DF82304B27A0049C28B /* AsyncDisplayKit.framework in Frameworks */,
D03E3DF62304B2770049C28B /* Display.framework in Frameworks */,
D03E3DF42304B2740049C28B /* UIKit.framework in Frameworks */,
D03E3DF22304B2700049C28B /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
D03E3DD52304B2030049C28B = {
isa = PBXGroup;
children = (
D03E3DE32304B2030049C28B /* Info.plist */,
D03E3DE12304B2030049C28B /* Sources */,
D03E3DE02304B2030049C28B /* Products */,
D03E3DF02304B2700049C28B /* Frameworks */,
);
sourceTree = "<group>";
};
D03E3DE02304B2030049C28B /* Products */ = {
isa = PBXGroup;
children = (
D03E3DDF2304B2030049C28B /* ItemListPeerActionItem.framework */,
);
name = Products;
sourceTree = "<group>";
};
D03E3DE12304B2030049C28B /* Sources */ = {
isa = PBXGroup;
children = (
D03E3DEE2304B25E0049C28B /* ItemListPeerActionItem.swift */,
D03E3DE22304B2030049C28B /* ItemListPeerActionItem.h */,
);
path = Sources;
sourceTree = "<group>";
};
D03E3DF02304B2700049C28B /* Frameworks */ = {
isa = PBXGroup;
children = (
D03E3DFD2304B2890049C28B /* ItemListUI.framework */,
D03E3DFB2304B2850049C28B /* TelegramPresentationData.framework */,
D03E3DF92304B2800049C28B /* SwiftSignalKit.framework */,
D03E3DF72304B27A0049C28B /* AsyncDisplayKit.framework */,
D03E3DF52304B2770049C28B /* Display.framework */,
D03E3DF32304B2740049C28B /* UIKit.framework */,
D03E3DF12304B2700049C28B /* Foundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
D03E3DDA2304B2030049C28B /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
D03E3DE42304B2030049C28B /* ItemListPeerActionItem.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
D03E3DDE2304B2030049C28B /* ItemListPeerActionItem */ = {
isa = PBXNativeTarget;
buildConfigurationList = D03E3DE72304B2030049C28B /* Build configuration list for PBXNativeTarget "ItemListPeerActionItem" */;
buildPhases = (
D03E3DDA2304B2030049C28B /* Headers */,
D03E3DDB2304B2030049C28B /* Sources */,
D03E3DDC2304B2030049C28B /* Frameworks */,
D03E3DDD2304B2030049C28B /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = ItemListPeerActionItem;
productName = ItemListPeerActionItem;
productReference = D03E3DDF2304B2030049C28B /* ItemListPeerActionItem.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
D03E3DD62304B2030049C28B /* Project object */ = {
isa = PBXProject;
attributes = {
DefaultBuildSystemTypeForWorkspace = Latest;
LastUpgradeCheck = 1030;
ORGANIZATIONNAME = "Telegram Messenger LLP";
TargetAttributes = {
D03E3DDE2304B2030049C28B = {
CreatedOnToolsVersion = 10.3;
LastSwiftMigration = 1030;
};
};
};
buildConfigurationList = D03E3DD92304B2030049C28B /* Build configuration list for PBXProject "ItemListPeerActionItem_Xcode" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = D03E3DD52304B2030049C28B;
productRefGroup = D03E3DE02304B2030049C28B /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
D03E3DDE2304B2030049C28B /* ItemListPeerActionItem */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
D03E3DDD2304B2030049C28B /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
D03E3DDB2304B2030049C28B /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D03E3DEF2304B25E0049C28B /* ItemListPeerActionItem.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
D03E3DE52304B2030049C28B /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugAppStoreLLC;
};
D03E3DE62304B2030049C28B /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseAppStoreLLC;
};
D03E3DE82304B2030049C28B /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ItemListPeerActionItem;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugAppStoreLLC;
};
D03E3DE92304B2030049C28B /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ItemListPeerActionItem;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseAppStoreLLC;
};
D03E3DEA2304B22D0049C28B /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugHockeyapp;
};
D03E3DEB2304B22D0049C28B /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ItemListPeerActionItem;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugHockeyapp;
};
D03E3DEC2304B2350049C28B /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseHockeyappInternal;
};
D03E3DED2304B2350049C28B /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ItemListPeerActionItem;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseHockeyappInternal;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
D03E3DD92304B2030049C28B /* Build configuration list for PBXProject "ItemListPeerActionItem_Xcode" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D03E3DE52304B2030049C28B /* DebugAppStoreLLC */,
D03E3DEA2304B22D0049C28B /* DebugHockeyapp */,
D03E3DE62304B2030049C28B /* ReleaseAppStoreLLC */,
D03E3DEC2304B2350049C28B /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
D03E3DE72304B2030049C28B /* Build configuration list for PBXNativeTarget "ItemListPeerActionItem" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D03E3DE82304B2030049C28B /* DebugAppStoreLLC */,
D03E3DEB2304B22D0049C28B /* DebugHockeyapp */,
D03E3DE92304B2030049C28B /* ReleaseAppStoreLLC */,
D03E3DED2304B2350049C28B /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
/* End XCConfigurationList section */
};
rootObject = D03E3DD62304B2030049C28B /* Project object */;
}

View file

@ -0,0 +1,19 @@
//
// ItemListPeerActionItem.h
// ItemListPeerActionItem
//
// Created by Peter on 8/15/19.
// Copyright © 2019 Telegram Messenger LLP. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for ItemListPeerActionItem.
FOUNDATION_EXPORT double ItemListPeerActionItemVersionNumber;
//! Project version string for ItemListPeerActionItem.
FOUNDATION_EXPORT const unsigned char ItemListPeerActionItemVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <ItemListPeerActionItem/PublicHeader.h>

View file

@ -6,22 +6,22 @@ import SwiftSignalKit
import TelegramPresentationData
import ItemListUI
enum ItemListPeerActionItemHeight {
public enum ItemListPeerActionItemHeight {
case generic
case peerList
}
class ItemListPeerActionItem: ListViewItem, ItemListItem {
public class ItemListPeerActionItem: ListViewItem, ItemListItem {
let theme: PresentationTheme
let icon: UIImage?
let title: String
let alwaysPlain: Bool
public let alwaysPlain: Bool
let editing: Bool
let height: ItemListPeerActionItemHeight
let sectionId: ItemListSectionId
public let sectionId: ItemListSectionId
let action: () -> Void
init(theme: PresentationTheme, icon: UIImage?, title: String, alwaysPlain: Bool = false, sectionId: ItemListSectionId, height: ItemListPeerActionItemHeight = .peerList, editing: Bool, action: @escaping () -> Void) {
public init(theme: PresentationTheme, icon: UIImage?, title: String, alwaysPlain: Bool = false, sectionId: ItemListSectionId, height: ItemListPeerActionItemHeight = .peerList, editing: Bool, action: @escaping () -> Void) {
self.theme = theme
self.icon = icon
self.title = title
@ -32,7 +32,7 @@ class ItemListPeerActionItem: ListViewItem, ItemListItem {
self.action = action
}
func nodeConfiguredForParams(async: @escaping (@escaping () -> Void) -> Void, params: ListViewItemLayoutParams, synchronousLoads: Bool, previousItem: ListViewItem?, nextItem: ListViewItem?, completion: @escaping (ListViewItemNode, @escaping () -> (Signal<Void, NoError>?, (ListViewItemApply) -> Void)) -> Void) {
public func nodeConfiguredForParams(async: @escaping (@escaping () -> Void) -> Void, params: ListViewItemLayoutParams, synchronousLoads: Bool, previousItem: ListViewItem?, nextItem: ListViewItem?, completion: @escaping (ListViewItemNode, @escaping () -> (Signal<Void, NoError>?, (ListViewItemApply) -> Void)) -> Void) {
async {
let node = ItemListPeerActionItemNode()
var neighbors = itemListNeighbors(item: self, topItem: previousItem as? ItemListItem, bottomItem: nextItem as? ItemListItem)
@ -52,7 +52,7 @@ class ItemListPeerActionItem: ListViewItem, ItemListItem {
}
}
func updateNode(async: @escaping (@escaping () -> Void) -> Void, node: @escaping () -> ListViewItemNode, params: ListViewItemLayoutParams, previousItem: ListViewItem?, nextItem: ListViewItem?, animation: ListViewItemUpdateAnimation, completion: @escaping (ListViewItemNodeLayout, @escaping (ListViewItemApply) -> Void) -> Void) {
public func updateNode(async: @escaping (@escaping () -> Void) -> Void, node: @escaping () -> ListViewItemNode, params: ListViewItemLayoutParams, previousItem: ListViewItem?, nextItem: ListViewItem?, animation: ListViewItemUpdateAnimation, completion: @escaping (ListViewItemNodeLayout, @escaping (ListViewItemApply) -> Void) -> Void) {
Queue.mainQueue().async {
if let nodeValue = node() as? ItemListPeerActionItemNode {
let makeLayout = nodeValue.asyncLayout()
@ -78,9 +78,9 @@ class ItemListPeerActionItem: ListViewItem, ItemListItem {
}
}
var selectable: Bool = true
public var selectable: Bool = true
func selected(listView: ListView){
public func selected(listView: ListView){
listView.clearHighlightAnimated(true)
self.action()
}

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
</dict>
</plist>

View file

@ -11,12 +11,12 @@ import ShareController
import StickerResources
import AlertUI
enum StickerPackPreviewControllerMode {
public enum StickerPackPreviewControllerMode {
case `default`
case settings
}
final class StickerPackPreviewController: ViewController {
public final class StickerPackPreviewController: ViewController {
private var controllerNode: StickerPackPreviewControllerNode {
return self.displayNode as! StickerPackPreviewControllerNode
}
@ -42,7 +42,7 @@ final class StickerPackPreviewController: ViewController {
private var presentationDataDisposable: Disposable?
var sendSticker: ((FileMediaReference, ASDisplayNode, CGRect) -> Bool)? {
public var sendSticker: ((FileMediaReference, ASDisplayNode, CGRect) -> Bool)? {
didSet {
if self.isNodeLoaded {
if let sendSticker = self.sendSticker {
@ -61,7 +61,7 @@ final class StickerPackPreviewController: ViewController {
}
}
init(context: AccountContext, stickerPack: StickerPackReference, mode: StickerPackPreviewControllerMode = .default, parentNavigationController: NavigationController?) {
public init(context: AccountContext, stickerPack: StickerPackReference, mode: StickerPackPreviewControllerMode = .default, parentNavigationController: NavigationController?) {
self.context = context
self.mode = mode
self.parentNavigationController = parentNavigationController
@ -82,7 +82,7 @@ final class StickerPackPreviewController: ViewController {
})
}
required init(coder aDecoder: NSCoder) {
required public init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@ -93,7 +93,7 @@ final class StickerPackPreviewController: ViewController {
self.presentationDataDisposable?.dispose()
}
override func loadDisplayNode() {
override public func loadDisplayNode() {
var openShareImpl: (() -> Void)?
if self.mode == .settings {
openShareImpl = { [weak self] in
@ -126,9 +126,9 @@ final class StickerPackPreviewController: ViewController {
guard let strongSelf = self else {
return
}
if let peer = peer {
if let peer = peer, let parentNavigationController = strongSelf.parentNavigationController {
strongSelf.dismiss()
strongSelf.parentNavigationController?.pushViewController(ChatControllerImpl(context: strongSelf.context, chatLocation: .peer(peer.id)))
strongSelf.context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: parentNavigationController, context: strongSelf.context, chatLocation: .peer(peer.id), animated: true))
}
}))
})
@ -217,7 +217,7 @@ final class StickerPackPreviewController: ViewController {
self.ready.set(self.controllerNode.ready.get())
}
override func viewDidAppear(_ animated: Bool) {
override public func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if !self.animatedIn {
@ -226,7 +226,7 @@ final class StickerPackPreviewController: ViewController {
}
}
override func dismiss(completion: (() -> Void)? = nil) {
override public func dismiss(completion: (() -> Void)? = nil) {
if !self.dismissed {
self.dismissed = true
} else {
@ -235,7 +235,7 @@ final class StickerPackPreviewController: ViewController {
self.controllerNode.animateOut(completion: completion)
}
override func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
super.containerLayoutUpdated(layout, transition: transition)
self.controllerNode.containerLayoutUpdated(layout, navigationBarHeight: self.navigationHeight, transition: transition)

View file

@ -7,6 +7,7 @@ import AsyncDisplayKit
import Postbox
import StickerResources
import AccountContext
import AnimationUI
final class StickerPackPreviewInteraction {
var previewedItem: StickerPreviewPeekItem?

View file

@ -0,0 +1,19 @@
//
// StickerPackPreviewUI.h
// StickerPackPreviewUI
//
// Created by Peter on 8/15/19.
// Copyright © 2019 Telegram Messenger LLP. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for StickerPackPreviewUI.
FOUNDATION_EXPORT double StickerPackPreviewUIVersionNumber;
//! Project version string for StickerPackPreviewUI.
FOUNDATION_EXPORT const unsigned char StickerPackPreviewUIVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <StickerPackPreviewUI/PublicHeader.h>

View file

@ -7,15 +7,15 @@ import TelegramCore
import SwiftSignalKit
import AccountContext
final class StickerPreviewControllerPresentationArguments {
public final class StickerPreviewControllerPresentationArguments {
let transitionNode: (StickerPackItem) -> ASDisplayNode?
init(transitionNode: @escaping (StickerPackItem) -> ASDisplayNode?) {
public init(transitionNode: @escaping (StickerPackItem) -> ASDisplayNode?) {
self.transitionNode = transitionNode
}
}
final class StickerPreviewController: ViewController {
public final class StickerPreviewController: ViewController {
private var controllerNode: StickerPreviewControllerNode {
return self.displayNode as! StickerPreviewControllerNode
}
@ -25,7 +25,7 @@ final class StickerPreviewController: ViewController {
private let context: AccountContext
private var item: StickerPackItem
init(context: AccountContext, item: StickerPackItem) {
public init(context: AccountContext, item: StickerPackItem) {
self.context = context
self.item = item
@ -34,11 +34,11 @@ final class StickerPreviewController: ViewController {
self.statusBar.statusBarStyle = .Ignore
}
required init(coder aDecoder: NSCoder) {
required public init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func loadDisplayNode() {
override public func loadDisplayNode() {
self.displayNode = StickerPreviewControllerNode(context: self.context)
self.controllerNode.dismiss = { [weak self] in
self?.presentingViewController?.dismiss(animated: false, completion: nil)
@ -52,7 +52,7 @@ final class StickerPreviewController: ViewController {
self.ready.set(.single(true))
}
override func viewDidAppear(_ animated: Bool) {
override public func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if !self.animatedIn {
@ -61,17 +61,17 @@ final class StickerPreviewController: ViewController {
}
}
override func dismiss(completion: (() -> Void)? = nil) {
override public func dismiss(completion: (() -> Void)? = nil) {
self.controllerNode.animateOut(targetNode: (self.presentationArguments as? StickerPreviewControllerPresentationArguments)?.transitionNode(self.item), completion: completion)
}
override func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
super.containerLayoutUpdated(layout, transition: transition)
self.controllerNode.containerLayoutUpdated(layout, navigationBarHeight: self.navigationHeight, transition: transition)
}
func updateItem(_ item: StickerPackItem) {
public func updateItem(_ item: StickerPackItem) {
self.item = item
self.controllerNode.updateItem(item)
}

View file

@ -6,53 +6,54 @@ import Postbox
import TelegramCore
import SwiftSignalKit
import StickerResources
import AnimationUI
enum StickerPreviewPeekItem: Equatable {
public enum StickerPreviewPeekItem: Equatable {
case pack(StickerPackItem)
case found(FoundStickerItem)
var file: TelegramMediaFile {
public var file: TelegramMediaFile {
switch self {
case let .pack(item):
return item.file
case let .found(item):
return item.file
case let .pack(item):
return item.file
case let .found(item):
return item.file
}
}
}
final class StickerPreviewPeekContent: PeekControllerContent {
public final class StickerPreviewPeekContent: PeekControllerContent {
let account: Account
let item: StickerPreviewPeekItem
public let item: StickerPreviewPeekItem
let menu: [PeekControllerMenuItem]
init(account: Account, item: StickerPreviewPeekItem, menu: [PeekControllerMenuItem]) {
public init(account: Account, item: StickerPreviewPeekItem, menu: [PeekControllerMenuItem]) {
self.account = account
self.item = item
self.menu = menu
}
func presentation() -> PeekControllerContentPresentation {
public func presentation() -> PeekControllerContentPresentation {
return .freeform
}
func menuActivation() -> PeerkControllerMenuActivation {
public func menuActivation() -> PeerkControllerMenuActivation {
return .press
}
func menuItems() -> [PeekControllerMenuItem] {
public func menuItems() -> [PeekControllerMenuItem] {
return self.menu
}
func node() -> PeekControllerContentNode & ASDisplayNode {
public func node() -> PeekControllerContentNode & ASDisplayNode {
return StickerPreviewPeekContentNode(account: self.account, item: self.item)
}
func topAccessoryNode() -> ASDisplayNode? {
public func topAccessoryNode() -> ASDisplayNode? {
return nil
}
func isEqual(to: PeekControllerContent) -> Bool {
public func isEqual(to: PeekControllerContent) -> Bool {
if let to = to as? StickerPreviewPeekContent {
return self.item == to.item
} else {

View file

@ -0,0 +1,627 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
D03E3E102304B3440049C28B /* StickerPackPreviewUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E3E0E2304B3440049C28B /* StickerPackPreviewUI.h */; settings = {ATTRIBUTES = (Public, ); }; };
D03E3E202304B39A0049C28B /* StickerPreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3E1A2304B3990049C28B /* StickerPreviewController.swift */; };
D03E3E212304B39A0049C28B /* StickerPackPreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3E1B2304B3990049C28B /* StickerPackPreviewController.swift */; };
D03E3E222304B39A0049C28B /* StickerPreviewPeekContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3E1C2304B3990049C28B /* StickerPreviewPeekContent.swift */; };
D03E3E232304B39A0049C28B /* StickerPackPreviewControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3E1D2304B3990049C28B /* StickerPackPreviewControllerNode.swift */; };
D03E3E242304B39A0049C28B /* StickerPreviewControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3E1E2304B3990049C28B /* StickerPreviewControllerNode.swift */; };
D03E3E252304B39A0049C28B /* StickerPackPreviewGridItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3E1F2304B3990049C28B /* StickerPackPreviewGridItem.swift */; };
D03E3E282304B3FE0049C28B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E272304B3FE0049C28B /* Foundation.framework */; };
D03E3E2A2304B4020049C28B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E292304B4020049C28B /* UIKit.framework */; };
D03E3E2C2304B4040049C28B /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E2B2304B4040049C28B /* Display.framework */; };
D03E3E2E2304B4070049C28B /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E2D2304B4070049C28B /* AsyncDisplayKit.framework */; };
D03E3E302304B40B0049C28B /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E2F2304B40B0049C28B /* Postbox.framework */; };
D03E3E322304B4110049C28B /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E312304B4110049C28B /* TelegramCore.framework */; };
D03E3E342304B4150049C28B /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E332304B4150049C28B /* SwiftSignalKit.framework */; };
D03E3E362304B41A0049C28B /* TelegramUIPreferences.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E352304B41A0049C28B /* TelegramUIPreferences.framework */; };
D03E3E382304B41E0049C28B /* AccountContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E372304B41E0049C28B /* AccountContext.framework */; };
D03E3E3A2304B4240049C28B /* ShareController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E392304B4240049C28B /* ShareController.framework */; };
D03E3E3C2304B4290049C28B /* StickerResources.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E3B2304B4290049C28B /* StickerResources.framework */; };
D03E3E3E2304B42E0049C28B /* AlertUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E3D2304B42E0049C28B /* AlertUI.framework */; };
D03E3E402304B4360049C28B /* TextFormat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E3F2304B4360049C28B /* TextFormat.framework */; };
D03E3E422304B43E0049C28B /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E412304B43E0049C28B /* TelegramPresentationData.framework */; };
D03E3E442304B4410049C28B /* MergeLists.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E432304B4410049C28B /* MergeLists.framework */; };
D03E3E462304B4450049C28B /* ActivityIndicator.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E452304B4450049C28B /* ActivityIndicator.framework */; };
D03E3E4C2304B4E20049C28B /* AnimationUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E4B2304B4E20049C28B /* AnimationUI.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
D03E3E0B2304B3440049C28B /* StickerPackPreviewUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = StickerPackPreviewUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E0E2304B3440049C28B /* StickerPackPreviewUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StickerPackPreviewUI.h; sourceTree = "<group>"; };
D03E3E0F2304B3440049C28B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
D03E3E1A2304B3990049C28B /* StickerPreviewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerPreviewController.swift; sourceTree = "<group>"; };
D03E3E1B2304B3990049C28B /* StickerPackPreviewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerPackPreviewController.swift; sourceTree = "<group>"; };
D03E3E1C2304B3990049C28B /* StickerPreviewPeekContent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerPreviewPeekContent.swift; sourceTree = "<group>"; };
D03E3E1D2304B3990049C28B /* StickerPackPreviewControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerPackPreviewControllerNode.swift; sourceTree = "<group>"; };
D03E3E1E2304B3990049C28B /* StickerPreviewControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerPreviewControllerNode.swift; sourceTree = "<group>"; };
D03E3E1F2304B3990049C28B /* StickerPackPreviewGridItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerPackPreviewGridItem.swift; sourceTree = "<group>"; };
D03E3E272304B3FE0049C28B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
D03E3E292304B4020049C28B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
D03E3E2B2304B4040049C28B /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E2D2304B4070049C28B /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E2F2304B40B0049C28B /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E312304B4110049C28B /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E332304B4150049C28B /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E352304B41A0049C28B /* TelegramUIPreferences.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramUIPreferences.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E372304B41E0049C28B /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E392304B4240049C28B /* ShareController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ShareController.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E3B2304B4290049C28B /* StickerResources.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = StickerResources.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E3D2304B42E0049C28B /* AlertUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AlertUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E3F2304B4360049C28B /* TextFormat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TextFormat.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E412304B43E0049C28B /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E432304B4410049C28B /* MergeLists.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MergeLists.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E452304B4450049C28B /* ActivityIndicator.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ActivityIndicator.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E4B2304B4E20049C28B /* AnimationUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AnimationUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D03E3E082304B3440049C28B /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
D03E3E4C2304B4E20049C28B /* AnimationUI.framework in Frameworks */,
D03E3E462304B4450049C28B /* ActivityIndicator.framework in Frameworks */,
D03E3E442304B4410049C28B /* MergeLists.framework in Frameworks */,
D03E3E422304B43E0049C28B /* TelegramPresentationData.framework in Frameworks */,
D03E3E402304B4360049C28B /* TextFormat.framework in Frameworks */,
D03E3E3E2304B42E0049C28B /* AlertUI.framework in Frameworks */,
D03E3E3C2304B4290049C28B /* StickerResources.framework in Frameworks */,
D03E3E3A2304B4240049C28B /* ShareController.framework in Frameworks */,
D03E3E382304B41E0049C28B /* AccountContext.framework in Frameworks */,
D03E3E362304B41A0049C28B /* TelegramUIPreferences.framework in Frameworks */,
D03E3E342304B4150049C28B /* SwiftSignalKit.framework in Frameworks */,
D03E3E322304B4110049C28B /* TelegramCore.framework in Frameworks */,
D03E3E302304B40B0049C28B /* Postbox.framework in Frameworks */,
D03E3E2E2304B4070049C28B /* AsyncDisplayKit.framework in Frameworks */,
D03E3E2C2304B4040049C28B /* Display.framework in Frameworks */,
D03E3E2A2304B4020049C28B /* UIKit.framework in Frameworks */,
D03E3E282304B3FE0049C28B /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
D03E3E012304B3440049C28B = {
isa = PBXGroup;
children = (
D03E3E0F2304B3440049C28B /* Info.plist */,
D03E3E0D2304B3440049C28B /* Sources */,
D03E3E0C2304B3440049C28B /* Products */,
D03E3E262304B3FE0049C28B /* Frameworks */,
);
sourceTree = "<group>";
};
D03E3E0C2304B3440049C28B /* Products */ = {
isa = PBXGroup;
children = (
D03E3E0B2304B3440049C28B /* StickerPackPreviewUI.framework */,
);
name = Products;
sourceTree = "<group>";
};
D03E3E0D2304B3440049C28B /* Sources */ = {
isa = PBXGroup;
children = (
D03E3E1B2304B3990049C28B /* StickerPackPreviewController.swift */,
D03E3E1D2304B3990049C28B /* StickerPackPreviewControllerNode.swift */,
D03E3E1F2304B3990049C28B /* StickerPackPreviewGridItem.swift */,
D03E3E1A2304B3990049C28B /* StickerPreviewController.swift */,
D03E3E1E2304B3990049C28B /* StickerPreviewControllerNode.swift */,
D03E3E1C2304B3990049C28B /* StickerPreviewPeekContent.swift */,
D03E3E0E2304B3440049C28B /* StickerPackPreviewUI.h */,
);
path = Sources;
sourceTree = "<group>";
};
D03E3E262304B3FE0049C28B /* Frameworks */ = {
isa = PBXGroup;
children = (
D03E3E4B2304B4E20049C28B /* AnimationUI.framework */,
D03E3E452304B4450049C28B /* ActivityIndicator.framework */,
D03E3E432304B4410049C28B /* MergeLists.framework */,
D03E3E412304B43E0049C28B /* TelegramPresentationData.framework */,
D03E3E3F2304B4360049C28B /* TextFormat.framework */,
D03E3E3D2304B42E0049C28B /* AlertUI.framework */,
D03E3E3B2304B4290049C28B /* StickerResources.framework */,
D03E3E392304B4240049C28B /* ShareController.framework */,
D03E3E372304B41E0049C28B /* AccountContext.framework */,
D03E3E352304B41A0049C28B /* TelegramUIPreferences.framework */,
D03E3E332304B4150049C28B /* SwiftSignalKit.framework */,
D03E3E312304B4110049C28B /* TelegramCore.framework */,
D03E3E2F2304B40B0049C28B /* Postbox.framework */,
D03E3E2D2304B4070049C28B /* AsyncDisplayKit.framework */,
D03E3E2B2304B4040049C28B /* Display.framework */,
D03E3E292304B4020049C28B /* UIKit.framework */,
D03E3E272304B3FE0049C28B /* Foundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
D03E3E062304B3440049C28B /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
D03E3E102304B3440049C28B /* StickerPackPreviewUI.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
D03E3E0A2304B3440049C28B /* StickerPackPreviewUI */ = {
isa = PBXNativeTarget;
buildConfigurationList = D03E3E132304B3440049C28B /* Build configuration list for PBXNativeTarget "StickerPackPreviewUI" */;
buildPhases = (
D03E3E062304B3440049C28B /* Headers */,
D03E3E072304B3440049C28B /* Sources */,
D03E3E082304B3440049C28B /* Frameworks */,
D03E3E092304B3440049C28B /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = StickerPackPreviewUI;
productName = StickerPackPreviewUI;
productReference = D03E3E0B2304B3440049C28B /* StickerPackPreviewUI.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
D03E3E022304B3440049C28B /* Project object */ = {
isa = PBXProject;
attributes = {
DefaultBuildSystemTypeForWorkspace = Latest;
LastUpgradeCheck = 1030;
ORGANIZATIONNAME = "Telegram Messenger LLP";
TargetAttributes = {
D03E3E0A2304B3440049C28B = {
CreatedOnToolsVersion = 10.3;
LastSwiftMigration = 1030;
};
};
};
buildConfigurationList = D03E3E052304B3440049C28B /* Build configuration list for PBXProject "StickerPackPreviewUI_Xcode" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = D03E3E012304B3440049C28B;
productRefGroup = D03E3E0C2304B3440049C28B /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
D03E3E0A2304B3440049C28B /* StickerPackPreviewUI */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
D03E3E092304B3440049C28B /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
D03E3E072304B3440049C28B /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D03E3E202304B39A0049C28B /* StickerPreviewController.swift in Sources */,
D03E3E242304B39A0049C28B /* StickerPreviewControllerNode.swift in Sources */,
D03E3E252304B39A0049C28B /* StickerPackPreviewGridItem.swift in Sources */,
D03E3E232304B39A0049C28B /* StickerPackPreviewControllerNode.swift in Sources */,
D03E3E222304B39A0049C28B /* StickerPreviewPeekContent.swift in Sources */,
D03E3E212304B39A0049C28B /* StickerPackPreviewController.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
D03E3E112304B3440049C28B /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugAppStoreLLC;
};
D03E3E122304B3440049C28B /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseAppStoreLLC;
};
D03E3E142304B3440049C28B /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.StickerPackPreviewUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugAppStoreLLC;
};
D03E3E152304B3440049C28B /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.StickerPackPreviewUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseAppStoreLLC;
};
D03E3E162304B3700049C28B /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugHockeyapp;
};
D03E3E172304B3700049C28B /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.StickerPackPreviewUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugHockeyapp;
};
D03E3E182304B37D0049C28B /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseHockeyappInternal;
};
D03E3E192304B37D0049C28B /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.StickerPackPreviewUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseHockeyappInternal;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
D03E3E052304B3440049C28B /* Build configuration list for PBXProject "StickerPackPreviewUI_Xcode" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D03E3E112304B3440049C28B /* DebugAppStoreLLC */,
D03E3E162304B3700049C28B /* DebugHockeyapp */,
D03E3E122304B3440049C28B /* ReleaseAppStoreLLC */,
D03E3E182304B37D0049C28B /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
D03E3E132304B3440049C28B /* Build configuration list for PBXNativeTarget "StickerPackPreviewUI" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D03E3E142304B3440049C28B /* DebugAppStoreLLC */,
D03E3E172304B3700049C28B /* DebugHockeyapp */,
D03E3E152304B3440049C28B /* ReleaseAppStoreLLC */,
D03E3E192304B37D0049C28B /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
/* End XCConfigurationList section */
};
rootObject = D03E3E022304B3440049C28B /* Project object */;
}

View file

@ -9,6 +9,7 @@ import TelegramUIPreferences
import ItemListUI
import OverlayStatusController
import AccountContext
import StickerPackPreviewUI
public enum ArchivedStickerPacksControllerMode {
case stickers

View file

@ -9,6 +9,7 @@ import TelegramUIPreferences
import ItemListUI
import AccountContext
import ItemListPeerItem
import ItemListPeerActionItem
private final class BlockedPeersControllerArguments {
let account: Account

View file

@ -8,6 +8,7 @@ import TelegramPresentationData
import ItemListUI
import AccountContext
import AlertUI
import ItemListAvatarAndNameInfoItem
private let rankMaxLength: Int32 = 16

View file

@ -12,6 +12,7 @@ import TemporaryCachedPeerDataManager
import AlertUI
import UndoUI
import ItemListPeerItem
import ItemListPeerActionItem
private final class ChannelAdminsControllerArguments {
let account: Account

View file

@ -10,6 +10,7 @@ import TelegramStringFormatting
import OverlayStatusController
import AccountContext
import AlertUI
import ItemListAvatarAndNameInfoItem
private final class ChannelBannedMemberControllerArguments {
let account: Account

View file

@ -11,6 +11,7 @@ import OverlayStatusController
import AccountContext
import AlertUI
import ItemListPeerItem
import ItemListPeerActionItem
private final class ChannelDiscussionGroupSetupControllerArguments {
let account: Account

View file

@ -17,6 +17,7 @@ import AlertUI
import GalleryUI
import LegacyUI
import ChatListUI
import ItemListAvatarAndNameInfoItem
private final class ChannelInfoControllerArguments {
let account: Account

View file

@ -13,6 +13,7 @@ import TemporaryCachedPeerDataManager
import AlertUI
import ItemListPeerItem
import TelegramPermissionsUI
import ItemListPeerActionItem
private final class ChannelPermissionsControllerArguments {
let account: Account

View file

@ -35,6 +35,7 @@ import InstantPageUI
import LocationUI
import BotPaymentsUI
import DeleteChatPeerActionSheetItem
import HashtagSearchUI
public enum ChatControllerPeekActions {
case standard
@ -120,7 +121,7 @@ let ChatControllerCount = Atomic<Int32>(value: 0)
public final class ChatControllerImpl: TelegramBaseController, ChatController, GalleryHiddenMediaTarget, UIDropInteractionDelegate {
private var validLayout: ContainerViewLayout?
weak var parentController: ViewController?
public weak var parentController: ViewController?
public var peekActions: ChatControllerPeekActions = .standard
private var didSetup3dTouch: Bool = false

View file

@ -8,6 +8,7 @@ import SwiftSignalKit
import TelegramPresentationData
import MergeLists
import AccountContext
import StickerPackPreviewUI
private struct PeerSpecificPackData {
let peer: Peer

View file

@ -8,6 +8,7 @@ import Postbox
import TelegramPresentationData
import StickerResources
import AccountContext
import AnimationUI
enum ChatMediaInputStickerGridSectionAccessory {
case none

View file

@ -7,6 +7,7 @@ import SwiftSignalKit
import Postbox
import TelegramPresentationData
import StickerResources
import AnimationUI
final class ChatMediaInputStickerPackItem: ListViewItem {
let account: Account

View file

@ -9,6 +9,7 @@ import TelegramPresentationData
import MergeLists
import OverlayStatusController
import AccountContext
import StickerPackPreviewUI
final class TrendingPaneInteraction {
let installPack: (ItemCollectionInfo) -> Void

View file

@ -13,6 +13,7 @@ import AccountContext
import MediaResources
import StickerResources
import ContextUI
import AnimationUI
private let nameFont = Font.medium(14.0)
private let inlineBotPrefixFont = Font.regular(14.0)

View file

@ -16,6 +16,7 @@ import PhotoResources
import TelegramUniversalVideoContent
import TelegramStringFormatting
import GalleryUI
import AnimationUI
private struct FetchControls {
let fetch: (Bool) -> Void

View file

@ -1,60 +0,0 @@
import Foundation
import UIKit
import AsyncDisplayKit
import Display
import TelegramCore
import Postbox
import TelegramPresentationData
final class ChatMultipleAvatarsNavigationNode: ASDisplayNode {
private let multipleAvatarsNode: MultipleAvatarsNode
private weak var account: Account?
private var theme: PresentationTheme?
private var peers: [Peer] = []
override init() {
self.multipleAvatarsNode = MultipleAvatarsNode()
super.init()
self.addSubnode(self.multipleAvatarsNode)
}
override func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize {
if constrainedSize.height.isLessThanOrEqualTo(32.0) {
return CGSize(width: 26.0, height: 26.0)
} else {
return CGSize(width: 37.0, height: 37.0)
}
}
override func layout() {
super.layout()
let bounds = self.bounds
if let account = self.account, let theme = self.theme, !bounds.width.isZero {
let avatarsLayout = MultipleAvatarsNode.asyncLayout(self.multipleAvatarsNode)
let apply = avatarsLayout(account, theme, self.peers, bounds.size)
let _ = apply(false)
}
if self.bounds.size.height.isLessThanOrEqualTo(26.0) {
self.multipleAvatarsNode.frame = bounds.offsetBy(dx: 8.0, dy: 0.0)
} else {
self.multipleAvatarsNode.frame = bounds.offsetBy(dx: 10.0, dy: 1.0)
}
}
func setPeers(account: Account, theme: PresentationTheme, peers: [Peer], animated: Bool) {
self.account = account
self.peers = peers
let bounds = self.bounds
if !bounds.width.isZero {
let avatarsLayout = MultipleAvatarsNode.asyncLayout(self.multipleAvatarsNode)
let apply = avatarsLayout(account, theme, peers, bounds.size)
let _ = apply(animated)
}
}
}

View file

@ -13,6 +13,8 @@ import TemporaryCachedPeerDataManager
import AlertUI
import OpenInExternalAppUI
import InstantPageUI
import HashtagSearchUI
import StickerPackPreviewUI
private final class ChatRecentActionsListOpaqueState {
let entries: [ChatRecentActionsEntry]

View file

@ -10,6 +10,7 @@ import ItemListUI
import AccountContext
import AlertUI
import LegacyUI
import ItemListAvatarAndNameInfoItem
private struct CreateChannelArguments {
let account: Account

View file

@ -15,6 +15,7 @@ import PhotoResources
import LegacyUI
import LocationUI
import ItemListPeerItem
import ItemListAvatarAndNameInfoItem
public enum CreateGroupMode {
case generic

View file

@ -12,6 +12,7 @@ import AccountContext
import AlertUI
import PhotoResources
import MediaResources
import ItemListAvatarAndNameInfoItem
private enum DeviceContactInfoAction {
case sendMessage

View file

@ -11,6 +11,7 @@ import ItemListUI
import AccountContext
import GalleryUI
import LegacyUI
import ItemListAvatarAndNameInfoItem
private struct EditSettingsItemArguments {
let context: AccountContext

View file

@ -8,6 +8,7 @@ import TelegramPresentationData
import TelegramUIPreferences
import ItemListUI
import AccountContext
import StickerPackPreviewUI
private final class FeaturedStickerPacksControllerArguments {
let account: Account

View file

@ -17,6 +17,7 @@ import TelegramUIPrivateModule
import MediaResources
import PhotoResources
import ImageBlur
import AnimationUI
public func fetchCachedResourceRepresentation(account: Account, resource: MediaResource, representation: CachedMediaResourceRepresentation) -> Signal<CachedMediaResourceRepresentationResult, NoError> {
if let representation = representation as? CachedStickerAJpegRepresentation {

View file

@ -24,6 +24,8 @@ import LocationUI
import ItemListPeerItem
import ContactListUI
import ChatListUI
import ItemListAvatarAndNameInfoItem
import ItemListPeerActionItem
private final class GroupInfoArguments {
let context: AccountContext

View file

@ -8,6 +8,7 @@ import TelegramPresentationData
import TelegramUIPreferences
import ItemListUI
import AccountContext
import StickerPackPreviewUI
private final class GroupStickerPackSetupControllerArguments {
let account: Account

View file

@ -8,6 +8,7 @@ import SwiftSignalKit
import TelegramPresentationData
import MergeLists
import AccountContext
import StickerPackPreviewUI
private struct ChatContextResultStableId: Hashable {
let result: ChatContextResult

View file

@ -9,6 +9,7 @@ import AVFoundation
import RadialStatusNode
import StickerResources
import PhotoResources
import AnimationUI
final class HorizontalListContextResultsChatInputPanelItem: ListViewItem {
let account: Account

View file

@ -7,6 +7,7 @@ import AsyncDisplayKit
import Postbox
import StickerResources
import AccountContext
import AnimationUI
final class HorizontalStickerGridItem: GridItem {
let account: Account

View file

@ -8,6 +8,7 @@ import SwiftSignalKit
import TelegramPresentationData
import MergeLists
import AccountContext
import StickerPackPreviewUI
final class HorizontalStickersChatContextPanelInteraction {
var previewedStickerItem: StickerPackItem?

View file

@ -9,6 +9,7 @@ import TelegramUIPreferences
import ItemListUI
import TextFormat
import AccountContext
import StickerPackPreviewUI
private final class InstalledStickerPacksControllerArguments {
let account: Account

View file

@ -8,6 +8,7 @@ import TelegramCore
import TelegramPresentationData
import ItemListUI
import StickerResources
import AnimationUI
struct ItemListStickerPackItemEditing: Equatable {
let editable: Bool

View file

@ -8,6 +8,7 @@ import TelegramCore
import TelegramPresentationData
import StickerResources
import AccountContext
import AnimationUI
class MediaInputPaneTrendingItem: ListViewItem {
let account: Account

View file

@ -1,178 +0,0 @@
import Foundation
import UIKit
import AsyncDisplayKit
import SwiftSignalKit
import Metal
#if false//!targetEnvironment(simulator)
final class MetalAnimationRenderer: ASDisplayNode, AnimationRenderer {
private let device: MTLDevice
private let pipelineState: MTLRenderPipelineState
private let commandQueue: MTLCommandQueue
private let vertexBuffer: MTLBuffer
private let colorTexture: MTLTexture
private let alphaTexture: MTLTexture
private let samplerColor: MTLSamplerState
private let samplerAlpha: MTLSamplerState
private var metalLayer: CAMetalLayer {
return self.layer as! CAMetalLayer
}
override init() {
let device = MTLCreateSystemDefaultDevice()!
self.device = device
do {
let library = try device.makeLibrary(source:
"""
using namespace metal;
struct VertexIn {
packed_float3 position;
packed_float2 texCoord;
};
struct VertexOut {
float4 position [[position]];
float2 texCoord;
};
vertex VertexOut basic_vertex(
const device VertexIn* vertex_array [[ buffer(0) ]],
unsigned int vid [[ vertex_id ]]
) {
VertexIn VertexIn = vertex_array[vid];
VertexOut VertexOut;
VertexOut.position = float4(VertexIn.position, 1.0);
VertexOut.texCoord = VertexIn.texCoord;
return VertexOut;
}
fragment float4 basic_fragment(
VertexOut interpolated [[stage_in]],
texture2d<float> texColor [[ texture(0) ]],
sampler samplerColor [[ sampler(0) ]]//,
//texture2d<float> texA [[ texture(1) ]],
//sampler samplerA [[ sampler(1) ]]
) {
float4 color = texColor.sample(samplerColor, interpolated.texCoord);
float4 alpha = 1.0;//texA.sample(samplerA, interpolated.texCoord);
return float4(color.r * alpha.a, color.g * alpha.a, color.b * alpha.a, alpha.a);
}
""", options: nil)
let fragmentProgram = library.makeFunction(name: "basic_fragment")
let vertexProgram = library.makeFunction(name: "basic_vertex")
let pipelineStateDescriptor = MTLRenderPipelineDescriptor()
pipelineStateDescriptor.vertexFunction = vertexProgram
pipelineStateDescriptor.fragmentFunction = fragmentProgram
pipelineStateDescriptor.colorAttachments[0].pixelFormat = .bgra8Unorm
self.pipelineState = try! device.makeRenderPipelineState(descriptor: pipelineStateDescriptor)
self.commandQueue = device.makeCommandQueue()!
let vertexData: [Float] = [
-1.0, -1.0, 0.0, 0.0, 1.0,
-1.0, 1.0, 0.0, 0.0, 0.0,
1.0, -1.0, 0.0, 1.0, 1.0,
1.0, -1.0, 0.0, 1.0, 1.0,
-1.0, 1.0, 0.0, 0.0, 0.0,
1.0, 1.0, 0.0, 1.0, 0.0
]
let dataSize = vertexData.count * MemoryLayout.size(ofValue: vertexData[0])
self.vertexBuffer = device.makeBuffer(bytes: vertexData, length: dataSize, options: [])!
let colorTextureDesc: MTLTextureDescriptor = MTLTextureDescriptor.texture2DDescriptor(pixelFormat: .pvrtc_rgb_4bpp, width: 512, height: 512, mipmapped: false)
colorTextureDesc.sampleCount = 1
if #available(iOS 9.0, *) {
colorTextureDesc.storageMode = .private
colorTextureDesc.usage = .shaderRead
}
colorTextureDesc.textureType = .type2D
self.colorTexture = device.makeTexture(descriptor: colorTextureDesc)!
let alphaTextureDesc: MTLTextureDescriptor = MTLTextureDescriptor.texture2DDescriptor(pixelFormat: .a8Unorm, width: 320, height: 320, mipmapped: false)
alphaTextureDesc.sampleCount = 1
if #available(iOS 9.0, *) {
alphaTextureDesc.storageMode = .private
alphaTextureDesc.usage = .shaderRead
}
alphaTextureDesc.textureType = .type2D
self.alphaTexture = device.makeTexture(descriptor: alphaTextureDesc)!
let sampler = MTLSamplerDescriptor()
sampler.minFilter = MTLSamplerMinMagFilter.nearest
sampler.magFilter = MTLSamplerMinMagFilter.nearest
sampler.mipFilter = MTLSamplerMipFilter.nearest
sampler.maxAnisotropy = 1
sampler.sAddressMode = MTLSamplerAddressMode.clampToEdge
sampler.tAddressMode = MTLSamplerAddressMode.clampToEdge
sampler.rAddressMode = MTLSamplerAddressMode.clampToEdge
sampler.normalizedCoordinates = true
sampler.lodMinClamp = 0.0
sampler.lodMaxClamp = .greatestFiniteMagnitude
self.samplerColor = device.makeSamplerState(descriptor: sampler)!
self.samplerAlpha = device.makeSamplerState(descriptor: sampler)!
} catch let e {
print(e)
preconditionFailure()
}
super.init()
self.setLayerBlock { () -> CALayer in
return CAMetalLayer()
}
self.metalLayer.device = self.device
self.metalLayer.pixelFormat = .bgra8Unorm
self.metalLayer.framebufferOnly = true
self.metalLayer.isOpaque = false
self.metalLayer.contentsScale = 2.0
}
func render(queue: Queue, width: Int, height: Int, bytes: UnsafeRawPointer, length: Int, completion: @escaping () -> Void) {
if self.metalLayer.bounds.width.isZero {
return
}
let bgrgLength = width * 2 * height
//let alphaLength = width * height
self.colorTexture.replace(region: MTLRegionMake2D(0, 0, width, height), mipmapLevel: 0, withBytes: bytes.assumingMemoryBound(to: UInt8.self), bytesPerRow: width / 2)
//self.alphaTexture.replace(region: MTLRegionMake2D(0, 0, width, height), mipmapLevel: 0, withBytes: bytes.assumingMemoryBound(to: UInt8.self).advanced(by: bgrgLength), bytesPerRow: width)
let renderPassDescriptor = MTLRenderPassDescriptor()
let drawable = self.metalLayer.nextDrawable()!
renderPassDescriptor.colorAttachments[0].texture = drawable.texture
renderPassDescriptor.colorAttachments[0].loadAction = .clear
renderPassDescriptor.colorAttachments[0].clearColor = MTLClearColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
let commandBuffer = commandQueue.makeCommandBuffer()!
let renderEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: renderPassDescriptor)!
renderEncoder.setRenderPipelineState(self.pipelineState)
renderEncoder.setVertexBuffer(self.vertexBuffer, offset: 0, index: 0)
renderEncoder.setFragmentTexture(self.colorTexture, index: 0)
renderEncoder.setFragmentSamplerState(self.samplerColor, index: 0)
renderEncoder.setFragmentTexture(self.alphaTexture, index: 1)
renderEncoder.setFragmentSamplerState(self.samplerAlpha, index: 1)
renderEncoder.drawPrimitives(type: .triangle, vertexStart: 0, vertexCount: 6, instanceCount: 1)
renderEncoder.endEncoding()
commandBuffer.present(drawable)
commandBuffer.commit()
}
}
#endif

View file

@ -1,95 +0,0 @@
import Foundation
import UIKit
import Display
import AsyncDisplayKit
import Postbox
import TelegramCore
import TelegramPresentationData
import AvatarNode
private let avatarFont = UIFont(name: ".SFCompactRounded-Semibold", size: 13.0)!
final class MultipleAvatarsNode: ASDisplayNode {
private var nodes: [(Peer, AvatarNode)] = []
static func asyncLayout(_ current: MultipleAvatarsNode?) -> (Account, PresentationTheme, [Peer], CGSize) -> (Bool) -> MultipleAvatarsNode {
let currentNodes: [(Peer, AvatarNode)] = current?.nodes ?? []
return { account, theme, peers, size in
var node: MultipleAvatarsNode
if let current = current {
node = current
} else {
node = MultipleAvatarsNode()
}
var resultNodes: [(Peer, AvatarNode)] = []
for peer in peers {
var found = false
inner: for (currentPeer, currentNode) in currentNodes {
if currentPeer.id == peer.id {
resultNodes.append((peer, currentNode))
found = true
break inner
}
}
if !found {
resultNodes.append((peer, AvatarNode(font: avatarFont)))
}
if resultNodes.count == 4 {
break
}
}
return { animated in
let partitionSize = floor(size.width / 2.0)
let singleSize = partitionSize - 1.0
var index = 0
for (peer, avatarNode) in resultNodes {
let xPosition: CGFloat = index % 2 == 0 ? 0.0 : size.width - singleSize
let yPosition = index / 2 == 0 ? 0.0 : size.height - singleSize
let avatarFrame = CGRect(origin: CGPoint(x: xPosition, y: yPosition), size: CGSize(width: singleSize, height: singleSize))
if avatarNode.supernode == nil {
node.addSubnode(avatarNode)
avatarNode.frame = avatarFrame
if animated {
avatarNode.layer.animateScale(from: 0.2, to: 1.0, duration: 0.2)
avatarNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2)
}
} else {
let distance = CGPoint(x: avatarNode.frame.midX - avatarFrame.midX, y: avatarNode.frame.midY - avatarFrame.midY)
avatarNode.frame = avatarFrame
if animated {
avatarNode.layer.animatePosition(from: distance, to: CGPoint(), duration: 0.2, timingFunction: CAMediaTimingFunctionName.easeInEaseOut.rawValue, additive: true)
}
}
avatarNode.setPeer(account: account, theme: theme, peer: peer)
index += 1
}
index += 1
for (_, currentNode) in node.nodes {
var found = false
inner: for (_, resultNode) in resultNodes {
if currentNode === resultNode {
found = true
break inner
}
}
if !found {
if animated {
currentNode.layer.animateScale(from: 1.0, to: 0.4, duration: 0.2, removeOnCompletion: false)
currentNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false, completion: { [weak currentNode] _ in
currentNode?.removeFromSupernode()
})
} else {
currentNode.removeFromSupernode()
}
}
}
node.nodes = resultNodes
return node
}
}
}
}

View file

@ -12,6 +12,7 @@ import AccountContext
import Tuples
import StickerResources
import PhotoResources
import AnimationUI
private enum NotificationContentAuthorizationError {
case unauthorized

View file

@ -16,6 +16,7 @@ import ItemListPeerItem
import ContactsPeerItem
import ChatListSearchItemHeader
import ChatListUI
import ItemListPeerActionItem
private final class NotificationExceptionState : Equatable {
let mode:NotificationExceptionMode

View file

@ -12,6 +12,7 @@ import AccountContext
import GalleryUI
import InstantPageUI
import LocationUI
import StickerPackPreviewUI
private enum ChatMessageGalleryControllerData {
case url(String)

View file

@ -10,6 +10,7 @@ import OverlayStatusController
import AlertUI
import PassportUI
import InstantPageUI
import StickerPackPreviewUI
private func defaultNavigationForPeerId(_ peerId: PeerId?, navigation: ChatControllerInteractionNavigateToPeer) -> ChatControllerInteractionNavigateToPeer {
if case .default = navigation {

View file

@ -14,6 +14,7 @@ import AccountContext
import AlertUI
import ItemListPeerItem
import TelegramPermissionsUI
import ItemListPeerActionItem
private struct PeerNearbyEntry {
let peer: (Peer, CachedPeerData?)

View file

@ -9,6 +9,7 @@ import TelegramUIPreferences
import ItemListUI
import AccountContext
import ItemListPeerItem
import ItemListPeerActionItem
private final class SelectivePrivacyPeersControllerArguments {
let account: Account

View file

@ -27,6 +27,8 @@ import SearchUI
import ItemListPeerItem
import CallListUI
import ChatListUI
import ItemListAvatarAndNameInfoItem
import ItemListPeerActionItem
private let maximumNumberOfAccounts = 3

View file

@ -10,6 +10,7 @@ import LegacyComponents
import TelegramUIPrivateModule
import MergeLists
import AccountContext
import StickerPackPreviewUI
final class StickerPaneSearchInteraction {
let open: (StickerPackCollectionInfo) -> Void

View file

@ -8,6 +8,7 @@ import Postbox
import TelegramPresentationData
import StickerResources
import AccountContext
import AnimationUI
final class StickerPaneSearchStickerSection: GridSection {
let code: String

View file

@ -8,6 +8,7 @@ import SwiftSignalKit
import TelegramPresentationData
import MergeLists
import AccountContext
import StickerPackPreviewUI
private struct StickersChatInputContextPanelEntryStableId: Hashable {
let ids: [MediaId]

View file

@ -15,6 +15,4 @@ module TelegramUIPrivateModule {
header "../TGPresentationAutoNightPreferences.h"
header "../TGProxyItem.h"
header "../UIImage+ImageEffects.h"
header "../YUV.h"
header "../../third-party/bc1/TextureCompression.h"
}

View file

@ -10,6 +10,8 @@ import AccountContext
import SafariServices
import OpenInExternalAppUI
import InstantPageUI
import HashtagSearchUI
import StickerPackPreviewUI
func handleTextLinkActionImpl(context: AccountContext, peerId: PeerId?, navigateDisposable: MetaDisposable, controller: ViewController, action: TextLinkItemActionType, itemLink: TextLinkItem) {
let presentImpl: (ViewController, Any?) -> Void = { controllerToPresent, _ in

View file

@ -17,6 +17,7 @@ import ShareController
import AlertUI
import TelegramNotices
import GalleryUI
import ItemListAvatarAndNameInfoItem
private final class UserInfoControllerArguments {
let account: Account

View file

@ -22,7 +22,6 @@
0910B0F121FB3DE100F8F87D /* WallpaperPatternPanelNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0910B0F021FB3DE100F8F87D /* WallpaperPatternPanelNode.swift */; };
091417F221EF4E5D00C8325A /* WallpaperGalleryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091417F121EF4E5D00C8325A /* WallpaperGalleryController.swift */; };
091417F421EF4F5F00C8325A /* WallpaperGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091417F321EF4F5F00C8325A /* WallpaperGalleryItem.swift */; };
091954792294754E00E11046 /* AnimatedStickerUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091954782294754E00E11046 /* AnimatedStickerUtils.swift */; };
091BEAB3214552D9003AEA30 /* Vision.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D02DADBE2138D76F00116225 /* Vision.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
0921F60E228EE000001A13D7 /* ChatMessageActionUrlAuthController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0921F60D228EE000001A13D7 /* ChatMessageActionUrlAuthController.swift */; };
092F368D2154AAEA001A9F49 /* SFCompactRounded-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 092F368C2154AAE9001A9F49 /* SFCompactRounded-Semibold.otf */; };
@ -179,23 +178,6 @@
D00ACA5A2022897D0045D427 /* ProcessedPeerRestrictionText.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00ACA592022897D0045D427 /* ProcessedPeerRestrictionText.swift */; };
D00BDA1F1EE5B69200C64C5E /* ChannelAdminController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00BDA1E1EE5B69200C64C5E /* ChannelAdminController.swift */; };
D010E17D22C238BC009324D4 /* RLottie.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D010E17C22C238BC009324D4 /* RLottie.framework */; };
D01590A622BD460C0017C33E /* MetalAnimationRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01590A522BD460C0017C33E /* MetalAnimationRenderer.swift */; };
D01590A822BD462C0017C33E /* SoftwareAnimationRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01590A722BD462C0017C33E /* SoftwareAnimationRenderer.swift */; };
D01590AB22BD467B0017C33E /* AnimationRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01590AA22BD467B0017C33E /* AnimationRenderer.swift */; };
D01590AE22BD58AD0017C33E /* YUV.h in Headers */ = {isa = PBXBuildFile; fileRef = D01590AC22BD58AD0017C33E /* YUV.h */; };
D01590AF22BD58AD0017C33E /* YUV.m in Sources */ = {isa = PBXBuildFile; fileRef = D01590AD22BD58AD0017C33E /* YUV.m */; };
D01590BA22BDAEBC0017C33E /* ColorVec.h in Headers */ = {isa = PBXBuildFile; fileRef = D01590B022BDAEB30017C33E /* ColorVec.h */; };
D01590BB22BDAEBC0017C33E /* BC1Compression.h in Headers */ = {isa = PBXBuildFile; fileRef = D01590B122BDAEBB0017C33E /* BC1Compression.h */; };
D01590BC22BDAEBC0017C33E /* BMPImage.h in Headers */ = {isa = PBXBuildFile; fileRef = D01590B222BDAEBB0017C33E /* BMPImage.h */; };
D01590BD22BDAEBC0017C33E /* DDSImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D01590B322BDAEBB0017C33E /* DDSImage.cpp */; };
D01590BE22BDAEBC0017C33E /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D01590B422BDAEBB0017C33E /* Image.cpp */; };
D01590BF22BDAEBC0017C33E /* Image.h in Headers */ = {isa = PBXBuildFile; fileRef = D01590B522BDAEBC0017C33E /* Image.h */; };
D01590C022BDAEBC0017C33E /* BC1Compression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D01590B622BDAEBC0017C33E /* BC1Compression.cpp */; };
D01590C122BDAEBC0017C33E /* DDSImage.h in Headers */ = {isa = PBXBuildFile; fileRef = D01590B722BDAEBC0017C33E /* DDSImage.h */; };
D01590C222BDAEBC0017C33E /* TypeDefinitions.h in Headers */ = {isa = PBXBuildFile; fileRef = D01590B822BDAEBC0017C33E /* TypeDefinitions.h */; };
D01590C322BDAEBC0017C33E /* BMPImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D01590B922BDAEBC0017C33E /* BMPImage.cpp */; };
D01590C722BE61CB0017C33E /* TextureCompression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D01590C522BE61CB0017C33E /* TextureCompression.cpp */; };
D01590C922BE62C40017C33E /* TextureCompression.h in Headers */ = {isa = PBXBuildFile; fileRef = D01590C822BE62C40017C33E /* TextureCompression.h */; };
D015E04F225D2E5900CB9E8A /* WebP.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D015E04E225D2E5900CB9E8A /* WebP.framework */; };
D017734C22049BF800DA06A7 /* UpgradedAccounts.swift in Sources */ = {isa = PBXBuildFile; fileRef = D017734B22049BF800DA06A7 /* UpgradedAccounts.swift */; };
D01776BE1F1E76920044446D /* PeerMediaCollectionSectionsNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01776BD1F1E76920044446D /* PeerMediaCollectionSectionsNode.swift */; };
@ -238,11 +220,15 @@
D0383EE6207D299600C45548 /* EmojisChatInputPanelItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0383EE5207D299600C45548 /* EmojisChatInputPanelItem.swift */; };
D038AC5322F88A3600320981 /* ImageBlur.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D038AC5222F88A3600320981 /* ImageBlur.framework */; };
D03AA4DF202DBF6F0056C405 /* ChatContextResultPeekContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03AA4DE202DBF6F0056C405 /* ChatContextResultPeekContentNode.swift */; };
D03AA4E5202DF8840056C405 /* StickerPreviewPeekContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03AA4E4202DF8840056C405 /* StickerPreviewPeekContent.swift */; };
D03AE67322B9459C0078411C /* HockeySDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03AE67222B9459C0078411C /* HockeySDK.framework */; };
D03AE67522B945D30078411C /* BuildConfig.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03AE67422B945D30078411C /* BuildConfig.framework */; };
D03E3D2B23045B120049C28B /* ChatMessageRestrictedBubbleContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3D2A23045B120049C28B /* ChatMessageRestrictedBubbleContentNode.swift */; };
D03E3D4D23045E410049C28B /* PlatformRestrictionMatching.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3D4C23045E410049C28B /* PlatformRestrictionMatching.framework */; };
D03E3D7F2304ACB40049C28B /* HashtagSearchUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3D7E2304ACB40049C28B /* HashtagSearchUI.framework */; };
D03E3DD22304AF8E0049C28B /* ItemListAvatarAndNameInfoItem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DD12304AF8E0049C28B /* ItemListAvatarAndNameInfoItem.framework */; };
D03E3E002304B2AC0049C28B /* ItemListPeerActionItem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3DFF2304B2AC0049C28B /* ItemListPeerActionItem.framework */; };
D03E3E482304B4670049C28B /* StickerPackPreviewUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E472304B4670049C28B /* StickerPackPreviewUI.framework */; };
D03E3E8C2304B6E10049C28B /* YuvConversion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E8B2304B6E10049C28B /* YuvConversion.framework */; };
D04203152037162700490EA5 /* MediaInputPaneTrendingItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04203142037162700490EA5 /* MediaInputPaneTrendingItem.swift */; };
D04281EF200E3D88009DDE36 /* GroupInfoSearchItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04281EE200E3D88009DDE36 /* GroupInfoSearchItem.swift */; };
D04281F1200E4084009DDE36 /* GroupInfoSearchNavigationContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04281F0200E4084009DDE36 /* GroupInfoSearchNavigationContentNode.swift */; };
@ -307,7 +293,6 @@
D081E108217F583F003CD921 /* LanguageLinkPreviewContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D081E107217F583F003CD921 /* LanguageLinkPreviewContentNode.swift */; };
D083491C209361DC008CFD52 /* AvatarGalleryItemFooterContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D083491B209361DC008CFD52 /* AvatarGalleryItemFooterContentNode.swift */; };
D084023420E295F000065674 /* GroupStickerPackSetupController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D084023320E295F000065674 /* GroupStickerPackSetupController.swift */; };
D08557E722C5FEB90026D6D2 /* AnimatedStickerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08557E622C5FEB90026D6D2 /* AnimatedStickerNode.swift */; };
D08799F022F649A600C4D6B3 /* TelegramBaseController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D08799EF22F649A600C4D6B3 /* TelegramBaseController.framework */; };
D0879A0D22F64E4C00C4D6B3 /* DeviceLocationManager.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0879A0C22F64E4C00C4D6B3 /* DeviceLocationManager.framework */; };
D0879B1F22F7189600C4D6B3 /* AvatarNode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0879B1E22F7189600C4D6B3 /* AvatarNode.framework */; };
@ -329,8 +314,6 @@
D091C7A41F8EBB1E00D7DE13 /* ChatPresentationData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D091C7A31F8EBB1E00D7DE13 /* ChatPresentationData.swift */; };
D091C7A61F8ECEA300D7DE13 /* SettingsThemeWallpaperNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D091C7A51F8ECEA300D7DE13 /* SettingsThemeWallpaperNode.swift */; };
D09250061FE5371D003F693F /* GlobalExperimentalSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09250051FE5371D003F693F /* GlobalExperimentalSettings.swift */; };
D0943AF61FDAAE7E001522CC /* MultipleAvatarsNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0943AF51FDAAE7E001522CC /* MultipleAvatarsNode.swift */; };
D0943AFE1FDAE454001522CC /* ChatMultipleAvatarsNavigationNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0943AFD1FDAE454001522CC /* ChatMultipleAvatarsNavigationNode.swift */; };
D0943B001FDAE852001522CC /* ChatFeedNavigationInputPanelNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0943AFF1FDAE852001522CC /* ChatFeedNavigationInputPanelNode.swift */; };
D0943B051FDDFDA0001522CC /* OverlayInstantVideoNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0943B041FDDFDA0001522CC /* OverlayInstantVideoNode.swift */; };
D0943B071FDEC529001522CC /* InstantVideoRadialStatusNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0943B061FDEC528001522CC /* InstantVideoRadialStatusNode.swift */; };
@ -380,42 +363,6 @@
D0AEAE272080D6970013176E /* PaneSearchBarNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AEAE262080D6970013176E /* PaneSearchBarNode.swift */; };
D0AEAE292080FD660013176E /* StickerPaneSearchGlobaltem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AEAE282080FD660013176E /* StickerPaneSearchGlobaltem.swift */; };
D0AF323A1FB1D8D60097362B /* ChatOverlayNavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AF32391FB1D8D60097362B /* ChatOverlayNavigationBar.swift */; };
D0AF796E22C2E26500CECCB8 /* astc.cc in Sources */ = {isa = PBXBuildFile; fileRef = D0AF793622C2E26500CECCB8 /* astc.cc */; };
D0AF796F22C2E26500CECCB8 /* compress_texture.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF793822C2E26500CECCB8 /* compress_texture.h */; };
D0AF797022C2E26500CECCB8 /* integer_sequence_encoding.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF793922C2E26500CECCB8 /* integer_sequence_encoding.h */; };
D0AF797122C2E26500CECCB8 /* range.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF793A22C2E26500CECCB8 /* range.h */; };
D0AF797222C2E26500CECCB8 /* misc.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF793B22C2E26500CECCB8 /* misc.h */; };
D0AF797322C2E26500CECCB8 /* tables_data_size.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF793C22C2E26500CECCB8 /* tables_data_size.h */; };
D0AF797422C2E26500CECCB8 /* matrix.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF793D22C2E26500CECCB8 /* matrix.h */; };
D0AF797522C2E26500CECCB8 /* colors.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF793E22C2E26500CECCB8 /* colors.h */; };
D0AF797622C2E26500CECCB8 /* endpoints_principal_components.cc in Sources */ = {isa = PBXBuildFile; fileRef = D0AF793F22C2E26500CECCB8 /* endpoints_principal_components.cc */; };
D0AF797722C2E26500CECCB8 /* data_size.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF794022C2E26500CECCB8 /* data_size.h */; };
D0AF797822C2E26500CECCB8 /* meson.build in Resources */ = {isa = PBXBuildFile; fileRef = D0AF794122C2E26500CECCB8 /* meson.build */; };
D0AF797922C2E26500CECCB8 /* endpoints_bounding_box.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF794222C2E26500CECCB8 /* endpoints_bounding_box.h */; };
D0AF797A22C2E26500CECCB8 /* tables_color_quantization.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF794322C2E26500CECCB8 /* tables_color_quantization.h */; };
D0AF797B22C2E26500CECCB8 /* tables_integer_sequence_encoding.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF794422C2E26500CECCB8 /* tables_integer_sequence_encoding.h */; };
D0AF797C22C2E26500CECCB8 /* constants.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF794522C2E26500CECCB8 /* constants.h */; };
D0AF797D22C2E26500CECCB8 /* endpoints_min_max.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF794622C2E26500CECCB8 /* endpoints_min_max.h */; };
D0AF797E22C2E26500CECCB8 /* dcheck.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF794722C2E26500CECCB8 /* dcheck.h */; };
D0AF797F22C2E26500CECCB8 /* weights_quantize_table.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF794822C2E26500CECCB8 /* weights_quantize_table.h */; };
D0AF798022C2E26500CECCB8 /* compress_block.cc in Sources */ = {isa = PBXBuildFile; fileRef = D0AF794922C2E26500CECCB8 /* compress_block.cc */; };
D0AF798122C2E26500CECCB8 /* endpoints_principal_components.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF794A22C2E26500CECCB8 /* endpoints_principal_components.h */; };
D0AF798222C2E26500CECCB8 /* bitmanip.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF794B22C2E26500CECCB8 /* bitmanip.h */; };
D0AF798322C2E26500CECCB8 /* endpoints.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF794C22C2E26500CECCB8 /* endpoints.h */; };
D0AF798422C2E26500CECCB8 /* compress_block.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF794D22C2E26500CECCB8 /* compress_block.h */; };
D0AF798522C2E26500CECCB8 /* endpoints_encode.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF794E22C2E26500CECCB8 /* endpoints_encode.h */; };
D0AF798622C2E26500CECCB8 /* weights_quantize.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF794F22C2E26500CECCB8 /* weights_quantize.h */; };
D0AF798722C2E26500CECCB8 /* compress_texture.cc in Sources */ = {isa = PBXBuildFile; fileRef = D0AF795022C2E26500CECCB8 /* compress_texture.cc */; };
D0AF798822C2E26500CECCB8 /* matrix.cc in Sources */ = {isa = PBXBuildFile; fileRef = D0AF795122C2E26500CECCB8 /* matrix.cc */; };
D0AF798922C2E26500CECCB8 /* vector.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF795222C2E26500CECCB8 /* vector.h */; };
D0AF798A22C2E26500CECCB8 /* endpoints_quantize.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF795322C2E26500CECCB8 /* endpoints_quantize.h */; };
D0AF798B22C2E26500CECCB8 /* store_block.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF795422C2E26500CECCB8 /* store_block.h */; };
D0AF798C22C2E26500CECCB8 /* color.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF795622C2E26500CECCB8 /* color.h */; };
D0AF798D22C2E26500CECCB8 /* bgra.cc in Sources */ = {isa = PBXBuildFile; fileRef = D0AF795722C2E26500CECCB8 /* bgra.cc */; };
D0AF798E22C2E26500CECCB8 /* compressed.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF795822C2E26500CECCB8 /* compressed.h */; };
D0AF798F22C2E26500CECCB8 /* compressed.cc in Sources */ = {isa = PBXBuildFile; fileRef = D0AF795922C2E26500CECCB8 /* compressed.cc */; };
D0AF799022C2E26500CECCB8 /* bgra.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF795A22C2E26500CECCB8 /* bgra.h */; };
D0AF79A322C2E36400CECCB8 /* astc.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AF79A222C2E36400CECCB8 /* astc.h */; };
D0B21B15220D85DD003F741D /* TabBarAccountSwitchController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B21B14220D85DD003F741D /* TabBarAccountSwitchController.swift */; };
D0B21B17220D85E7003F741D /* TabBarAccountSwitchControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B21B16220D85E7003F741D /* TabBarAccountSwitchControllerNode.swift */; };
D0B21B1F22156D92003F741D /* LegacyCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B21B1E22156D92003F741D /* LegacyCache.swift */; };
@ -640,8 +587,6 @@
D0EC6D731EB9F58800EBF1C3 /* AuthorizationSequenceSignUpController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F53BF61E79593500117362 /* AuthorizationSequenceSignUpController.swift */; };
D0EC6D741EB9F58800EBF1C3 /* AuthorizationSequenceSignUpControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F53BF81E79593F00117362 /* AuthorizationSequenceSignUpControllerNode.swift */; };
D0EC6D751EB9F58800EBF1C3 /* TelegramRootController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05174C21EAE583800A1BF36 /* TelegramRootController.swift */; };
D0EC6D7F1EB9F58800EBF1C3 /* HashtagSearchController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01749501E1067E40057C89A /* HashtagSearchController.swift */; };
D0EC6D801EB9F58800EBF1C3 /* HashtagSearchControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01749521E1068820057C89A /* HashtagSearchControllerNode.swift */; };
D0EC6D811EB9F58800EBF1C3 /* ChatController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69E0E1D6B8ACF0046BCD6 /* ChatController.swift */; };
D0EC6D821EB9F58800EBF1C3 /* ChatControllerInteraction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69E0F1D6B8ACF0046BCD6 /* ChatControllerInteraction.swift */; };
D0EC6D831EB9F58800EBF1C3 /* ChatControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69E101D6B8ACF0046BCD6 /* ChatControllerNode.swift */; };
@ -752,11 +697,6 @@
D0EC6DF91EB9F58900EBF1C3 /* PeerMediaCollectionInterfaceStateButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DE77241D93225E002B8809 /* PeerMediaCollectionInterfaceStateButtons.swift */; };
D0EC6DFB1EB9F58900EBF1C3 /* AvatarGalleryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0575AF91EA0FDA7006F2541 /* AvatarGalleryController.swift */; };
D0EC6E0E1EB9F58900EBF1C3 /* PeerAvatarImageGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0575AFB1EA104A6006F2541 /* PeerAvatarImageGalleryItem.swift */; };
D0EC6E231EB9F58900EBF1C3 /* StickerPackPreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D748051E7AF63800F4B1F6 /* StickerPackPreviewController.swift */; };
D0EC6E241EB9F58900EBF1C3 /* StickerPackPreviewControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D748071E7AF64400F4B1F6 /* StickerPackPreviewControllerNode.swift */; };
D0EC6E251EB9F58900EBF1C3 /* StickerPackPreviewGridItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D7480E1E7B1BD600F4B1F6 /* StickerPackPreviewGridItem.swift */; };
D0EC6E261EB9F58900EBF1C3 /* StickerPreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE383B1E7C3E51000079AF /* StickerPreviewController.swift */; };
D0EC6E271EB9F58900EBF1C3 /* StickerPreviewControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE931A1E92DFBA00DCC1E6 /* StickerPreviewControllerNode.swift */; };
D0EC6E2B1EB9F58900EBF1C3 /* ComposeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D087750F1E3F46A400A97350 /* ComposeController.swift */; };
D0EC6E2C1EB9F58900EBF1C3 /* ComposeControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08775111E3F46AB00A97350 /* ComposeControllerNode.swift */; };
D0EC6E2D1EB9F58900EBF1C3 /* CounterContollerTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D087751D1E3F579300A97350 /* CounterContollerTitleView.swift */; };
@ -766,8 +706,6 @@
D0EC6E311EB9F58900EBF1C3 /* ContactSelectionControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC38801E40F1D80044D6FE /* ContactSelectionControllerNode.swift */; };
D0EC6E321EB9F58900EBF1C3 /* CreateGroupController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC38691E3FB94D0044D6FE /* CreateGroupController.swift */; };
D0EC6E331EB9F58900EBF1C3 /* CreateChannelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D018D3341E6489EC00C5E089 /* CreateChannelController.swift */; };
D0EC6E351EB9F58900EBF1C3 /* ItemListAvatarAndNameItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D003702D1DA43052004308D3 /* ItemListAvatarAndNameItem.swift */; };
D0EC6E3C1EB9F58900EBF1C3 /* ItemListPeerActionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B843DA1DAAB138005F29E1 /* ItemListPeerActionItem.swift */; };
D0EC6E4D1EB9F58900EBF1C3 /* PeerInfoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B843CC1DA903BB005F29E1 /* PeerInfoController.swift */; };
D0EC6E4E1EB9F58900EBF1C3 /* GroupInfoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0486F091E523C8500091F0C /* GroupInfoController.swift */; };
D0EC6E4F1EB9F58900EBF1C3 /* ChannelVisibilityController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E5E0E1E55F8B90029569A /* ChannelVisibilityController.swift */; };
@ -867,7 +805,6 @@
0910B0F021FB3DE100F8F87D /* WallpaperPatternPanelNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WallpaperPatternPanelNode.swift; sourceTree = "<group>"; };
091417F121EF4E5D00C8325A /* WallpaperGalleryController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WallpaperGalleryController.swift; sourceTree = "<group>"; };
091417F321EF4F5F00C8325A /* WallpaperGalleryItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WallpaperGalleryItem.swift; sourceTree = "<group>"; };
091954782294754E00E11046 /* AnimatedStickerUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnimatedStickerUtils.swift; sourceTree = "<group>"; };
0921F60D228EE000001A13D7 /* ChatMessageActionUrlAuthController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageActionUrlAuthController.swift; sourceTree = "<group>"; };
092F368C2154AAE9001A9F49 /* SFCompactRounded-Semibold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SFCompactRounded-Semibold.otf"; sourceTree = "<group>"; };
092F368F2157AB46001A9F49 /* ItemListCallListItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemListCallListItem.swift; sourceTree = "<group>"; };
@ -985,7 +922,6 @@
D002A0D81E9BEC8100A81812 /* SoftwareVideoLayerFrameManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SoftwareVideoLayerFrameManager.swift; sourceTree = "<group>"; };
D002A0DA1E9C190700A81812 /* SoftwareVideoThumbnailLayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SoftwareVideoThumbnailLayer.swift; sourceTree = "<group>"; };
D002A0DC1E9CD52A00A81812 /* ChatMediaInputRecentGifsItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMediaInputRecentGifsItem.swift; sourceTree = "<group>"; };
D003702D1DA43052004308D3 /* ItemListAvatarAndNameItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemListAvatarAndNameItem.swift; sourceTree = "<group>"; };
D0068FA721760FA300D1B315 /* StoreDownloadedMedia.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreDownloadedMedia.swift; sourceTree = "<group>"; };
D007019B2029E8F2006B9E34 /* LegacyICloudFileController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyICloudFileController.swift; sourceTree = "<group>"; };
D007019D2029EFDD006B9E34 /* ICloudResources.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ICloudResources.swift; sourceTree = "<group>"; };
@ -1039,26 +975,7 @@
D0105D591D80B957008755D8 /* ChatChannelSubscriberInputPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatChannelSubscriberInputPanelNode.swift; sourceTree = "<group>"; };
D010E17C22C238BC009324D4 /* RLottie.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RLottie.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0127A0C1E6424AC003BFF2E /* ChatPinnedMessageTitlePanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatPinnedMessageTitlePanelNode.swift; sourceTree = "<group>"; };
D01590A522BD460C0017C33E /* MetalAnimationRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetalAnimationRenderer.swift; sourceTree = "<group>"; };
D01590A722BD462C0017C33E /* SoftwareAnimationRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoftwareAnimationRenderer.swift; sourceTree = "<group>"; };
D01590AA22BD467B0017C33E /* AnimationRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnimationRenderer.swift; sourceTree = "<group>"; };
D01590AC22BD58AD0017C33E /* YUV.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YUV.h; sourceTree = "<group>"; };
D01590AD22BD58AD0017C33E /* YUV.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YUV.m; sourceTree = "<group>"; };
D01590B022BDAEB30017C33E /* ColorVec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ColorVec.h; path = "third-party/bc1/ColorVec.h"; sourceTree = SOURCE_ROOT; };
D01590B122BDAEBB0017C33E /* BC1Compression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BC1Compression.h; path = "third-party/bc1/BC1Compression.h"; sourceTree = SOURCE_ROOT; };
D01590B222BDAEBB0017C33E /* BMPImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BMPImage.h; path = "third-party/bc1/BMPImage.h"; sourceTree = SOURCE_ROOT; };
D01590B322BDAEBB0017C33E /* DDSImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DDSImage.cpp; path = "third-party/bc1/DDSImage.cpp"; sourceTree = SOURCE_ROOT; };
D01590B422BDAEBB0017C33E /* Image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Image.cpp; path = "third-party/bc1/Image.cpp"; sourceTree = SOURCE_ROOT; };
D01590B522BDAEBC0017C33E /* Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Image.h; path = "third-party/bc1/Image.h"; sourceTree = SOURCE_ROOT; };
D01590B622BDAEBC0017C33E /* BC1Compression.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BC1Compression.cpp; path = "third-party/bc1/BC1Compression.cpp"; sourceTree = SOURCE_ROOT; };
D01590B722BDAEBC0017C33E /* DDSImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DDSImage.h; path = "third-party/bc1/DDSImage.h"; sourceTree = SOURCE_ROOT; };
D01590B822BDAEBC0017C33E /* TypeDefinitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TypeDefinitions.h; path = "third-party/bc1/TypeDefinitions.h"; sourceTree = SOURCE_ROOT; };
D01590B922BDAEBC0017C33E /* BMPImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BMPImage.cpp; path = "third-party/bc1/BMPImage.cpp"; sourceTree = SOURCE_ROOT; };
D01590C522BE61CB0017C33E /* TextureCompression.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TextureCompression.cpp; path = "../third-party/bc1/TextureCompression.cpp"; sourceTree = "<group>"; };
D01590C822BE62C40017C33E /* TextureCompression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextureCompression.h; path = "third-party/bc1/TextureCompression.h"; sourceTree = SOURCE_ROOT; };
D015E04E225D2E5900CB9E8A /* WebP.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = WebP.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D01749501E1067E40057C89A /* HashtagSearchController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HashtagSearchController.swift; sourceTree = "<group>"; };
D01749521E1068820057C89A /* HashtagSearchControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HashtagSearchControllerNode.swift; sourceTree = "<group>"; };
D01749561E1087CC0057C89A /* ChatBotStartInputPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatBotStartInputPanelNode.swift; sourceTree = "<group>"; };
D017734B22049BF800DA06A7 /* UpgradedAccounts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpgradedAccounts.swift; sourceTree = "<group>"; };
D01776BD1F1E76920044446D /* PeerMediaCollectionSectionsNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerMediaCollectionSectionsNode.swift; sourceTree = "<group>"; };
@ -1135,7 +1052,6 @@
D039EB071DEC725600886EBC /* ChatTextInputAudioRecordingTimeNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatTextInputAudioRecordingTimeNode.swift; sourceTree = "<group>"; };
D039EB091DEC7A8700886EBC /* ChatTextInputAudioRecordingCancelIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatTextInputAudioRecordingCancelIndicator.swift; sourceTree = "<group>"; };
D03AA4DE202DBF6F0056C405 /* ChatContextResultPeekContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatContextResultPeekContentNode.swift; sourceTree = "<group>"; };
D03AA4E4202DF8840056C405 /* StickerPreviewPeekContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StickerPreviewPeekContent.swift; sourceTree = "<group>"; };
D03ADB471D703268005A521C /* ChatInterfaceState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatInterfaceState.swift; sourceTree = "<group>"; };
D03ADB4A1D70443F005A521C /* ReplyAccessoryPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReplyAccessoryPanelNode.swift; sourceTree = "<group>"; };
D03ADB4C1D7045C9005A521C /* ChatInterfaceStateAccessoryPanels.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatInterfaceStateAccessoryPanels.swift; sourceTree = "<group>"; };
@ -1144,6 +1060,11 @@
D03AE67422B945D30078411C /* BuildConfig.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = BuildConfig.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3D2A23045B120049C28B /* ChatMessageRestrictedBubbleContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageRestrictedBubbleContentNode.swift; sourceTree = "<group>"; };
D03E3D4C23045E410049C28B /* PlatformRestrictionMatching.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PlatformRestrictionMatching.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3D7E2304ACB40049C28B /* HashtagSearchUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = HashtagSearchUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DD12304AF8E0049C28B /* ItemListAvatarAndNameInfoItem.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ItemListAvatarAndNameInfoItem.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3DFF2304B2AC0049C28B /* ItemListPeerActionItem.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ItemListPeerActionItem.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E472304B4670049C28B /* StickerPackPreviewUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = StickerPackPreviewUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E3E8B2304B6E10049C28B /* YuvConversion.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = YuvConversion.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D03E5E081E55C49C0029569A /* DebugAccountsController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DebugAccountsController.swift; sourceTree = "<group>"; };
D03E5E0E1E55F8B90029569A /* ChannelVisibilityController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChannelVisibilityController.swift; sourceTree = "<group>"; };
D04203142037162700490EA5 /* MediaInputPaneTrendingItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaInputPaneTrendingItem.swift; sourceTree = "<group>"; };
@ -1264,7 +1185,6 @@
D081E107217F583F003CD921 /* LanguageLinkPreviewContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageLinkPreviewContentNode.swift; sourceTree = "<group>"; };
D083491B209361DC008CFD52 /* AvatarGalleryItemFooterContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarGalleryItemFooterContentNode.swift; sourceTree = "<group>"; };
D084023320E295F000065674 /* GroupStickerPackSetupController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupStickerPackSetupController.swift; sourceTree = "<group>"; };
D08557E622C5FEB90026D6D2 /* AnimatedStickerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnimatedStickerNode.swift; sourceTree = "<group>"; };
D08775081E3E59DE00A97350 /* PeerNotificationSoundStrings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerNotificationSoundStrings.swift; sourceTree = "<group>"; };
D087750F1E3F46A400A97350 /* ComposeController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ComposeController.swift; sourceTree = "<group>"; };
D08775111E3F46AB00A97350 /* ComposeControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ComposeControllerNode.swift; sourceTree = "<group>"; };
@ -1299,8 +1219,6 @@
D091C7A31F8EBB1E00D7DE13 /* ChatPresentationData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatPresentationData.swift; sourceTree = "<group>"; };
D091C7A51F8ECEA300D7DE13 /* SettingsThemeWallpaperNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsThemeWallpaperNode.swift; sourceTree = "<group>"; };
D09250051FE5371D003F693F /* GlobalExperimentalSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalExperimentalSettings.swift; sourceTree = "<group>"; };
D0943AF51FDAAE7E001522CC /* MultipleAvatarsNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultipleAvatarsNode.swift; sourceTree = "<group>"; };
D0943AFD1FDAE454001522CC /* ChatMultipleAvatarsNavigationNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMultipleAvatarsNavigationNode.swift; sourceTree = "<group>"; };
D0943AFF1FDAE852001522CC /* ChatFeedNavigationInputPanelNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatFeedNavigationInputPanelNode.swift; sourceTree = "<group>"; };
D0943B041FDDFDA0001522CC /* OverlayInstantVideoNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverlayInstantVideoNode.swift; sourceTree = "<group>"; };
D0943B061FDEC528001522CC /* InstantVideoRadialStatusNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstantVideoRadialStatusNode.swift; sourceTree = "<group>"; };
@ -1363,42 +1281,6 @@
D0AEAE262080D6970013176E /* PaneSearchBarNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaneSearchBarNode.swift; sourceTree = "<group>"; };
D0AEAE282080FD660013176E /* StickerPaneSearchGlobaltem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StickerPaneSearchGlobaltem.swift; sourceTree = "<group>"; };
D0AF32391FB1D8D60097362B /* ChatOverlayNavigationBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatOverlayNavigationBar.swift; sourceTree = "<group>"; };
D0AF793622C2E26500CECCB8 /* astc.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = astc.cc; sourceTree = "<group>"; };
D0AF793822C2E26500CECCB8 /* compress_texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compress_texture.h; sourceTree = "<group>"; };
D0AF793922C2E26500CECCB8 /* integer_sequence_encoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = integer_sequence_encoding.h; sourceTree = "<group>"; };
D0AF793A22C2E26500CECCB8 /* range.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = range.h; sourceTree = "<group>"; };
D0AF793B22C2E26500CECCB8 /* misc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = misc.h; sourceTree = "<group>"; };
D0AF793C22C2E26500CECCB8 /* tables_data_size.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tables_data_size.h; sourceTree = "<group>"; };
D0AF793D22C2E26500CECCB8 /* matrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = matrix.h; sourceTree = "<group>"; };
D0AF793E22C2E26500CECCB8 /* colors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = colors.h; sourceTree = "<group>"; };
D0AF793F22C2E26500CECCB8 /* endpoints_principal_components.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = endpoints_principal_components.cc; sourceTree = "<group>"; };
D0AF794022C2E26500CECCB8 /* data_size.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = data_size.h; sourceTree = "<group>"; };
D0AF794122C2E26500CECCB8 /* meson.build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = meson.build; sourceTree = "<group>"; };
D0AF794222C2E26500CECCB8 /* endpoints_bounding_box.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = endpoints_bounding_box.h; sourceTree = "<group>"; };
D0AF794322C2E26500CECCB8 /* tables_color_quantization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tables_color_quantization.h; sourceTree = "<group>"; };
D0AF794422C2E26500CECCB8 /* tables_integer_sequence_encoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tables_integer_sequence_encoding.h; sourceTree = "<group>"; };
D0AF794522C2E26500CECCB8 /* constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = constants.h; sourceTree = "<group>"; };
D0AF794622C2E26500CECCB8 /* endpoints_min_max.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = endpoints_min_max.h; sourceTree = "<group>"; };
D0AF794722C2E26500CECCB8 /* dcheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dcheck.h; sourceTree = "<group>"; };
D0AF794822C2E26500CECCB8 /* weights_quantize_table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = weights_quantize_table.h; sourceTree = "<group>"; };
D0AF794922C2E26500CECCB8 /* compress_block.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = compress_block.cc; sourceTree = "<group>"; };
D0AF794A22C2E26500CECCB8 /* endpoints_principal_components.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = endpoints_principal_components.h; sourceTree = "<group>"; };
D0AF794B22C2E26500CECCB8 /* bitmanip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitmanip.h; sourceTree = "<group>"; };
D0AF794C22C2E26500CECCB8 /* endpoints.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = endpoints.h; sourceTree = "<group>"; };
D0AF794D22C2E26500CECCB8 /* compress_block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compress_block.h; sourceTree = "<group>"; };
D0AF794E22C2E26500CECCB8 /* endpoints_encode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = endpoints_encode.h; sourceTree = "<group>"; };
D0AF794F22C2E26500CECCB8 /* weights_quantize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = weights_quantize.h; sourceTree = "<group>"; };
D0AF795022C2E26500CECCB8 /* compress_texture.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = compress_texture.cc; sourceTree = "<group>"; };
D0AF795122C2E26500CECCB8 /* matrix.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = matrix.cc; sourceTree = "<group>"; };
D0AF795222C2E26500CECCB8 /* vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector.h; sourceTree = "<group>"; };
D0AF795322C2E26500CECCB8 /* endpoints_quantize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = endpoints_quantize.h; sourceTree = "<group>"; };
D0AF795422C2E26500CECCB8 /* store_block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = store_block.h; sourceTree = "<group>"; };
D0AF795622C2E26500CECCB8 /* color.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = color.h; sourceTree = "<group>"; };
D0AF795722C2E26500CECCB8 /* bgra.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bgra.cc; sourceTree = "<group>"; };
D0AF795822C2E26500CECCB8 /* compressed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compressed.h; sourceTree = "<group>"; };
D0AF795922C2E26500CECCB8 /* compressed.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = compressed.cc; sourceTree = "<group>"; };
D0AF795A22C2E26500CECCB8 /* bgra.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bgra.h; sourceTree = "<group>"; };
D0AF79A222C2E36400CECCB8 /* astc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = astc.h; sourceTree = "<group>"; };
D0B21B14220D85DD003F741D /* TabBarAccountSwitchController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabBarAccountSwitchController.swift; sourceTree = "<group>"; };
D0B21B16220D85E7003F741D /* TabBarAccountSwitchControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabBarAccountSwitchControllerNode.swift; sourceTree = "<group>"; };
D0B21B1E22156D92003F741D /* LegacyCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyCache.swift; sourceTree = "<group>"; };
@ -1415,7 +1297,6 @@
D0B7F8E11D8A18070045D939 /* PeerMediaCollectionController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerMediaCollectionController.swift; sourceTree = "<group>"; };
D0B7F8E71D8A1F5F0045D939 /* PeerMediaCollectionControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerMediaCollectionControllerNode.swift; sourceTree = "<group>"; };
D0B843CC1DA903BB005F29E1 /* PeerInfoController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerInfoController.swift; sourceTree = "<group>"; };
D0B843DA1DAAB138005F29E1 /* ItemListPeerActionItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemListPeerActionItem.swift; sourceTree = "<group>"; };
D0B85C1B1FF6F76000E795B4 /* AuthorizationSequencePasswordRecoveryController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorizationSequencePasswordRecoveryController.swift; sourceTree = "<group>"; };
D0B85C1D1FF6F76600E795B4 /* AuthorizationSequencePasswordRecoveryControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorizationSequencePasswordRecoveryControllerNode.swift; sourceTree = "<group>"; };
D0B85C201FF70BEC00E795B4 /* AuthorizationSequenceAwaitingAccountResetControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorizationSequenceAwaitingAccountResetControllerNode.swift; sourceTree = "<group>"; };
@ -1431,8 +1312,6 @@
D0BCC3D1203F0A6C008126C2 /* StringForMessageTimestampStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringForMessageTimestampStatus.swift; sourceTree = "<group>"; };
D0BCC3D320404CC7008126C2 /* ChatMessageActionSheetController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageActionSheetController.swift; sourceTree = "<group>"; };
D0BCC3D520404CD8008126C2 /* ChatMessageActionSheetControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageActionSheetControllerNode.swift; sourceTree = "<group>"; };
D0BE383B1E7C3E51000079AF /* StickerPreviewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerPreviewController.swift; sourceTree = "<group>"; };
D0BE931A1E92DFBA00DCC1E6 /* StickerPreviewControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerPreviewControllerNode.swift; sourceTree = "<group>"; };
D0BFAE4520AB04FB00793CF2 /* ChatRestrictedInputPanelNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatRestrictedInputPanelNode.swift; sourceTree = "<group>"; };
D0BFAE4D20AB1D7B00793CF2 /* DisabledContextResultsChatInputContextPanelNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisabledContextResultsChatInputContextPanelNode.swift; sourceTree = "<group>"; };
D0BFAE4F20AB2A1300793CF2 /* PeerBanTimeoutController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeerBanTimeoutController.swift; sourceTree = "<group>"; };
@ -1554,9 +1433,6 @@
D0D268991D79CF9F00C422DA /* ChatPanelInterfaceInteraction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatPanelInterfaceInteraction.swift; sourceTree = "<group>"; };
D0D3281322F31B3000D07EE2 /* TelegramUpdateUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramUpdateUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0D4345B1F97CEAA00CC1806 /* ProxyServerSettingsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyServerSettingsController.swift; sourceTree = "<group>"; };
D0D748051E7AF63800F4B1F6 /* StickerPackPreviewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerPackPreviewController.swift; sourceTree = "<group>"; };
D0D748071E7AF64400F4B1F6 /* StickerPackPreviewControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerPackPreviewControllerNode.swift; sourceTree = "<group>"; };
D0D7480E1E7B1BD600F4B1F6 /* StickerPackPreviewGridItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerPackPreviewGridItem.swift; sourceTree = "<group>"; };
D0DC35431DE32230000195EB /* ChatInterfaceStateContextQueries.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatInterfaceStateContextQueries.swift; sourceTree = "<group>"; };
D0DC35451DE35805000195EB /* MentionChatInputPanelItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MentionChatInputPanelItem.swift; sourceTree = "<group>"; };
D0DC35491DE366CD000195EB /* CommandChatInputContextPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommandChatInputContextPanelNode.swift; sourceTree = "<group>"; };
@ -1738,6 +1614,11 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
D03E3E8C2304B6E10049C28B /* YuvConversion.framework in Frameworks */,
D03E3E482304B4670049C28B /* StickerPackPreviewUI.framework in Frameworks */,
D03E3E002304B2AC0049C28B /* ItemListPeerActionItem.framework in Frameworks */,
D03E3DD22304AF8E0049C28B /* ItemListAvatarAndNameInfoItem.framework in Frameworks */,
D03E3D7F2304ACB40049C28B /* HashtagSearchUI.framework in Frameworks */,
D03E3D4D23045E410049C28B /* PlatformRestrictionMatching.framework in Frameworks */,
D0C9CBD72302C09000FAB518 /* TextSelectionNode.framework in Frameworks */,
D0C9CBB62302B65600FAB518 /* LanguageSuggestionUI.framework in Frameworks */,
@ -1892,15 +1773,6 @@
name = "Peers Nearby";
sourceTree = "<group>";
};
0919546D229458E900E11046 /* Animated Stickers */ = {
isa = PBXGroup;
children = (
091954782294754E00E11046 /* AnimatedStickerUtils.swift */,
D08557E622C5FEB90026D6D2 /* AnimatedStickerNode.swift */,
);
name = "Animated Stickers";
sourceTree = "<group>";
};
092F368B2154AAD6001A9F49 /* Fonts */ = {
isa = PBXGroup;
children = (
@ -1979,13 +1851,6 @@
name = "Recent Sessions";
sourceTree = "<group>";
};
09CC52A7210615AA000578F8 /* Web Embed */ = {
isa = PBXGroup;
children = (
);
name = "Web Embed";
sourceTree = "<group>";
};
09CE950F2237F3A300A7D2C3 /* Search */ = {
isa = PBXGroup;
children = (
@ -2115,44 +1980,10 @@
D01590A922BD46690017C33E /* Animation */ = {
isa = PBXGroup;
children = (
D0AF793422C2E26500CECCB8 /* astc */,
D01590B622BDAEBC0017C33E /* BC1Compression.cpp */,
D01590B122BDAEBB0017C33E /* BC1Compression.h */,
D01590B922BDAEBC0017C33E /* BMPImage.cpp */,
D01590B222BDAEBB0017C33E /* BMPImage.h */,
D01590B022BDAEB30017C33E /* ColorVec.h */,
D01590B322BDAEBB0017C33E /* DDSImage.cpp */,
D01590B722BDAEBC0017C33E /* DDSImage.h */,
D01590B422BDAEBB0017C33E /* Image.cpp */,
D01590B522BDAEBC0017C33E /* Image.h */,
D01590B822BDAEBC0017C33E /* TypeDefinitions.h */,
D01590AA22BD467B0017C33E /* AnimationRenderer.swift */,
D01590A522BD460C0017C33E /* MetalAnimationRenderer.swift */,
D01590A722BD462C0017C33E /* SoftwareAnimationRenderer.swift */,
D01590AC22BD58AD0017C33E /* YUV.h */,
D01590AD22BD58AD0017C33E /* YUV.m */,
D01590C822BE62C40017C33E /* TextureCompression.h */,
D01590C522BE61CB0017C33E /* TextureCompression.cpp */,
);
name = Animation;
sourceTree = "<group>";
};
D017494F1E1067C00057C89A /* Hashtag Search */ = {
isa = PBXGroup;
children = (
D01749501E1067E40057C89A /* HashtagSearchController.swift */,
D01749521E1068820057C89A /* HashtagSearchControllerNode.swift */,
);
name = "Hashtag Search";
sourceTree = "<group>";
};
D01776B61F1D6CCF0044446D /* Radial Status */ = {
isa = PBXGroup;
children = (
);
name = "Radial Status";
sourceTree = "<group>";
};
D01848F021A2323D00B6DEBD /* Strings */ = {
isa = PBXGroup;
children = (
@ -2175,14 +2006,6 @@
name = "Create Channel";
sourceTree = "<group>";
};
D01B27931E38F3920022A4C0 /* Item List */ = {
isa = PBXGroup;
children = (
D0E6521D1E3A2305004EEA91 /* Items */,
);
name = "Item List";
sourceTree = "<group>";
};
D01C06AD1FBB45ED001561AB /* Join Link Preview */ = {
isa = PBXGroup;
children = (
@ -2386,7 +2209,6 @@
D0477D191F617E4B00412B44 /* Video */ = {
isa = PBXGroup;
children = (
09CC52A7210615AA000578F8 /* Web Embed */,
D0943B041FDDFDA0001522CC /* OverlayInstantVideoNode.swift */,
D0CFBB941FD8B05000B65C0D /* OverlayInstantVideoDecoration.swift */,
D0943B061FDEC528001522CC /* InstantVideoRadialStatusNode.swift */,
@ -2591,6 +2413,11 @@
D08D45281D5E340200A7428A /* Frameworks */ = {
isa = PBXGroup;
children = (
D03E3E8B2304B6E10049C28B /* YuvConversion.framework */,
D03E3E472304B4670049C28B /* StickerPackPreviewUI.framework */,
D03E3DFF2304B2AC0049C28B /* ItemListPeerActionItem.framework */,
D03E3DD12304AF8E0049C28B /* ItemListAvatarAndNameInfoItem.framework */,
D03E3D7E2304ACB40049C28B /* HashtagSearchUI.framework */,
D03E3D4C23045E410049C28B /* PlatformRestrictionMatching.framework */,
D0C9CBD62302C09000FAB518 /* TextSelectionNode.framework */,
D0C9CBB52302B65600FAB518 /* LanguageSuggestionUI.framework */,
@ -2766,74 +2593,6 @@
path = "Bridge Audio";
sourceTree = "<group>";
};
D0AF793422C2E26500CECCB8 /* astc */ = {
isa = PBXGroup;
children = (
D0AF793522C2E26500CECCB8 /* compress */,
D0AF793722C2E26500CECCB8 /* astc */,
D0AF795522C2E26500CECCB8 /* image */,
);
name = astc;
path = "third-party/astc";
sourceTree = SOURCE_ROOT;
};
D0AF793522C2E26500CECCB8 /* compress */ = {
isa = PBXGroup;
children = (
D0AF79A222C2E36400CECCB8 /* astc.h */,
D0AF793622C2E26500CECCB8 /* astc.cc */,
);
path = compress;
sourceTree = "<group>";
};
D0AF793722C2E26500CECCB8 /* astc */ = {
isa = PBXGroup;
children = (
D0AF793822C2E26500CECCB8 /* compress_texture.h */,
D0AF793922C2E26500CECCB8 /* integer_sequence_encoding.h */,
D0AF793A22C2E26500CECCB8 /* range.h */,
D0AF793B22C2E26500CECCB8 /* misc.h */,
D0AF793C22C2E26500CECCB8 /* tables_data_size.h */,
D0AF793D22C2E26500CECCB8 /* matrix.h */,
D0AF793E22C2E26500CECCB8 /* colors.h */,
D0AF793F22C2E26500CECCB8 /* endpoints_principal_components.cc */,
D0AF794022C2E26500CECCB8 /* data_size.h */,
D0AF794122C2E26500CECCB8 /* meson.build */,
D0AF794222C2E26500CECCB8 /* endpoints_bounding_box.h */,
D0AF794322C2E26500CECCB8 /* tables_color_quantization.h */,
D0AF794422C2E26500CECCB8 /* tables_integer_sequence_encoding.h */,
D0AF794522C2E26500CECCB8 /* constants.h */,
D0AF794622C2E26500CECCB8 /* endpoints_min_max.h */,
D0AF794722C2E26500CECCB8 /* dcheck.h */,
D0AF794822C2E26500CECCB8 /* weights_quantize_table.h */,
D0AF794922C2E26500CECCB8 /* compress_block.cc */,
D0AF794A22C2E26500CECCB8 /* endpoints_principal_components.h */,
D0AF794B22C2E26500CECCB8 /* bitmanip.h */,
D0AF794C22C2E26500CECCB8 /* endpoints.h */,
D0AF794D22C2E26500CECCB8 /* compress_block.h */,
D0AF794E22C2E26500CECCB8 /* endpoints_encode.h */,
D0AF794F22C2E26500CECCB8 /* weights_quantize.h */,
D0AF795022C2E26500CECCB8 /* compress_texture.cc */,
D0AF795122C2E26500CECCB8 /* matrix.cc */,
D0AF795222C2E26500CECCB8 /* vector.h */,
D0AF795322C2E26500CECCB8 /* endpoints_quantize.h */,
D0AF795422C2E26500CECCB8 /* store_block.h */,
);
path = astc;
sourceTree = "<group>";
};
D0AF795522C2E26500CECCB8 /* image */ = {
isa = PBXGroup;
children = (
D0AF795622C2E26500CECCB8 /* color.h */,
D0AF795722C2E26500CECCB8 /* bgra.cc */,
D0AF795822C2E26500CECCB8 /* compressed.h */,
D0AF795922C2E26500CECCB8 /* compressed.cc */,
D0AF795A22C2E26500CECCB8 /* bgra.h */,
);
path = image;
sourceTree = "<group>";
};
D0AF7C441ED84BB000CD8E0F /* Language Selection */ = {
isa = PBXGroup;
children = (
@ -3086,19 +2845,6 @@
name = "Peer Selection";
sourceTree = "<group>";
};
D0D748041E7AF62000F4B1F6 /* Stickers */ = {
isa = PBXGroup;
children = (
D0D748051E7AF63800F4B1F6 /* StickerPackPreviewController.swift */,
D0D748071E7AF64400F4B1F6 /* StickerPackPreviewControllerNode.swift */,
D0D7480E1E7B1BD600F4B1F6 /* StickerPackPreviewGridItem.swift */,
D0BE383B1E7C3E51000079AF /* StickerPreviewController.swift */,
D0BE931A1E92DFBA00DCC1E6 /* StickerPreviewControllerNode.swift */,
D03AA4E4202DF8840056C405 /* StickerPreviewPeekContent.swift */,
);
name = Stickers;
sourceTree = "<group>";
};
D0DC35481DE366B4000195EB /* Commands */ = {
isa = PBXGroup;
children = (
@ -3183,15 +2929,6 @@
name = "Vertical List";
sourceTree = "<group>";
};
D0E6521D1E3A2305004EEA91 /* Items */ = {
isa = PBXGroup;
children = (
D003702D1DA43052004308D3 /* ItemListAvatarAndNameItem.swift */,
D0B843DA1DAAB138005F29E1 /* ItemListPeerActionItem.swift */,
);
name = Items;
sourceTree = "<group>";
};
D0E7A1BB1D8C17EB00C37A6F /* Chat History Node */ = {
isa = PBXGroup;
children = (
@ -3332,7 +3069,6 @@
D0FE4DE31F0AEBB900E8A0B3 /* SharedVideoContextManager.swift */,
D09E637D1F0E8C66003444CD /* Shared Media Player */,
D0D03AE61DECB0D200220C46 /* Audio Recorder */,
0919546D229458E900E11046 /* Animated Stickers */,
D0F69E9D1D6B8E240046BCD6 /* Resources */,
D0177B831DFB095000A5083A /* FileMediaResourceStatus.swift */,
D0ADF965212E05A300310BBC /* TonePlayer.swift */,
@ -3345,7 +3081,6 @@
isa = PBXGroup;
children = (
D0F69DBF1D6B89AE0046BCD6 /* Nodes */,
D0F69DD31D6B8A160046BCD6 /* Controllers */,
D0E7A1BB1D8C17EB00C37A6F /* Chat History Node */,
);
name = Components;
@ -3354,12 +3089,9 @@
D0F69DBF1D6B89AE0046BCD6 /* Nodes */ = {
isa = PBXGroup;
children = (
D01776B61F1D6CCF0044446D /* Radial Status */,
D0F69DCA1D6B89F20046BCD6 /* Search */,
D0477D191F617E4B00412B44 /* Video */,
D0F69DC41D6B89E10046BCD6 /* RadialProgressNode.swift */,
D00C7CE51E378FD00080C3D5 /* RadialTimeoutNode.swift */,
D0943AF51FDAAE7E001522CC /* MultipleAvatarsNode.swift */,
D0568AAC1DF198130022E7DA /* AudioWaveformNode.swift */,
D0BC38621E3F9EFA0044D6FE /* EditableTokenListNode.swift */,
D0B2F76B2052A7D600D3BFB9 /* SinglePhoneInputNode.swift */,
@ -3370,27 +3102,11 @@
name = Nodes;
sourceTree = "<group>";
};
D0F69DCA1D6B89F20046BCD6 /* Search */ = {
isa = PBXGroup;
children = (
);
name = Search;
sourceTree = "<group>";
};
D0F69DD31D6B8A160046BCD6 /* Controllers */ = {
isa = PBXGroup;
children = (
D01B27931E38F3920022A4C0 /* Item List */,
);
name = Controllers;
sourceTree = "<group>";
};
D0F69DE61D6B8A4E0046BCD6 /* Controllers */ = {
isa = PBXGroup;
children = (
D0F69DE71D6B8A590046BCD6 /* Authorization */,
D05174C11EAE582A00A1BF36 /* Root */,
D017494F1E1067C00057C89A /* Hashtag Search */,
D0F69E0D1D6B8AB90046BCD6 /* Chat */,
D04281F2200E5A70009DDE36 /* Chat Recent Actions */,
D00DE6961E8E8E21003F0D76 /* Share */,
@ -3432,7 +3148,6 @@
D0F69E111D6B8ACF0046BCD6 /* ChatHistoryEntry.swift */,
D0F69E121D6B8ACF0046BCD6 /* ChatHistoryLocation.swift */,
D0D268681D78865300C422DA /* ChatAvatarNavigationNode.swift */,
D0943AFD1FDAE454001522CC /* ChatMultipleAvatarsNavigationNode.swift */,
D0DE76FF1D92F1EB002B8809 /* ChatTitleView.swift */,
D02383761DDF16B2004018B6 /* ChatControllerTitlePanelNodeContainer.swift */,
D00C7CE81E379B820080C3D5 /* ChatSecretAutoremoveTimerActionSheet.swift */,
@ -3559,7 +3274,6 @@
D0575AF81EA0FD94006F2541 /* Avatar Gallery */,
D0EEE99F2165583B001292A6 /* Document */,
D07827CC1E03F32C00071108 /* Instant Page */,
D0D748041E7AF62000F4B1F6 /* Stickers */,
D020A9D81FEAE611008C66F7 /* Player */,
D01C06AD1FBB45ED001561AB /* Join Link Preview */,
D081E102217F57B2003CD921 /* Language Link Preview */,
@ -3776,57 +3490,21 @@
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
D0AF798622C2E26500CECCB8 /* weights_quantize.h in Headers */,
D0AF799022C2E26500CECCB8 /* bgra.h in Headers */,
D01590C222BDAEBC0017C33E /* TypeDefinitions.h in Headers */,
D0AE303622B1D3620058D3BC /* TGBridgeAudioDecoder.h in Headers */,
D0208AD51FA33D14001F0D5F /* RaiseToListenActivator.h in Headers */,
D00817DA22B47A14008A895F /* TGPresentationAutoNightPreferences.h in Headers */,
D0AF797D22C2E26500CECCB8 /* endpoints_min_max.h in Headers */,
D0AF797222C2E26500CECCB8 /* misc.h in Headers */,
D0AF798222C2E26500CECCB8 /* bitmanip.h in Headers */,
D0AF797C22C2E26500CECCB8 /* constants.h in Headers */,
D00817E022B47A14008A895F /* UIImage+ImageEffects.h in Headers */,
D01590BA22BDAEBC0017C33E /* ColorVec.h in Headers */,
D0AF797422C2E26500CECCB8 /* matrix.h in Headers */,
D0AF79A322C2E36400CECCB8 /* astc.h in Headers */,
D08803C51F6064CF00DD7951 /* TelegramUI.h in Headers */,
D0EB42001F30ED4F00838FE6 /* LegacyImageProcessors.h in Headers */,
D01590AE22BD58AD0017C33E /* YUV.h in Headers */,
D008177B22B46B7E008A895F /* TGContactModel.h in Headers */,
D0AF797922C2E26500CECCB8 /* endpoints_bounding_box.h in Headers */,
D00701A12029F6D0006B9E34 /* TGMimeTypeMap.h in Headers */,
D0AF798A22C2E26500CECCB8 /* endpoints_quantize.h in Headers */,
D0AF797322C2E26500CECCB8 /* tables_data_size.h in Headers */,
D0AF797E22C2E26500CECCB8 /* dcheck.h in Headers */,
D0AF797F22C2E26500CECCB8 /* weights_quantize_table.h in Headers */,
D0208AD91FA34017001F0D5F /* DeviceProximityManager.h in Headers */,
D0AF798B22C2E26500CECCB8 /* store_block.h in Headers */,
D0AF797122C2E26500CECCB8 /* range.h in Headers */,
D0AF797722C2E26500CECCB8 /* data_size.h in Headers */,
D0AE303722B1D3620058D3BC /* TGBridgeAudioEncoder.h in Headers */,
D0AF798422C2E26500CECCB8 /* compress_block.h in Headers */,
D0AF798E22C2E26500CECCB8 /* compressed.h in Headers */,
D00817CD22B47A14008A895F /* TGAutoDownloadPreferences.h in Headers */,
D01590C122BDAEBC0017C33E /* DDSImage.h in Headers */,
D0AF798122C2E26500CECCB8 /* endpoints_principal_components.h in Headers */,
D008177C22B46B7E008A895F /* TGItemProviderSignals.h in Headers */,
D0AF798322C2E26500CECCB8 /* endpoints.h in Headers */,
D01590BB22BDAEBC0017C33E /* BC1Compression.h in Headers */,
D01590BC22BDAEBC0017C33E /* BMPImage.h in Headers */,
D0AF797522C2E26500CECCB8 /* colors.h in Headers */,
D0AF797B22C2E26500CECCB8 /* tables_integer_sequence_encoding.h in Headers */,
D0AF798C22C2E26500CECCB8 /* color.h in Headers */,
D00817D722B47A14008A895F /* TGBridgeServer.h in Headers */,
D0AF796F22C2E26500CECCB8 /* compress_texture.h in Headers */,
D0AF798922C2E26500CECCB8 /* vector.h in Headers */,
D00817CE22B47A14008A895F /* TGProxyItem.h in Headers */,
D01590C922BE62C40017C33E /* TextureCompression.h in Headers */,
D0AF797A22C2E26500CECCB8 /* tables_color_quantization.h in Headers */,
D008177A22B46B7E008A895F /* TGShareLocationSignals.h in Headers */,
D0AF798522C2E26500CECCB8 /* endpoints_encode.h in Headers */,
D01590BF22BDAEBC0017C33E /* Image.h in Headers */,
D0AF797022C2E26500CECCB8 /* integer_sequence_encoding.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3987,7 +3665,6 @@
D0E9BA981F056F4C00F079A4 /* stp_card_applepay_template@3x.png in Resources */,
D0E9BAA51F056F4C00F079A4 /* stp_card_form_applepay@2x.png in Resources */,
D0E9BAB81F056F4C00F079A4 /* stp_card_visa_template@3x.png in Resources */,
D0AF797822C2E26500CECCB8 /* meson.build in Resources */,
D0E9BA9B1F056F4C00F079A4 /* stp_card_cvc_amex@2x.png in Resources */,
D0E9BAB61F056F4C00F079A4 /* stp_card_visa@3x.png in Resources */,
D0E9BAA61F056F4C00F079A4 /* stp_card_form_applepay@3x.png in Resources */,
@ -4022,7 +3699,6 @@
D04281F6200E5AC2009DDE36 /* ChatRecentActionsControllerNode.swift in Sources */,
09DD5D5221ED175300D7007A /* WallpaperColorPickerNode.swift in Sources */,
D0B2F76820528E3D00D3BFB9 /* UserInfoEditingPhoneActionItem.swift in Sources */,
D0AF798D22C2E26500CECCB8 /* bgra.cc in Sources */,
09F79A0321C8225600820234 /* WebSearchVideoGalleryItem.swift in Sources */,
D01848E821A03BDA00B6DEBD /* ChatSearchState.swift in Sources */,
D0208ADC1FA346A4001F0D5F /* RaiseToListen.swift in Sources */,
@ -4042,7 +3718,6 @@
D00817D522B47A14008A895F /* ApplicationShortcutItem.swift in Sources */,
D077C5C122B59A800097D617 /* ApplicationContext.swift in Sources */,
D0EC6CC71EB9F58800EBF1C3 /* PeerNotificationSoundStrings.swift in Sources */,
D0AF798F22C2E26500CECCB8 /* compressed.cc in Sources */,
D081E108217F583F003CD921 /* LanguageLinkPreviewContentNode.swift in Sources */,
D0EC6CC91EB9F58800EBF1C3 /* ConvertToWebP.swift in Sources */,
D09E637F1F0E8C9F003444CD /* PeerMessagesMediaPlaylist.swift in Sources */,
@ -4061,7 +3736,6 @@
D0380DB8204EE0A5000414AB /* ChatInstantVideoMessageDurationNode.swift in Sources */,
D0EC6CDC1EB9F58800EBF1C3 /* TelegramAccountAuxiliaryMethods.swift in Sources */,
D0642EFC1F3E1E7B00792790 /* ChatHistoryNavigationButtons.swift in Sources */,
D03AA4E5202DF8840056C405 /* StickerPreviewPeekContent.swift in Sources */,
D025402322E1C92D00AC0195 /* ChatSlowmodeItem.swift in Sources */,
D05D8B3F2192FC6E0064586F /* LocalizationListControllerNode.swift in Sources */,
D0AA840C1FEB2BA3005C6E91 /* OverlayPlayerControlsNode.swift in Sources */,
@ -4091,7 +3765,6 @@
0910B0EF21FA532D00F8F87D /* WallpaperResources.swift in Sources */,
09E4A807223D4B860038140F /* AccountUtils.swift in Sources */,
D069F5D0212700B90000565A /* StickerPanePeerSpecificSetupGridItem.swift in Sources */,
D01590C022BDAEBC0017C33E /* BC1Compression.cpp in Sources */,
D06018B522F3659900796784 /* ChatTextFormat.swift in Sources */,
D0750C8322B2E4EE00BE5F6E /* SharedNotificationManager.swift in Sources */,
D0EC6D041EB9F58800EBF1C3 /* opusenc.m in Sources */,
@ -4129,18 +3802,15 @@
09749BCD21F23139008FDDE9 /* WallpaperGalleryDecorationNode.swift in Sources */,
09EDAD26220D30980012A50B /* AutodownloadConnectionTypeController.swift in Sources */,
D05D8B3A2192FC460064586F /* LocalizationListController.swift in Sources */,
D0943AFE1FDAE454001522CC /* ChatMultipleAvatarsNavigationNode.swift in Sources */,
D0B21B15220D85DD003F741D /* TabBarAccountSwitchController.swift in Sources */,
D0ADF966212E05A300310BBC /* TonePlayer.swift in Sources */,
D007019E2029EFDD006B9E34 /* ICloudResources.swift in Sources */,
D0F760DD222034980074F7E5 /* ChannelStatsControllerNode.swift in Sources */,
D01590A622BD460C0017C33E /* MetalAnimationRenderer.swift in Sources */,
D0EC6D251EB9F58800EBF1C3 /* FetchCachedRepresentations.swift in Sources */,
D0EC6D261EB9F58800EBF1C3 /* TransformOutgoingMessageMedia.swift in Sources */,
D0EC6D271EB9F58800EBF1C3 /* FetchResource.swift in Sources */,
D09D88731F86D56B00BEB4C9 /* AuthorizationLayout.swift in Sources */,
D0EC6D281EB9F58800EBF1C3 /* MediaResources.swift in Sources */,
D01590C722BE61CB0017C33E /* TextureCompression.cpp in Sources */,
D0EC6D291EB9F58800EBF1C3 /* FetchVideoMediaResource.swift in Sources */,
09EDAD2E221164440012A50B /* AutodownloadSizeLimitItem.swift in Sources */,
D008177E22B46B7E008A895F /* TGItemProviderSignals.m in Sources */,
@ -4167,7 +3837,6 @@
D0EC6D3B1EB9F58800EBF1C3 /* EditableTokenListNode.swift in Sources */,
D0E2CE6C222930540084E3DD /* PrefetchManager.swift in Sources */,
D0EB42011F30ED4F00838FE6 /* LegacyImageProcessors.m in Sources */,
D01590C322BDAEBC0017C33E /* BMPImage.cpp in Sources */,
D0CE8CE51F6F354400AA2DB0 /* ChatTextInputAccessoryItem.swift in Sources */,
D097C26820DD0A1D007BB4B8 /* PeerReportController.swift in Sources */,
09F664C621EB400A00AB7E26 /* ThemeGridSearchContentNode.swift in Sources */,
@ -4223,22 +3892,16 @@
D0EC6D701EB9F58800EBF1C3 /* AuthorizationSequenceCodeEntryControllerNode.swift in Sources */,
D0EC6D711EB9F58800EBF1C3 /* AuthorizationSequencePasswordEntryController.swift in Sources */,
D0EC6D721EB9F58800EBF1C3 /* AuthorizationSequencePasswordEntryControllerNode.swift in Sources */,
D0AF797622C2E26500CECCB8 /* endpoints_principal_components.cc in Sources */,
D0EC6D731EB9F58800EBF1C3 /* AuthorizationSequenceSignUpController.swift in Sources */,
D0C12EB01F9A8D1300600BB2 /* ListMessageDateHeader.swift in Sources */,
091954792294754E00E11046 /* AnimatedStickerUtils.swift in Sources */,
D0EC6D741EB9F58800EBF1C3 /* AuthorizationSequenceSignUpControllerNode.swift in Sources */,
D0EC6D751EB9F58800EBF1C3 /* TelegramRootController.swift in Sources */,
D0F6800A1EE750EE000E5906 /* ChannelBannedMemberController.swift in Sources */,
D03AA4DF202DBF6F0056C405 /* ChatContextResultPeekContentNode.swift in Sources */,
D00817D622B47A14008A895F /* TGProxyItem.m in Sources */,
0910B0ED21FA178C00F8F87D /* WallpaperPreviewMedia.swift in Sources */,
D0EC6D7F1EB9F58800EBF1C3 /* HashtagSearchController.swift in Sources */,
D0EC6D801EB9F58800EBF1C3 /* HashtagSearchControllerNode.swift in Sources */,
D0EC6D811EB9F58800EBF1C3 /* ChatController.swift in Sources */,
D0B37C5E1F8D26A8004252DF /* ThemeSettingsChatPreviewItem.swift in Sources */,
D01590A822BD462C0017C33E /* SoftwareAnimationRenderer.swift in Sources */,
D01590BE22BDAEBC0017C33E /* Image.cpp in Sources */,
D0EC6D821EB9F58800EBF1C3 /* ChatControllerInteraction.swift in Sources */,
D0EC6D831EB9F58800EBF1C3 /* ChatControllerNode.swift in Sources */,
D0EC6D841EB9F58800EBF1C3 /* ChatHistoryEntry.swift in Sources */,
@ -4263,7 +3926,6 @@
D0F19F6420E5A15B00EEC860 /* ChatMediaInputPeerSpecificItem.swift in Sources */,
D0AEAE252080D6830013176E /* PaneSearchContainerNode.swift in Sources */,
D01DBA9B209CC6AD00C64E64 /* ChatLinkPreview.swift in Sources */,
D01590AF22BD58AD0017C33E /* YUV.m in Sources */,
D0EC6D901EB9F58900EBF1C3 /* ChatMessageBubbleContentNode.swift in Sources */,
D0EC6D911EB9F58900EBF1C3 /* ChatMessageBubbleItemNode.swift in Sources */,
D0E8B8BD204479A500605593 /* SecretChatKeyController.swift in Sources */,
@ -4430,7 +4092,6 @@
090B48C82200BCA8005083FA /* WallpaperUploadManager.swift in Sources */,
D0E8B8BB2044780600605593 /* ItemListSecretChatKeyItem.swift in Sources */,
D06F31E62135A41C001A0F12 /* ThemeSettingsBrightnessItem.swift in Sources */,
D01590BD22BDAEBC0017C33E /* DDSImage.cpp in Sources */,
09F2158D225CF5BC00AEDF6D /* Pasteboard.swift in Sources */,
D0C26D571FDF2388004ABF18 /* OpenChatMessage.swift in Sources */,
D00817CA22B47A14008A895F /* WatchRequestHandlers.swift in Sources */,
@ -4439,8 +4100,6 @@
09B4819523028A8A00D5B32B /* ThemeAccentColorControllerNode.swift in Sources */,
D000CABC21F158AD0011B15D /* PrepareSecretThumbnailData.swift in Sources */,
D0208AD61FA33D14001F0D5F /* RaiseToListenActivator.m in Sources */,
D0AF798022C2E26500CECCB8 /* compress_block.cc in Sources */,
D0AF798722C2E26500CECCB8 /* compress_texture.cc in Sources */,
09DD88F321BF907C000766BC /* WebSearchRecentQueryItem.swift in Sources */,
D04554A421B42982007A6DD9 /* ConfirmPhoneNumberController.swift in Sources */,
D07ABBA5202A14BC003671DE /* LegacyImagePicker.swift in Sources */,
@ -4457,16 +4116,10 @@
D00817D922B47A14008A895F /* AppDelegate.swift in Sources */,
D0E1199C229808B8008CAE3A /* ChannelDiscussionGroupSetupHeaderItem.swift in Sources */,
091417F221EF4E5D00C8325A /* WallpaperGalleryController.swift in Sources */,
D0EC6E231EB9F58900EBF1C3 /* StickerPackPreviewController.swift in Sources */,
D0EC6E241EB9F58900EBF1C3 /* StickerPackPreviewControllerNode.swift in Sources */,
D0FC194D201F82A000FEDBB2 /* OpenResolvedUrl.swift in Sources */,
D0EC6E251EB9F58900EBF1C3 /* StickerPackPreviewGridItem.swift in Sources */,
D0EC6E261EB9F58900EBF1C3 /* StickerPreviewController.swift in Sources */,
D00817D422B47A14008A895F /* LegacyUserDataImport.swift in Sources */,
D0EC6E271EB9F58900EBF1C3 /* StickerPreviewControllerNode.swift in Sources */,
09CE95062236D47F00A7D2C3 /* SettingsSearchItem.swift in Sources */,
D0AF323A1FB1D8D60097362B /* ChatOverlayNavigationBar.swift in Sources */,
D0943AF61FDAAE7E001522CC /* MultipleAvatarsNode.swift in Sources */,
D0EC6E2B1EB9F58900EBF1C3 /* ComposeController.swift in Sources */,
09749BCF21F236F2008FDDE9 /* ModernCheckNode.swift in Sources */,
0940932422E73DFB003846A3 /* ChatSendMessageActionSheetController.swift in Sources */,
@ -4481,18 +4134,13 @@
D0EC6E321EB9F58900EBF1C3 /* CreateGroupController.swift in Sources */,
D0EC55A3210231D600D1992C /* SearchPeerMembers.swift in Sources */,
D0EC6E331EB9F58900EBF1C3 /* CreateChannelController.swift in Sources */,
D0EC6E351EB9F58900EBF1C3 /* ItemListAvatarAndNameItem.swift in Sources */,
D00ACA5A2022897D0045D427 /* ProcessedPeerRestrictionText.swift in Sources */,
D04203152037162700490EA5 /* MediaInputPaneTrendingItem.swift in Sources */,
D0EC6E3C1EB9F58900EBF1C3 /* ItemListPeerActionItem.swift in Sources */,
D0CE8CE71F6F35A300AA2DB0 /* ChatTextInputPanelState.swift in Sources */,
D0AF796E22C2E26500CECCB8 /* astc.cc in Sources */,
D0CE6F70213EEE5000BCD44B /* CreatePasswordController.swift in Sources */,
0940932622E73E12003846A3 /* ChatSendMessageActionSheetControllerNode.swift in Sources */,
D00817D022B47A14008A895F /* WakeupManager.swift in Sources */,
D0AF798822C2E26500CECCB8 /* matrix.cc in Sources */,
D0E8175920122FE100B82BBB /* ChatRecentActionsFilterController.swift in Sources */,
D08557E722C5FEB90026D6D2 /* AnimatedStickerNode.swift in Sources */,
D084023420E295F000065674 /* GroupStickerPackSetupController.swift in Sources */,
0900678D21ED5EA800530762 /* WallpaperColorPanelNode.swift in Sources */,
0957DE2522DE2909001B4D57 /* ThemePreviewControllerNode.swift in Sources */,
@ -4531,7 +4179,6 @@
D0EC6E561EB9F58900EBF1C3 /* UserInfoController.swift in Sources */,
D0EC6E571EB9F58900EBF1C3 /* GroupsInCommonController.swift in Sources */,
D0EC6E581EB9F58900EBF1C3 /* PeerSelectionController.swift in Sources */,
D01590AB22BD467B0017C33E /* AnimationRenderer.swift in Sources */,
D0EC6E591EB9F58900EBF1C3 /* PeerSelectionControllerNode.swift in Sources */,
D0AB262921C307D7008F6685 /* ChatMessagePollBubbleContentNode.swift in Sources */,
D0F4B0222110972300912B92 /* ContactInfoStrings.swift in Sources */,

View file

@ -1,168 +0,0 @@
#ifndef ASTC_BITMANIP_H_
#define ASTC_BITMANIP_H_
#include <cstddef>
#include <cstdint>
#include "dcheck.h"
inline bool getbit(size_t number, size_t n) {
return (number >> n) & 1;
}
inline uint8_t getbits(uint8_t number, uint8_t msb, uint8_t lsb) {
int count = msb - lsb + 1;
return static_cast<uint8_t>((number >> lsb) & ((1 << count) - 1));
}
inline size_t getbits(size_t number, size_t msb, size_t lsb) {
size_t count = msb - lsb + 1;
return (number >> lsb) & (static_cast<size_t>(1 << count) - 1);
}
inline void orbits8_ptr(uint8_t* ptr,
size_t bitoffset,
size_t number,
size_t bitcount) {
DCHECK(bitcount <= 8);
DCHECK((number >> bitcount) == 0);
size_t index = bitoffset / 8;
size_t shift = bitoffset % 8;
// Depending on the offset we might have to consider two bytes when
// writing, for instance if we are writing 8 bits and the offset is 4,
// then we have to write 4 bits to the first byte (ptr[index]) and 4 bits
// to the second byte (ptr[index+1]).
//
// FIXME: Writing to the last byte when the number of bytes is a multiple of 2
// will write past the allocated memory.
uint8_t* p = ptr + index;
size_t mask = number << shift;
DCHECK((p[0] & mask) == 0);
DCHECK((p[1] & (mask >> 8)) == 0);
p[0] |= static_cast<uint8_t>(mask & 0xFF);
p[1] |= static_cast<uint8_t>((mask >> 8) & 0xFF);
}
inline void orbits16_ptr(uint8_t* ptr,
size_t bitoffset,
size_t number,
size_t bitcount) {
DCHECK(bitcount > 8 && bitcount <= 16);
size_t index = bitoffset / 8;
size_t shift = bitoffset % 8;
uint8_t* p = ptr + index;
size_t mask = number << shift;
p[0] |= static_cast<uint8_t>(mask & 0xFF);
p[1] |= static_cast<uint8_t>((mask >> 8) & 0xFF);
p[2] |= static_cast<uint8_t>((mask >> 16) & 0xFF);
p[3] |= static_cast<uint8_t>((mask >> 24) & 0xFF);
}
inline uint16_t getbytes2(const uint8_t* ptr, size_t byteoffset) {
const uint8_t* p = ptr + byteoffset;
return static_cast<uint16_t>((p[1] << 8) | p[0]);
}
inline void setbytes2(uint8_t* ptr, size_t byteoffset, uint16_t bytes) {
ptr[byteoffset + 0] = static_cast<uint8_t>(bytes & 0xFF);
ptr[byteoffset + 1] = static_cast<uint8_t>((bytes >> 8) & 0xFF);
}
inline void split_high_low(uint8_t n, size_t i, uint8_t& high, uint8_t& low) {
DCHECK(i < 8);
uint8_t low_mask = static_cast<uint8_t>((1 << i) - 1);
low = n & low_mask;
high = static_cast<uint8_t>(n >> i);
}
class bitwriter {
public:
explicit bitwriter(uint8_t* ptr) : ptr_(ptr), bitoffset_(0) {
// assumption that all bits in ptr are zero after the offset
// writing beyound the bounds of the allocated memory is undefined
// behaviour
}
// Specialized function that can't write more than 8 bits.
void write8(uint8_t number, size_t bitcount) {
orbits8_ptr(ptr_, bitoffset_, number, bitcount);
bitoffset_ += bitcount;
}
size_t offset() const { return bitoffset_; }
private:
uint8_t* ptr_;
size_t bitoffset_; // in bits
};
const uint8_t bit_reverse_table[256] = {
0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0,
0x30, 0xB0, 0x70, 0xF0, 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, 0x04, 0x84, 0x44, 0xC4,
0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC,
0x3C, 0xBC, 0x7C, 0xFC, 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, 0x0A, 0x8A, 0x4A, 0xCA,
0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6,
0x36, 0xB6, 0x76, 0xF6, 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, 0x01, 0x81, 0x41, 0xC1,
0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9,
0x39, 0xB9, 0x79, 0xF9, 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, 0x0D, 0x8D, 0x4D, 0xCD,
0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3,
0x33, 0xB3, 0x73, 0xF3, 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, 0x07, 0x87, 0x47, 0xC7,
0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF,
0x3F, 0xBF, 0x7F, 0xFF};
/**
* Reverse a byte, total function.
*/
inline uint8_t reverse_byte(uint8_t number) {
return bit_reverse_table[number];
}
/**
* Reverse a sequence of bytes.
*
* Assumes that the bits written to (using bitwise or) are zero and that they
* will not clash with bits already written to target sequence. That is it is
* possible to write to a non-zero byte as long as the bits that are actually
* written to are zero.
*/
inline void reverse_bytes(const uint8_t* source,
size_t bytecount,
uint8_t* target) {
for (int i = 0; i < static_cast<int>(bytecount); ++i) {
DCHECK((reverse_byte(source[i]) & target[-i]) == 0);
target[-i] = target[-i] | reverse_byte(source[i]);
}
}
inline void copy_bytes(const uint8_t* source,
size_t bytecount,
uint8_t* target,
size_t bitoffset) {
for (size_t i = 0; i < bytecount; ++i) {
orbits8_ptr(target, bitoffset + i * 8, source[i], 8);
}
}
#endif // ASTC_BITMANIP_H_

View file

@ -1,132 +0,0 @@
#ifndef ASTC_COLORS_H_
#define ASTC_COLORS_H_
#include <math.h>
#include <cstdint>
#include "misc.h"
#include "vector.h"
const int APPROX_COLOR_EPSILON = 50;
union unorm8_t {
struct RgbaColorType {
uint8_t b, g, r, a;
} channels;
uint8_t components[4];
uint32_t bits;
};
union unorm16_t {
struct RgbaColorType {
uint16_t b, g, r, a;
} channels;
uint16_t components[4];
uint64_t bits;
};
inline bool is_greyscale(vec3i_t color) {
// integer equality is transitive
return color.r == color.g && color.g == color.b;
}
inline int luminance(vec3i_t color) {
return (color.r + color.g + color.b) / 3;
}
inline bool approx_equal(vec3i_t a, vec3i_t b) {
return quadrance(a - b) <= APPROX_COLOR_EPSILON;
}
inline vec3i_t clamp_rgb(vec3i_t color) {
vec3i_t result;
result.r = clamp(0, 255, color.r);
result.g = clamp(0, 255, color.g);
result.b = clamp(0, 255, color.b);
return result;
}
inline vec3f_t clamp_rgb(vec3f_t color) {
vec3f_t result;
result.r = clamp(0.0f, 255.0f, color.r);
result.g = clamp(0.0f, 255.0f, color.g);
result.b = clamp(0.0f, 255.0f, color.b);
return result;
}
inline bool is_rgb(float color) {
return color >= 0.0f && color <= 255.0f;
}
inline bool is_rgb(vec3f_t color) {
return is_rgb(color.r) && is_rgb(color.g) && is_rgb(color.b);
}
inline vec3i_t floor(vec3f_t color) {
vec3i_t result;
result.r = static_cast<int>(floor(color.r));
result.g = static_cast<int>(floor(color.g));
result.b = static_cast<int>(floor(color.b));
return result;
}
inline vec3i_t round(vec3f_t color) {
vec3i_t result;
result.r = static_cast<int>(round(color.r));
result.g = static_cast<int>(round(color.g));
result.b = static_cast<int>(round(color.b));
return result;
}
inline vec3i_t to_vec3i(unorm8_t color) {
vec3i_t result;
result.r = color.channels.r;
result.g = color.channels.g;
result.b = color.channels.b;
return result;
}
inline vec3i_t to_vec3i(vec3f_t color) {
vec3i_t result;
result.r = static_cast<int>(color.r);
result.g = static_cast<int>(color.g);
result.b = static_cast<int>(color.b);
return result;
}
inline vec3f_t to_vec3f(unorm8_t color) {
vec3f_t result;
result.r = color.channels.r;
result.g = color.channels.g;
result.b = color.channels.b;
return result;
}
inline vec3f_t to_vec3f(vec3i_t color) {
vec3f_t result;
result.r = static_cast<float>(color.r);
result.g = static_cast<float>(color.g);
result.b = static_cast<float>(color.b);
return result;
}
inline unorm8_t to_unorm8(vec3i_t color) {
unorm8_t result;
result.channels.r = static_cast<uint8_t>(color.r);
result.channels.g = static_cast<uint8_t>(color.g);
result.channels.b = static_cast<uint8_t>(color.b);
result.channels.a = 255;
return result;
}
inline unorm16_t unorm8_to_unorm16(unorm8_t c8) {
// (x / 255) * (2^16-1) = x * 65535 / 255 = x * 257
unorm16_t result;
result.channels.r = static_cast<uint16_t>(c8.channels.r * 257);
result.channels.g = static_cast<uint16_t>(c8.channels.g * 257);
result.channels.b = static_cast<uint16_t>(c8.channels.b * 257);
result.channels.a = static_cast<uint16_t>(c8.channels.a * 257);
return result;
}
#endif // ASTC_COLORS_H_

View file

@ -1,155 +0,0 @@
#include "compress_block.h"
#include <algorithm>
#include <cstddef>
#include <cstdint>
#include "colors.h"
#include "constants.h"
#include "data_size.h"
#include "endpoints.h"
#include "endpoints_encode.h"
#include "endpoints_min_max.h"
#include "endpoints_principal_components.h"
#include "integer_sequence_encoding.h"
#include "misc.h"
#include "range.h"
#include "store_block.h"
#include "vector.h"
#include "weights_quantize.h"
/**
* Write void extent block bits for LDR mode and unused extent coordinates.
*/
void encode_void_extent(vec3i_t color, PhysicalBlock* physical_block) {
void_extent_to_physical(unorm8_to_unorm16(to_unorm8(color)), physical_block);
}
void encode_luminance(const uint8_t texels[BLOCK_TEXEL_COUNT],
PhysicalBlock* physical_block) {
size_t partition_count = 1;
size_t partition_index = 0;
color_endpoint_mode_t color_endpoint_mode = CEM_LDR_LUMINANCE_DIRECT;
range_t weight_quant = RANGE_32;
range_t endpoint_quant =
endpoint_quantization(partition_count, weight_quant, color_endpoint_mode);
uint8_t l0 = 255;
uint8_t l1 = 0;
for (size_t i = 0; i < BLOCK_TEXEL_COUNT; ++i) {
l0 = std::min(l0, texels[i]);
l1 = std::max(l1, texels[i]);
}
uint8_t endpoint_unquantized[2];
uint8_t endpoint_quantized[2];
encode_luminance_direct(endpoint_quant, l0, l1, endpoint_quantized,
endpoint_unquantized);
uint8_t weights_quantized[BLOCK_TEXEL_COUNT];
calculate_quantized_weights_luminance(
texels, weight_quant, endpoint_unquantized[0], endpoint_unquantized[1],
weights_quantized);
uint8_t endpoint_ise[MAXIMUM_ENCODED_COLOR_ENDPOINT_BYTES] = {0};
integer_sequence_encode(endpoint_quantized, 2, RANGE_256, endpoint_ise);
uint8_t weights_ise[MAXIMUM_ENCODED_WEIGHT_BYTES + 1] = {0};
integer_sequence_encode(weights_quantized, BLOCK_TEXEL_COUNT, RANGE_32,
weights_ise);
symbolic_to_physical(color_endpoint_mode, endpoint_quant, weight_quant,
partition_count, partition_index, endpoint_ise,
weights_ise, physical_block);
}
void encode_rgb_single_partition(const unorm8_t texels[BLOCK_TEXEL_COUNT],
vec3f_t e0,
vec3f_t e1,
PhysicalBlock* physical_block) {
size_t partition_index = 0;
size_t partition_count = 1;
color_endpoint_mode_t color_endpoint_mode = CEM_LDR_RGB_DIRECT;
range_t weight_quant = RANGE_12;
range_t endpoint_quant =
endpoint_quantization(partition_count, weight_quant, color_endpoint_mode);
vec3i_t endpoint_unquantized[2];
uint8_t endpoint_quantized[6];
encode_rgb_direct(endpoint_quant, round(e0), round(e1), endpoint_quantized,
endpoint_unquantized);
uint8_t weights_quantized[BLOCK_TEXEL_COUNT];
calculate_quantized_weights_rgb(texels, weight_quant, endpoint_unquantized[0],
endpoint_unquantized[1], weights_quantized);
uint8_t endpoint_ise[MAXIMUM_ENCODED_COLOR_ENDPOINT_BYTES] = {0};
integer_sequence_encode(endpoint_quantized, 6, endpoint_quant, endpoint_ise);
uint8_t weights_ise[MAXIMUM_ENCODED_WEIGHT_BYTES + 1] = {0};
integer_sequence_encode(weights_quantized, BLOCK_TEXEL_COUNT, weight_quant,
weights_ise);
symbolic_to_physical(color_endpoint_mode, endpoint_quant, weight_quant,
partition_count, partition_index, endpoint_ise,
weights_ise, physical_block);
}
bool is_solid(const unorm8_t texels[BLOCK_TEXEL_COUNT],
size_t count,
unorm8_t* color) {
for (size_t i = 0; i < count; ++i) {
if (!approx_equal(to_vec3i(texels[i]), to_vec3i(texels[0]))) {
return false;
}
}
// TODO: Calculate average color?
*color = texels[0];
return true;
}
bool is_greyscale(const unorm8_t texels[BLOCK_TEXEL_COUNT],
size_t count,
uint8_t luminances[BLOCK_TEXEL_COUNT]) {
for (size_t i = 0; i < count; ++i) {
vec3i_t color = to_vec3i(texels[i]);
luminances[i] = static_cast<uint8_t>(luminance(color));
vec3i_t lum(luminances[i], luminances[i], luminances[i]);
if (!approx_equal(color, lum)) {
return false;
}
}
return true;
}
void compress_block(const unorm8_t texels[BLOCK_TEXEL_COUNT],
PhysicalBlock* physical_block) {
{
unorm8_t color;
if (is_solid(texels, BLOCK_TEXEL_COUNT, &color)) {
encode_void_extent(to_vec3i(color), physical_block);
/* encode_void_extent(vec3i_t(0, 0, 0), physical_block); */
return;
}
}
{
uint8_t luminances[BLOCK_TEXEL_COUNT];
if (is_greyscale(texels, BLOCK_TEXEL_COUNT, luminances)) {
encode_luminance(luminances, physical_block);
/* encode_void_extent(vec3i_t(255, 0, 0), physical_block); */
return;
}
}
vec3f_t k, m;
principal_component_analysis_block(texels, k, m);
vec3f_t e0, e1;
find_min_max_block(texels, k, m, e0, e1);
encode_rgb_single_partition(texels, e0, e1, physical_block);
/* encode_void_extent(vec3i_t(0, 255, 0), physical_block); */
}

View file

@ -1,12 +0,0 @@
#ifndef ASTC_COMPRESS_BLOCK_H_
#define ASTC_COMPRESS_BLOCK_H_
#include "constants.h"
union unorm8_t;
struct PhysicalBlock;
void compress_block(const unorm8_t texels[BLOCK_TEXEL_COUNT],
PhysicalBlock* physical_block);
#endif // ASTC_COMPRESS_BLOCK_H_

View file

@ -1,68 +0,0 @@
#include <cstddef>
#include "colors.h"
#include "compress_block.h"
#include "compress_texture.h"
#include "constants.h"
#include "store_block.h"
namespace {
void fetch_image_block(const unorm8_t* source,
size_t image_width,
size_t xpos,
size_t ypos,
unorm8_t texels[BLOCK_TEXEL_COUNT]) {
size_t topleft_index = ypos * image_width + xpos;
const unorm8_t* row0 = source + topleft_index;
const unorm8_t* row1 = row0 + image_width;
const unorm8_t* row2 = row0 + 2 * image_width;
const unorm8_t* row3 = row0 + 3 * image_width;
texels[0] = row0[0];
texels[1] = row0[1];
texels[2] = row0[2];
texels[3] = row0[3];
texels[4] = row1[0];
texels[5] = row1[1];
texels[6] = row1[2];
texels[7] = row1[3];
texels[8] = row2[0];
texels[9] = row2[1];
texels[10] = row2[2];
texels[11] = row2[3];
texels[12] = row3[0];
texels[13] = row3[1];
texels[14] = row3[2];
texels[15] = row3[3];
}
PhysicalBlock physical_block_zero = {0};
} // namespace
void compress_texture(const uint8_t* src,
uint8_t* dst,
int width_int,
int height_int) {
const unorm8_t* data = reinterpret_cast<const unorm8_t*>(src);
size_t width = static_cast<size_t>(width_int);
size_t height = static_cast<size_t>(height_int);
PhysicalBlock* dst_re = reinterpret_cast<PhysicalBlock*>(dst);
for (size_t ypos = 0; ypos < height; ypos += BLOCK_WIDTH) {
for (size_t xpos = 0; xpos < width; xpos += BLOCK_HEIGHT) {
unorm8_t texels[BLOCK_TEXEL_COUNT];
fetch_image_block(data, width, xpos, ypos, texels);
*dst_re = physical_block_zero;
compress_block(texels, dst_re);
++dst_re;
}
}
}

View file

@ -1,16 +0,0 @@
#ifndef ASTC_COMPRESS_TEXTURE_H_
#define ASTC_COMPRESS_TEXTURE_H_
#include <cstdint>
/**
* Compress an texture with the ASTC format.
*
* @param src The source data, width*height*4 bytes with BGRA ordering.
* @param dst The output, width*height bytes.
* @param width The width of the input texture.
* @param height The height of the input texture.
*/
void compress_texture(const uint8_t* src, uint8_t* dst, int width, int height);
#endif // ASTC_COMPRESS_TEXTURE_H_

View file

@ -1,18 +0,0 @@
#ifndef ASTC_CONSTANTS_H_
#define ASTC_CONSTANTS_H_
#include <cstddef>
const size_t BLOCK_WIDTH = 4;
const size_t BLOCK_HEIGHT = 4;
const size_t BLOCK_TEXEL_COUNT = BLOCK_WIDTH * BLOCK_HEIGHT;
const size_t BLOCK_BYTES = 16;
const size_t MAXIMUM_ENCODED_WEIGHT_BITS = 96;
const size_t MAXIMUM_ENCODED_WEIGHT_BYTES = 12;
const size_t MAXIMUM_ENCODED_COLOR_ENDPOINT_BYTES = 12;
const size_t MAX_ENDPOINT_VALUE_COUNT = 18;
#endif // ASTC_CONSTANTS_H_

View file

@ -1,21 +0,0 @@
#ifndef ASTC_DATA_SIZE_H_
#define ASTC_DATA_SIZE_H_
#include <cstddef>
#include <cstdint>
#include "dcheck.h"
#include "endpoints.h"
#include "range.h"
#include "tables_data_size.h"
range_t endpoint_quantization(size_t partitions,
range_t weight_quant,
color_endpoint_mode_t endpoint_mode) {
int8_t ce_range =
color_endpoint_range_table[partitions - 1][weight_quant][endpoint_mode];
DCHECK(ce_range >= 0 && ce_range <= RANGE_MAX);
return static_cast<range_t>(ce_range);
}
#endif // ASTC_DATA_SIZE_H_

View file

@ -1,7 +0,0 @@
#ifndef ASTC_DCHECK_H_
#define ASTC_DCHECK_H_
#include <cassert>
#define DCHECK(x) assert(x)
#endif // ASTC_DCHECK_H_

View file

@ -1,24 +0,0 @@
#ifndef ASTC_ENDPOINTS_H_
#define ASTC_ENDPOINTS_H_
enum color_endpoint_mode_t {
CEM_LDR_LUMINANCE_DIRECT = 0,
CEM_LDR_LUMINANCE_BASE_OFFSET = 1,
CEM_HDR_LUMINANCE_LARGE_RANGE = 2,
CEM_HDR_LUMINANCE_SMALL_RANGE = 3,
CEM_LDR_LUMINANCE_ALPHA_DIRECT = 4,
CEM_LDR_LUMINANCE_ALPHA_BASE_OFFSET = 5,
CEM_LDR_RGB_BASE_SCALE = 6,
CEM_HDR_RGB_BASE_SCALE = 7,
CEM_LDR_RGB_DIRECT = 8,
CEM_LDR_RGB_BASE_OFFSET = 9,
CEM_LDR_RGB_BASE_SCALE_PLUS_TWO_ALPHA = 10,
CEM_HDR_RGB = 11,
CEM_LDR_RGBA_DIRECT = 12,
CEM_LDR_RGBA_BASE_OFFSET = 13,
CEM_HDR_RGB_LDR_ALPHA = 14,
CEM_HDR_RGB_HDR_ALPHA = 15,
CEM_MAX = 16
};
#endif // ASTC_ENDPOINTS_H_

View file

@ -1,32 +0,0 @@
#ifndef ASTC_ENDPOINTS_BOUNDING_BOX_H_
#define ASTC_ENDPOINTS_BOUNDING_BOX_H_
#include <cstddef>
#include "astc/colors.h"
#include "astc/constants.h"
#include "astc/misc.h"
#include "astc/vector.h"
void bounding_box(const unorm8_t* texels,
size_t count,
vec3i_t& e0,
vec3i_t& e1) {
vec3i_t a(255, 255, 255);
vec3i_t b(0, 0, 0);
for (size_t i = 0; i < count; ++i) {
vec3i_t t = to_vec3i(texels[i]);
a = vecmin(a, t);
b = vecmax(b, t);
}
e0 = a;
e1 = b;
}
void bounding_box_block(const unorm8_t texels[BLOCK_TEXEL_COUNT],
vec3i_t& e0,
vec3i_t& e1) {
bounding_box(texels, BLOCK_TEXEL_COUNT, e0, e1);
}
#endif // ASTC_ENDPOINTS_BOUNDING_BOX_H_

View file

@ -1,63 +0,0 @@
#ifndef ASTC_ENDPOINTS_ENCODE_H_
#define ASTC_ENDPOINTS_ENCODE_H_
#include <cstdint>
#include "endpoints_quantize.h"
#include "range.h"
#include "vector.h"
int color_channel_sum(vec3i_t color) {
return color.r + color.g + color.b;
}
void encode_luminance_direct(range_t endpoint_quant,
int v0,
int v1,
uint8_t endpoint_unquantized[2],
uint8_t endpoint_quantized[2]) {
endpoint_quantized[0] = quantize_color(endpoint_quant, v0);
endpoint_quantized[1] = quantize_color(endpoint_quant, v1);
endpoint_unquantized[0] =
unquantize_color(endpoint_quant, endpoint_quantized[0]);
endpoint_unquantized[1] =
unquantize_color(endpoint_quant, endpoint_quantized[1]);
}
void encode_rgb_direct(range_t endpoint_quant,
vec3i_t e0,
vec3i_t e1,
uint8_t endpoint_quantized[6],
vec3i_t endpoint_unquantized[2]) {
vec3i_t e0q = quantize_color(endpoint_quant, e0);
vec3i_t e1q = quantize_color(endpoint_quant, e1);
vec3i_t e0u = unquantize_color(endpoint_quant, e0q);
vec3i_t e1u = unquantize_color(endpoint_quant, e1q);
// ASTC uses a different blue contraction encoding when the sum of values for
// the first endpoint is larger than the sum of values in the second
// endpoint. Sort the endpoints to ensure that the normal encoding is used.
if (color_channel_sum(e0u) > color_channel_sum(e1u)) {
endpoint_quantized[0] = static_cast<uint8_t>(e1q.r);
endpoint_quantized[1] = static_cast<uint8_t>(e0q.r);
endpoint_quantized[2] = static_cast<uint8_t>(e1q.g);
endpoint_quantized[3] = static_cast<uint8_t>(e0q.g);
endpoint_quantized[4] = static_cast<uint8_t>(e1q.b);
endpoint_quantized[5] = static_cast<uint8_t>(e0q.b);
endpoint_unquantized[0] = e1u;
endpoint_unquantized[1] = e0u;
} else {
endpoint_quantized[0] = static_cast<uint8_t>(e0q.r);
endpoint_quantized[1] = static_cast<uint8_t>(e1q.r);
endpoint_quantized[2] = static_cast<uint8_t>(e0q.g);
endpoint_quantized[3] = static_cast<uint8_t>(e1q.g);
endpoint_quantized[4] = static_cast<uint8_t>(e0q.b);
endpoint_quantized[5] = static_cast<uint8_t>(e1q.b);
endpoint_unquantized[0] = e0u;
endpoint_unquantized[1] = e1u;
}
}
#endif // ASTC_ENDPOINTS_ENCODE_H_

View file

@ -1,47 +0,0 @@
#ifndef ASTC_ENDPOINTS_MIN_MAX_H_
#define ASTC_ENDPOINTS_MIN_MAX_H_
#include <algorithm>
#include <cstddef>
#include "colors.h"
#include "constants.h"
#include "dcheck.h"
#include "misc.h"
#include "vector.h"
void find_min_max(const unorm8_t texels[BLOCK_TEXEL_COUNT],
size_t count,
vec3f_t line_k,
vec3f_t line_m,
vec3f_t& e0,
vec3f_t& e1) {
DCHECK(count <= BLOCK_TEXEL_COUNT);
DCHECK(approx_equal(quadrance(line_k), 1.0, 0.0001f));
float a, b;
{
float t = dot(to_vec3f(texels[0]) - line_m, line_k);
a = t;
b = t;
}
for (size_t i = 1; i < count; ++i) {
float t = dot(to_vec3f(texels[i]) - line_m, line_k);
a = std::min(a, t);
b = std::max(b, t);
}
e0 = clamp_rgb(line_k * a + line_m);
e1 = clamp_rgb(line_k * b + line_m);
}
void find_min_max_block(const unorm8_t texels[BLOCK_TEXEL_COUNT],
vec3f_t line_k,
vec3f_t line_m,
vec3f_t& e0,
vec3f_t& e1) {
find_min_max(texels, BLOCK_TEXEL_COUNT, line_k, line_m, e0, e1);
}
#endif // ASTC_ENDPOINTS_MIN_MAX_H_

View file

@ -1,59 +0,0 @@
#include <cstddef>
#include "colors.h"
#include "constants.h"
#include "dcheck.h"
#include "endpoints_principal_components.h"
#include "matrix.h"
#include "vector.h"
vec3f_t mean(const unorm8_t texels[BLOCK_TEXEL_COUNT], size_t count) {
vec3i_t sum(0, 0, 0);
for (size_t i = 0; i < count; ++i) {
sum = sum + to_vec3i(texels[i]);
}
return to_vec3f(sum) / static_cast<float>(count);
}
void subtract(const unorm8_t texels[BLOCK_TEXEL_COUNT],
size_t count,
vec3f_t v,
vec3f_t output[BLOCK_TEXEL_COUNT]) {
for (size_t i = 0; i < count; ++i) {
output[i] = to_vec3f(texels[i]) - v;
}
}
mat3x3f_t covariance(const vec3f_t m[BLOCK_TEXEL_COUNT], size_t count) {
mat3x3f_t cov;
for (size_t i = 0; i < 3; ++i) {
for (size_t j = 0; j < 3; ++j) {
float s = 0;
for (size_t k = 0; k < count; ++k) {
s += m[k].components[i] * m[k].components[j];
}
cov.at(i, j) = s / static_cast<float>(count - 1);
}
}
return cov;
}
void principal_component_analysis(const unorm8_t texels[BLOCK_TEXEL_COUNT],
size_t count,
vec3f_t& line_k,
vec3f_t& line_m) {
// Since we are working with fixed sized blocks count we can cap count. This
// avoids dynamic allocation.
DCHECK(count <= BLOCK_TEXEL_COUNT);
line_m = mean(texels, count);
vec3f_t n[BLOCK_TEXEL_COUNT];
subtract(texels, count, line_m, n);
mat3x3f_t w = covariance(n, count);
eigen_vector(w, line_k);
}

View file

@ -1,22 +0,0 @@
#ifndef ASTC_ENDPOINTS_PRINCIPAL_COMPONENTS_H_
#define ASTC_ENDPOINTS_PRINCIPAL_COMPONENTS_H_
#include <cstddef>
#include "colors.h"
#include "constants.h"
#include "vector.h"
void principal_component_analysis(const unorm8_t texels[BLOCK_TEXEL_COUNT],
size_t count,
vec3f_t& line_k,
vec3f_t& line_m);
inline void principal_component_analysis_block(
const unorm8_t texels[BLOCK_TEXEL_COUNT],
vec3f_t& line_k,
vec3f_t& line_m) {
principal_component_analysis(texels, BLOCK_TEXEL_COUNT, line_k, line_m);
}
#endif // ASTC_ENDPOINTS_PRINCIPAL_COMPONENTS_H_

View file

@ -1,37 +0,0 @@
#ifndef ASTC_ENDPOINTS_QUANTIZE_H_
#define ASTC_ENDPOINTS_QUANTIZE_H_
#include <cstdint>
#include "dcheck.h"
#include "range.h"
#include "tables_color_quantization.h"
#include "vector.h"
uint8_t quantize_color(range_t quant, int c) {
DCHECK(c >= 0 && c <= 255);
return color_quantize_table[quant][c];
}
vec3i_t quantize_color(range_t quant, vec3i_t c) {
vec3i_t result;
result.r = color_quantize_table[quant][c.r];
result.g = color_quantize_table[quant][c.g];
result.b = color_quantize_table[quant][c.b];
return result;
}
uint8_t unquantize_color(range_t quant, int c) {
DCHECK(c >= 0 && c <= 255);
return color_unquantize_table[quant][c];
}
vec3i_t unquantize_color(range_t quant, vec3i_t c) {
vec3i_t result;
result.r = color_unquantize_table[quant][c.r];
result.g = color_unquantize_table[quant][c.g];
result.b = color_unquantize_table[quant][c.b];
return result;
}
#endif // ASTC_ENDPOINTS_QUANTIZE_H_

View file

@ -1,212 +0,0 @@
#ifndef ASTC_INTEGER_SEQUENCE_ENCODING_H_
#define ASTC_INTEGER_SEQUENCE_ENCODING_H_
#include <cstddef>
#include <cstdint>
#include "bitmanip.h"
#include "dcheck.h"
#include "tables_integer_sequence_encoding.h"
#include "range.h"
/**
* Table that describes the number of trits or quints along with bits required
* for storing each range.
*/
const uint8_t bits_trits_quints_table[RANGE_MAX][3] = {
{1, 0, 0}, // RANGE_2
{0, 1, 0}, // RANGE_3
{2, 0, 0}, // RANGE_4
{0, 0, 1}, // RANGE_5
{1, 1, 0}, // RANGE_6
{3, 0, 0}, // RANGE_8
{1, 0, 1}, // RANGE_10
{2, 1, 0}, // RANGE_12
{4, 0, 0}, // RANGE_16
{2, 0, 1}, // RANGE_20
{3, 1, 0}, // RANGE_24
{5, 0, 0}, // RANGE_32
{3, 0, 1}, // RANGE_40
{4, 1, 0}, // RANGE_48
{6, 0, 0}, // RANGE_64
{4, 0, 1}, // RANGE_80
{5, 1, 0}, // RANGE_96
{7, 0, 0}, // RANGE_128
{5, 0, 1}, // RANGE_160
{6, 1, 0}, // RANGE_192
{8, 0, 0} // RANGE_256
};
/**
* Encode a group of 5 numbers using trits and bits.
*/
inline void encode_trits(size_t bits,
uint8_t b0,
uint8_t b1,
uint8_t b2,
uint8_t b3,
uint8_t b4,
bitwriter& writer) {
uint8_t t0, t1, t2, t3, t4;
uint8_t m0, m1, m2, m3, m4;
split_high_low(b0, bits, t0, m0);
split_high_low(b1, bits, t1, m1);
split_high_low(b2, bits, t2, m2);
split_high_low(b3, bits, t3, m3);
split_high_low(b4, bits, t4, m4);
DCHECK(t0 < 3);
DCHECK(t1 < 3);
DCHECK(t2 < 3);
DCHECK(t3 < 3);
DCHECK(t4 < 3);
uint8_t packed = integer_from_trits[t4][t3][t2][t1][t0];
writer.write8(m0, bits);
writer.write8(getbits(packed, 1, 0), 2);
writer.write8(m1, bits);
writer.write8(getbits(packed, 3, 2), 2);
writer.write8(m2, bits);
writer.write8(getbits(packed, 4, 4), 1);
writer.write8(m3, bits);
writer.write8(getbits(packed, 6, 5), 2);
writer.write8(m4, bits);
writer.write8(getbits(packed, 7, 7), 1);
}
/**
* Encode a group of 3 numbers using quints and bits.
*/
inline void encode_quints(size_t bits,
uint8_t b0,
uint8_t b1,
uint8_t b2,
bitwriter& writer) {
uint8_t q0, q1, q2;
uint8_t m0, m1, m2;
split_high_low(b0, bits, q0, m0);
split_high_low(b1, bits, q1, m1);
split_high_low(b2, bits, q2, m2);
DCHECK(q0 < 5);
DCHECK(q1 < 5);
DCHECK(q2 < 5);
uint8_t packed = integer_from_quints[q2][q1][q0];
writer.write8(m0, bits);
writer.write8(getbits(packed, 2, 0), 3);
writer.write8(m1, bits);
writer.write8(getbits(packed, 4, 3), 2);
writer.write8(m2, bits);
writer.write8(getbits(packed, 6, 5), 2);
}
/**
* Encode a sequence of numbers using using one trit and a custom number of
* bits per number.
*/
inline void encode_trits(const uint8_t* numbers,
size_t count,
bitwriter& writer,
size_t bits) {
for (size_t i = 0; i < count; i += 5) {
uint8_t b0 = numbers[i + 0];
uint8_t b1 = i + 1 >= count ? 0 : numbers[i + 1];
uint8_t b2 = i + 2 >= count ? 0 : numbers[i + 2];
uint8_t b3 = i + 3 >= count ? 0 : numbers[i + 3];
uint8_t b4 = i + 4 >= count ? 0 : numbers[i + 4];
encode_trits(bits, b0, b1, b2, b3, b4, writer);
}
}
/**
* Encode a sequence of numbers using one quint and the custom number of bits
* per number.
*/
inline void encode_quints(const uint8_t* numbers,
size_t count,
bitwriter& writer,
size_t bits) {
for (size_t i = 0; i < count; i += 3) {
uint8_t b0 = numbers[i + 0];
uint8_t b1 = i + 1 >= count ? 0 : numbers[i + 1];
uint8_t b2 = i + 2 >= count ? 0 : numbers[i + 2];
encode_quints(bits, b0, b1, b2, writer);
}
}
/**
* Encode a sequence of numbers using binary representation with the selected
* bit count.
*/
inline void encode_binary(const uint8_t* numbers,
size_t count,
bitwriter& writer,
size_t bits) {
DCHECK(count > 0);
for (size_t i = 0; i < count; ++i) {
writer.write8(numbers[i], bits);
}
}
/**
* Encode a sequence of numbers in a specific range using the binary integer
* sequence encoding. The numbers are assumed to be in the correct range and
* the memory we are writing to is assumed to be zero-initialized.
*/
inline void integer_sequence_encode(const uint8_t* numbers,
size_t count,
range_t range,
bitwriter writer) {
#ifndef NDEBUG
for (size_t i = 0; i < count; ++i) {
DCHECK(numbers[i] <= range_max_table[range]);
}
#endif
size_t bits = bits_trits_quints_table[range][0];
size_t trits = bits_trits_quints_table[range][1];
size_t quints = bits_trits_quints_table[range][2];
if (trits == 1) {
encode_trits(numbers, count, writer, bits);
} else if (quints == 1) {
encode_quints(numbers, count, writer, bits);
} else {
encode_binary(numbers, count, writer, bits);
}
}
inline void integer_sequence_encode(const uint8_t* numbers,
size_t count,
range_t range,
uint8_t* output) {
integer_sequence_encode(numbers, count, range, bitwriter(output));
}
/**
* Compute the number of bits required to store a number of items in a specific
* range using the binary integer sequence encoding.
*/
inline size_t compute_ise_bitcount(size_t items, range_t range) {
size_t bits = bits_trits_quints_table[range][0];
size_t trits = bits_trits_quints_table[range][1];
size_t quints = bits_trits_quints_table[range][2];
if (trits) {
return ((8 + 5 * bits) * items + 4) / 5;
}
if (quints) {
return ((7 + 3 * bits) * items + 2) / 3;
}
return items * bits;
}
#endif // ASTC_INTEGER_SEQUENCE_ENCODING_H_

View file

@ -1,10 +0,0 @@
#include "matrix.h"
void eigen_vector(const mat3x3f_t& a, vec3f_t& eig) {
vec3f_t b = signorm(vec3f_t(1, 5, 2)); // FIXME: Magic number
for (size_t i = 0; i < 8; ++i) {
b = signorm(a * b);
}
eig = b;
}

View file

@ -1,45 +0,0 @@
#ifndef ASTC_MATRIX_H_
#define ASTC_MATRIX_H_
#include <cstddef>
#include "vector.h"
struct mat3x3f_t {
public:
mat3x3f_t() {}
mat3x3f_t(float m00,
float m01,
float m02,
float m10,
float m11,
float m12,
float m20,
float m21,
float m22) {
m[0] = vec3f_t(m00, m01, m02);
m[1] = vec3f_t(m10, m11, m12);
m[2] = vec3f_t(m20, m21, m22);
}
const vec3f_t& row(size_t i) const { return m[i]; }
float& at(size_t i, size_t j) { return m[i].components[j]; }
const float& at(size_t i, size_t j) const { return m[i].components[j]; }
private:
vec3f_t m[3];
};
inline vec3f_t operator*(const mat3x3f_t& a, vec3f_t b) {
vec3f_t tmp;
tmp.x = dot(a.row(0), b);
tmp.y = dot(a.row(1), b);
tmp.z = dot(a.row(2), b);
return tmp;
}
void eigen_vector(const mat3x3f_t& a, vec3f_t& eig);
#endif // ASTC_MATRIX_H_

View file

@ -1,57 +0,0 @@
tables_color_quantization = custom_target(
'gen-color-quantization',
input: [],
output: ['tables_color_quantization.h'],
command: [codegen, 'quantize', '@OUTPUT0@']
)
tables_data_size = custom_target(
'gen-data-size',
input: [],
output: ['tables_data_size.h'],
command: [codegen, 'datasize', '@OUTPUT0@']
)
tables_integer_sequence_encoding = custom_target(
'gen-integer_sequence_encoding-tables',
input: [],
output: ['tables_integer_sequence_encoding.h'],
command: [codegen, 'bise', '@OUTPUT0@']
)
astc_sources = [
'bitmanip.h',
'colors.h',
'compress_block.cc',
'compress_block.h',
'compress_texture.cc',
'compress_texture.h',
'constants.h',
'data_size.h',
'dcheck.h',
'endpoints.h',
'endpoints_bounding_box.h',
'endpoints_encode.h',
'endpoints_min_max.h',
'endpoints_principal_components.cc',
'endpoints_principal_components.h',
'endpoints_quantize.h',
'integer_sequence_encoding.h',
'matrix.cc',
'matrix.h',
'misc.h',
'range.h',
'store_block.h',
'vector.h',
'weights_quantize.h',
'weights_quantize_table.h',
tables_color_quantization,
tables_data_size,
tables_integer_sequence_encoding,
]
astc = static_library(
'astc',
sources: astc_sources,
include_directories: incdir
)

View file

@ -1,23 +0,0 @@
#ifndef ASTC_MISC_H_
#define ASTC_MISC_H_
#include <math.h>
template <typename T>
T clamp(T a, T b, T x) {
if (x < a) {
return a;
}
if (x > b) {
return b;
}
return x;
}
inline bool approx_equal(float x, float y, float epsilon) {
return fabs(x - y) < epsilon;
}
#endif // ASTC_MISC_H_

View file

@ -1,42 +0,0 @@
#ifndef ASTC_RANGE_H_
#define ASTC_RANGE_H_
#include <cstdint>
/**
* Define normalized (starting at zero) numeric ranges that can be represented
* with 8 bits or less.
*/
enum range_t {
RANGE_2,
RANGE_3,
RANGE_4,
RANGE_5,
RANGE_6,
RANGE_8,
RANGE_10,
RANGE_12,
RANGE_16,
RANGE_20,
RANGE_24,
RANGE_32,
RANGE_40,
RANGE_48,
RANGE_64,
RANGE_80,
RANGE_96,
RANGE_128,
RANGE_160,
RANGE_192,
RANGE_256,
RANGE_MAX
};
/**
* Table of maximum value for each range, minimum is always zero.
*/
const uint8_t range_max_table[RANGE_MAX] = {1, 2, 3, 4, 5, 7, 9,
11, 15, 19, 23, 31, 39, 47,
63, 79, 95, 127, 159, 191, 255};
#endif // ASTC_RANGE_H_

Some files were not shown because too many files have changed in this diff Show more