mirror of
https://github.com/TelegramMessenger/Telegram-iOS.git
synced 2026-07-06 03:33:41 +02:00
Merge branch 'master' into buck-test
This commit is contained in:
commit
75fdeb0c4e
340 changed files with 4472 additions and 7186 deletions
|
|
@ -28,6 +28,9 @@
|
|||
<FileRef
|
||||
location = "group:submodules/libphonenumber/libphonenumber_Xcode.xcodeproj">
|
||||
</FileRef>
|
||||
<FileRef
|
||||
location = "group:submodules/rlottie/RLottieBinding_Xcode.xcodeproj">
|
||||
</FileRef>
|
||||
</Group>
|
||||
<Group
|
||||
location = "container:"
|
||||
|
|
@ -455,9 +458,6 @@
|
|||
<FileRef
|
||||
location = "group:submodules/Display/Display_Xcode.xcodeproj">
|
||||
</FileRef>
|
||||
<FileRef
|
||||
location = "group:submodules/RLottie/RLottie_Xcode.xcodeproj">
|
||||
</FileRef>
|
||||
<FileRef
|
||||
location = "group:submodules/TelegramBaseController/TelegramBaseController_Xcode.xcodeproj">
|
||||
</FileRef>
|
||||
|
|
|
|||
|
|
@ -4676,13 +4676,13 @@ Any member of this group will be able to see messages in the channel.";
|
|||
"EditTheme.EditTitle" = "Edit Theme";
|
||||
"EditTheme.Title" = "Theme Name";
|
||||
"EditTheme.ShortLink" = "link";
|
||||
"EditTheme.ShortLinkInfo" = "Short Link Info";
|
||||
"EditTheme.ShortLinkInfo" = "Your theme will be updated for all users each time you change it. Anyone can install it using this link.\n\nTheme links must be longer than 5 characters and can use a-z, 0-9 and underscores.";
|
||||
"EditTheme.Preview" = "CHAT PREVIEW";
|
||||
"EditTheme.UploadNewTheme" = "Select a File...";
|
||||
"EditTheme.UploadEditedTheme" = "Select Updated File...";
|
||||
"EditTheme.UploadNewInfo" = "This theme will be based on your current theme and wallpaper. Otherwise, you can use a custom theme file if you already have one.";
|
||||
"EditTheme.UploadNewTheme" = "Create from File...";
|
||||
"EditTheme.UploadEditedTheme" = "Update from File...";
|
||||
"EditTheme.UploadNewInfo" = "This theme will be based on your current theme and wallpaper. Alternatively, you can use a custom theme file if you already have one.";
|
||||
"EditTheme.UploadEditedInfo" = "You can select a new file to update the theme. It will be updated for all users.";
|
||||
"EditTheme.ThemeTemplateAlert" = "A copy of your theme template has been added to your Saved Messages.";
|
||||
"EditTheme.ThemeTemplateAlert" = "New Theme Added\n\nPress and hold on your theme to edit it or get a sharing link. Users who install your theme will get automatic updates each time you change it.\n\nFor advanced editing purposes, you can find a file with your theme in Saved Messages.";
|
||||
"EditTheme.FileReadError" = "Invalid theme file";
|
||||
|
||||
"Wallpaper.ErrorNotFound" = "Sorry, this chat background doesn't seem to exist.";
|
||||
|
|
|
|||
|
|
@ -7,12 +7,11 @@
|
|||
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 */; };
|
||||
D03E3E562304B52F0049C28B /* libcompression.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E3E552304B52F0049C28B /* libcompression.tbd */; settings = {ATTRIBUTES = (Weak, ); }; };
|
||||
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 */; };
|
||||
|
|
@ -29,7 +28,8 @@
|
|||
D06018A922F361F900796784 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D06018A822F361F800796784 /* UIKit.framework */; };
|
||||
D06018AB22F361FC00796784 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D06018AA22F361FC00796784 /* AsyncDisplayKit.framework */; };
|
||||
D06018AD22F361FF00796784 /* Lottie.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D06018AC22F361FF00796784 /* Lottie.framework */; };
|
||||
D0EFF2442319802E00CF5164 /* AppBundle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0EFF2432319802E00CF5164 /* AppBundle.framework */; };
|
||||
D06018AF22F3641F00796784 /* FrameworkBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06018AE22F3641F00796784 /* FrameworkBundle.swift */; };
|
||||
D0AA5791231BE2E6000F88F3 /* RLottieBinding.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0AA5790231BE2E6000F88F3 /* RLottieBinding.framework */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
|
|
@ -57,7 +57,8 @@
|
|||
D06018A822F361F800796784 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
||||
D06018AA22F361FC00796784 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
D06018AC22F361FF00796784 /* Lottie.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Lottie.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
D0EFF2432319802E00CF5164 /* AppBundle.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AppBundle.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
D06018AE22F3641F00796784 /* FrameworkBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkBundle.swift; sourceTree = "<group>"; };
|
||||
D0AA5790231BE2E6000F88F3 /* RLottieBinding.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RLottieBinding.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
|
|
@ -65,7 +66,7 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
D0EFF2442319802E00CF5164 /* AppBundle.framework in Frameworks */,
|
||||
D0AA5791231BE2E6000F88F3 /* RLottieBinding.framework in Frameworks */,
|
||||
D03E3E8E2304B6EC0049C28B /* YuvConversion.framework in Frameworks */,
|
||||
D03E3E642304B5640049C28B /* MobileCoreServices.framework in Frameworks */,
|
||||
D03E3E622304B55F0049C28B /* SwiftSignalKit.framework in Frameworks */,
|
||||
|
|
@ -77,7 +78,6 @@
|
|||
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 */,
|
||||
|
|
@ -115,6 +115,7 @@
|
|||
D03E3E4E2304B50A0049C28B /* AnimatedStickerUtils.swift */,
|
||||
D06018A322F361E800796784 /* AnimationNode.swift */,
|
||||
D060186F22F35FCD00796784 /* AnimationUI.h */,
|
||||
D06018AE22F3641F00796784 /* FrameworkBundle.swift */,
|
||||
);
|
||||
path = Sources;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -122,7 +123,7 @@
|
|||
D06018A522F361F400796784 /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D0EFF2432319802E00CF5164 /* AppBundle.framework */,
|
||||
D0AA5790231BE2E6000F88F3 /* RLottieBinding.framework */,
|
||||
D03E3E8D2304B6EC0049C28B /* YuvConversion.framework */,
|
||||
D03E3E632304B5640049C28B /* MobileCoreServices.framework */,
|
||||
D03E3E612304B55F0049C28B /* SwiftSignalKit.framework */,
|
||||
|
|
@ -225,6 +226,7 @@
|
|||
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 */,
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import TelegramCore
|
|||
import Compression
|
||||
import Display
|
||||
import AsyncDisplayKit
|
||||
import RLottie
|
||||
import RLottieBinding
|
||||
import GZip
|
||||
import Tuples
|
||||
import MediaResources
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import Display
|
|||
import TelegramCore
|
||||
import Compression
|
||||
import GZip
|
||||
import RLottie
|
||||
import RLottieBinding
|
||||
import MediaResources
|
||||
import MobileCoreServices
|
||||
import MediaResources
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ final class GlobalOverlayPresentationContext {
|
|||
private let statusBarHost: StatusBarHost?
|
||||
private weak var parentView: UIView?
|
||||
|
||||
private var controllers: [ContainableController] = []
|
||||
private(set) var controllers: [ContainableController] = []
|
||||
|
||||
private var presentationDisposables = DisposableSet()
|
||||
private var layout: ContainerViewLayout?
|
||||
|
|
|
|||
|
|
@ -1051,10 +1051,21 @@ public class Window1 {
|
|||
}
|
||||
|
||||
public func simulateKeyboardDismiss(transition: ContainedViewLayoutTransition) {
|
||||
if self.windowLayout.inputHeight != nil {
|
||||
var simulate = false
|
||||
for controller in self.overlayPresentationContext.controllers {
|
||||
if controller.isViewLoaded {
|
||||
if controller.view.window != self.hostView.containerView.window {
|
||||
simulate = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
if simulate {
|
||||
self.updateLayout {
|
||||
$0.update(upperKeyboardInputPositionBound: self.windowLayout.size.height, transition: transition, overrideTransition: false)
|
||||
}
|
||||
} else {
|
||||
self.hostView.containerView.endEditing(true)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ public struct LegacyAttachmentMenuMediaEditing: OptionSet {
|
|||
public static let imageOrVideo = LegacyAttachmentMenuMediaEditing(rawValue: 1 << 0)
|
||||
}
|
||||
|
||||
public func legacyAttachmentMenu(context: AccountContext, peer: Peer, editMediaOptions: LegacyAttachmentMenuMediaEditing?, saveEditedPhotos: Bool, allowGrouping: Bool, hasSchedule: Bool, theme: PresentationTheme, strings: PresentationStrings, parentController: LegacyController, recentlyUsedInlineBots: [Peer], initialCaption: String, openGallery: @escaping () -> Void, openCamera: @escaping (TGAttachmentCameraView?, TGMenuSheetController?) -> Void, openFileGallery: @escaping () -> Void, openWebSearch: @escaping () -> Void, openMap: @escaping () -> Void, openContacts: @escaping () -> Void, openPoll: @escaping () -> Void, presentSelectionLimitExceeded: @escaping () -> Void, presentCantSendMultipleFiles: @escaping () -> Void, presentSchedulePicker: @escaping (@escaping (Int32) -> Void) -> Void, sendMessagesWithSignals: @escaping ([Any]?, Bool, Int32) -> Void, selectRecentlyUsedInlineBot: @escaping (Peer) -> Void) -> TGMenuSheetController {
|
||||
public func legacyAttachmentMenu(context: AccountContext, peer: Peer, editMediaOptions: LegacyAttachmentMenuMediaEditing?, saveEditedPhotos: Bool, allowGrouping: Bool, hasSchedule: Bool, canSendPolls: Bool, theme: PresentationTheme, strings: PresentationStrings, parentController: LegacyController, recentlyUsedInlineBots: [Peer], initialCaption: String, openGallery: @escaping () -> Void, openCamera: @escaping (TGAttachmentCameraView?, TGMenuSheetController?) -> Void, openFileGallery: @escaping () -> Void, openWebSearch: @escaping () -> Void, openMap: @escaping () -> Void, openContacts: @escaping () -> Void, openPoll: @escaping () -> Void, presentSelectionLimitExceeded: @escaping () -> Void, presentCantSendMultipleFiles: @escaping () -> Void, presentSchedulePicker: @escaping (@escaping (Int32) -> Void) -> Void, sendMessagesWithSignals: @escaping ([Any]?, Bool, Int32) -> Void, selectRecentlyUsedInlineBot: @escaping (Peer) -> Void) -> TGMenuSheetController {
|
||||
let isSecretChat = peer.id.namespace == Namespaces.Peer.SecretChat
|
||||
|
||||
let controller = TGMenuSheetController(context: parentController.context, dark: false)!
|
||||
|
|
@ -139,7 +139,7 @@ public func legacyAttachmentMenu(context: AccountContext, peer: Peer, editMediaO
|
|||
})!
|
||||
itemViews.append(locationItem)
|
||||
|
||||
if (peer is TelegramGroup || peer is TelegramChannel) && canSendMessagesToPeer(peer) {
|
||||
if (peer is TelegramGroup || peer is TelegramChannel) && canSendMessagesToPeer(peer) && canSendPolls {
|
||||
let pollItem = TGMenuSheetButtonItemView(title: strings.AttachmentMenu_Poll, type: TGMenuSheetButtonTypeDefault, action: { [weak controller] in
|
||||
controller?.dismiss(animated: true)
|
||||
openPoll()
|
||||
|
|
|
|||
|
|
@ -109,19 +109,6 @@ private func addOperation(_ operation: ChatListOperation, groupId: PeerGroupId,
|
|||
operations[groupId]!.append(operation)
|
||||
}
|
||||
|
||||
/*
|
||||
dialog.unread_mark ? 1 : 0,
|
||||
dialog.peer.channel_id || dialog.peer.chat_id || dialog.peer.user_id,
|
||||
dialog.top_message.id,
|
||||
top_message.edit_date || top_message.date,
|
||||
dialog.read_inbox_max_id,
|
||||
dialog.read_outbox_max_id,
|
||||
dialog.unread_count,
|
||||
dialog.unread_mentions_count,
|
||||
draft.draft.date || 0
|
||||
|
||||
*/
|
||||
|
||||
public enum ChatListNamespaceEntry {
|
||||
case peer(index: ChatListIndex, readState: PeerReadState?, topMessageAttributes: [MessageAttribute], tagSummary: MessageHistoryTagNamespaceSummary?, interfaceState: PeerChatInterfaceState?)
|
||||
case hole(MessageIndex)
|
||||
|
|
|
|||
|
|
@ -370,10 +370,15 @@ public struct MessageFlags: OptionSet {
|
|||
if flags.contains(StoreMessageFlags.CanBeGroupedIntoFeed) {
|
||||
rawValue |= MessageFlags.CanBeGroupedIntoFeed.rawValue
|
||||
}
|
||||
|
||||
if flags.contains(StoreMessageFlags.WasScheduled) {
|
||||
rawValue |= MessageFlags.WasScheduled.rawValue
|
||||
}
|
||||
|
||||
if flags.contains(StoreMessageFlags.CountedAsIncoming) {
|
||||
rawValue |= MessageFlags.CountedAsIncoming.rawValue
|
||||
}
|
||||
|
||||
self.rawValue = rawValue
|
||||
}
|
||||
|
||||
|
|
@ -384,7 +389,9 @@ public struct MessageFlags: OptionSet {
|
|||
public static let Sending = MessageFlags(rawValue: 32)
|
||||
public static let CanBeGroupedIntoFeed = MessageFlags(rawValue: 64)
|
||||
public static let WasScheduled = MessageFlags(rawValue: 128)
|
||||
public static let CountedAsIncoming = MessageFlags(rawValue: 256)
|
||||
|
||||
public static let IsIncomingMask = MessageFlags([.Incoming, .CountedAsIncoming])
|
||||
}
|
||||
|
||||
public struct StoreMessageForwardInfo {
|
||||
|
|
@ -568,10 +575,15 @@ public struct StoreMessageFlags: OptionSet {
|
|||
if flags.contains(.CanBeGroupedIntoFeed) {
|
||||
rawValue |= StoreMessageFlags.CanBeGroupedIntoFeed.rawValue
|
||||
}
|
||||
|
||||
if flags.contains(.WasScheduled) {
|
||||
rawValue |= StoreMessageFlags.WasScheduled.rawValue
|
||||
}
|
||||
|
||||
if flags.contains(.CountedAsIncoming) {
|
||||
rawValue |= StoreMessageFlags.CountedAsIncoming.rawValue
|
||||
}
|
||||
|
||||
self.rawValue = rawValue
|
||||
}
|
||||
|
||||
|
|
@ -582,6 +594,9 @@ public struct StoreMessageFlags: OptionSet {
|
|||
public static let Sending = StoreMessageFlags(rawValue: 32)
|
||||
public static let CanBeGroupedIntoFeed = StoreMessageFlags(rawValue: 64)
|
||||
public static let WasScheduled = StoreMessageFlags(rawValue: 128)
|
||||
public static let CountedAsIncoming = StoreMessageFlags(rawValue: 256)
|
||||
|
||||
public static let IsIncomingMask = StoreMessageFlags([.Incoming, .CountedAsIncoming])
|
||||
}
|
||||
|
||||
public enum StoreMessageId {
|
||||
|
|
|
|||
|
|
@ -175,7 +175,7 @@ final class MessageHistoryIndexTable: Table {
|
|||
|
||||
let value = WriteBuffer()
|
||||
var flags: Int8 = HistoryEntryTypeMessage
|
||||
if message.flags.contains(.Incoming) {
|
||||
if !message.flags.intersection(.IsIncomingMask).isEmpty {
|
||||
flags |= HistoryEntryMessageFlagIncoming
|
||||
}
|
||||
var timestamp: Int32 = index.timestamp
|
||||
|
|
|
|||
|
|
@ -282,7 +282,7 @@ final class MessageHistoryTable: Table {
|
|||
if !message.localTags.isEmpty {
|
||||
self.localTagsTable.set(id: message.id, tags: message.localTags, previousTags: [], operations: &localTagsOperations)
|
||||
}
|
||||
if message.flags.contains(.Incoming) {
|
||||
if !message.flags.intersection(.IsIncomingMask).isEmpty {
|
||||
accumulatedAddedIncomingMessageIndices.insert(message.index)
|
||||
}
|
||||
case let .InsertExistingMessage(storeMessage):
|
||||
|
|
@ -312,7 +312,7 @@ final class MessageHistoryTable: Table {
|
|||
outputOperations.append(.UpdateGroupInfos(updatedGroupInfos))
|
||||
}
|
||||
|
||||
if message.flags.contains(.Incoming) {
|
||||
if !message.flags.intersection(.IsIncomingMask).isEmpty {
|
||||
if index != message.index {
|
||||
accumulatedRemoveIndices.append(index)
|
||||
accumulatedAddedIncomingMessageIndices.insert(message.index)
|
||||
|
|
@ -520,7 +520,7 @@ final class MessageHistoryTable: Table {
|
|||
var topMessageId: (MessageId.Id, Bool)?
|
||||
if let index = self.topIndexEntry(peerId: messageId.peerId, namespace: messageId.namespace) {
|
||||
if let message = self.getMessage(index) {
|
||||
topMessageId = (index.id.id, !message.flags.contains(.Incoming))
|
||||
topMessageId = (index.id.id, message.flags.intersection(.IsIncomingMask).isEmpty)
|
||||
} else {
|
||||
topMessageId = (index.id.id, false)
|
||||
}
|
||||
|
|
@ -584,7 +584,7 @@ final class MessageHistoryTable: Table {
|
|||
var topMessageId: (MessageId.Id, Bool)?
|
||||
if let index = self.topIndexEntry(peerId: messageIndex.id.peerId, namespace: messageIndex.id.namespace) {
|
||||
if let message = self.getMessage(index) {
|
||||
topMessageId = (index.id.id, !message.flags.contains(.Incoming))
|
||||
topMessageId = (index.id.id, message.flags.intersection(.IsIncomingMask).isEmpty)
|
||||
} else {
|
||||
topMessageId = (index.id.id, false)
|
||||
}
|
||||
|
|
@ -2390,7 +2390,7 @@ final class MessageHistoryTable: Table {
|
|||
let key = self.key(index)
|
||||
if let value = self.valueBox.get(self.table, key: key) {
|
||||
let entry = self.readIntermediateEntry(key, value: value)
|
||||
if entry.message.id.namespace == namespace && entry.message.flags.contains(.Incoming) {
|
||||
if entry.message.id.namespace == namespace && !entry.message.flags.intersection(.IsIncomingMask).isEmpty {
|
||||
count += 1
|
||||
}
|
||||
} else {
|
||||
|
|
@ -2412,7 +2412,7 @@ final class MessageHistoryTable: Table {
|
|||
if fromIndex <= toIndex {
|
||||
self.valueBox.range(self.table, start: self.key(fromIndex).predecessor, end: self.key(toIndex).successor, values: { key, value in
|
||||
let entry = self.readIntermediateEntry(key, value: value)
|
||||
if entry.message.id.namespace == namespace && entry.message.flags.contains(.Incoming) {
|
||||
if entry.message.id.namespace == namespace && !entry.message.flags.intersection(.IsIncomingMask).isEmpty {
|
||||
count += 1
|
||||
messageIds.append(entry.message.id)
|
||||
}
|
||||
|
|
@ -2431,7 +2431,7 @@ final class MessageHistoryTable: Table {
|
|||
var messageIds: [MessageId] = []
|
||||
self.valueBox.range(self.table, start: self.key(fromIndex).predecessor, end: self.key(toIndex).successor, values: { key, value in
|
||||
let entry = self.readIntermediateEntry(key, value: value)
|
||||
if !entry.message.flags.contains(.Incoming) {
|
||||
if entry.message.flags.intersection(.IsIncomingMask).isEmpty {
|
||||
messageIds.append(entry.message.id)
|
||||
}
|
||||
return true
|
||||
|
|
|
|||
|
|
@ -718,7 +718,7 @@ public final class MessageHistoryView {
|
|||
for entry in state.entries {
|
||||
if mutableView.namespaces.contains(entry.message.id.namespace) {
|
||||
let read: Bool
|
||||
if entry.message.flags.contains(.Incoming) {
|
||||
if !entry.message.flags.intersection(.IsIncomingMask).isEmpty {
|
||||
read = false
|
||||
} else if let readState = states[entry.message.id.peerId] {
|
||||
read = readState.isOutgoingMessageIndexRead(entry.message.index)
|
||||
|
|
@ -822,7 +822,7 @@ public final class MessageHistoryView {
|
|||
}
|
||||
if let _ = maxNamespaceIndex , index + 1 < entries.count {
|
||||
for i in index + 1 ..< entries.count {
|
||||
if !entries[i].message.flags.contains(.Incoming) {
|
||||
if entries[i].message.flags.intersection(.IsIncomingMask).isEmpty {
|
||||
maxNamespaceIndex = entries[i].message.index
|
||||
} else {
|
||||
break
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,35 +0,0 @@
|
|||
dist: trusty
|
||||
|
||||
sudo: false
|
||||
|
||||
language: cpp
|
||||
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
- g++-5
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- os: linux
|
||||
compiler: clang
|
||||
env:
|
||||
build_type=release
|
||||
options=""
|
||||
- MATRIX_EVAL="CC=clang-5.0 && CXX=clang++"
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
env:
|
||||
build_type=release
|
||||
options=""
|
||||
- MATRIX_EVAL="CC=gcc-5 && CXX=g++-5"
|
||||
|
||||
before_install:
|
||||
- eval "${MATRIX_EVAL}"
|
||||
|
||||
script:
|
||||
- cmake -DLIB_INSTALL_DIR=/usr/lib .
|
||||
- cmake --build . -- -j2
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
|
||||
common_source = files('evasapp.cpp')
|
||||
common_source += files('lottieview.cpp')
|
||||
|
||||
demo_sources = files('demo.cpp')
|
||||
demo_sources += common_source
|
||||
|
||||
executable('lottie2gif',
|
||||
'lottie2gif.cpp',
|
||||
include_directories : inc,
|
||||
link_with : rlottie_lib)
|
||||
|
||||
executable('vectorTest',
|
||||
'vectortest.cpp',
|
||||
include_directories : inc,
|
||||
dependencies : [library_deps])
|
||||
|
||||
demo_dep = dependency('elementary', required : false)
|
||||
|
||||
if (demo_dep.found())
|
||||
executable('demo',
|
||||
demo_sources,
|
||||
include_directories : inc,
|
||||
link_with : rlottie_lib,
|
||||
dependencies : demo_dep)
|
||||
|
||||
lottieview_test_src = files('lottieviewtest.cpp')
|
||||
lottieview_test_src += common_source
|
||||
|
||||
executable('lottieviewTest',
|
||||
lottieview_test_src,
|
||||
include_directories : inc,
|
||||
link_with : rlottie_lib,
|
||||
dependencies : demo_dep)
|
||||
|
||||
uxsample_test_src = files('uxsampletest.cpp')
|
||||
uxsample_test_src += common_source
|
||||
|
||||
executable('uxsampleTest',
|
||||
uxsample_test_src,
|
||||
include_directories : inc,
|
||||
link_with : rlottie_lib,
|
||||
dependencies : demo_dep)
|
||||
|
||||
lottieviewer_sources = files('lottieviewer.cpp')
|
||||
lottieviewer_sources += common_source
|
||||
|
||||
executable('lottieviewer',
|
||||
lottieviewer_sources,
|
||||
include_directories : inc,
|
||||
link_with : rlottie_lib,
|
||||
dependencies : demo_dep)
|
||||
|
||||
if (meson.get_compiler('cpp').has_header('elementary-1/efl_ui_animation_view.h'))
|
||||
executable('efl_animview',
|
||||
'efl_animview.cpp',
|
||||
include_directories : inc,
|
||||
link_with : rlottie_lib,
|
||||
dependencies : demo_dep)
|
||||
endif
|
||||
|
||||
endif
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1,31 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include<iostream>
|
||||
|
||||
#include "vinterpolator.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
VInterpolator ip({0.667, 1}, {0.333 , 0});
|
||||
for (float i = 0.0 ; i < 1.0 ; i+=0.05) {
|
||||
std::cout<<ip.value(i)<<"\t";
|
||||
}
|
||||
std::cout<<std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
project('rlottie library',
|
||||
'cpp',
|
||||
license : 'Apache')
|
||||
|
||||
rlottie_lib_version = '0.0.1'
|
||||
|
||||
add_global_arguments('-DDEMO_DIR="@0@/example/resource/"'.format(meson.current_source_dir()), language : 'cpp')
|
||||
|
||||
compiler_flags = ['-std=c++14', '-Os', '-Wall', '-Werror', '-Wextra', '-fno-exceptions', '-fno-rtti',
|
||||
'-fno-unwind-tables' , '-fno-asynchronous-unwind-tables',
|
||||
'-Wnon-virtual-dtor', '-Woverloaded-virtual', '-Wno-unused-parameter', '-fvisibility=hidden']
|
||||
|
||||
|
||||
if (build_machine.system() == 'linux')
|
||||
compiler_flags += ['-pthread']
|
||||
add_global_link_arguments('-pthread', language: 'cpp')
|
||||
endif
|
||||
|
||||
add_global_arguments(compiler_flags, language: 'cpp')
|
||||
|
||||
inc = include_directories('inc')
|
||||
|
||||
subdir('inc')
|
||||
subdir('src')
|
||||
|
||||
if get_option('example') == true
|
||||
subdir('example')
|
||||
endif
|
||||
|
||||
if get_option('test') == true
|
||||
subdir('test')
|
||||
endif
|
||||
|
||||
pkg_mod = import('pkgconfig')
|
||||
|
||||
pkg_mod.generate( libraries : rlottie_lib,
|
||||
version : rlottie_lib_version,
|
||||
name : 'librlottie',
|
||||
filebase : 'rlottie',
|
||||
description : 'A Library for rendering lottie files.'
|
||||
)
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
option('test',
|
||||
type: 'boolean',
|
||||
value: false,
|
||||
description: 'Enable building unit tests')
|
||||
|
||||
option('example',
|
||||
type: 'boolean',
|
||||
value: true,
|
||||
description: 'Enable building examples')
|
||||
|
||||
option('text',
|
||||
type: 'boolean',
|
||||
value: false,
|
||||
description: 'Enable text module')
|
||||
|
||||
|
|
@ -1,127 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "lottieloader.h"
|
||||
#include "lottieparser.h"
|
||||
|
||||
#include <cstring>
|
||||
#include <fstream>
|
||||
#include <unordered_map>
|
||||
using namespace std;
|
||||
|
||||
#ifdef LOTTIE_CACHE_SUPPORT
|
||||
|
||||
class LottieFileCache {
|
||||
public:
|
||||
static LottieFileCache &instance()
|
||||
{
|
||||
static LottieFileCache CACHE;
|
||||
return CACHE;
|
||||
}
|
||||
std::shared_ptr<LOTModel> find(const std::string &key)
|
||||
{
|
||||
auto search = mHash.find(key);
|
||||
if (search != mHash.end()) {
|
||||
return search->second;
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
void add(const std::string &key, std::shared_ptr<LOTModel> value)
|
||||
{
|
||||
mHash[key] = std::move(value);
|
||||
}
|
||||
|
||||
private:
|
||||
LottieFileCache() = default;
|
||||
|
||||
std::unordered_map<std::string, std::shared_ptr<LOTModel>> mHash;
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
class LottieFileCache {
|
||||
public:
|
||||
static LottieFileCache &instance()
|
||||
{
|
||||
static LottieFileCache CACHE;
|
||||
return CACHE;
|
||||
}
|
||||
std::shared_ptr<LOTModel> find(const std::string &) { return nullptr; }
|
||||
void add(const std::string &, std::shared_ptr<LOTModel>) {}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
static std::string dirname(const std::string &path)
|
||||
{
|
||||
const char *ptr = strrchr(path.c_str(), '/');
|
||||
int len = int(ptr + 1 - path.c_str()); // +1 to include '/'
|
||||
return std::string(path, 0, len);
|
||||
}
|
||||
|
||||
bool LottieLoader::load(const std::string &path)
|
||||
{
|
||||
mModel = LottieFileCache::instance().find(path);
|
||||
if (mModel) return true;
|
||||
|
||||
std::ifstream f;
|
||||
f.open(path);
|
||||
|
||||
if (!f.is_open()) {
|
||||
vCritical << "failed to open file = " << path.c_str();
|
||||
return false;
|
||||
} else {
|
||||
std::stringstream buf;
|
||||
buf << f.rdbuf();
|
||||
|
||||
LottieParser parser(const_cast<char *>(buf.str().data()),
|
||||
dirname(path).c_str());
|
||||
mModel = parser.model();
|
||||
|
||||
if (!mModel) return false;
|
||||
|
||||
LottieFileCache::instance().add(path, mModel);
|
||||
|
||||
f.close();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool LottieLoader::loadFromData(std::string &&jsonData, const std::string &key,
|
||||
const std::string &resourcePath)
|
||||
{
|
||||
mModel = LottieFileCache::instance().find(key);
|
||||
if (mModel) return true;
|
||||
|
||||
LottieParser parser(const_cast<char *>(jsonData.c_str()),
|
||||
resourcePath.c_str());
|
||||
mModel = parser.model();
|
||||
|
||||
if (!mModel) return false;
|
||||
|
||||
LottieFileCache::instance().add(key, mModel);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::shared_ptr<LOTModel> LottieLoader::model()
|
||||
{
|
||||
return mModel;
|
||||
}
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
|
||||
source_file = files('lottieparser.cpp')
|
||||
source_file += files('lottieloader.cpp')
|
||||
source_file += files('lottiemodel.cpp')
|
||||
source_file += files('lottieproxymodel.cpp')
|
||||
source_file += files('lottieanimation.cpp')
|
||||
source_file += files('lottieitem.cpp')
|
||||
source_file += files('lottiekeypath.cpp')
|
||||
|
||||
|
||||
lottie_dep = declare_dependency(
|
||||
include_directories : include_directories('.'),
|
||||
sources : source_file
|
||||
)
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
subdir('vector')
|
||||
subdir('lottie')
|
||||
subdir('binding')
|
||||
|
||||
library_deps = vector_dep
|
||||
library_deps += lottie_dep
|
||||
library_deps += binding_dep
|
||||
|
||||
rlottie_lib = shared_library('rlottie',
|
||||
include_directories : inc,
|
||||
version : rlottie_lib_version,
|
||||
dependencies : library_deps,
|
||||
install : true
|
||||
)
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
|
||||
subdir('freetype')
|
||||
subdir('pixman')
|
||||
subdir('stb')
|
||||
|
||||
vector_dep = [freetype_dep]
|
||||
vector_dep += pixman_dep
|
||||
|
||||
source_file = files('vdasher.cpp')
|
||||
source_file += files('vbrush.cpp')
|
||||
source_file += files('vbitmap.cpp')
|
||||
source_file += files('vpainter.cpp')
|
||||
source_file += files('vcompositionfunctions.cpp')
|
||||
source_file += files('vdrawhelper.cpp')
|
||||
source_file += files('vdrawhelper_sse2.cpp')
|
||||
source_file += files('vdrawhelper_neon.cpp')
|
||||
source_file += files('vdrawable.cpp')
|
||||
|
||||
source_file += files('vrect.cpp')
|
||||
source_file += files('vrle.cpp')
|
||||
source_file += files('vpath.cpp')
|
||||
source_file += files('vpathmesure.cpp')
|
||||
source_file += files('vmatrix.cpp')
|
||||
source_file += files('velapsedtimer.cpp')
|
||||
source_file += files('vdebug.cpp')
|
||||
source_file += files('vinterpolator.cpp')
|
||||
source_file += files('vbezier.cpp')
|
||||
source_file += files('vraster.cpp')
|
||||
source_file += files('vimageloader.cpp')
|
||||
|
||||
# dl dependancy for dlopen, dlsym, dlclose symbol
|
||||
cc = meson.get_compiler('cpp')
|
||||
vector_dep += cc.find_library('dl', required : true)
|
||||
|
||||
vector_dep += declare_dependency( include_directories : include_directories('.'),
|
||||
sources : source_file
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
clang: error: clang: error: no such file or directory: '2'
|
||||
no such file or directory: '2'
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,418 +0,0 @@
|
|||
/*
|
||||
* Copyright © 2009 Nokia Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Author: Siarhei Siamashka (siarhei.siamashka@nokia.com)
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file contains implementations of NEON optimized pixel processing
|
||||
* functions. There is no full and detailed tutorial, but some functions
|
||||
* (those which are exposing some new or interesting features) are
|
||||
* extensively commented and can be used as examples.
|
||||
*
|
||||
* You may want to have a look at the comments for following functions:
|
||||
* - pixman_composite_over_8888_0565_asm_neon
|
||||
* - pixman_composite_over_n_8_0565_asm_neon
|
||||
*/
|
||||
|
||||
/* Prevent the stack from becoming executable for no reason... */
|
||||
#if defined(__linux__) && defined(__ELF__)
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
#endif
|
||||
|
||||
.text
|
||||
.arch armv8-a
|
||||
.altmacro
|
||||
.p2align 2
|
||||
|
||||
/* Supplementary macro for setting function attributes */
|
||||
.macro pixman_asm_function fname
|
||||
.func fname
|
||||
.global fname
|
||||
#ifdef __ELF__
|
||||
.hidden fname
|
||||
.type fname, %function
|
||||
#endif
|
||||
fname:
|
||||
.endm
|
||||
|
||||
#include "pixman-arma64-neon-asm.h"
|
||||
|
||||
/* Global configuration options and preferences */
|
||||
|
||||
/*
|
||||
* The code can optionally make use of unaligned memory accesses to improve
|
||||
* performance of handling leading/trailing pixels for each scanline.
|
||||
* Configuration variable RESPECT_STRICT_ALIGNMENT can be set to 0 for
|
||||
* example in linux if unaligned memory accesses are not configured to
|
||||
* generate.exceptions.
|
||||
*/
|
||||
.set RESPECT_STRICT_ALIGNMENT, 1
|
||||
|
||||
/*
|
||||
* Set default prefetch type. There is a choice between the following options:
|
||||
*
|
||||
* PREFETCH_TYPE_NONE (may be useful for the ARM cores where PLD is set to work
|
||||
* as NOP to workaround some HW bugs or for whatever other reason)
|
||||
*
|
||||
* PREFETCH_TYPE_SIMPLE (may be useful for simple single-issue ARM cores where
|
||||
* advanced prefetch intruduces heavy overhead)
|
||||
*
|
||||
* PREFETCH_TYPE_ADVANCED (useful for superscalar cores such as ARM Cortex-A8
|
||||
* which can run ARM and NEON instructions simultaneously so that extra ARM
|
||||
* instructions do not add (many) extra cycles, but improve prefetch efficiency)
|
||||
*
|
||||
* Note: some types of function can't support advanced prefetch and fallback
|
||||
* to simple one (those which handle 24bpp pixels)
|
||||
*/
|
||||
.set PREFETCH_TYPE_DEFAULT, PREFETCH_TYPE_ADVANCED
|
||||
|
||||
/* Prefetch distance in pixels for simple prefetch */
|
||||
.set PREFETCH_DISTANCE_SIMPLE, 64
|
||||
|
||||
/*
|
||||
* Implementation of pixman_composite_over_8888_0565_asm_neon
|
||||
*
|
||||
* This function takes a8r8g8b8 source buffer, r5g6b5 destination buffer and
|
||||
* performs OVER compositing operation. Function fast_composite_over_8888_0565
|
||||
* from pixman-fast-path.c does the same in C and can be used as a reference.
|
||||
*
|
||||
* First we need to have some NEON assembly code which can do the actual
|
||||
* operation on the pixels and provide it to the template macro.
|
||||
*
|
||||
* Template macro quite conveniently takes care of emitting all the necessary
|
||||
* code for memory reading and writing (including quite tricky cases of
|
||||
* handling unaligned leading/trailing pixels), so we only need to deal with
|
||||
* the data in NEON registers.
|
||||
*
|
||||
* NEON registers allocation in general is recommented to be the following:
|
||||
* v0, v1, v2, v3 - contain loaded source pixel data
|
||||
* v4, v5, v6, v7 - contain loaded destination pixels (if they are needed)
|
||||
* v24, v25, v26, v27 - contain loading mask pixel data (if mask is used)
|
||||
* v28, v29, v30, v31 - place for storing the result (destination pixels)
|
||||
*
|
||||
* As can be seen above, four 64-bit NEON registers are used for keeping
|
||||
* intermediate pixel data and up to 8 pixels can be processed in one step
|
||||
* for 32bpp formats (16 pixels for 16bpp, 32 pixels for 8bpp).
|
||||
*
|
||||
* This particular function uses the following registers allocation:
|
||||
* v0, v1, v2, v3 - contain loaded source pixel data
|
||||
* v4, v5 - contain loaded destination pixels (they are needed)
|
||||
* v28, v29 - place for storing the result (destination pixels)
|
||||
*/
|
||||
|
||||
/*
|
||||
* Step one. We need to have some code to do some arithmetics on pixel data.
|
||||
* This is implemented as a pair of macros: '*_head' and '*_tail'. When used
|
||||
* back-to-back, they take pixel data from {v0, v1, v2, v3} and {v4, v5},
|
||||
* perform all the needed calculations and write the result to {v28, v29}.
|
||||
* The rationale for having two macros and not just one will be explained
|
||||
* later. In practice, any single monolitic function which does the work can
|
||||
* be split into two parts in any arbitrary way without affecting correctness.
|
||||
*
|
||||
* There is one special trick here too. Common template macro can optionally
|
||||
* make our life a bit easier by doing R, G, B, A color components
|
||||
* deinterleaving for 32bpp pixel formats (and this feature is used in
|
||||
* 'pixman_composite_over_8888_0565_asm_neon' function). So it means that
|
||||
* instead of having 8 packed pixels in {v0, v1, v2, v3} registers, we
|
||||
* actually use v0 register for blue channel (a vector of eight 8-bit
|
||||
* values), v1 register for green, v2 for red and v3 for alpha. This
|
||||
* simple conversion can be also done with a few NEON instructions:
|
||||
*
|
||||
* Packed to planar conversion: // vuzp8 is a wrapper macro
|
||||
* vuzp8 v0, v1
|
||||
* vuzp8 v2, v3
|
||||
* vuzp8 v1, v3
|
||||
* vuzp8 v0, v2
|
||||
*
|
||||
* Planar to packed conversion: // vzip8 is a wrapper macro
|
||||
* vzip8 v0, v2
|
||||
* vzip8 v1, v3
|
||||
* vzip8 v2, v3
|
||||
* vzip8 v0, v1
|
||||
*
|
||||
* But pixel can be loaded directly in planar format using LD4 / b NEON
|
||||
* instruction. It is 1 cycle slower than LD1 / s, so this is not always
|
||||
* desirable, that's why deinterleaving is optional.
|
||||
*
|
||||
* But anyway, here is the code:
|
||||
*/
|
||||
|
||||
.macro pixman_composite_out_reverse_8888_8888_process_pixblock_head
|
||||
mvn v24.8b, v3.8b /* get inverted alpha */
|
||||
/* do alpha blending */
|
||||
umull v8.8h, v24.8b, v4.8b
|
||||
umull v9.8h, v24.8b, v5.8b
|
||||
umull v10.8h, v24.8b, v6.8b
|
||||
umull v11.8h, v24.8b, v7.8b
|
||||
.endm
|
||||
|
||||
.macro pixman_composite_out_reverse_8888_8888_process_pixblock_tail
|
||||
urshr v14.8h, v8.8h, #8
|
||||
urshr v15.8h, v9.8h, #8
|
||||
urshr v16.8h, v10.8h, #8
|
||||
urshr v17.8h, v11.8h, #8
|
||||
raddhn v28.8b, v14.8h, v8.8h
|
||||
raddhn v29.8b, v15.8h, v9.8h
|
||||
raddhn v30.8b, v16.8h, v10.8h
|
||||
raddhn v31.8b, v17.8h, v11.8h
|
||||
.endm
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
.macro pixman_composite_over_8888_8888_process_pixblock_head
|
||||
pixman_composite_out_reverse_8888_8888_process_pixblock_head
|
||||
.endm
|
||||
|
||||
.macro pixman_composite_over_8888_8888_process_pixblock_tail
|
||||
pixman_composite_out_reverse_8888_8888_process_pixblock_tail
|
||||
uqadd v28.8b, v0.8b, v28.8b
|
||||
uqadd v29.8b, v1.8b, v29.8b
|
||||
uqadd v30.8b, v2.8b, v30.8b
|
||||
uqadd v31.8b, v3.8b, v31.8b
|
||||
.endm
|
||||
|
||||
.macro pixman_composite_over_8888_8888_process_pixblock_tail_head
|
||||
ld4 {v4.8b, v5.8b, v6.8b, v7.8b}, [DST_R], #32
|
||||
urshr v14.8h, v8.8h, #8
|
||||
PF add PF_X, PF_X, #8
|
||||
PF tst PF_CTL, #0xF
|
||||
urshr v15.8h, v9.8h, #8
|
||||
urshr v16.8h, v10.8h, #8
|
||||
urshr v17.8h, v11.8h, #8
|
||||
PF beq 10f
|
||||
PF add PF_X, PF_X, #8
|
||||
PF sub PF_CTL, PF_CTL, #1
|
||||
10:
|
||||
raddhn v28.8b, v14.8h, v8.8h
|
||||
raddhn v29.8b, v15.8h, v9.8h
|
||||
PF cmp PF_X, ORIG_W
|
||||
raddhn v30.8b, v16.8h, v10.8h
|
||||
raddhn v31.8b, v17.8h, v11.8h
|
||||
uqadd v28.8b, v0.8b, v28.8b
|
||||
uqadd v29.8b, v1.8b, v29.8b
|
||||
uqadd v30.8b, v2.8b, v30.8b
|
||||
uqadd v31.8b, v3.8b, v31.8b
|
||||
fetch_src_pixblock
|
||||
PF lsl DUMMY, PF_X, #src_bpp_shift
|
||||
PF prfm PREFETCH_MODE, [PF_SRC, DUMMY]
|
||||
mvn v22.8b, v3.8b
|
||||
PF lsl DUMMY, PF_X, #dst_bpp_shift
|
||||
PF prfm PREFETCH_MODE, [PF_DST, DUMMY]
|
||||
st4 {v28.8b, v29.8b, v30.8b, v31.8b}, [DST_W], #32
|
||||
PF ble 10f
|
||||
PF sub PF_X, PF_X, ORIG_W
|
||||
10:
|
||||
umull v8.8h, v22.8b, v4.8b
|
||||
PF ble 10f
|
||||
PF subs PF_CTL, PF_CTL, #0x10
|
||||
10:
|
||||
umull v9.8h, v22.8b, v5.8b
|
||||
PF ble 10f
|
||||
PF lsl DUMMY, SRC_STRIDE, #src_bpp_shift
|
||||
PF ldrsb DUMMY, [PF_SRC, DUMMY]
|
||||
PF add PF_SRC, PF_SRC, #1
|
||||
10:
|
||||
umull v10.8h, v22.8b, v6.8b
|
||||
PF ble 10f
|
||||
PF lsl DUMMY, DST_STRIDE, #dst_bpp_shift
|
||||
PF ldrsb DUMMY, [PF_DST, DUMMY]
|
||||
PF add PF_DST, PF_DST, #1
|
||||
10:
|
||||
umull v11.8h, v22.8b, v7.8b
|
||||
.endm
|
||||
|
||||
generate_composite_function \
|
||||
pixman_composite_over_8888_8888_asm_neon, 32, 0, 32, \
|
||||
FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
|
||||
8, /* number of pixels, processed in a single block */ \
|
||||
5, /* prefetch distance */ \
|
||||
default_init, \
|
||||
default_cleanup, \
|
||||
pixman_composite_over_8888_8888_process_pixblock_head, \
|
||||
pixman_composite_over_8888_8888_process_pixblock_tail, \
|
||||
pixman_composite_over_8888_8888_process_pixblock_tail_head
|
||||
|
||||
generate_composite_function_single_scanline \
|
||||
pixman_composite_scanline_over_asm_neon, 32, 0, 32, \
|
||||
FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
|
||||
8, /* number of pixels, processed in a single block */ \
|
||||
default_init, \
|
||||
default_cleanup, \
|
||||
pixman_composite_over_8888_8888_process_pixblock_head, \
|
||||
pixman_composite_over_8888_8888_process_pixblock_tail, \
|
||||
pixman_composite_over_8888_8888_process_pixblock_tail_head
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
.macro pixman_composite_over_n_8888_process_pixblock_head
|
||||
/* deinterleaved source pixels in {v0, v1, v2, v3} */
|
||||
/* inverted alpha in {v24} */
|
||||
/* destination pixels in {v4, v5, v6, v7} */
|
||||
umull v8.8h, v24.8b, v4.8b
|
||||
umull v9.8h, v24.8b, v5.8b
|
||||
umull v10.8h, v24.8b, v6.8b
|
||||
umull v11.8h, v24.8b, v7.8b
|
||||
.endm
|
||||
|
||||
.macro pixman_composite_over_n_8888_process_pixblock_tail
|
||||
urshr v14.8h, v8.8h, #8
|
||||
urshr v15.8h, v9.8h, #8
|
||||
urshr v16.8h, v10.8h, #8
|
||||
urshr v17.8h, v11.8h, #8
|
||||
raddhn v28.8b, v14.8h, v8.8h
|
||||
raddhn v29.8b, v15.8h, v9.8h
|
||||
raddhn v30.8b, v16.8h, v10.8h
|
||||
raddhn v31.8b, v17.8h, v11.8h
|
||||
uqadd v28.8b, v0.8b, v28.8b
|
||||
uqadd v29.8b, v1.8b, v29.8b
|
||||
uqadd v30.8b, v2.8b, v30.8b
|
||||
uqadd v31.8b, v3.8b, v31.8b
|
||||
.endm
|
||||
|
||||
.macro pixman_composite_over_n_8888_process_pixblock_tail_head
|
||||
urshr v14.8h, v8.8h, #8
|
||||
urshr v15.8h, v9.8h, #8
|
||||
urshr v16.8h, v10.8h, #8
|
||||
urshr v17.8h, v11.8h, #8
|
||||
raddhn v28.8b, v14.8h, v8.8h
|
||||
raddhn v29.8b, v15.8h, v9.8h
|
||||
raddhn v30.8b, v16.8h, v10.8h
|
||||
raddhn v31.8b, v17.8h, v11.8h
|
||||
ld4 {v4.8b, v5.8b, v6.8b, v7.8b}, [DST_R], #32
|
||||
uqadd v28.8b, v0.8b, v28.8b
|
||||
PF add PF_X, PF_X, #8
|
||||
PF tst PF_CTL, #0x0F
|
||||
PF beq 10f
|
||||
PF add PF_X, PF_X, #8
|
||||
PF sub PF_CTL, PF_CTL, #1
|
||||
10:
|
||||
uqadd v29.8b, v1.8b, v29.8b
|
||||
uqadd v30.8b, v2.8b, v30.8b
|
||||
uqadd v31.8b, v3.8b, v31.8b
|
||||
PF cmp PF_X, ORIG_W
|
||||
umull v8.8h, v24.8b, v4.8b
|
||||
PF lsl DUMMY, PF_X, #dst_bpp_shift
|
||||
PF prfm PREFETCH_MODE, [PF_DST, DUMMY]
|
||||
umull v9.8h, v24.8b, v5.8b
|
||||
PF ble 10f
|
||||
PF sub PF_X, PF_X, ORIG_W
|
||||
10:
|
||||
umull v10.8h, v24.8b, v6.8b
|
||||
PF subs PF_CTL, PF_CTL, #0x10
|
||||
umull v11.8h, v24.8b, v7.8b
|
||||
PF ble 10f
|
||||
PF lsl DUMMY, DST_STRIDE, #dst_bpp_shift
|
||||
PF ldrsb DUMMY, [PF_DST, DUMMY]
|
||||
PF add PF_DST, PF_DST, #1
|
||||
10:
|
||||
st4 {v28.8b, v29.8b, v30.8b, v31.8b}, [DST_W], #32
|
||||
.endm
|
||||
|
||||
.macro pixman_composite_over_n_8888_init
|
||||
mov v3.s[0], w4
|
||||
dup v0.8b, v3.b[0]
|
||||
dup v1.8b, v3.b[1]
|
||||
dup v2.8b, v3.b[2]
|
||||
dup v3.8b, v3.b[3]
|
||||
mvn v24.8b, v3.8b /* get inverted alpha */
|
||||
.endm
|
||||
|
||||
generate_composite_function \
|
||||
pixman_composite_over_n_8888_asm_neon, 0, 0, 32, \
|
||||
FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
|
||||
8, /* number of pixels, processed in a single block */ \
|
||||
5, /* prefetch distance */ \
|
||||
pixman_composite_over_n_8888_init, \
|
||||
default_cleanup, \
|
||||
pixman_composite_over_8888_8888_process_pixblock_head, \
|
||||
pixman_composite_over_8888_8888_process_pixblock_tail, \
|
||||
pixman_composite_over_n_8888_process_pixblock_tail_head
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
.macro pixman_composite_src_n_8888_process_pixblock_head
|
||||
.endm
|
||||
|
||||
.macro pixman_composite_src_n_8888_process_pixblock_tail
|
||||
.endm
|
||||
|
||||
.macro pixman_composite_src_n_8888_process_pixblock_tail_head
|
||||
st1 {v0.2s, v1.2s, v2.2s, v3.2s}, [DST_W], #32
|
||||
.endm
|
||||
|
||||
.macro pixman_composite_src_n_8888_init
|
||||
mov v0.s[0], w4
|
||||
dup v3.2s, v0.s[0]
|
||||
dup v2.2s, v0.s[0]
|
||||
dup v1.2s, v0.s[0]
|
||||
dup v0.2s, v0.s[0]
|
||||
.endm
|
||||
|
||||
.macro pixman_composite_src_n_8888_cleanup
|
||||
.endm
|
||||
|
||||
generate_composite_function \
|
||||
pixman_composite_src_n_8888_asm_neon, 0, 0, 32, \
|
||||
FLAG_DST_WRITEONLY, \
|
||||
8, /* number of pixels, processed in a single block */ \
|
||||
0, /* prefetch distance */ \
|
||||
pixman_composite_src_n_8888_init, \
|
||||
pixman_composite_src_n_8888_cleanup, \
|
||||
pixman_composite_src_n_8888_process_pixblock_head, \
|
||||
pixman_composite_src_n_8888_process_pixblock_tail, \
|
||||
pixman_composite_src_n_8888_process_pixblock_tail_head, \
|
||||
0, /* dst_w_basereg */ \
|
||||
0, /* dst_r_basereg */ \
|
||||
0, /* src_basereg */ \
|
||||
0 /* mask_basereg */
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
.macro pixman_composite_src_8888_8888_process_pixblock_head
|
||||
.endm
|
||||
|
||||
.macro pixman_composite_src_8888_8888_process_pixblock_tail
|
||||
.endm
|
||||
|
||||
.macro pixman_composite_src_8888_8888_process_pixblock_tail_head
|
||||
st1 {v0.2s, v1.2s, v2.2s, v3.2s}, [DST_W], #32
|
||||
fetch_src_pixblock
|
||||
cache_preload 8, 8
|
||||
.endm
|
||||
|
||||
generate_composite_function \
|
||||
pixman_composite_src_8888_8888_asm_neon, 32, 0, 32, \
|
||||
FLAG_DST_WRITEONLY, \
|
||||
8, /* number of pixels, processed in a single block */ \
|
||||
10, /* prefetch distance */ \
|
||||
default_init, \
|
||||
default_cleanup, \
|
||||
pixman_composite_src_8888_8888_process_pixblock_head, \
|
||||
pixman_composite_src_8888_8888_process_pixblock_tail, \
|
||||
pixman_composite_src_8888_8888_process_pixblock_tail_head, \
|
||||
0, /* dst_w_basereg */ \
|
||||
0, /* dst_r_basereg */ \
|
||||
0, /* src_basereg */ \
|
||||
0 /* mask_basereg */
|
||||
|
||||
/******************************************************************************/
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,7 +0,0 @@
|
|||
add_library(rlottie-image-loader SHARED
|
||||
stb_image.cpp
|
||||
)
|
||||
install(TARGETS rlottie-image-loader
|
||||
LIBRARY DESTINATION ${LIB_INSTALL_DIR}
|
||||
ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
|
||||
)
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
|
||||
rlottie_image_loader_sources = ['stb_image.cpp']
|
||||
|
||||
rlottie_image_loader_lib = shared_library('rlottie-image-loader',
|
||||
rlottie_image_loader_sources,
|
||||
install : true
|
||||
)
|
||||
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
#include "vimageloader.h"
|
||||
#include "config.h"
|
||||
#include "vdebug.h"
|
||||
#ifndef WIN32
|
||||
#include <dlfcn.h>
|
||||
#else
|
||||
#include <Windows.h>
|
||||
#endif
|
||||
#include <cstring>
|
||||
|
||||
#include "vimageloader.h"
|
||||
|
||||
struct VImageLoader::Impl {
|
||||
};
|
||||
|
||||
VImageLoader::VImageLoader() : mImpl(std::make_unique<VImageLoader::Impl>()) {}
|
||||
|
||||
VImageLoader::~VImageLoader() {}
|
||||
|
||||
VBitmap VImageLoader::load(const char *fileName)
|
||||
{
|
||||
return VBitmap();
|
||||
}
|
||||
|
||||
VBitmap VImageLoader::load(const char *data, int len)
|
||||
{
|
||||
return VBitmap();
|
||||
}
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
|
||||
vector_test_sources = files('testsuite.cpp')
|
||||
vector_test_sources += files('test_vpath.cpp')
|
||||
|
||||
gtest_dep = dependency('gtest')
|
||||
|
||||
vector_testsuite = executable('vectorTestSuite',
|
||||
vector_test_sources,
|
||||
include_directories : inc,
|
||||
dependencies : [gtest_dep, library_deps])
|
||||
|
||||
test('Vector Testsuite', vector_testsuite)
|
||||
|
||||
|
||||
animation_test_sources = files('testsuite.cpp')
|
||||
animation_test_sources += files('test_lottieanimation.cpp')
|
||||
animation_test_sources += files('test_lottieanimation_capi.cpp')
|
||||
|
||||
animation_testsuite = executable('animationTestSuite',
|
||||
animation_test_sources,
|
||||
include_directories : inc,
|
||||
link_with : rlottie_lib,
|
||||
dependencies : gtest_dep)
|
||||
|
||||
test('Animation Testsuite', animation_testsuite)
|
||||
|
|
@ -564,7 +564,7 @@ private func selectivePrivacySettingsControllerEntries(presentationData: Present
|
|||
enableForText = presentationData.strings.Privacy_GroupsAndChannels_AlwaysAllow
|
||||
case .phoneNumber:
|
||||
settingTitle = presentationData.strings.PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber
|
||||
if state.setting == .nobody, state.phoneDiscoveryEnabled == false {
|
||||
if state.setting == .nobody {
|
||||
settingInfoText = nil
|
||||
} else {
|
||||
settingInfoText = presentationData.strings.PrivacyPhoneNumberSettings_CustomHelp
|
||||
|
|
@ -609,7 +609,7 @@ private func selectivePrivacySettingsControllerEntries(presentationData: Present
|
|||
entries.append(.phoneDiscoveryHeader(presentationData.theme, presentationData.strings.PrivacyPhoneNumberSettings_DiscoveryHeader))
|
||||
entries.append(.phoneDiscoveryEverybody(presentationData.theme, presentationData.strings.PrivacySettings_LastSeenEverybody, state.phoneDiscoveryEnabled != false))
|
||||
entries.append(.phoneDiscoveryMyContacts(presentationData.theme, presentationData.strings.PrivacySettings_LastSeenContacts, state.phoneDiscoveryEnabled == false))
|
||||
entries.append(.phoneDiscoveryInfo(presentationData.theme, presentationData.strings.PrivacyPhoneNumberSettings_CustomDisabledHelp))
|
||||
entries.append(.phoneDiscoveryInfo(presentationData.theme, state.phoneDiscoveryEnabled != false ? presentationData.strings.PrivacyPhoneNumberSettings_CustomHelp : presentationData.strings.PrivacyPhoneNumberSettings_CustomDisabledHelp))
|
||||
}
|
||||
|
||||
entries.append(.exceptionsHeader(presentationData.theme, presentationData.strings.GroupInfo_Permissions_Exceptions))
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ private enum EditThemeControllerEntry: ItemListNodeEntry {
|
|||
|
||||
func item(_ arguments: EditThemeControllerArguments) -> ListViewItem {
|
||||
switch self {
|
||||
case let .title(theme, strings, title, text, done):
|
||||
case let .title(theme, strings, title, text, _):
|
||||
return ItemListSingleLineInputItem(theme: theme, strings: strings, title: NSAttributedString(), text: text, placeholder: title, type: .regular(capitalization: true, autocorrection: false), returnKeyType: .default, clearType: .onFocus, tag: EditThemeEntryTag.title, sectionId: self.section, textUpdated: { value in
|
||||
arguments.updateState { current in
|
||||
var state = current
|
||||
|
|
@ -152,7 +152,7 @@ private enum EditThemeControllerEntry: ItemListNodeEntry {
|
|||
|
||||
})
|
||||
case let .slugInfo(theme, text):
|
||||
return ItemListTextItem(theme: theme, text: .plain(text), sectionId: self.section)
|
||||
return ItemListTextItem(theme: theme, text: .markdown(text), sectionId: self.section)
|
||||
case let .chatPreviewHeader(theme, text):
|
||||
return ItemListSectionHeaderItem(theme: theme, text: text, sectionId: self.section)
|
||||
case let .chatPreview(theme, componentTheme, wallpaper, fontSize, strings, dateTimeFormat, nameDisplayOrder):
|
||||
|
|
@ -162,7 +162,7 @@ private enum EditThemeControllerEntry: ItemListNodeEntry {
|
|||
arguments.openFile()
|
||||
})
|
||||
case let .uploadInfo(theme, text):
|
||||
return ItemListTextItem(theme: theme, text: .plain(text), sectionId: self.section)
|
||||
return ItemListTextItem(theme: theme, text: .markdown(text), sectionId: self.section)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,22 +12,24 @@ final class ThemeGridControllerItem: GridItem {
|
|||
let context: AccountContext
|
||||
let wallpaper: TelegramWallpaper
|
||||
let index: Int
|
||||
let editable: Bool
|
||||
let selected: Bool
|
||||
let interaction: ThemeGridControllerInteraction
|
||||
|
||||
let section: GridSection? = nil
|
||||
|
||||
init(context: AccountContext, wallpaper: TelegramWallpaper, index: Int, selected: Bool, interaction: ThemeGridControllerInteraction) {
|
||||
init(context: AccountContext, wallpaper: TelegramWallpaper, index: Int, editable: Bool, selected: Bool, interaction: ThemeGridControllerInteraction) {
|
||||
self.context = context
|
||||
self.wallpaper = wallpaper
|
||||
self.index = index
|
||||
self.editable = editable
|
||||
self.selected = selected
|
||||
self.interaction = interaction
|
||||
}
|
||||
|
||||
func node(layout: GridNodeLayout, synchronousLoad: Bool) -> GridItemNode {
|
||||
let node = ThemeGridControllerItemNode()
|
||||
node.setup(context: self.context, wallpaper: self.wallpaper, selected: self.selected, interaction: self.interaction, synchronousLoad: synchronousLoad)
|
||||
node.setup(context: self.context, wallpaper: self.wallpaper, editable: self.editable, selected: self.selected, interaction: self.interaction, synchronousLoad: synchronousLoad)
|
||||
return node
|
||||
}
|
||||
|
||||
|
|
@ -36,7 +38,7 @@ final class ThemeGridControllerItem: GridItem {
|
|||
assertionFailure()
|
||||
return
|
||||
}
|
||||
node.setup(context: self.context, wallpaper: self.wallpaper, selected: self.selected, interaction: self.interaction, synchronousLoad: false)
|
||||
node.setup(context: self.context, wallpaper: self.wallpaper, editable: self.editable, selected: self.selected, interaction: self.interaction, synchronousLoad: false)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -44,7 +46,7 @@ final class ThemeGridControllerItemNode: GridItemNode {
|
|||
private let wallpaperNode: SettingsThemeWallpaperNode
|
||||
private var selectionNode: GridMessageSelectionNode?
|
||||
|
||||
private var currentState: (AccountContext, TelegramWallpaper, Bool, Bool)?
|
||||
private var currentState: (AccountContext, TelegramWallpaper, Bool, Bool, Bool)?
|
||||
private var interaction: ThemeGridControllerInteraction?
|
||||
|
||||
override init() {
|
||||
|
|
@ -61,11 +63,11 @@ final class ThemeGridControllerItemNode: GridItemNode {
|
|||
self.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tapGesture(_:))))
|
||||
}
|
||||
|
||||
func setup(context: AccountContext, wallpaper: TelegramWallpaper, selected: Bool, interaction: ThemeGridControllerInteraction, synchronousLoad: Bool) {
|
||||
func setup(context: AccountContext, wallpaper: TelegramWallpaper, editable: Bool, selected: Bool, interaction: ThemeGridControllerInteraction, synchronousLoad: Bool) {
|
||||
self.interaction = interaction
|
||||
|
||||
if self.currentState == nil || self.currentState!.0 !== context || wallpaper != self.currentState!.1 || selected != self.currentState!.2 || synchronousLoad != self.currentState!.3 {
|
||||
self.currentState = (context, wallpaper, selected, synchronousLoad)
|
||||
if self.currentState == nil || self.currentState!.0 !== context || wallpaper != self.currentState!.1 || selected != self.currentState!.2 || synchronousLoad != self.currentState!.3 || editable != self.currentState!.4 {
|
||||
self.currentState = (context, wallpaper, selected, synchronousLoad, editable)
|
||||
self.updateSelectionState(animated: false)
|
||||
self.setNeedsLayout()
|
||||
}
|
||||
|
|
@ -73,14 +75,14 @@ final class ThemeGridControllerItemNode: GridItemNode {
|
|||
|
||||
@objc func tapGesture(_ recognizer: UITapGestureRecognizer) {
|
||||
if case .ended = recognizer.state {
|
||||
if let (_, wallpaper, _, _) = self.currentState {
|
||||
if let (_, wallpaper, _, _, _) = self.currentState {
|
||||
self.interaction?.openWallpaper(wallpaper)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func updateSelectionState(animated: Bool) {
|
||||
if let (context, wallpaper, _, _) = self.currentState {
|
||||
if let (context, wallpaper, _, _, editable) = self.currentState {
|
||||
var editing = false
|
||||
var id: Int64?
|
||||
if case let .file(file) = wallpaper {
|
||||
|
|
@ -94,7 +96,7 @@ final class ThemeGridControllerItemNode: GridItemNode {
|
|||
editing = active
|
||||
selectedIndices = indices
|
||||
}
|
||||
if let id = id, editing {
|
||||
if let id = id, editing && editable {
|
||||
let selected = selectedIndices.contains(id)
|
||||
|
||||
if let selectionNode = self.selectionNode {
|
||||
|
|
@ -136,7 +138,7 @@ final class ThemeGridControllerItemNode: GridItemNode {
|
|||
super.layout()
|
||||
|
||||
let bounds = self.bounds
|
||||
if let (context, wallpaper, selected, synchronousLoad) = self.currentState {
|
||||
if let (context, wallpaper, selected, synchronousLoad, _) = self.currentState {
|
||||
self.wallpaperNode.setWallpaper(context: context, wallpaper: wallpaper, selected: selected, size: bounds.size, synchronousLoad: synchronousLoad)
|
||||
self.selectionNode?.frame = CGRect(origin: CGPoint(), size: bounds.size)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,10 +84,11 @@ final class ThemeGridControllerInteraction {
|
|||
private struct ThemeGridControllerEntry: Comparable, Identifiable {
|
||||
let index: Int
|
||||
let wallpaper: TelegramWallpaper
|
||||
let selected: Bool
|
||||
let isEditable: Bool
|
||||
let isSelected: Bool
|
||||
|
||||
static func ==(lhs: ThemeGridControllerEntry, rhs: ThemeGridControllerEntry) -> Bool {
|
||||
return lhs.index == rhs.index && lhs.wallpaper == rhs.wallpaper && lhs.selected == rhs.selected
|
||||
return lhs.index == rhs.index && lhs.wallpaper == rhs.wallpaper && lhs.isEditable == rhs.isEditable && lhs.isSelected == rhs.isSelected
|
||||
}
|
||||
|
||||
static func <(lhs: ThemeGridControllerEntry, rhs: ThemeGridControllerEntry) -> Bool {
|
||||
|
|
@ -115,7 +116,7 @@ private struct ThemeGridControllerEntry: Comparable, Identifiable {
|
|||
}
|
||||
|
||||
func item(context: AccountContext, interaction: ThemeGridControllerInteraction) -> ThemeGridControllerItem {
|
||||
return ThemeGridControllerItem(context: context, wallpaper: self.wallpaper, index: self.index, selected: self.selected, interaction: interaction)
|
||||
return ThemeGridControllerItem(context: context, wallpaper: self.wallpaper, index: self.index, editable: self.isEditable, selected: self.isSelected, interaction: interaction)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -364,14 +365,20 @@ final class ThemeGridControllerNode: ASDisplayNode {
|
|||
var entries: [ThemeGridControllerEntry] = []
|
||||
var index = 1
|
||||
|
||||
entries.insert(ThemeGridControllerEntry(index: 0, wallpaper: presentationData.chatWallpaper, selected: true), at: 0)
|
||||
var isSelectedEditable = true
|
||||
if case .builtin = presentationData.chatWallpaper {
|
||||
isSelectedEditable = false
|
||||
} else if areWallpapersEqual(presentationData.chatWallpaper, presentationData.theme.chat.defaultWallpaper) {
|
||||
isSelectedEditable = false
|
||||
}
|
||||
entries.insert(ThemeGridControllerEntry(index: 0, wallpaper: presentationData.chatWallpaper, isEditable: isSelectedEditable, isSelected: true), at: 0)
|
||||
|
||||
var defaultWallpaper: TelegramWallpaper?
|
||||
if !areWallpapersEqual(presentationData.chatWallpaper, presentationData.theme.chat.defaultWallpaper) {
|
||||
if case .builtin = presentationData.theme.chat.defaultWallpaper {
|
||||
} else {
|
||||
defaultWallpaper = presentationData.theme.chat.defaultWallpaper
|
||||
entries.insert(ThemeGridControllerEntry(index: 1, wallpaper: presentationData.theme.chat.defaultWallpaper, selected: false), at: 1)
|
||||
entries.insert(ThemeGridControllerEntry(index: 1, wallpaper: presentationData.theme.chat.defaultWallpaper, isEditable: false, isSelected: false), at: 1)
|
||||
index += 1
|
||||
}
|
||||
}
|
||||
|
|
@ -400,8 +407,12 @@ final class ThemeGridControllerNode: ASDisplayNode {
|
|||
if let defaultWallpaper = defaultWallpaper, areWallpapersEqual(defaultWallpaper, wallpaper) {
|
||||
isDefault = true
|
||||
}
|
||||
var isEditable = true
|
||||
if case .builtin = wallpaper {
|
||||
isEditable = false
|
||||
}
|
||||
if !selected && !isDefault {
|
||||
entries.append(ThemeGridControllerEntry(index: index, wallpaper: wallpaper, selected: false))
|
||||
entries.append(ThemeGridControllerEntry(index: index, wallpaper: wallpaper, isEditable: isEditable, isSelected: false))
|
||||
}
|
||||
index += 1
|
||||
}
|
||||
|
|
|
|||
|
|
@ -146,6 +146,7 @@ private final class ThemeSettingsThemeItemIconNode : ASDisplayNode {
|
|||
|
||||
private var theme: PresentationThemeReference?
|
||||
private var currentTheme: PresentationTheme?
|
||||
private var accentColor: UIColor?
|
||||
private var bordered: Bool?
|
||||
private var selected: Bool?
|
||||
|
||||
|
|
@ -176,9 +177,10 @@ private final class ThemeSettingsThemeItemIconNode : ASDisplayNode {
|
|||
self.currentTheme = currentTheme
|
||||
}
|
||||
} else {
|
||||
if theme != self.theme {
|
||||
if theme != self.theme || accentColor != self.accentColor {
|
||||
self.imageNode.setSignal(themeIconImage(account: context.account, accountManager: context.sharedContext.accountManager, theme: theme, accentColor: accentColor))
|
||||
self.theme = theme
|
||||
self.accentColor = accentColor
|
||||
}
|
||||
}
|
||||
if self.currentTheme == nil || currentTheme !== self.currentTheme! || bordered != self.bordered || selected != self.selected {
|
||||
|
|
|
|||
|
|
@ -169,7 +169,7 @@ open class TelegramBaseController: ViewController, KeyShortcutResponder {
|
|||
})
|
||||
}
|
||||
|
||||
if false, let liveLocationManager = context.liveLocationManager {
|
||||
if let liveLocationManager = context.liveLocationManager {
|
||||
switch locationBroadcastPanelSource {
|
||||
case .none:
|
||||
self.locationBroadcastMode = nil
|
||||
|
|
|
|||
|
|
@ -1114,7 +1114,7 @@ private func finalStateWithUpdatesAndServerTime(postbox: Postbox, network: Netwo
|
|||
}
|
||||
return previous.withUpdatedPinnedMessageId(id == 0 ? nil : MessageId(peerId: userPeerId, namespace: Namespaces.Message.Cloud, id: id))
|
||||
})
|
||||
case let .updateChatPinnedMessage(groupId, id, version):
|
||||
case let .updateChatPinnedMessage(groupId, id, _):
|
||||
let groupPeerId = PeerId(namespace: Namespaces.Peer.CloudGroup, id: groupId)
|
||||
updatedState.updateCachedPeerData(groupPeerId, { current in
|
||||
let previous: CachedGroupData
|
||||
|
|
@ -1372,8 +1372,8 @@ private func finalStateWithUpdatesAndServerTime(postbox: Postbox, network: Netwo
|
|||
return resolveAssociatedMessages(network: network, state: finalState)
|
||||
|> mapToSignal { resultingState -> Signal<AccountFinalState, NoError> in
|
||||
return resolveMissingPeerChatInfos(network: network, state: resultingState)
|
||||
|> map { resultingState -> AccountFinalState in
|
||||
return AccountFinalState(state: resultingState, shouldPoll: shouldPoll || hadError, incomplete: missingUpdates)
|
||||
|> map { resultingState, resolveError -> AccountFinalState in
|
||||
return AccountFinalState(state: resultingState, shouldPoll: shouldPoll || hadError || resolveError, incomplete: missingUpdates)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1445,21 +1445,23 @@ private func resolveAssociatedMessages(network: Network, state: AccountMutableSt
|
|||
}
|
||||
}
|
||||
|
||||
private func resolveMissingPeerChatInfos(network: Network, state: AccountMutableState) -> Signal<AccountMutableState, NoError> {
|
||||
private func resolveMissingPeerChatInfos(network: Network, state: AccountMutableState) -> Signal<(AccountMutableState, Bool), NoError> {
|
||||
var missingPeers: [PeerId: Api.InputPeer] = [:]
|
||||
var hadError = false
|
||||
|
||||
for peerId in state.initialState.peerIdsRequiringLocalChatState {
|
||||
if state.peerChatInfos[peerId] == nil {
|
||||
if let peer = state.peers[peerId], let inputPeer = apiInputPeer(peer) {
|
||||
missingPeers[peerId] = inputPeer
|
||||
} else {
|
||||
hadError = true
|
||||
Logger.shared.log("State", "can't fetch chat info for peer \(peerId): can't create inputPeer")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if missingPeers.isEmpty {
|
||||
return .single(state)
|
||||
return .single((state, hadError))
|
||||
} else {
|
||||
Logger.shared.log("State", "will fetch chat info for \(missingPeers.count) peers")
|
||||
let signal = network.request(Api.functions.messages.getPeerDialogs(peers: missingPeers.values.map(Api.InputDialogPeer.inputDialogPeer(peer:))))
|
||||
|
|
@ -1469,9 +1471,9 @@ private func resolveMissingPeerChatInfos(network: Network, state: AccountMutable
|
|||
|> `catch` { _ -> Signal<Api.messages.PeerDialogs?, NoError> in
|
||||
return .single(nil)
|
||||
}
|
||||
|> map { result -> AccountMutableState in
|
||||
|> map { result -> (AccountMutableState, Bool) in
|
||||
guard let result = result else {
|
||||
return state
|
||||
return (state, hadError)
|
||||
}
|
||||
|
||||
var channelStates: [PeerId: ChannelState] = [:]
|
||||
|
|
@ -1563,7 +1565,7 @@ private func resolveMissingPeerChatInfos(network: Network, state: AccountMutable
|
|||
}
|
||||
}
|
||||
}
|
||||
return updatedState
|
||||
return (updatedState, hadError)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1596,7 +1598,7 @@ func keepPollingChannel(postbox: Postbox, network: Network, peerId: PeerId, stat
|
|||
return resolveAssociatedMessages(network: network, state: finalState)
|
||||
|> mapToSignal { resultingState -> Signal<AccountFinalState, NoError> in
|
||||
return resolveMissingPeerChatInfos(network: network, state: resultingState)
|
||||
|> map { resultingState -> AccountFinalState in
|
||||
|> map { resultingState, _ -> AccountFinalState in
|
||||
return AccountFinalState(state: resultingState, shouldPoll: false, incomplete: false)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ func applySecretOutgoingMessageReadActions(transaction: Transaction, id: Message
|
|||
return
|
||||
}
|
||||
|
||||
if let message = transaction.getMessage(id), !message.flags.contains(.Incoming) {
|
||||
if let message = transaction.getMessage(id), message.flags.intersection(.IsIncomingMask).isEmpty {
|
||||
if message.flags.intersection([.Unsent, .Sending, .Failed]).isEmpty {
|
||||
for attribute in message.attributes {
|
||||
if let attribute = attribute as? AutoremoveTimeoutMessageAttribute {
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ public struct CacheStorageSettings: PreferencesEntry, Equatable {
|
|||
public let defaultCacheStorageTimeout: Int32
|
||||
|
||||
public static var defaultSettings: CacheStorageSettings {
|
||||
return CacheStorageSettings(defaultCacheStorageTimeout: 7 * 60 * 60 * 24)
|
||||
return CacheStorageSettings(defaultCacheStorageTimeout: Int32.max)
|
||||
}
|
||||
|
||||
init(defaultCacheStorageTimeout: Int32) {
|
||||
|
|
@ -19,7 +19,7 @@ public struct CacheStorageSettings: PreferencesEntry, Equatable {
|
|||
}
|
||||
|
||||
public init(decoder: PostboxDecoder) {
|
||||
self.defaultCacheStorageTimeout = decoder.decodeInt32ForKey("dt", orElse: 0)
|
||||
self.defaultCacheStorageTimeout = decoder.decodeInt32ForKey("dt", orElse: Int32.max)
|
||||
}
|
||||
|
||||
public func encode(_ encoder: PostboxEncoder) {
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ public func installInteractiveReadMessagesAction(postbox: Postbox, stateManager:
|
|||
consumeMessageIds.append(id)
|
||||
}
|
||||
|
||||
if message.flags.contains(.Incoming) {
|
||||
if !message.flags.intersection(.IsIncomingMask).isEmpty {
|
||||
let index = MessageIndex(id: id, timestamp: message.timestamp)
|
||||
let current = readMessageIndexByNamespace[id.namespace]
|
||||
if current == nil || current! < index {
|
||||
|
|
|
|||
|
|
@ -479,7 +479,7 @@ func fetchRemoteMessage(postbox: Postbox, source: FetchMessageHistoryHoleSource,
|
|||
|
||||
var renderedMessages: [Message] = []
|
||||
for message in messages {
|
||||
if let message = StoreMessage(apiMessage: message), case let .Id(updatedId) = message.id {
|
||||
if let message = StoreMessage(apiMessage: message, namespace: id.namespace), case let .Id(updatedId) = message.id {
|
||||
var addedExisting = false
|
||||
if transaction.getMessage(updatedId) != nil {
|
||||
transaction.updateMessage(updatedId, update: { _ in
|
||||
|
|
|
|||
|
|
@ -561,6 +561,7 @@ extension StoreMessage {
|
|||
|
||||
if (flags & (1 << 18)) != 0 {
|
||||
storeFlags.insert(.WasScheduled)
|
||||
storeFlags.insert(.CountedAsIncoming)
|
||||
}
|
||||
|
||||
if (flags & (1 << 4)) != 0 || (flags & (1 << 13)) != 0 {
|
||||
|
|
|
|||
|
|
@ -5032,7 +5032,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||
return result
|
||||
}
|
||||
|
||||
let controller = legacyAttachmentMenu(context: strongSelf.context, peer: peer, editMediaOptions: menuEditMediaOptions, saveEditedPhotos: settings.storeEditedPhotos, allowGrouping: true, hasSchedule: !strongSelf.presentationInterfaceState.isScheduledMessages && peer.id.namespace != Namespaces.Peer.SecretChat, theme: strongSelf.presentationData.theme, strings: strongSelf.presentationData.strings, parentController: legacyController, recentlyUsedInlineBots: strongSelf.recentlyUsedInlineBotsValue, initialCaption: inputText.string, openGallery: {
|
||||
let controller = legacyAttachmentMenu(context: strongSelf.context, peer: peer, editMediaOptions: menuEditMediaOptions, saveEditedPhotos: settings.storeEditedPhotos, allowGrouping: true, hasSchedule: !strongSelf.presentationInterfaceState.isScheduledMessages && peer.id.namespace != Namespaces.Peer.SecretChat, canSendPolls: canSendPolls, theme: strongSelf.presentationData.theme, strings: strongSelf.presentationData.strings, parentController: legacyController, recentlyUsedInlineBots: strongSelf.recentlyUsedInlineBotsValue, initialCaption: inputText.string, openGallery: {
|
||||
self?.presentMediaPicker(fileMode: false, editingMedia: editMediaOptions != nil, completion: { signals, silentPosting, scheduleTime in
|
||||
if !inputText.string.isEmpty {
|
||||
//strongSelf.clearInputText()
|
||||
|
|
|
|||
|
|
@ -278,7 +278,9 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||
self.textInputPanelNode?.storedInputLanguage = chatPresentationInterfaceState.interfaceState.inputLanguage
|
||||
self.textInputPanelNode?.updateHeight = { [weak self] animated in
|
||||
if let strongSelf = self, let _ = strongSelf.inputPanelNode as? ChatTextInputPanelNode, !strongSelf.ignoreUpdateHeight {
|
||||
strongSelf.requestLayout(animated ? .animated(duration: 0.1, curve: .easeInOut) : .immediate)
|
||||
if strongSelf.scheduledLayoutTransitionRequest == nil {
|
||||
strongSelf.scheduleLayoutTransitionRequest(animated ? .animated(duration: 0.1, curve: .easeInOut) : .immediate)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ private func maxMessageIndexForEntries(_ view: ChatHistoryView, indexRange: (Int
|
|||
if overall == nil || overall! < index {
|
||||
overall = index
|
||||
}
|
||||
if messageEntry.message.flags.contains(.Incoming) {
|
||||
if !messageEntry.message.flags.intersection(.IsIncomingMask).isEmpty {
|
||||
if incoming == nil || incoming! < index {
|
||||
incoming = index
|
||||
}
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ func chatHistoryViewForLocation(_ location: ChatHistoryLocationInput, account: A
|
|||
if view.holeEarlier {
|
||||
var incomingCount: Int32 = 0
|
||||
inner: for entry in view.entries.reversed() {
|
||||
if entry.message.flags.contains(.Incoming) {
|
||||
if !entry.message.flags.intersection(.IsIncomingMask).isEmpty {
|
||||
incomingCount += 1
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -370,8 +370,14 @@ public final class ChatMessageItem: ListViewItem, CustomStringConvertible {
|
|||
|
||||
loop: for media in self.message.media {
|
||||
if let telegramFile = media as? TelegramMediaFile {
|
||||
if telegramFile.isAnimatedSticker, let size = telegramFile.size, size > 0 && size <= 128 * 1024 {
|
||||
viewClassName = ChatMessageAnimatedStickerItemNode.self
|
||||
if telegramFile.isAnimatedSticker, !telegramFile.previewRepresentations.isEmpty, let size = telegramFile.size, size > 0 && size <= 128 * 1024 {
|
||||
if self.message.id.peerId.namespace == Namespaces.Peer.SecretChat {
|
||||
if telegramFile.fileId.namespace == Namespaces.Media.CloudFile {
|
||||
viewClassName = ChatMessageAnimatedStickerItemNode.self
|
||||
}
|
||||
} else {
|
||||
viewClassName = ChatMessageAnimatedStickerItemNode.self
|
||||
}
|
||||
break loop
|
||||
}
|
||||
for attribute in telegramFile.attributes {
|
||||
|
|
|
|||
|
|
@ -246,6 +246,8 @@ final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContentNode {
|
|||
mainMedia = webpage.file ?? webpage.image
|
||||
}
|
||||
|
||||
let themeMimeType = "application/x-tgtheme-ios"
|
||||
|
||||
if let file = mainMedia as? TelegramMediaFile, webpage.type != "telegram_theme" {
|
||||
if let embedUrl = webpage.embedUrl, !embedUrl.isEmpty {
|
||||
if automaticPlayback {
|
||||
|
|
@ -295,10 +297,13 @@ final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContentNode {
|
|||
}
|
||||
} else if type == "telegram_theme" {
|
||||
var file: TelegramMediaFile?
|
||||
let mimeType = "application/x-tgtheme-ios"
|
||||
if let contentFiles = webpage.files, let filteredFile = contentFiles.filter({ $0.mimeType == mimeType }).first {
|
||||
file = filteredFile
|
||||
} else if let contentFile = webpage.file, contentFile.mimeType == mimeType {
|
||||
if let contentFiles = webpage.files {
|
||||
if let filteredFile = contentFiles.filter({ $0.mimeType == themeMimeType }).first {
|
||||
file = filteredFile
|
||||
} else {
|
||||
file = contentFiles.first
|
||||
}
|
||||
} else if let contentFile = webpage.file {
|
||||
file = contentFile
|
||||
}
|
||||
if let file = file {
|
||||
|
|
@ -332,9 +337,7 @@ final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContentNode {
|
|||
case "telegram_theme":
|
||||
title = item.presentationData.strings.Conversation_Theme
|
||||
text = nil
|
||||
if mediaAndFlags != nil {
|
||||
actionTitle = item.presentationData.strings.Conversation_ViewTheme
|
||||
}
|
||||
actionTitle = item.presentationData.strings.Conversation_ViewTheme
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import StickerPackPreviewUI
|
|||
import PeerAvatarGalleryUI
|
||||
import PeerInfoUI
|
||||
import SettingsUI
|
||||
import AlertUI
|
||||
|
||||
private enum ChatMessageGalleryControllerData {
|
||||
case url(String)
|
||||
|
|
@ -475,6 +476,9 @@ func openChatTheme(context: AccountContext, message: Message, present: @escaping
|
|||
let controller = ThemePreviewController(context: context, previewTheme: theme, source: .slug(slug, file))
|
||||
present(controller, ViewControllerPresentationArguments(presentationAnimation: .modalSheet))
|
||||
}
|
||||
} else {
|
||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||
present(textAlertController(context: context, title: nil, text: presentationData.strings.Theme_Unsupported, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -288,6 +288,14 @@ func openResolvedUrlImpl(_ resolvedUrl: ResolvedUrl, context: AccountContext, ur
|
|||
present(previewController, ViewControllerPresentationArguments(presentationAnimation: .modalSheet))
|
||||
}
|
||||
}, error: { [weak controller] error in
|
||||
let errorText: String
|
||||
switch error {
|
||||
case .generic, .slugInvalid:
|
||||
errorText = presentationData.strings.Theme_ErrorNotFound
|
||||
case .unsupported:
|
||||
errorText = presentationData.strings.Theme_Unsupported
|
||||
}
|
||||
present(textAlertController(context: context, title: nil, text: errorText, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil)
|
||||
controller?.dismiss()
|
||||
})
|
||||
dismissInput()
|
||||
|
|
|
|||
|
|
@ -9,16 +9,40 @@
|
|||
/* Begin PBXBuildFile section */
|
||||
090B48C82200BCA8005083FA /* WallpaperUploadManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 090B48C72200BCA8005083FA /* WallpaperUploadManager.swift */; };
|
||||
090E63EE2196FE3A00E3C035 /* OpenAddContact.swift in Sources */ = {isa = PBXBuildFile; fileRef = 090E63ED2196FE3A00E3C035 /* OpenAddContact.swift */; };
|
||||
090E778C22AA842300CD99F5 /* anim_success.json in Resources */ = {isa = PBXBuildFile; fileRef = 090E778B22AA842200CD99F5 /* anim_success.json */; };
|
||||
0910B0ED21FA178C00F8F87D /* WallpaperPreviewMedia.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0910B0EC21FA178C00F8F87D /* WallpaperPreviewMedia.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 */; };
|
||||
09310D32213ED5FC0020033A /* anim_ungroup.json in Resources */ = {isa = PBXBuildFile; fileRef = 09310D1A213BC5DE0020033A /* anim_ungroup.json */; };
|
||||
09310D33213ED5FC0020033A /* anim_group.json in Resources */ = {isa = PBXBuildFile; fileRef = 09310D1B213BC5DE0020033A /* anim_group.json */; };
|
||||
0940932422E73DFB003846A3 /* ChatSendMessageActionSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0940932322E73DFB003846A3 /* ChatSendMessageActionSheetController.swift */; };
|
||||
0940932622E73E12003846A3 /* ChatSendMessageActionSheetControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0940932522E73E12003846A3 /* ChatSendMessageActionSheetControllerNode.swift */; };
|
||||
0947350E2275D72100EA2312 /* anim_hide.json in Resources */ = {isa = PBXBuildFile; fileRef = 094735042275D71F00EA2312 /* anim_hide.json */; };
|
||||
0947350F2275D72100EA2312 /* anim_unread.json in Resources */ = {isa = PBXBuildFile; fileRef = 094735052275D72000EA2312 /* anim_unread.json */; };
|
||||
094735102275D72100EA2312 /* anim_read.json in Resources */ = {isa = PBXBuildFile; fileRef = 094735062275D72000EA2312 /* anim_read.json */; };
|
||||
094735112275D72100EA2312 /* anim_archive.json in Resources */ = {isa = PBXBuildFile; fileRef = 094735072275D72000EA2312 /* anim_archive.json */; };
|
||||
094735122275D72100EA2312 /* anim_mute.json in Resources */ = {isa = PBXBuildFile; fileRef = 094735082275D72000EA2312 /* anim_mute.json */; };
|
||||
094735132275D72100EA2312 /* anim_delete.json in Resources */ = {isa = PBXBuildFile; fileRef = 094735092275D72000EA2312 /* anim_delete.json */; };
|
||||
094735142275D72100EA2312 /* anim_unarchive.json in Resources */ = {isa = PBXBuildFile; fileRef = 0947350A2275D72000EA2312 /* anim_unarchive.json */; };
|
||||
094735152275D72100EA2312 /* anim_unpin.json in Resources */ = {isa = PBXBuildFile; fileRef = 0947350B2275D72000EA2312 /* anim_unpin.json */; };
|
||||
094735162275D72100EA2312 /* anim_unmute.json in Resources */ = {isa = PBXBuildFile; fileRef = 0947350C2275D72100EA2312 /* anim_unmute.json */; };
|
||||
094735172275D72100EA2312 /* anim_pin.json in Resources */ = {isa = PBXBuildFile; fileRef = 0947350D2275D72100EA2312 /* anim_pin.json */; };
|
||||
094735192277483C00EA2312 /* anim_infotip.json in Resources */ = {isa = PBXBuildFile; fileRef = 094735182277483B00EA2312 /* anim_infotip.json */; };
|
||||
09510B1322F96E5B0078CAB7 /* ChatScheduleTimeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09510B1222F96E5B0078CAB7 /* ChatScheduleTimeController.swift */; };
|
||||
09510B1522F96E6C0078CAB7 /* ChatScheduleTimeControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09510B1422F96E6C0078CAB7 /* ChatScheduleTimeControllerNode.swift */; };
|
||||
095214EF2318D4D3008CDD87 /* ThemeUpdateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 095214EE2318D4D3008CDD87 /* ThemeUpdateManager.swift */; };
|
||||
0962E67921B67A9800245FD9 /* ChatMessageAnimatedStickerItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0962E67821B67A9800245FD9 /* ChatMessageAnimatedStickerItemNode.swift */; };
|
||||
09749BC521F0E024008FDDE9 /* StickersChatInputContextPanelItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09749BC421F0E024008FDDE9 /* StickersChatInputContextPanelItem.swift */; };
|
||||
09874E4F21078FA100E190B8 /* Generic.html in Resources */ = {isa = PBXBuildFile; fileRef = 0979788321065F8C0077D77F /* Generic.html */; };
|
||||
09874E5021078FA100E190B8 /* GenericUserScript.js in Resources */ = {isa = PBXBuildFile; fileRef = 0979788821065F8C0077D77F /* GenericUserScript.js */; };
|
||||
09874E5121078FA100E190B8 /* Instagram.html in Resources */ = {isa = PBXBuildFile; fileRef = 0979788421065F8C0077D77F /* Instagram.html */; };
|
||||
09874E5221078FA100E190B8 /* Twitch.html in Resources */ = {isa = PBXBuildFile; fileRef = 0979788521065F8C0077D77F /* Twitch.html */; };
|
||||
09874E5321078FA100E190B8 /* TwitchUserScript.js in Resources */ = {isa = PBXBuildFile; fileRef = 0979788621065F8C0077D77F /* TwitchUserScript.js */; };
|
||||
09874E5421078FA100E190B8 /* Vimeo.html in Resources */ = {isa = PBXBuildFile; fileRef = 0979788221065F8C0077D77F /* Vimeo.html */; };
|
||||
09874E5521078FA100E190B8 /* VimeoUserScript.js in Resources */ = {isa = PBXBuildFile; fileRef = 0979788021065F8B0077D77F /* VimeoUserScript.js */; };
|
||||
09874E5621078FA100E190B8 /* Youtube.html in Resources */ = {isa = PBXBuildFile; fileRef = 0979788721065F8C0077D77F /* Youtube.html */; };
|
||||
09874E5721078FA100E190B8 /* YoutubeUserScript.js in Resources */ = {isa = PBXBuildFile; fileRef = 0979788121065F8B0077D77F /* YoutubeUserScript.js */; };
|
||||
099529B021D2123E00805E13 /* ChatMessageUnsupportedBubbleContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099529AF21D2123E00805E13 /* ChatMessageUnsupportedBubbleContentNode.swift */; };
|
||||
099529B421D3E5D800805E13 /* CheckDiskSpace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099529B321D3E5D800805E13 /* CheckDiskSpace.swift */; };
|
||||
09A218D9229EE1B600DE6898 /* HorizontalStickerGridItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09A218D7229EE1B500DE6898 /* HorizontalStickerGridItem.swift */; };
|
||||
|
|
@ -29,10 +53,13 @@
|
|||
09D304152173C0E900C00567 /* WatchManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D304142173C0E900C00567 /* WatchManager.swift */; };
|
||||
09D96899221DE92600B1458A /* ID3ArtworkReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D96898221DE92600B1458A /* ID3ArtworkReader.swift */; };
|
||||
09DD5D5021ECC3C400D7007A /* SuppressContactsWarning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DD5D4F21ECC3C400D7007A /* SuppressContactsWarning.swift */; };
|
||||
09E2D9EF226F1AFA00EA0AA4 /* Emoji.mapping in Resources */ = {isa = PBXBuildFile; fileRef = 09E2D9ED226F1AF300EA0AA4 /* Emoji.mapping */; };
|
||||
09E2D9F1226F214000EA0AA4 /* EmojiResources.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E2D9F0226F214000EA0AA4 /* EmojiResources.swift */; };
|
||||
09E2DA132273367900EA0AA4 /* anim_archiveAvatar.json in Resources */ = {isa = PBXBuildFile; fileRef = 09E2DA122273367900EA0AA4 /* anim_archiveAvatar.json */; };
|
||||
09EC0DED22CB583C00E7185B /* TextLinkHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EC0DEC22CB583C00E7185B /* TextLinkHandling.swift */; };
|
||||
09EDAD2A220DA6A40012A50B /* VolumeButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EDAD29220DA6A40012A50B /* VolumeButtons.swift */; };
|
||||
09F2158D225CF5BC00AEDF6D /* Pasteboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F2158C225CF5BC00AEDF6D /* Pasteboard.swift */; };
|
||||
09FFBCD1227B7F9900C33B4B /* anim_archiveswipe.json in Resources */ = {isa = PBXBuildFile; fileRef = 09FFBCCF227B7F9000C33B4B /* anim_archiveswipe.json */; };
|
||||
09FFBCD72281BB2D00C33B4B /* ChatTextLinkEditController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09FFBCD62281BB2D00C33B4B /* ChatTextLinkEditController.swift */; };
|
||||
D000CABC21F158AD0011B15D /* PrepareSecretThumbnailData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D000CABB21F158AD0011B15D /* PrepareSecretThumbnailData.swift */; };
|
||||
D0068FA821760FA300D1B315 /* StoreDownloadedMedia.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0068FA721760FA300D1B315 /* StoreDownloadedMedia.swift */; };
|
||||
|
|
@ -47,7 +74,6 @@
|
|||
D00818CD22B595CB008A895F /* LightweightAccountData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D00818CC22B595CB008A895F /* LightweightAccountData.framework */; };
|
||||
D00ACA4B20222C280045D427 /* libtgvoip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D00ACA4C20222C280045D427 /* libtgvoip.framework */; };
|
||||
D00ACA5A2022897D0045D427 /* ProcessedPeerRestrictionText.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00ACA592022897D0045D427 /* ProcessedPeerRestrictionText.swift */; };
|
||||
D010E17D22C238BC009324D4 /* RLottie.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D010E17C22C238BC009324D4 /* RLottie.framework */; };
|
||||
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 */; };
|
||||
|
|
@ -128,6 +154,7 @@
|
|||
D04281FC200E61BC009DDE36 /* ChatRecentActionsInteraction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04281FB200E61BC009DDE36 /* ChatRecentActionsInteraction.swift */; };
|
||||
D04281FE200E639A009DDE36 /* ChatRecentActionsTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04281FD200E639A009DDE36 /* ChatRecentActionsTitleView.swift */; };
|
||||
D0428200200E6A00009DDE36 /* ChatRecentActionsHistoryTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04281FF200E6A00009DDE36 /* ChatRecentActionsHistoryTransition.swift */; };
|
||||
D0471B541EFD8ECA0074D609 /* currencies.json in Resources */ = {isa = PBXBuildFile; fileRef = D0471B531EFD8ECA0074D609 /* currencies.json */; };
|
||||
D048B339203C532800038D05 /* ChatMediaInputPane.swift in Sources */ = {isa = PBXBuildFile; fileRef = D048B338203C532800038D05 /* ChatMediaInputPane.swift */; };
|
||||
D04B4D131EEA0A6500711AF6 /* ChatMessageMapBubbleContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04B4D121EEA0A6500711AF6 /* ChatMessageMapBubbleContentNode.swift */; };
|
||||
D04ECD721FFBF22B00DE9029 /* OpenUrl.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04ECD711FFBF22B00DE9029 /* OpenUrl.swift */; };
|
||||
|
|
@ -183,6 +210,8 @@
|
|||
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 */; };
|
||||
D0955FB521912B6000F89427 /* PresentationStrings.mapping in Resources */ = {isa = PBXBuildFile; fileRef = D0955FB32191278C00F89427 /* PresentationStrings.mapping */; };
|
||||
D095EF51230C7D2C00CB6167 /* BuiltinReactions in Resources */ = {isa = PBXBuildFile; fileRef = D095EF4F230C767D00CB6167 /* BuiltinReactions */; };
|
||||
D099E220229405BB00561B75 /* Weak.swift in Sources */ = {isa = PBXBuildFile; fileRef = D099E21F229405BB00561B75 /* Weak.swift */; };
|
||||
D09E637C1F0E7C28003444CD /* SharedMediaPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09E637B1F0E7C28003444CD /* SharedMediaPlayer.swift */; };
|
||||
D09E637F1F0E8C9F003444CD /* PeerMessagesMediaPlaylist.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09E637E1F0E8C9F003444CD /* PeerMessagesMediaPlaylist.swift */; };
|
||||
|
|
@ -206,6 +235,7 @@
|
|||
D09E77A922FA5CEA00B9CCA7 /* TextFormat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D09E77A822FA5CEA00B9CCA7 /* TextFormat.framework */; };
|
||||
D09E77AB22FA5CEA00B9CCA7 /* Tuples.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D09E77AA22FA5CEA00B9CCA7 /* Tuples.framework */; };
|
||||
D09E77AD22FA5CEA00B9CCA7 /* UrlEscaping.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D09E77AC22FA5CEA00B9CCA7 /* UrlEscaping.framework */; };
|
||||
D0AA5793231BE2FD000F88F3 /* RLottieBinding.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0AA5792231BE2FD000F88F3 /* RLottieBinding.framework */; };
|
||||
D0AA840C1FEB2BA3005C6E91 /* OverlayPlayerControlsNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AA840B1FEB2BA3005C6E91 /* OverlayPlayerControlsNode.swift */; };
|
||||
D0AB262921C307D7008F6685 /* ChatMessagePollBubbleContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB262821C307D7008F6685 /* ChatMessagePollBubbleContentNode.swift */; };
|
||||
D0ACCB1C1EC5FF4B0079D8BF /* ChatMessageCallBubbleContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0ACCB1B1EC5FF4B0079D8BF /* ChatMessageCallBubbleContentNode.swift */; };
|
||||
|
|
@ -220,6 +250,7 @@
|
|||
D0AEAE292080FD660013176E /* StickerPaneSearchGlobaltem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AEAE282080FD660013176E /* StickerPaneSearchGlobaltem.swift */; };
|
||||
D0AF323A1FB1D8D60097362B /* ChatOverlayNavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AF32391FB1D8D60097362B /* ChatOverlayNavigationBar.swift */; };
|
||||
D0B21B1F22156D92003F741D /* LegacyCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B21B1E22156D92003F741D /* LegacyCache.swift */; };
|
||||
D0B4AF861EC111FA00D51FF6 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D0AB0BBA1D6719B5002C78E7 /* Images.xcassets */; };
|
||||
D0B4AF881EC112EE00D51FF6 /* CallKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0B4AF871EC112ED00D51FF6 /* CallKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
|
||||
D0B69C3920EBB397003632C7 /* ChatMessageInteractiveInstantVideoNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B69C3820EBB397003632C7 /* ChatMessageInteractiveInstantVideoNode.swift */; };
|
||||
D0B85C1C1FF6F76000E795B4 /* AuthorizationSequencePasswordRecoveryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B85C1B1FF6F76000E795B4 /* AuthorizationSequencePasswordRecoveryController.swift */; };
|
||||
|
|
@ -234,6 +265,7 @@
|
|||
D0C0B59B1EE019E5000F4D2C /* ChatSearchNavigationContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C0B59A1EE019E5000F4D2C /* ChatSearchNavigationContentNode.swift */; };
|
||||
D0C0B59F1EE082F5000F4D2C /* ChatSearchInputPanelNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C0B59E1EE082F5000F4D2C /* ChatSearchInputPanelNode.swift */; };
|
||||
D0C0B5B11EE1C421000F4D2C /* ChatDateSelectionSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C0B5B01EE1C421000F4D2C /* ChatDateSelectionSheet.swift */; };
|
||||
D0C12A1D1F33A85600B3F66D /* ChatWallpaperBuiltin0.jpg in Resources */ = {isa = PBXBuildFile; fileRef = D0C12A1B1F33964900B3F66D /* ChatWallpaperBuiltin0.jpg */; };
|
||||
D0C12EB01F9A8D1300600BB2 /* ListMessageDateHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C12EAF1F9A8D1300600BB2 /* ListMessageDateHeader.swift */; };
|
||||
D0C26D571FDF2388004ABF18 /* OpenChatMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C26D561FDF2388004ABF18 /* OpenChatMessage.swift */; };
|
||||
D0C45E9F213FFAFD00988156 /* Lottie.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C45E9E213FFAFD00988156 /* Lottie.framework */; };
|
||||
|
|
@ -304,6 +336,48 @@
|
|||
D0E8175720122DAD00B82BBB /* ChatRecentActionsSearchNavigationContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E8175620122DAD00B82BBB /* ChatRecentActionsSearchNavigationContentNode.swift */; };
|
||||
D0E8175920122FE100B82BBB /* ChatRecentActionsFilterController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E8175820122FE100B82BBB /* ChatRecentActionsFilterController.swift */; };
|
||||
D0E8175B201254FA00B82BBB /* ChatRecentActionsEmptyNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E8175A201254FA00B82BBB /* ChatRecentActionsEmptyNode.swift */; };
|
||||
D0E9B9EA1F00853C00F079A4 /* PhoneCountries.txt in Resources */ = {isa = PBXBuildFile; fileRef = D0E9B9E91F00853C00F079A4 /* PhoneCountries.txt */; };
|
||||
D0E9BA911F056F4C00F079A4 /* stp_card_amex@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA691F056F4C00F079A4 /* stp_card_amex@2x.png */; };
|
||||
D0E9BA921F056F4C00F079A4 /* stp_card_amex@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA6A1F056F4C00F079A4 /* stp_card_amex@3x.png */; };
|
||||
D0E9BA931F056F4C00F079A4 /* stp_card_amex_template@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA6B1F056F4C00F079A4 /* stp_card_amex_template@2x.png */; };
|
||||
D0E9BA941F056F4C00F079A4 /* stp_card_amex_template@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA6C1F056F4C00F079A4 /* stp_card_amex_template@3x.png */; };
|
||||
D0E9BA951F056F4C00F079A4 /* stp_card_applepay@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA6D1F056F4C00F079A4 /* stp_card_applepay@2x.png */; };
|
||||
D0E9BA961F056F4C00F079A4 /* stp_card_applepay@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA6E1F056F4C00F079A4 /* stp_card_applepay@3x.png */; };
|
||||
D0E9BA971F056F4C00F079A4 /* stp_card_applepay_template@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA6F1F056F4C00F079A4 /* stp_card_applepay_template@2x.png */; };
|
||||
D0E9BA981F056F4C00F079A4 /* stp_card_applepay_template@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA701F056F4C00F079A4 /* stp_card_applepay_template@3x.png */; };
|
||||
D0E9BA991F056F4C00F079A4 /* stp_card_cvc@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA711F056F4C00F079A4 /* stp_card_cvc@2x.png */; };
|
||||
D0E9BA9A1F056F4C00F079A4 /* stp_card_cvc@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA721F056F4C00F079A4 /* stp_card_cvc@3x.png */; };
|
||||
D0E9BA9B1F056F4C00F079A4 /* stp_card_cvc_amex@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA731F056F4C00F079A4 /* stp_card_cvc_amex@2x.png */; };
|
||||
D0E9BA9C1F056F4C00F079A4 /* stp_card_cvc_amex@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA741F056F4C00F079A4 /* stp_card_cvc_amex@3x.png */; };
|
||||
D0E9BA9D1F056F4C00F079A4 /* stp_card_diners@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA751F056F4C00F079A4 /* stp_card_diners@2x.png */; };
|
||||
D0E9BA9E1F056F4C00F079A4 /* stp_card_diners@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA761F056F4C00F079A4 /* stp_card_diners@3x.png */; };
|
||||
D0E9BA9F1F056F4C00F079A4 /* stp_card_diners_template@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA771F056F4C00F079A4 /* stp_card_diners_template@2x.png */; };
|
||||
D0E9BAA01F056F4C00F079A4 /* stp_card_diners_template@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA781F056F4C00F079A4 /* stp_card_diners_template@3x.png */; };
|
||||
D0E9BAA11F056F4C00F079A4 /* stp_card_discover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA791F056F4C00F079A4 /* stp_card_discover@2x.png */; };
|
||||
D0E9BAA21F056F4C00F079A4 /* stp_card_discover@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA7A1F056F4C00F079A4 /* stp_card_discover@3x.png */; };
|
||||
D0E9BAA31F056F4C00F079A4 /* stp_card_discover_template@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA7B1F056F4C00F079A4 /* stp_card_discover_template@2x.png */; };
|
||||
D0E9BAA41F056F4C00F079A4 /* stp_card_discover_template@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA7C1F056F4C00F079A4 /* stp_card_discover_template@3x.png */; };
|
||||
D0E9BAA51F056F4C00F079A4 /* stp_card_form_applepay@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA7D1F056F4C00F079A4 /* stp_card_form_applepay@2x.png */; };
|
||||
D0E9BAA61F056F4C00F079A4 /* stp_card_form_applepay@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA7E1F056F4C00F079A4 /* stp_card_form_applepay@3x.png */; };
|
||||
D0E9BAA71F056F4C00F079A4 /* stp_card_form_back@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA7F1F056F4C00F079A4 /* stp_card_form_back@2x.png */; };
|
||||
D0E9BAA81F056F4C00F079A4 /* stp_card_form_back@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA801F056F4C00F079A4 /* stp_card_form_back@3x.png */; };
|
||||
D0E9BAA91F056F4C00F079A4 /* stp_card_form_front@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA811F056F4C00F079A4 /* stp_card_form_front@2x.png */; };
|
||||
D0E9BAAA1F056F4C00F079A4 /* stp_card_form_front@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA821F056F4C00F079A4 /* stp_card_form_front@3x.png */; };
|
||||
D0E9BAAB1F056F4C00F079A4 /* stp_card_jcb@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA831F056F4C00F079A4 /* stp_card_jcb@2x.png */; };
|
||||
D0E9BAAC1F056F4C00F079A4 /* stp_card_jcb@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA841F056F4C00F079A4 /* stp_card_jcb@3x.png */; };
|
||||
D0E9BAAD1F056F4C00F079A4 /* stp_card_jcb_template@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA851F056F4C00F079A4 /* stp_card_jcb_template@2x.png */; };
|
||||
D0E9BAAE1F056F4C00F079A4 /* stp_card_jcb_template@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA861F056F4C00F079A4 /* stp_card_jcb_template@3x.png */; };
|
||||
D0E9BAAF1F056F4C00F079A4 /* stp_card_mastercard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA871F056F4C00F079A4 /* stp_card_mastercard@2x.png */; };
|
||||
D0E9BAB01F056F4C00F079A4 /* stp_card_mastercard@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA881F056F4C00F079A4 /* stp_card_mastercard@3x.png */; };
|
||||
D0E9BAB11F056F4C00F079A4 /* stp_card_mastercard_template@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA891F056F4C00F079A4 /* stp_card_mastercard_template@2x.png */; };
|
||||
D0E9BAB21F056F4C00F079A4 /* stp_card_mastercard_template@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA8A1F056F4C00F079A4 /* stp_card_mastercard_template@3x.png */; };
|
||||
D0E9BAB31F056F4C00F079A4 /* stp_card_placeholder_template@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA8B1F056F4C00F079A4 /* stp_card_placeholder_template@2x.png */; };
|
||||
D0E9BAB41F056F4C00F079A4 /* stp_card_placeholder_template@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA8C1F056F4C00F079A4 /* stp_card_placeholder_template@3x.png */; };
|
||||
D0E9BAB51F056F4C00F079A4 /* stp_card_visa@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA8D1F056F4C00F079A4 /* stp_card_visa@2x.png */; };
|
||||
D0E9BAB61F056F4C00F079A4 /* stp_card_visa@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA8E1F056F4C00F079A4 /* stp_card_visa@3x.png */; };
|
||||
D0E9BAB71F056F4C00F079A4 /* stp_card_visa_template@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA8F1F056F4C00F079A4 /* stp_card_visa_template@2x.png */; };
|
||||
D0E9BAB81F056F4C00F079A4 /* stp_card_visa_template@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D0E9BA901F056F4C00F079A4 /* stp_card_visa_template@3x.png */; };
|
||||
D0EB42051F3143AB00838FE6 /* LegacyComponentsResources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D0EB42041F3143AB00838FE6 /* LegacyComponentsResources.bundle */; };
|
||||
D0EB5ADF1F798033004E89B6 /* PeerMediaCollectionEmptyNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EB5ADE1F798033004E89B6 /* PeerMediaCollectionEmptyNode.swift */; };
|
||||
D0EC55A3210231D600D1992C /* SearchPeerMembers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EC55A2210231D600D1992C /* SearchPeerMembers.swift */; };
|
||||
D0EC6CC11EB9F58800EBF1C3 /* LegacyCamera.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00E15251DDBD4E700ACF65C /* LegacyCamera.swift */; };
|
||||
|
|
@ -475,6 +549,7 @@
|
|||
D0EC6E831EB9F58900EBF1C3 /* NotificationItemContainerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C50E3D1E93D09200F62E39 /* NotificationItemContainerNode.swift */; };
|
||||
D0EC6E841EB9F58900EBF1C3 /* NotificationItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C50E3B1E93CC2600F62E39 /* NotificationItem.swift */; };
|
||||
D0EC6E851EB9F58900EBF1C3 /* ChatMessageNotificationItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C50E3F1E93D3B000F62E39 /* ChatMessageNotificationItem.swift */; };
|
||||
D0EC6E891EB9F58900EBF1C3 /* FrameworkBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69E831D6B8C850046BCD6 /* FrameworkBundle.swift */; };
|
||||
D0EC6E8F1EB9F5B200EBF1C3 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D08D45291D5E340300A7428A /* AsyncDisplayKit.framework */; };
|
||||
D0EC6E901EB9F5B200EBF1C3 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D08D452A1D5E340300A7428A /* Display.framework */; };
|
||||
D0EC6E911EB9F5B200EBF1C3 /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D08D452B1D5E340300A7428A /* Postbox.framework */; };
|
||||
|
|
@ -487,8 +562,9 @@
|
|||
D0EC6EA61EB9FC2400EBF1C3 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D07551901DDA4FC70073E051 /* libc++.tbd */; };
|
||||
D0EC6EBD1EBA100F00EBF1C3 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0EC6EBC1EBA100F00EBF1C3 /* CoreAudio.framework */; };
|
||||
D0EEE9A12165585F001292A6 /* DocumentPreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EEE9A02165585F001292A6 /* DocumentPreviewController.swift */; };
|
||||
D0EFF2482319806700CF5164 /* AppBundle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0EFF2472319806700CF5164 /* AppBundle.framework */; };
|
||||
D0F19F6420E5A15B00EEC860 /* ChatMediaInputPeerSpecificItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F19F6320E5A15B00EEC860 /* ChatMediaInputPeerSpecificItem.swift */; };
|
||||
D0F9720F1FFE4BD5002595C8 /* notification.caf in Resources */ = {isa = PBXBuildFile; fileRef = D0C50E431E93FCD200F62E39 /* notification.caf */; };
|
||||
D0F972101FFE4BD5002595C8 /* MessageSent.caf in Resources */ = {isa = PBXBuildFile; fileRef = D073CE621DCBBE5D007511FD /* MessageSent.caf */; };
|
||||
D0FA08C8204982DC00DD23FC /* ChatTextInputActionButtonsNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA08C7204982DC00DD23FC /* ChatTextInputActionButtonsNode.swift */; };
|
||||
D0FA08CA2049BEAC00DD23FC /* ChatEmptyNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA08C92049BEAC00DD23FC /* ChatEmptyNode.swift */; };
|
||||
D0FAB13E22EBC25300D8BED2 /* ChatMessageBubbleBackdrop.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FAB13D22EBC25300D8BED2 /* ChatMessageBubbleBackdrop.swift */; };
|
||||
|
|
@ -500,15 +576,39 @@
|
|||
/* Begin PBXFileReference section */
|
||||
090B48C72200BCA8005083FA /* WallpaperUploadManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WallpaperUploadManager.swift; sourceTree = "<group>"; };
|
||||
090E63ED2196FE3A00E3C035 /* OpenAddContact.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenAddContact.swift; sourceTree = "<group>"; };
|
||||
090E778B22AA842200CD99F5 /* anim_success.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_success.json; sourceTree = "<group>"; };
|
||||
0910B0EC21FA178C00F8F87D /* WallpaperPreviewMedia.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WallpaperPreviewMedia.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>"; };
|
||||
09310D1A213BC5DE0020033A /* anim_ungroup.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_ungroup.json; sourceTree = "<group>"; };
|
||||
09310D1B213BC5DE0020033A /* anim_group.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_group.json; sourceTree = "<group>"; };
|
||||
0940932322E73DFB003846A3 /* ChatSendMessageActionSheetController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatSendMessageActionSheetController.swift; sourceTree = "<group>"; };
|
||||
0940932522E73E12003846A3 /* ChatSendMessageActionSheetControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatSendMessageActionSheetControllerNode.swift; sourceTree = "<group>"; };
|
||||
094735042275D71F00EA2312 /* anim_hide.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_hide.json; sourceTree = "<group>"; };
|
||||
094735052275D72000EA2312 /* anim_unread.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_unread.json; sourceTree = "<group>"; };
|
||||
094735062275D72000EA2312 /* anim_read.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_read.json; sourceTree = "<group>"; };
|
||||
094735072275D72000EA2312 /* anim_archive.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_archive.json; sourceTree = "<group>"; };
|
||||
094735082275D72000EA2312 /* anim_mute.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_mute.json; sourceTree = "<group>"; };
|
||||
094735092275D72000EA2312 /* anim_delete.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_delete.json; sourceTree = "<group>"; };
|
||||
0947350A2275D72000EA2312 /* anim_unarchive.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_unarchive.json; sourceTree = "<group>"; };
|
||||
0947350B2275D72000EA2312 /* anim_unpin.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_unpin.json; sourceTree = "<group>"; };
|
||||
0947350C2275D72100EA2312 /* anim_unmute.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_unmute.json; sourceTree = "<group>"; };
|
||||
0947350D2275D72100EA2312 /* anim_pin.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_pin.json; sourceTree = "<group>"; };
|
||||
094735182277483B00EA2312 /* anim_infotip.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_infotip.json; sourceTree = "<group>"; };
|
||||
09510B1222F96E5B0078CAB7 /* ChatScheduleTimeController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatScheduleTimeController.swift; sourceTree = "<group>"; };
|
||||
09510B1422F96E6C0078CAB7 /* ChatScheduleTimeControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatScheduleTimeControllerNode.swift; sourceTree = "<group>"; };
|
||||
095214EE2318D4D3008CDD87 /* ThemeUpdateManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeUpdateManager.swift; sourceTree = "<group>"; };
|
||||
0962E67821B67A9800245FD9 /* ChatMessageAnimatedStickerItemNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageAnimatedStickerItemNode.swift; sourceTree = "<group>"; };
|
||||
09749BC421F0E024008FDDE9 /* StickersChatInputContextPanelItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StickersChatInputContextPanelItem.swift; sourceTree = "<group>"; };
|
||||
0979788021065F8B0077D77F /* VimeoUserScript.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = VimeoUserScript.js; sourceTree = "<group>"; };
|
||||
0979788121065F8B0077D77F /* YoutubeUserScript.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = YoutubeUserScript.js; sourceTree = "<group>"; };
|
||||
0979788221065F8C0077D77F /* Vimeo.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Vimeo.html; sourceTree = "<group>"; };
|
||||
0979788321065F8C0077D77F /* Generic.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Generic.html; sourceTree = "<group>"; };
|
||||
0979788421065F8C0077D77F /* Instagram.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Instagram.html; sourceTree = "<group>"; };
|
||||
0979788521065F8C0077D77F /* Twitch.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Twitch.html; sourceTree = "<group>"; };
|
||||
0979788621065F8C0077D77F /* TwitchUserScript.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TwitchUserScript.js; sourceTree = "<group>"; };
|
||||
0979788721065F8C0077D77F /* Youtube.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Youtube.html; sourceTree = "<group>"; };
|
||||
0979788821065F8C0077D77F /* GenericUserScript.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = GenericUserScript.js; sourceTree = "<group>"; };
|
||||
099529AF21D2123E00805E13 /* ChatMessageUnsupportedBubbleContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageUnsupportedBubbleContentNode.swift; sourceTree = "<group>"; };
|
||||
099529B321D3E5D800805E13 /* CheckDiskSpace.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckDiskSpace.swift; sourceTree = "<group>"; };
|
||||
09A218D7229EE1B500DE6898 /* HorizontalStickerGridItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalStickerGridItem.swift; sourceTree = "<group>"; };
|
||||
|
|
@ -519,10 +619,13 @@
|
|||
09D304142173C0E900C00567 /* WatchManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchManager.swift; sourceTree = "<group>"; };
|
||||
09D96898221DE92600B1458A /* ID3ArtworkReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ID3ArtworkReader.swift; sourceTree = "<group>"; };
|
||||
09DD5D4F21ECC3C400D7007A /* SuppressContactsWarning.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuppressContactsWarning.swift; sourceTree = "<group>"; };
|
||||
09E2D9ED226F1AF300EA0AA4 /* Emoji.mapping */ = {isa = PBXFileReference; lastKnownFileType = file; name = Emoji.mapping; path = TelegramUI/Resources/Emoji.mapping; sourceTree = "<group>"; };
|
||||
09E2D9F0226F214000EA0AA4 /* EmojiResources.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiResources.swift; sourceTree = "<group>"; };
|
||||
09E2DA122273367900EA0AA4 /* anim_archiveAvatar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_archiveAvatar.json; sourceTree = "<group>"; };
|
||||
09EC0DEC22CB583C00E7185B /* TextLinkHandling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextLinkHandling.swift; sourceTree = "<group>"; };
|
||||
09EDAD29220DA6A40012A50B /* VolumeButtons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VolumeButtons.swift; sourceTree = "<group>"; };
|
||||
09F2158C225CF5BC00AEDF6D /* Pasteboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Pasteboard.swift; sourceTree = "<group>"; };
|
||||
09FFBCCF227B7F9000C33B4B /* anim_archiveswipe.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_archiveswipe.json; sourceTree = "<group>"; };
|
||||
09FFBCD62281BB2D00C33B4B /* ChatTextLinkEditController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatTextLinkEditController.swift; sourceTree = "<group>"; };
|
||||
D000CABB21F158AD0011B15D /* PrepareSecretThumbnailData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrepareSecretThumbnailData.swift; sourceTree = "<group>"; };
|
||||
D002A0D21E9BBE6700A81812 /* MultiplexedSoftwareVideoSourceManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultiplexedSoftwareVideoSourceManager.swift; sourceTree = "<group>"; };
|
||||
|
|
@ -664,6 +767,7 @@
|
|||
D04281FF200E6A00009DDE36 /* ChatRecentActionsHistoryTransition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatRecentActionsHistoryTransition.swift; sourceTree = "<group>"; };
|
||||
D045549921B2F173007A6DD9 /* libturbojpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libturbojpeg.a; path = "third-party/libjpeg-turbo/libturbojpeg.a"; sourceTree = "<group>"; };
|
||||
D04662801E68BA64006FAFC4 /* TransformOutgoingMessageMedia.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransformOutgoingMessageMedia.swift; sourceTree = "<group>"; };
|
||||
D0471B531EFD8ECA0074D609 /* currencies.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = currencies.json; path = TelegramUI/Resources/currencies.json; sourceTree = "<group>"; };
|
||||
D048B338203C532800038D05 /* ChatMediaInputPane.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMediaInputPane.swift; sourceTree = "<group>"; };
|
||||
D049EAE11E447AD500A2CD3A /* StickersChatInputContextPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickersChatInputContextPanelNode.swift; sourceTree = "<group>"; };
|
||||
D049EAE51E44AD5600A2CD3A /* ChatMediaInputMetaSectionItemNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMediaInputMetaSectionItemNode.swift; sourceTree = "<group>"; };
|
||||
|
|
@ -708,6 +812,7 @@
|
|||
D06E0F8D1F79ABFB003CF3DD /* ChatLoadingNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatLoadingNode.swift; sourceTree = "<group>"; };
|
||||
D06F1EA31F6C0A5D00FE8B74 /* ChatHistorySearchContainerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatHistorySearchContainerNode.swift; sourceTree = "<group>"; };
|
||||
D072F38323155EAF0009E66F /* MessageReactionListUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MessageReactionListUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
D073CE621DCBBE5D007511FD /* MessageSent.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = MessageSent.caf; path = TelegramUI/Sounds/MessageSent.caf; sourceTree = "<group>"; };
|
||||
D073CE641DCBC26B007511FD /* ServiceSoundManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceSoundManager.swift; sourceTree = "<group>"; };
|
||||
D073CE701DCBF23F007511FD /* DeclareEncodables.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeclareEncodables.swift; sourceTree = "<group>"; };
|
||||
D0750C7722B2A13300BE5F6E /* UniversalMediaPlayer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = UniversalMediaPlayer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
|
|
@ -763,6 +868,8 @@
|
|||
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>"; };
|
||||
D0955FB32191278C00F89427 /* PresentationStrings.mapping */ = {isa = PBXFileReference; lastKnownFileType = file; name = PresentationStrings.mapping; path = TelegramUI/Resources/PresentationStrings.mapping; sourceTree = "<group>"; };
|
||||
D095EF4F230C767D00CB6167 /* BuiltinReactions */ = {isa = PBXFileReference; lastKnownFileType = folder; name = BuiltinReactions; path = TelegramUI/Resources/BuiltinReactions; sourceTree = "<group>"; };
|
||||
D099E21F229405BB00561B75 /* Weak.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Weak.swift; sourceTree = "<group>"; };
|
||||
D099EA1E1DE7450B001AF5A8 /* HorizontalListContextResultsChatInputContextPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalListContextResultsChatInputContextPanelNode.swift; sourceTree = "<group>"; };
|
||||
D099EA201DE7451D001AF5A8 /* HorizontalListContextResultsChatInputPanelItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalListContextResultsChatInputPanelItem.swift; sourceTree = "<group>"; };
|
||||
|
|
@ -788,12 +895,14 @@
|
|||
D09E77A822FA5CEA00B9CCA7 /* TextFormat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TextFormat.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
D09E77AA22FA5CEA00B9CCA7 /* Tuples.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Tuples.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
D09E77AC22FA5CEA00B9CCA7 /* UrlEscaping.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = UrlEscaping.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
D0AA5792231BE2FD000F88F3 /* RLottieBinding.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RLottieBinding.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
D0AA840B1FEB2BA3005C6E91 /* OverlayPlayerControlsNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverlayPlayerControlsNode.swift; sourceTree = "<group>"; };
|
||||
D0AB0BB01D6718DA002C78E7 /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; };
|
||||
D0AB0BB21D6718EB002C78E7 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
|
||||
D0AB0BB41D6718F1002C78E7 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; };
|
||||
D0AB0BB61D67191C002C78E7 /* MtProtoKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MtProtoKit.framework; path = "../../../../Library/Developer/Xcode/DerivedData/Telegram-iOS-diblohvjozhgaifjcniwdlixlilx/Build/Products/Debug-iphoneos/MtProtoKit.framework"; sourceTree = "<group>"; };
|
||||
D0AB0BB71D67191C002C78E7 /* SSignalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SSignalKit.framework; path = "../../../../Library/Developer/Xcode/DerivedData/Telegram-iOS-diblohvjozhgaifjcniwdlixlilx/Build/Products/Debug-iphoneos/SSignalKit.framework"; sourceTree = "<group>"; };
|
||||
D0AB0BBA1D6719B5002C78E7 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||
D0AB262821C307D7008F6685 /* ChatMessagePollBubbleContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessagePollBubbleContentNode.swift; sourceTree = "<group>"; };
|
||||
D0ACCB1B1EC5FF4B0079D8BF /* ChatMessageCallBubbleContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageCallBubbleContentNode.swift; sourceTree = "<group>"; };
|
||||
D0AD02E91FFFEBEF00C1DCFF /* ChatMessageLiveLocationTextNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageLiveLocationTextNode.swift; sourceTree = "<group>"; };
|
||||
|
|
@ -831,6 +940,7 @@
|
|||
D0C0B59A1EE019E5000F4D2C /* ChatSearchNavigationContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatSearchNavigationContentNode.swift; sourceTree = "<group>"; };
|
||||
D0C0B59E1EE082F5000F4D2C /* ChatSearchInputPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatSearchInputPanelNode.swift; sourceTree = "<group>"; };
|
||||
D0C0B5B01EE1C421000F4D2C /* ChatDateSelectionSheet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatDateSelectionSheet.swift; sourceTree = "<group>"; };
|
||||
D0C12A1B1F33964900B3F66D /* ChatWallpaperBuiltin0.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = ChatWallpaperBuiltin0.jpg; path = TelegramUI/Resources/ChatWallpaperBuiltin0.jpg; sourceTree = "<group>"; };
|
||||
D0C12EAF1F9A8D1300600BB2 /* ListMessageDateHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListMessageDateHeader.swift; sourceTree = "<group>"; };
|
||||
D0C26D561FDF2388004ABF18 /* OpenChatMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenChatMessage.swift; sourceTree = "<group>"; };
|
||||
D0C45E9E213FFAFD00988156 /* Lottie.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Lottie.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
|
|
@ -841,6 +951,7 @@
|
|||
D0C50E3B1E93CC2600F62E39 /* NotificationItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationItem.swift; sourceTree = "<group>"; };
|
||||
D0C50E3D1E93D09200F62E39 /* NotificationItemContainerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationItemContainerNode.swift; sourceTree = "<group>"; };
|
||||
D0C50E3F1E93D3B000F62E39 /* ChatMessageNotificationItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageNotificationItem.swift; sourceTree = "<group>"; };
|
||||
D0C50E431E93FCD200F62E39 /* notification.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = notification.caf; path = TelegramUI/Sounds/notification.caf; sourceTree = "<group>"; };
|
||||
D0C932351E0988C60074F044 /* ChatButtonKeyboardInputNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatButtonKeyboardInputNode.swift; sourceTree = "<group>"; };
|
||||
D0C932371E09E0EA0074F044 /* ChatBotInfoItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatBotInfoItem.swift; sourceTree = "<group>"; };
|
||||
D0C9BFAC22FE316E00FAB518 /* ComposePollUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ComposePollUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
|
|
@ -943,6 +1054,48 @@
|
|||
D0E8175620122DAD00B82BBB /* ChatRecentActionsSearchNavigationContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatRecentActionsSearchNavigationContentNode.swift; sourceTree = "<group>"; };
|
||||
D0E8175820122FE100B82BBB /* ChatRecentActionsFilterController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatRecentActionsFilterController.swift; sourceTree = "<group>"; };
|
||||
D0E8175A201254FA00B82BBB /* ChatRecentActionsEmptyNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatRecentActionsEmptyNode.swift; sourceTree = "<group>"; };
|
||||
D0E9B9E91F00853C00F079A4 /* PhoneCountries.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = PhoneCountries.txt; path = TelegramUI/Resources/PhoneCountries.txt; sourceTree = "<group>"; };
|
||||
D0E9BA691F056F4C00F079A4 /* stp_card_amex@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_amex@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA6A1F056F4C00F079A4 /* stp_card_amex@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_amex@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA6B1F056F4C00F079A4 /* stp_card_amex_template@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_amex_template@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA6C1F056F4C00F079A4 /* stp_card_amex_template@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_amex_template@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA6D1F056F4C00F079A4 /* stp_card_applepay@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_applepay@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA6E1F056F4C00F079A4 /* stp_card_applepay@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_applepay@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA6F1F056F4C00F079A4 /* stp_card_applepay_template@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_applepay_template@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA701F056F4C00F079A4 /* stp_card_applepay_template@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_applepay_template@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA711F056F4C00F079A4 /* stp_card_cvc@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_cvc@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA721F056F4C00F079A4 /* stp_card_cvc@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_cvc@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA731F056F4C00F079A4 /* stp_card_cvc_amex@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_cvc_amex@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA741F056F4C00F079A4 /* stp_card_cvc_amex@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_cvc_amex@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA751F056F4C00F079A4 /* stp_card_diners@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_diners@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA761F056F4C00F079A4 /* stp_card_diners@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_diners@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA771F056F4C00F079A4 /* stp_card_diners_template@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_diners_template@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA781F056F4C00F079A4 /* stp_card_diners_template@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_diners_template@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA791F056F4C00F079A4 /* stp_card_discover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_discover@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA7A1F056F4C00F079A4 /* stp_card_discover@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_discover@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA7B1F056F4C00F079A4 /* stp_card_discover_template@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_discover_template@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA7C1F056F4C00F079A4 /* stp_card_discover_template@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_discover_template@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA7D1F056F4C00F079A4 /* stp_card_form_applepay@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_form_applepay@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA7E1F056F4C00F079A4 /* stp_card_form_applepay@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_form_applepay@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA7F1F056F4C00F079A4 /* stp_card_form_back@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_form_back@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA801F056F4C00F079A4 /* stp_card_form_back@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_form_back@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA811F056F4C00F079A4 /* stp_card_form_front@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_form_front@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA821F056F4C00F079A4 /* stp_card_form_front@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_form_front@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA831F056F4C00F079A4 /* stp_card_jcb@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_jcb@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA841F056F4C00F079A4 /* stp_card_jcb@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_jcb@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA851F056F4C00F079A4 /* stp_card_jcb_template@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_jcb_template@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA861F056F4C00F079A4 /* stp_card_jcb_template@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_jcb_template@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA871F056F4C00F079A4 /* stp_card_mastercard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_mastercard@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA881F056F4C00F079A4 /* stp_card_mastercard@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_mastercard@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA891F056F4C00F079A4 /* stp_card_mastercard_template@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_mastercard_template@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA8A1F056F4C00F079A4 /* stp_card_mastercard_template@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_mastercard_template@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA8B1F056F4C00F079A4 /* stp_card_placeholder_template@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_placeholder_template@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA8C1F056F4C00F079A4 /* stp_card_placeholder_template@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_placeholder_template@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA8D1F056F4C00F079A4 /* stp_card_visa@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_visa@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA8E1F056F4C00F079A4 /* stp_card_visa@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_visa@3x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA8F1F056F4C00F079A4 /* stp_card_visa_template@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_visa_template@2x.png"; sourceTree = "<group>"; };
|
||||
D0E9BA901F056F4C00F079A4 /* stp_card_visa_template@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stp_card_visa_template@3x.png"; sourceTree = "<group>"; };
|
||||
D0EB42041F3143AB00838FE6 /* LegacyComponentsResources.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = LegacyComponentsResources.bundle; path = ../LegacyComponents/LegacyComponents/Resources/LegacyComponentsResources.bundle; sourceTree = "<group>"; };
|
||||
D0EB5ADE1F798033004E89B6 /* PeerMediaCollectionEmptyNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeerMediaCollectionEmptyNode.swift; sourceTree = "<group>"; };
|
||||
D0EC55A2210231D600D1992C /* SearchPeerMembers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchPeerMembers.swift; sourceTree = "<group>"; };
|
||||
D0EC6B401EB8F7D700EBF1C3 /* VoipDynamic.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VoipDynamic.framework; path = "../../../../Library/Developer/Xcode/DerivedData/Telegram-iOS-diblohvjozhgaifjcniwdlixlilx/Build/Products/Debug-iphonesimulator/VoipDynamic.framework"; sourceTree = "<group>"; };
|
||||
|
|
@ -955,7 +1108,6 @@
|
|||
D0EE97191D88BCA0006C18E1 /* ChatInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatInfo.swift; sourceTree = "<group>"; };
|
||||
D0EEE9A02165585F001292A6 /* DocumentPreviewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentPreviewController.swift; sourceTree = "<group>"; };
|
||||
D0EF40DE1E73100D000DFCD4 /* ChatHistoryNavigationStack.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatHistoryNavigationStack.swift; sourceTree = "<group>"; };
|
||||
D0EFF2472319806700CF5164 /* AppBundle.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AppBundle.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
D0F02CCB1E96EF350065DEE2 /* ChatMediaInputStickerPane.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMediaInputStickerPane.swift; sourceTree = "<group>"; };
|
||||
D0F02CCD1E96FACE0065DEE2 /* ChatMediaInputGifPane.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMediaInputGifPane.swift; sourceTree = "<group>"; };
|
||||
D0F19F6320E5A15B00EEC860 /* ChatMediaInputPeerSpecificItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMediaInputPeerSpecificItem.swift; sourceTree = "<group>"; };
|
||||
|
|
@ -965,6 +1117,7 @@
|
|||
D0F53BF61E79593500117362 /* AuthorizationSequenceSignUpController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorizationSequenceSignUpController.swift; sourceTree = "<group>"; };
|
||||
D0F53BF81E79593F00117362 /* AuthorizationSequenceSignUpControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorizationSequenceSignUpControllerNode.swift; sourceTree = "<group>"; };
|
||||
D0F69CD61D6B87D30046BCD6 /* MediaManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MediaManager.swift; sourceTree = "<group>"; };
|
||||
D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = TelegramUI.xcconfig; path = TelegramUI/Config/TelegramUI.xcconfig; sourceTree = "<group>"; };
|
||||
D0F69DC41D6B89E10046BCD6 /* RadialProgressNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadialProgressNode.swift; sourceTree = "<group>"; };
|
||||
D0F69E0E1D6B8ACF0046BCD6 /* ChatController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatController.swift; sourceTree = "<group>"; };
|
||||
D0F69E0F1D6B8ACF0046BCD6 /* ChatControllerInteraction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatControllerInteraction.swift; sourceTree = "<group>"; };
|
||||
|
|
@ -992,6 +1145,7 @@
|
|||
D0F69E2C1D6B8B030046BCD6 /* ChatUnreadItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatUnreadItem.swift; sourceTree = "<group>"; };
|
||||
D0F69E401D6B8B7E0046BCD6 /* ChatTextInputPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatTextInputPanelNode.swift; sourceTree = "<group>"; };
|
||||
D0F69E451D6B8B950046BCD6 /* ChatHistoryNavigationButtonNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatHistoryNavigationButtonNode.swift; sourceTree = "<group>"; };
|
||||
D0F69E831D6B8C850046BCD6 /* FrameworkBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FrameworkBundle.swift; sourceTree = "<group>"; };
|
||||
D0F69E941D6B8C9B0046BCD6 /* ConvertToWebP.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConvertToWebP.swift; sourceTree = "<group>"; };
|
||||
D0F69EA61D6B9BBC0046BCD6 /* libwebp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libwebp.a; path = "third-party/libwebp/lib/libwebp.a"; sourceTree = "<group>"; };
|
||||
D0F69EA81D6B9BCB0046BCD6 /* libavcodec.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavcodec.a; path = "third-party/FFmpeg-iOS/lib/libavcodec.a"; sourceTree = "<group>"; };
|
||||
|
|
@ -1016,7 +1170,7 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
D0EFF2482319806700CF5164 /* AppBundle.framework in Frameworks */,
|
||||
D0AA5793231BE2FD000F88F3 /* RLottieBinding.framework in Frameworks */,
|
||||
09B4A9BA231519CD005C2E08 /* VideoToolbox.framework in Frameworks */,
|
||||
D072F38423155EAF0009E66F /* MessageReactionListUI.framework in Frameworks */,
|
||||
D03E495D230868DF0049C28B /* PersistentStringHash.framework in Frameworks */,
|
||||
|
|
@ -1150,7 +1304,6 @@
|
|||
D060184222F35D2000796784 /* ActivityIndicator.framework in Frameworks */,
|
||||
D060184022F35D1C00796784 /* MergeLists.framework in Frameworks */,
|
||||
D0D3281422F31B3000D07EE2 /* TelegramUpdateUI.framework in Frameworks */,
|
||||
D010E17D22C238BC009324D4 /* RLottie.framework in Frameworks */,
|
||||
D03AE67522B945D30078411C /* BuildConfig.framework in Frameworks */,
|
||||
D03AE67322B9459C0078411C /* HockeySDK.framework in Frameworks */,
|
||||
D02D634A22B85B94006BE519 /* PushKit.framework in Frameworks */,
|
||||
|
|
@ -1198,6 +1351,56 @@
|
|||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
092F368B2154AAD6001A9F49 /* Fonts */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
092F368C2154AAE9001A9F49 /* SFCompactRounded-Semibold.otf */,
|
||||
);
|
||||
name = Fonts;
|
||||
path = TelegramUI/Resources/Fonts;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
09310D13213BC5DE0020033A /* Animations */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
090E778B22AA842200CD99F5 /* anim_success.json */,
|
||||
09FFBCCF227B7F9000C33B4B /* anim_archiveswipe.json */,
|
||||
094735182277483B00EA2312 /* anim_infotip.json */,
|
||||
094735072275D72000EA2312 /* anim_archive.json */,
|
||||
094735092275D72000EA2312 /* anim_delete.json */,
|
||||
094735042275D71F00EA2312 /* anim_hide.json */,
|
||||
094735082275D72000EA2312 /* anim_mute.json */,
|
||||
0947350D2275D72100EA2312 /* anim_pin.json */,
|
||||
094735062275D72000EA2312 /* anim_read.json */,
|
||||
0947350A2275D72000EA2312 /* anim_unarchive.json */,
|
||||
0947350C2275D72100EA2312 /* anim_unmute.json */,
|
||||
0947350B2275D72000EA2312 /* anim_unpin.json */,
|
||||
094735052275D72000EA2312 /* anim_unread.json */,
|
||||
09E2DA122273367900EA0AA4 /* anim_archiveAvatar.json */,
|
||||
09310D1A213BC5DE0020033A /* anim_ungroup.json */,
|
||||
09310D1B213BC5DE0020033A /* anim_group.json */,
|
||||
);
|
||||
name = Animations;
|
||||
path = TelegramUI/Resources/Animations;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
0979787F21065EAA0077D77F /* Web Embed */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
0979788321065F8C0077D77F /* Generic.html */,
|
||||
0979788821065F8C0077D77F /* GenericUserScript.js */,
|
||||
0979788421065F8C0077D77F /* Instagram.html */,
|
||||
0979788521065F8C0077D77F /* Twitch.html */,
|
||||
0979788621065F8C0077D77F /* TwitchUserScript.js */,
|
||||
0979788221065F8C0077D77F /* Vimeo.html */,
|
||||
0979788021065F8B0077D77F /* VimeoUserScript.js */,
|
||||
0979788721065F8C0077D77F /* Youtube.html */,
|
||||
0979788121065F8B0077D77F /* YoutubeUserScript.js */,
|
||||
);
|
||||
name = "Web Embed";
|
||||
path = TelegramUI/Resources/WebEmbed;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
09D9689B221F74AA00B1458A /* Title Activity Indicator */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
|
@ -1442,6 +1645,23 @@
|
|||
name = "Chat Recent Actions";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D0471B521EFD8EBC0074D609 /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D095EF4F230C767D00CB6167 /* BuiltinReactions */,
|
||||
09E2D9ED226F1AF300EA0AA4 /* Emoji.mapping */,
|
||||
D0955FB32191278C00F89427 /* PresentationStrings.mapping */,
|
||||
09310D13213BC5DE0020033A /* Animations */,
|
||||
092F368B2154AAD6001A9F49 /* Fonts */,
|
||||
D0C12A1B1F33964900B3F66D /* ChatWallpaperBuiltin0.jpg */,
|
||||
D0E9BA681F056F4C00F079A4 /* Stripe */,
|
||||
D0E9B9E91F00853C00F079A4 /* PhoneCountries.txt */,
|
||||
D0471B531EFD8ECA0074D609 /* currencies.json */,
|
||||
0979787F21065EAA0077D77F /* Web Embed */,
|
||||
);
|
||||
name = Resources;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D0477D191F617E4B00412B44 /* Video */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
|
@ -1507,6 +1727,15 @@
|
|||
name = Root;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D073CE611DCBBE09007511FD /* Sounds */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D0C50E431E93FCD200F62E39 /* notification.caf */,
|
||||
D073CE621DCBBE5D007511FD /* MessageSent.caf */,
|
||||
);
|
||||
name = Sounds;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D07551891DDA4C7C0073E051 /* Legacy Components */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
|
@ -1546,7 +1775,7 @@
|
|||
D08D45281D5E340200A7428A /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D0EFF2472319806700CF5164 /* AppBundle.framework */,
|
||||
D0AA5792231BE2FD000F88F3 /* RLottieBinding.framework */,
|
||||
09B4A9B9231519CD005C2E08 /* VideoToolbox.framework */,
|
||||
D072F38323155EAF0009E66F /* MessageReactionListUI.framework */,
|
||||
D03E495C230868DF0049C28B /* PersistentStringHash.framework */,
|
||||
|
|
@ -1998,6 +2227,54 @@
|
|||
name = "Chat History Node";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D0E9BA681F056F4C00F079A4 /* Stripe */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D0E9BA691F056F4C00F079A4 /* stp_card_amex@2x.png */,
|
||||
D0E9BA6A1F056F4C00F079A4 /* stp_card_amex@3x.png */,
|
||||
D0E9BA6B1F056F4C00F079A4 /* stp_card_amex_template@2x.png */,
|
||||
D0E9BA6C1F056F4C00F079A4 /* stp_card_amex_template@3x.png */,
|
||||
D0E9BA6D1F056F4C00F079A4 /* stp_card_applepay@2x.png */,
|
||||
D0E9BA6E1F056F4C00F079A4 /* stp_card_applepay@3x.png */,
|
||||
D0E9BA6F1F056F4C00F079A4 /* stp_card_applepay_template@2x.png */,
|
||||
D0E9BA701F056F4C00F079A4 /* stp_card_applepay_template@3x.png */,
|
||||
D0E9BA711F056F4C00F079A4 /* stp_card_cvc@2x.png */,
|
||||
D0E9BA721F056F4C00F079A4 /* stp_card_cvc@3x.png */,
|
||||
D0E9BA731F056F4C00F079A4 /* stp_card_cvc_amex@2x.png */,
|
||||
D0E9BA741F056F4C00F079A4 /* stp_card_cvc_amex@3x.png */,
|
||||
D0E9BA751F056F4C00F079A4 /* stp_card_diners@2x.png */,
|
||||
D0E9BA761F056F4C00F079A4 /* stp_card_diners@3x.png */,
|
||||
D0E9BA771F056F4C00F079A4 /* stp_card_diners_template@2x.png */,
|
||||
D0E9BA781F056F4C00F079A4 /* stp_card_diners_template@3x.png */,
|
||||
D0E9BA791F056F4C00F079A4 /* stp_card_discover@2x.png */,
|
||||
D0E9BA7A1F056F4C00F079A4 /* stp_card_discover@3x.png */,
|
||||
D0E9BA7B1F056F4C00F079A4 /* stp_card_discover_template@2x.png */,
|
||||
D0E9BA7C1F056F4C00F079A4 /* stp_card_discover_template@3x.png */,
|
||||
D0E9BA7D1F056F4C00F079A4 /* stp_card_form_applepay@2x.png */,
|
||||
D0E9BA7E1F056F4C00F079A4 /* stp_card_form_applepay@3x.png */,
|
||||
D0E9BA7F1F056F4C00F079A4 /* stp_card_form_back@2x.png */,
|
||||
D0E9BA801F056F4C00F079A4 /* stp_card_form_back@3x.png */,
|
||||
D0E9BA811F056F4C00F079A4 /* stp_card_form_front@2x.png */,
|
||||
D0E9BA821F056F4C00F079A4 /* stp_card_form_front@3x.png */,
|
||||
D0E9BA831F056F4C00F079A4 /* stp_card_jcb@2x.png */,
|
||||
D0E9BA841F056F4C00F079A4 /* stp_card_jcb@3x.png */,
|
||||
D0E9BA851F056F4C00F079A4 /* stp_card_jcb_template@2x.png */,
|
||||
D0E9BA861F056F4C00F079A4 /* stp_card_jcb_template@3x.png */,
|
||||
D0E9BA871F056F4C00F079A4 /* stp_card_mastercard@2x.png */,
|
||||
D0E9BA881F056F4C00F079A4 /* stp_card_mastercard@3x.png */,
|
||||
D0E9BA891F056F4C00F079A4 /* stp_card_mastercard_template@2x.png */,
|
||||
D0E9BA8A1F056F4C00F079A4 /* stp_card_mastercard_template@3x.png */,
|
||||
D0E9BA8B1F056F4C00F079A4 /* stp_card_placeholder_template@2x.png */,
|
||||
D0E9BA8C1F056F4C00F079A4 /* stp_card_placeholder_template@3x.png */,
|
||||
D0E9BA8D1F056F4C00F079A4 /* stp_card_visa@2x.png */,
|
||||
D0E9BA8E1F056F4C00F079A4 /* stp_card_visa@3x.png */,
|
||||
D0E9BA8F1F056F4C00F079A4 /* stp_card_visa_template@2x.png */,
|
||||
D0E9BA901F056F4C00F079A4 /* stp_card_visa_template@3x.png */,
|
||||
);
|
||||
name = Stripe;
|
||||
path = TelegramUI/Resources/Stripe;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D0EEE99F2165583B001292A6 /* Document */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
|
@ -2246,6 +2523,7 @@
|
|||
D0F69E7E1D6B8C500046BCD6 /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D0F69E831D6B8C850046BCD6 /* FrameworkBundle.swift */,
|
||||
);
|
||||
name = "Supporting Files";
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -2290,6 +2568,11 @@
|
|||
D0FC40751D5B8E7400261D9D = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D0EB42041F3143AB00838FE6 /* LegacyComponentsResources.bundle */,
|
||||
D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */,
|
||||
D0AB0BBA1D6719B5002C78E7 /* Images.xcassets */,
|
||||
D0471B521EFD8EBC0074D609 /* Resources */,
|
||||
D073CE611DCBBE09007511FD /* Sounds */,
|
||||
D0FC40811D5B8E7400261D9D /* TelegramUI */,
|
||||
D0FC408C1D5B8E7500261D9D /* TelegramUITests */,
|
||||
D0FC40801D5B8E7400261D9D /* Products */,
|
||||
|
|
@ -2428,6 +2711,81 @@
|
|||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
09874E4F21078FA100E190B8 /* Generic.html in Resources */,
|
||||
09874E5021078FA100E190B8 /* GenericUserScript.js in Resources */,
|
||||
09874E5121078FA100E190B8 /* Instagram.html in Resources */,
|
||||
09874E5221078FA100E190B8 /* Twitch.html in Resources */,
|
||||
09874E5321078FA100E190B8 /* TwitchUserScript.js in Resources */,
|
||||
094735122275D72100EA2312 /* anim_mute.json in Resources */,
|
||||
09874E5421078FA100E190B8 /* Vimeo.html in Resources */,
|
||||
09874E5521078FA100E190B8 /* VimeoUserScript.js in Resources */,
|
||||
09874E5621078FA100E190B8 /* Youtube.html in Resources */,
|
||||
09874E5721078FA100E190B8 /* YoutubeUserScript.js in Resources */,
|
||||
094735172275D72100EA2312 /* anim_pin.json in Resources */,
|
||||
094735112275D72100EA2312 /* anim_archive.json in Resources */,
|
||||
090E778C22AA842300CD99F5 /* anim_success.json in Resources */,
|
||||
D0EB42051F3143AB00838FE6 /* LegacyComponentsResources.bundle in Resources */,
|
||||
D0E9BAA21F056F4C00F079A4 /* stp_card_discover@3x.png in Resources */,
|
||||
D0E9BAB01F056F4C00F079A4 /* stp_card_mastercard@3x.png in Resources */,
|
||||
09310D32213ED5FC0020033A /* anim_ungroup.json in Resources */,
|
||||
09E2D9EF226F1AFA00EA0AA4 /* Emoji.mapping in Resources */,
|
||||
D0955FB521912B6000F89427 /* PresentationStrings.mapping in Resources */,
|
||||
0947350F2275D72100EA2312 /* anim_unread.json in Resources */,
|
||||
D0E9BAA31F056F4C00F079A4 /* stp_card_discover_template@2x.png in Resources */,
|
||||
D0E9BAB51F056F4C00F079A4 /* stp_card_visa@2x.png in Resources */,
|
||||
D0E9BA941F056F4C00F079A4 /* stp_card_amex_template@3x.png in Resources */,
|
||||
D0E9BA961F056F4C00F079A4 /* stp_card_applepay@3x.png in Resources */,
|
||||
D0F9720F1FFE4BD5002595C8 /* notification.caf in Resources */,
|
||||
09310D33213ED5FC0020033A /* anim_group.json in Resources */,
|
||||
09FFBCD1227B7F9900C33B4B /* anim_archiveswipe.json in Resources */,
|
||||
094735162275D72100EA2312 /* anim_unmute.json in Resources */,
|
||||
094735102275D72100EA2312 /* anim_read.json in Resources */,
|
||||
D0E9BA9A1F056F4C00F079A4 /* stp_card_cvc@3x.png in Resources */,
|
||||
D0E9BA921F056F4C00F079A4 /* stp_card_amex@3x.png in Resources */,
|
||||
D0E9BA9F1F056F4C00F079A4 /* stp_card_diners_template@2x.png in Resources */,
|
||||
D0E9BA9E1F056F4C00F079A4 /* stp_card_diners@3x.png in Resources */,
|
||||
D0B4AF861EC111FA00D51FF6 /* Images.xcassets in Resources */,
|
||||
D0E9BAAD1F056F4C00F079A4 /* stp_card_jcb_template@2x.png in Resources */,
|
||||
D0F972101FFE4BD5002595C8 /* MessageSent.caf in Resources */,
|
||||
D0E9BAB71F056F4C00F079A4 /* stp_card_visa_template@2x.png in Resources */,
|
||||
D0E9BA951F056F4C00F079A4 /* stp_card_applepay@2x.png in Resources */,
|
||||
D0E9BAA01F056F4C00F079A4 /* stp_card_diners_template@3x.png in Resources */,
|
||||
094735132275D72100EA2312 /* anim_delete.json in Resources */,
|
||||
094735192277483C00EA2312 /* anim_infotip.json in Resources */,
|
||||
094735142275D72100EA2312 /* anim_unarchive.json in Resources */,
|
||||
D0E9BAAA1F056F4C00F079A4 /* stp_card_form_front@3x.png in Resources */,
|
||||
D0E9BA971F056F4C00F079A4 /* stp_card_applepay_template@2x.png in Resources */,
|
||||
D0E9BAB41F056F4C00F079A4 /* stp_card_placeholder_template@3x.png in Resources */,
|
||||
D0E9BAA71F056F4C00F079A4 /* stp_card_form_back@2x.png in Resources */,
|
||||
D0E9BAB11F056F4C00F079A4 /* stp_card_mastercard_template@2x.png in Resources */,
|
||||
D0E9BA9D1F056F4C00F079A4 /* stp_card_diners@2x.png in Resources */,
|
||||
D0E9BAAF1F056F4C00F079A4 /* stp_card_mastercard@2x.png in Resources */,
|
||||
D0C12A1D1F33A85600B3F66D /* ChatWallpaperBuiltin0.jpg in Resources */,
|
||||
D0E9BAAC1F056F4C00F079A4 /* stp_card_jcb@3x.png in Resources */,
|
||||
D0E9BA911F056F4C00F079A4 /* stp_card_amex@2x.png in Resources */,
|
||||
D095EF51230C7D2C00CB6167 /* BuiltinReactions in Resources */,
|
||||
D0E9BA931F056F4C00F079A4 /* stp_card_amex_template@2x.png in Resources */,
|
||||
D0E9BAA91F056F4C00F079A4 /* stp_card_form_front@2x.png in Resources */,
|
||||
D0E9BAA41F056F4C00F079A4 /* stp_card_discover_template@3x.png in Resources */,
|
||||
D0E9BAA81F056F4C00F079A4 /* stp_card_form_back@3x.png in Resources */,
|
||||
D0E9BAA11F056F4C00F079A4 /* stp_card_discover@2x.png in Resources */,
|
||||
D0E9B9EA1F00853C00F079A4 /* PhoneCountries.txt in Resources */,
|
||||
094735152275D72100EA2312 /* anim_unpin.json in Resources */,
|
||||
D0E9BAB31F056F4C00F079A4 /* stp_card_placeholder_template@2x.png in Resources */,
|
||||
D0E9BAAE1F056F4C00F079A4 /* stp_card_jcb_template@3x.png in Resources */,
|
||||
D0E9BAAB1F056F4C00F079A4 /* stp_card_jcb@2x.png in Resources */,
|
||||
09E2DA132273367900EA0AA4 /* anim_archiveAvatar.json in Resources */,
|
||||
D0E9BA9C1F056F4C00F079A4 /* stp_card_cvc_amex@3x.png in Resources */,
|
||||
D0E9BA991F056F4C00F079A4 /* stp_card_cvc@2x.png in Resources */,
|
||||
D0471B541EFD8ECA0074D609 /* currencies.json in Resources */,
|
||||
0947350E2275D72100EA2312 /* anim_hide.json in Resources */,
|
||||
D0E9BAB21F056F4C00F079A4 /* stp_card_mastercard_template@3x.png in Resources */,
|
||||
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 */,
|
||||
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 */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -2435,6 +2793,7 @@
|
|||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
092F368D2154AAEA001A9F49 /* SFCompactRounded-Semibold.otf in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -2760,6 +3119,7 @@
|
|||
D0EC6E851EB9F58900EBF1C3 /* ChatMessageNotificationItem.swift in Sources */,
|
||||
D04281FE200E639A009DDE36 /* ChatRecentActionsTitleView.swift in Sources */,
|
||||
D0ACCB1C1EC5FF4B0079D8BF /* ChatMessageCallBubbleContentNode.swift in Sources */,
|
||||
D0EC6E891EB9F58900EBF1C3 /* FrameworkBundle.swift in Sources */,
|
||||
D0FA08C8204982DC00DD23FC /* ChatTextInputActionButtonsNode.swift in Sources */,
|
||||
D0BCC3D420404CC7008126C2 /* ChatMessageActionSheetController.swift in Sources */,
|
||||
);
|
||||
|
|
@ -2778,6 +3138,7 @@
|
|||
/* Begin XCBuildConfiguration section */
|
||||
D021D510219CB2240064BEBA /* DebugFork */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
|
|
@ -2824,7 +3185,7 @@
|
|||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_SWIFT_FLAGS = "";
|
||||
|
|
@ -2840,6 +3201,7 @@
|
|||
};
|
||||
D021D511219CB2240064BEBA /* DebugFork */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
DEVELOPMENT_TEAM = X834Q8SBVP;
|
||||
|
|
@ -2903,6 +3265,7 @@
|
|||
};
|
||||
D0400EDB1D5B900A007931CE /* ReleaseAppStore */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
|
|
@ -2943,7 +3306,7 @@
|
|||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
OTHER_SWIFT_FLAGS = "";
|
||||
SDKROOT = iphoneos;
|
||||
|
|
@ -2958,6 +3321,7 @@
|
|||
};
|
||||
D0400EDD1D5B900A007931CE /* ReleaseAppStore */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
COPY_PHASE_STRIP = YES;
|
||||
|
|
@ -2974,6 +3338,7 @@
|
|||
};
|
||||
D079FD261F06BEF70038FADE /* DebugAppStore */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
|
|
@ -3020,7 +3385,7 @@
|
|||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_SWIFT_FLAGS = "";
|
||||
|
|
@ -3036,6 +3401,7 @@
|
|||
};
|
||||
D079FD271F06BEF70038FADE /* DebugAppStore */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
DEVELOPMENT_TEAM = X834Q8SBVP;
|
||||
|
|
@ -3099,6 +3465,7 @@
|
|||
};
|
||||
D0924FEE1FE52C29003F693F /* ReleaseHockeyappInternal */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
|
|
@ -3139,7 +3506,7 @@
|
|||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
OTHER_SWIFT_FLAGS = "";
|
||||
SDKROOT = iphoneos;
|
||||
|
|
@ -3154,6 +3521,7 @@
|
|||
};
|
||||
D0924FEF1FE52C29003F693F /* ReleaseHockeyappInternal */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
COPY_PHASE_STRIP = YES;
|
||||
|
|
@ -3217,6 +3585,7 @@
|
|||
};
|
||||
D0ADF948212B3B0000310BBC /* DebugAppStoreLLC */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
|
|
@ -3263,7 +3632,7 @@
|
|||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_SWIFT_FLAGS = "";
|
||||
|
|
@ -3279,6 +3648,7 @@
|
|||
};
|
||||
D0ADF949212B3B0000310BBC /* DebugAppStoreLLC */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
DEVELOPMENT_TEAM = X834Q8SBVP;
|
||||
|
|
@ -3342,6 +3712,7 @@
|
|||
};
|
||||
D0CE6F02213DC32300BCD44B /* ReleaseAppStoreLLC */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
|
|
@ -3382,7 +3753,7 @@
|
|||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
OTHER_SWIFT_FLAGS = "";
|
||||
SDKROOT = iphoneos;
|
||||
|
|
@ -3397,6 +3768,7 @@
|
|||
};
|
||||
D0CE6F03213DC32300BCD44B /* ReleaseAppStoreLLC */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
COPY_PHASE_STRIP = YES;
|
||||
|
|
@ -3601,6 +3973,7 @@
|
|||
};
|
||||
D0FC40911D5B8E7500261D9D /* DebugHockeyapp */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
|
|
@ -3647,7 +4020,7 @@
|
|||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_SWIFT_FLAGS = "";
|
||||
|
|
@ -3663,6 +4036,7 @@
|
|||
};
|
||||
D0FC40921D5B8E7500261D9D /* ReleaseHockeyapp */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
|
|
@ -3703,7 +4077,7 @@
|
|||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
OTHER_SWIFT_FLAGS = "";
|
||||
SDKROOT = iphoneos;
|
||||
|
|
@ -3718,6 +4092,7 @@
|
|||
};
|
||||
D0FC40971D5B8E7500261D9D /* DebugHockeyapp */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
DEVELOPMENT_TEAM = X834Q8SBVP;
|
||||
|
|
@ -3733,6 +4108,7 @@
|
|||
};
|
||||
D0FC40981D5B8E7500261D9D /* ReleaseHockeyapp */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
COPY_PHASE_STRIP = YES;
|
||||
|
|
|
|||
|
|
@ -729,11 +729,12 @@ public func drawThemeImage(context c: CGContext, theme: PresentationTheme, wallp
|
|||
}
|
||||
|
||||
public func themeImage(account: Account, accountManager: AccountManager, fileReference: FileMediaReference, synchronousLoad: Bool = false) -> Signal<(TransformImageArguments) -> DrawingContext?, NoError> {
|
||||
let isSupportedTheme = fileReference.media.mimeType == "application/x-tgtheme-ios"
|
||||
let maybeFetched = accountManager.mediaBox.resourceData(fileReference.media.resource, option: .complete(waitUntilFetchStatus: false), attemptSynchronously: synchronousLoad)
|
||||
let data = maybeFetched
|
||||
|> take(1)
|
||||
|> mapToSignal { maybeData -> Signal<(Data?, Data?), NoError> in
|
||||
if maybeData.complete {
|
||||
if maybeData.complete && isSupportedTheme {
|
||||
let loadedData: Data? = try? Data(contentsOf: URL(fileURLWithPath: maybeData.path), options: [])
|
||||
return .single((loadedData, nil))
|
||||
} else {
|
||||
|
|
@ -770,25 +771,30 @@ public func themeImage(account: Account, accountManager: AccountManager, fileRef
|
|||
}
|
||||
|
||||
let reference = fileReference.resourceReference(fileReference.media.resource)
|
||||
let fullSizeData = Signal<Data?, NoError> { subscriber in
|
||||
let fetch = fetchedMediaResource(mediaBox: account.postbox.mediaBox, reference: reference).start()
|
||||
let disposable = (account.postbox.mediaBox.resourceData(reference.resource, option: .complete(waitUntilFetchStatus: false), attemptSynchronously: false)
|
||||
|> map { data -> Data? in
|
||||
return data.complete ? try? Data(contentsOf: URL(fileURLWithPath: data.path)) : nil
|
||||
}).start(next: { next in
|
||||
if let data = next {
|
||||
accountManager.mediaBox.storeResourceData(reference.resource.id, data: data)
|
||||
}
|
||||
subscriber.putNext(next)
|
||||
}, error: { error in
|
||||
subscriber.putError(error)
|
||||
}, completed: {
|
||||
subscriber.putCompletion()
|
||||
})
|
||||
return ActionDisposable {
|
||||
fetch.dispose()
|
||||
disposable.dispose()
|
||||
let fullSizeData: Signal<Data?, NoError>
|
||||
if isSupportedTheme {
|
||||
fullSizeData = Signal { subscriber in
|
||||
let fetch = fetchedMediaResource(mediaBox: account.postbox.mediaBox, reference: reference).start()
|
||||
let disposable = (account.postbox.mediaBox.resourceData(reference.resource, option: .complete(waitUntilFetchStatus: false), attemptSynchronously: false)
|
||||
|> map { data -> Data? in
|
||||
return data.complete ? try? Data(contentsOf: URL(fileURLWithPath: data.path)) : nil
|
||||
}).start(next: { next in
|
||||
if let data = next {
|
||||
accountManager.mediaBox.storeResourceData(reference.resource.id, data: data)
|
||||
}
|
||||
subscriber.putNext(next)
|
||||
}, error: { error in
|
||||
subscriber.putError(error)
|
||||
}, completed: {
|
||||
subscriber.putCompletion()
|
||||
})
|
||||
return ActionDisposable {
|
||||
fetch.dispose()
|
||||
disposable.dispose()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
fullSizeData = .single(nil)
|
||||
}
|
||||
|
||||
return thumbnailData |> mapToSignal { thumbnailData in
|
||||
|
|
|
|||
0
submodules/RLottie/Info.plist → submodules/rlottie/Info.plist
Normal file → Executable file
0
submodules/RLottie/Info.plist → submodules/rlottie/Info.plist
Normal file → Executable file
0
submodules/RLottie/Sources/LottieInstance.h → submodules/rlottie/LottieInstance.h
Normal file → Executable file
0
submodules/RLottie/Sources/LottieInstance.h → submodules/rlottie/LottieInstance.h
Normal file → Executable file
2
submodules/RLottie/Sources/LottieInstance.mm → submodules/rlottie/LottieInstance.mm
Normal file → Executable file
2
submodules/RLottie/Sources/LottieInstance.mm → submodules/rlottie/LottieInstance.mm
Normal file → Executable file
|
|
@ -1,6 +1,6 @@
|
|||
#import "LottieInstance.h"
|
||||
|
||||
#include <rlottie.h>
|
||||
#include "rlottie.h"
|
||||
|
||||
@interface LottieInstance () {
|
||||
std::unique_ptr<rlottie::Animation> _animation;
|
||||
7
submodules/RLottie/Sources/RLottie.h → submodules/rlottie/RLottieBinding.h
Normal file → Executable file
7
submodules/RLottie/Sources/RLottie.h → submodules/rlottie/RLottieBinding.h
Normal file → Executable file
|
|
@ -9,11 +9,10 @@
|
|||
#import <UIKit/UIKit.h>
|
||||
|
||||
//! Project version number for RLottie.
|
||||
FOUNDATION_EXPORT double RLottieVersionNumber;
|
||||
FOUNDATION_EXPORT double RLottieBindingVersionNumber;
|
||||
|
||||
//! Project version string for RLottie.
|
||||
FOUNDATION_EXPORT const unsigned char RLottieVersionString[];
|
||||
|
||||
#import <RLottie/LottieInstance.h>
|
||||
FOUNDATION_EXPORT const unsigned char RLottieBindingVersionString[];
|
||||
|
||||
#import <RLottieBinding/LottieInstance.h>
|
||||
|
||||
1030
submodules/rlottie/RLottieBinding_Xcode.xcodeproj/project.pbxproj
Executable file
1030
submodules/rlottie/RLottieBinding_Xcode.xcodeproj/project.pbxproj
Executable file
File diff suppressed because it is too large
Load diff
|
Before Width: | Height: | Size: 5.6 MiB After Width: | Height: | Size: 5.6 MiB |
|
Before Width: | Height: | Size: 1 MiB After Width: | Height: | Size: 1 MiB |
23
submodules/rlottie/rlottie/.appveyor.yml
Normal file
23
submodules/rlottie/rlottie/.appveyor.yml
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
os: Visual Studio 2017
|
||||
platform:
|
||||
- x86
|
||||
environment:
|
||||
matrix:
|
||||
- ARCH: x86
|
||||
PYTHON: "C:\\Python35"
|
||||
- ARCH: x64
|
||||
PYTHON: "C:\\Python35-x64"
|
||||
skip_branch_with_pr: true
|
||||
install:
|
||||
- git submodule update --init --recursive
|
||||
- set PATH=%cd%;%PYTHON%;%PYTHON%\Scripts;%PATH%
|
||||
- pip install meson==0.50.0 ninja
|
||||
- call "%VS140COMNTOOLS%\..\..\VC\vcvarsall.bat" %ARCH%
|
||||
build_script:
|
||||
- meson -Dwerror=false --backend=ninja --prefix=%cd% build
|
||||
- where link
|
||||
- ninja -C build
|
||||
test_script:
|
||||
- ninja -C build test
|
||||
after_build:
|
||||
- ninja -C build install
|
||||
|
|
@ -9,3 +9,4 @@ latex
|
|||
tmp
|
||||
.cproject
|
||||
.project
|
||||
.vs
|
||||
20
submodules/rlottie/rlottie/.travis.yml
Normal file
20
submodules/rlottie/rlottie/.travis.yml
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
sudo: false
|
||||
|
||||
os:
|
||||
- linux
|
||||
|
||||
language:
|
||||
- cpp
|
||||
|
||||
services:
|
||||
- docker
|
||||
|
||||
before_install:
|
||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker pull smohantty/rlottie-ci-setup; fi
|
||||
|
||||
script:
|
||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then echo FROM smohantty/rlottie-ci-setup > Dockerfile; fi
|
||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then echo ADD . /root >> Dockerfile; fi
|
||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker build -t withgit .; fi
|
||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker run withgit /bin/sh -c "cd /root && TRAVIS=true meson -Dtest=true builddir && ninja -C builddir test && ninja -C builddir install"; fi
|
||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker run withgit /bin/sh -c "cd /root && TRAVIS=true cmake -DLOTTIE_TEST=ON -Bbuilddir -H. && make -C builddir -j$(nproc) all test && make -C builddir install"; fi
|
||||
|
|
@ -6,3 +6,6 @@ Bryce Harrington <bryce@bryceharrington.org>
|
|||
Junsu Choi <jsuya.choi@samsung.com>
|
||||
Yuangu <lifulinghan@aol.com>
|
||||
Mihai Serban <mihai.serban@gmail.com>
|
||||
Shinwoo Kim <cinoo.kim@samsung.com>
|
||||
Vincent Torri <vincent.torri@gmail.com>
|
||||
Nicholas Guriev <guriev-ns@ya.ru>
|
||||
|
|
@ -1,10 +1,20 @@
|
|||
cmake_minimum_required( VERSION 3.2 )
|
||||
cmake_minimum_required( VERSION 3.3 )
|
||||
|
||||
#declare project
|
||||
project( rlottie VERSION 0.0.1 LANGUAGES C CXX ASM)
|
||||
|
||||
if (NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE MinSizeRel)
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED BUILD_SHARED_LIBS)
|
||||
# Keep the previous behavior of the build system, consistent with Meson.
|
||||
set(BUILD_SHARED_LIBS ON)
|
||||
endif()
|
||||
|
||||
#declare target
|
||||
add_library( rlottie SHARED "" )
|
||||
add_library( rlottie )
|
||||
set_target_properties( rlottie PROPERTIES DEFINE_SYMBOL LOT_BUILD )
|
||||
|
||||
#declare version of the target
|
||||
set(player_version_major 0)
|
||||
|
|
@ -19,12 +29,23 @@ set_target_properties(rlottie PROPERTIES
|
|||
#declare alias so that library can be used inside the build tree, e.g. when testing
|
||||
add_library(rlottie::rlottie ALIAS rlottie)
|
||||
|
||||
option(LOTTIE_MODULE "Enable LOTTIE MODULE SUPPORT" ON)
|
||||
option(LOTTIE_THREAD "Enable LOTTIE THREAD SUPPORT" ON)
|
||||
option(LOTTIE_CACHE "Enable LOTTIE CACHE SUPPORT" ON)
|
||||
option(LOTTIE_TEST "Build LOTTIE AUTOTESTS" OFF)
|
||||
|
||||
CONFIGURE_FILE(${CMAKE_CURRENT_LIST_DIR}/cmake/config.h.in config.h)
|
||||
|
||||
target_include_directories(rlottie
|
||||
PRIVATE
|
||||
"${CMAKE_CURRENT_BINARY_DIR}"
|
||||
)
|
||||
|
||||
#declare target compilation options
|
||||
target_compile_options(rlottie
|
||||
PUBLIC
|
||||
PRIVATE
|
||||
-std=c++14
|
||||
-Os
|
||||
-fno-exceptions
|
||||
-fno-unwind-tables
|
||||
-fno-asynchronous-unwind-tables
|
||||
|
|
@ -47,10 +68,10 @@ target_link_libraries(rlottie
|
|||
"${CMAKE_THREAD_LIBS_INIT}"
|
||||
)
|
||||
|
||||
# for dlopen, dlsym and dlclose dependancy
|
||||
target_link_libraries(rlottie
|
||||
PRIVATE
|
||||
${CMAKE_DL_LIBS})
|
||||
if (LOTTIE_MODULE)
|
||||
# for dlopen, dlsym and dlclose dependancy
|
||||
target_link_libraries(rlottie PRIVATE ${CMAKE_DL_LIBS})
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
target_link_libraries(rlottie
|
||||
|
|
@ -74,6 +95,11 @@ add_subdirectory(inc)
|
|||
add_subdirectory(src)
|
||||
add_subdirectory(example)
|
||||
|
||||
if (LOTTIE_TEST)
|
||||
enable_testing()
|
||||
add_subdirectory(test)
|
||||
endif()
|
||||
|
||||
SET(PREFIX ${CMAKE_INSTALL_PREFIX})
|
||||
SET(EXEC_DIR ${PREFIX})
|
||||
SET(LIBDIR ${LIB_INSTALL_DIR})
|
||||
|
|
@ -2,6 +2,8 @@
|
|||
# rlottie
|
||||
|
||||
[](https://travis-ci.org/Samsung/rlottie)
|
||||
[](https://ci.appveyor.com/project/smohantty/rlottie-mliua)
|
||||
|
||||
|
||||
rlottie is a platform independent standalone c++ library for rendering vector based animations and art in realtime.
|
||||
|
||||
17
submodules/rlottie/rlottie/cmake/config.h.in
Normal file
17
submodules/rlottie/rlottie/cmake/config.h.in
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#cmakedefine LOTTIE_MODULE
|
||||
|
||||
#ifdef LOTTIE_MODULE
|
||||
#define LOTTIE_IMAGE_MODULE_SUPPORT
|
||||
#endif
|
||||
|
||||
#cmakedefine LOTTIE_THREAD
|
||||
|
||||
#ifdef LOTTIE_THREAD
|
||||
#define LOTTIE_THREAD_SUPPORT
|
||||
#endif
|
||||
|
||||
#cmakedefine LOTTIE_CACHE
|
||||
|
||||
#ifdef LOTTIE_CACHE
|
||||
#define LOTTIE_CACHE_SUPPORT
|
||||
#endif
|
||||
|
|
@ -24,16 +24,14 @@
|
|||
#define WIDTH 400
|
||||
#define HEIGHT 400
|
||||
|
||||
Eo *slider = NULL;
|
||||
|
||||
void
|
||||
win_del(void *data, Eo *o, void *ev)
|
||||
win_del(void *data EINA_UNUSED, Eo *o EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
elm_exit();
|
||||
}
|
||||
|
||||
static void
|
||||
btn_clicked_cb(void *data, Eo *obj, void *event_info)
|
||||
btn_clicked_cb(void *data, Eo *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Eo *anim_view = (Eo *) data;
|
||||
const char *text = elm_object_text_get(obj);
|
||||
|
|
@ -53,14 +51,14 @@ btn_clicked_cb(void *data, Eo *obj, void *event_info)
|
|||
}
|
||||
|
||||
static void
|
||||
check_changed_cb(void *data, Eo *obj, void *event_info)
|
||||
check_changed_cb(void *data, Eo *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Eo *anim_view = (Eo *) data;
|
||||
elm_animation_view_auto_repeat_set(anim_view, elm_check_state_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
speed_changed_cb(void *data, Eo *obj, void *event_info)
|
||||
speed_changed_cb(void *data, Eo *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Eo *anim_view = (Eo *) data;
|
||||
double speed = 1;
|
||||
|
|
@ -94,40 +92,40 @@ update_anim_view_state(Eo *anim_view, Eo *label)
|
|||
}
|
||||
|
||||
static void
|
||||
_play_done(void *data, Eo *obj, void *ev)
|
||||
_play_done(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
printf("done!\n");
|
||||
}
|
||||
|
||||
static void
|
||||
_play_updated(void *data, Eo *obj, void *ev)
|
||||
_play_updated(void *data, Eo *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Eo *slider = (Eo *) data;
|
||||
elm_slider_value_set(slider, elm_animation_view_progress_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
_state_update(void *data, Eo *obj, void *ev)
|
||||
_state_update(void *data, Eo *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Eo *label = (Eo *) data;
|
||||
update_anim_view_state(obj, label);
|
||||
}
|
||||
|
||||
static void
|
||||
_play_repeated(void *data, Eo *obj, void *ev)
|
||||
_play_repeated(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
printf("repeated!\n");
|
||||
}
|
||||
|
||||
static void
|
||||
_slider_drag_cb(void *data, Eo *obj, void *ev)
|
||||
_slider_drag_cb(void *data, Eo *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Eo *anim_view = (Eo *) data;
|
||||
elm_animation_view_progress_set(anim_view, elm_slider_value_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
_slider_reset(void *data, Eo *obj, void *ev)
|
||||
_slider_reset(void *data, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Eo *slider = (Eo *) data;
|
||||
elm_slider_value_set(slider, 0);
|
||||
|
|
@ -2,9 +2,16 @@
|
|||
#include <rlottie.h>
|
||||
|
||||
#include<iostream>
|
||||
#include<string>
|
||||
#include<vector>
|
||||
#include<array>
|
||||
|
||||
#ifndef _WIN32
|
||||
#include<libgen.h>
|
||||
#else
|
||||
#include <windows.h>
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
class GifBuilder {
|
||||
public:
|
||||
|
|
@ -78,7 +85,7 @@ public:
|
|||
auto buffer = std::unique_ptr<uint32_t[]>(new uint32_t[w * h]);
|
||||
size_t frameCount = player->totalFrame();
|
||||
|
||||
GifBuilder builder(baseName.data(), w, h, bgColor);
|
||||
GifBuilder builder(gifName.data(), w, h, bgColor);
|
||||
for (size_t i = 0; i < frameCount ; i++) {
|
||||
rlottie::Surface surface(buffer.get(), w, h, w * 4);
|
||||
player->renderSync(i, surface);
|
||||
|
|
@ -89,31 +96,48 @@ public:
|
|||
|
||||
int setup(int argc, char **argv)
|
||||
{
|
||||
if (argc > 1) fileName = argv[1];
|
||||
char *path{nullptr};
|
||||
|
||||
if (argc > 1) path = argv[1];
|
||||
if (argc > 2) bgColor = strtol(argv[2], NULL, 16);
|
||||
|
||||
if (!fileName) return help();
|
||||
if (!path) return help();
|
||||
|
||||
fileName = realpath(fileName, absoloutePath.data());
|
||||
std::array<char, 5000> memory;
|
||||
|
||||
if (!fileName || !jsonFile(fileName) ) return help();
|
||||
#ifdef _WIN32
|
||||
path = _fullpath(memory.data(), path, memory.size());
|
||||
#else
|
||||
path = realpath(path, memory.data());
|
||||
#endif
|
||||
if (!path) return help();
|
||||
|
||||
baseName = absoloutePath;
|
||||
char *base = basename(baseName.data());
|
||||
snprintf(baseName.data(), baseName.size(), "%s.gif",base);
|
||||
fileName = std::string(path);
|
||||
|
||||
if (!jsonFile()) return help();
|
||||
|
||||
gifName = basename(fileName);
|
||||
gifName.append(".gif");
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
std::string basename(const std::string &str)
|
||||
{
|
||||
return str.substr(str.find_last_of("/\\") + 1);
|
||||
}
|
||||
|
||||
bool jsonFile(const char *filename) {
|
||||
const char *dot = strrchr(filename, '.');
|
||||
if(!dot || dot == filename) return false;
|
||||
return !strcmp(dot + 1, "json");
|
||||
bool jsonFile() {
|
||||
std::string extn = ".json";
|
||||
if ( fileName.size() <= extn.size() ||
|
||||
fileName.substr(fileName.size()- extn.size()) != extn )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int result() {
|
||||
std::cout<<"Generated GIF file : "<<baseName.data()<<std::endl;
|
||||
std::cout<<"Generated GIF file : "<<gifName<<std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -123,10 +147,9 @@ private:
|
|||
}
|
||||
|
||||
private:
|
||||
char *fileName{nullptr};
|
||||
int bgColor = 0xffffffff;
|
||||
std::array<char, 5000> absoloutePath;
|
||||
std::array<char, 5000> baseName;
|
||||
std::string fileName;
|
||||
std::string gifName;
|
||||
};
|
||||
|
||||
int
|
||||
|
|
@ -409,7 +409,7 @@ public:
|
|||
const float *data = node->mPath.ptPtr;
|
||||
if (!data) return;
|
||||
|
||||
for (int i = 0; i < node->mPath.elmCount; i++) {
|
||||
for (size_t i = 0; i < node->mPath.elmCount; i++) {
|
||||
switch (node->mPath.elmPtr[i]) {
|
||||
case 0:
|
||||
evas_vg_shape_append_move_to(shape, data[0], data[1]);
|
||||
63
submodules/rlottie/rlottie/example/meson.build
Normal file
63
submodules/rlottie/rlottie/example/meson.build
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
|
||||
override_default = ['warning_level=2', 'werror=false']
|
||||
|
||||
common_source = files('evasapp.cpp')
|
||||
common_source += files('lottieview.cpp')
|
||||
|
||||
demo_sources = files('demo.cpp')
|
||||
demo_sources += common_source
|
||||
|
||||
executable('lottie2gif',
|
||||
'lottie2gif.cpp',
|
||||
include_directories : inc,
|
||||
override_options : override_default,
|
||||
link_with : rlottie_lib)
|
||||
|
||||
demo_dep = dependency('elementary', required : false, disabler : true)
|
||||
|
||||
executable('demo',
|
||||
demo_sources,
|
||||
include_directories : inc,
|
||||
override_options : override_default,
|
||||
link_with : rlottie_lib,
|
||||
dependencies : demo_dep)
|
||||
|
||||
lottieview_test_src = files('lottieviewtest.cpp')
|
||||
lottieview_test_src += common_source
|
||||
|
||||
executable('lottieviewTest',
|
||||
lottieview_test_src,
|
||||
include_directories : inc,
|
||||
override_options : override_default,
|
||||
link_with : rlottie_lib,
|
||||
dependencies : demo_dep)
|
||||
|
||||
uxsample_test_src = files('uxsampletest.cpp')
|
||||
uxsample_test_src += common_source
|
||||
|
||||
executable('uxsampleTest',
|
||||
uxsample_test_src,
|
||||
include_directories : inc,
|
||||
override_options : override_default,
|
||||
link_with : rlottie_lib,
|
||||
dependencies : demo_dep)
|
||||
|
||||
lottieviewer_sources = files('lottieviewer.cpp')
|
||||
lottieviewer_sources += common_source
|
||||
|
||||
executable('lottieviewer',
|
||||
lottieviewer_sources,
|
||||
include_directories : inc,
|
||||
override_options : override_default,
|
||||
link_with : rlottie_lib,
|
||||
dependencies : demo_dep)
|
||||
|
||||
if (meson.get_compiler('cpp').has_header('elementary-1/efl_ui_animation_view.h'))
|
||||
executable('efl_animview',
|
||||
'efl_animview.cpp',
|
||||
include_directories : inc,
|
||||
link_with : rlottie_lib,
|
||||
override_options : override_default,
|
||||
dependencies : demo_dep)
|
||||
endif
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue