mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-05 22:11:22 +00:00
Temp
This commit is contained in:
parent
90f3be0ca8
commit
53b3408cb7
@ -21,65 +21,54 @@ func chatHistoryEntriesForView(location: ChatLocation, view: MessageHistoryView,
|
|||||||
|
|
||||||
var groupBucket: [(Message, Bool, ChatHistoryMessageSelection, ChatMessageEntryAttributes)] = []
|
var groupBucket: [(Message, Bool, ChatHistoryMessageSelection, ChatMessageEntryAttributes)] = []
|
||||||
loop: for entry in view.entries {
|
loop: for entry in view.entries {
|
||||||
switch entry {
|
if entry.message.id.peerId.namespace == Namespaces.Peer.CloudChannel || entry.message.id.peerId.namespace == Namespaces.Peer.CloudUser {
|
||||||
case let .HoleEntry(hole, _):
|
for media in entry.message.media {
|
||||||
if !groupBucket.isEmpty {
|
if let action = media as? TelegramMediaAction {
|
||||||
entries.append(.MessageGroupEntry(groupBucket[0].0.groupInfo!, groupBucket, presentationData))
|
switch action.action {
|
||||||
groupBucket.removeAll()
|
case .channelMigratedFromGroup, .groupMigratedToChannel, .historyCleared:
|
||||||
}
|
continue loop
|
||||||
if view.tagMask == nil {
|
default:
|
||||||
entries.append(.HoleEntry(hole, presentationData))
|
break
|
||||||
}
|
|
||||||
case let .MessageEntry(message, read, _, monthLocation, attributes):
|
|
||||||
if message.id.peerId.namespace == Namespaces.Peer.CloudChannel || message.id.peerId.namespace == Namespaces.Peer.CloudUser {
|
|
||||||
for media in message.media {
|
|
||||||
if let action = media as? TelegramMediaAction {
|
|
||||||
switch action.action {
|
|
||||||
case .channelMigratedFromGroup, .groupMigratedToChannel, .historyCleared:
|
|
||||||
continue loop
|
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var isAdmin = false
|
var isAdmin = false
|
||||||
if let author = message.author {
|
if let author = entry.message.author {
|
||||||
isAdmin = adminIds.contains(author.id)
|
isAdmin = adminIds.contains(author.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
if groupMessages {
|
if groupMessages {
|
||||||
if !groupBucket.isEmpty && message.groupInfo != groupBucket[0].0.groupInfo {
|
if !groupBucket.isEmpty && entry.message.groupInfo != groupBucket[0].0.groupInfo {
|
||||||
entries.append(.MessageGroupEntry(groupBucket[0].0.groupInfo!, groupBucket, presentationData))
|
entries.append(.MessageGroupEntry(groupBucket[0].0.groupInfo!, groupBucket, presentationData))
|
||||||
groupBucket.removeAll()
|
groupBucket.removeAll()
|
||||||
}
|
}
|
||||||
if let _ = message.groupInfo {
|
if let _ = entry.message.groupInfo {
|
||||||
let selection: ChatHistoryMessageSelection
|
let selection: ChatHistoryMessageSelection
|
||||||
if let selectedMessages = selectedMessages {
|
if let selectedMessages = selectedMessages {
|
||||||
selection = .selectable(selected: selectedMessages.contains(message.id))
|
selection = .selectable(selected: selectedMessages.contains(entry.message.id))
|
||||||
} else {
|
|
||||||
selection = .none
|
|
||||||
}
|
|
||||||
groupBucket.append((message, read, selection, ChatMessageEntryAttributes(isAdmin: isAdmin, isContact: attributes.authorIsContact)))
|
|
||||||
} else {
|
|
||||||
let selection: ChatHistoryMessageSelection
|
|
||||||
if let selectedMessages = selectedMessages {
|
|
||||||
selection = .selectable(selected: selectedMessages.contains(message.id))
|
|
||||||
} else {
|
|
||||||
selection = .none
|
|
||||||
}
|
|
||||||
entries.append(.MessageEntry(message, presentationData, read, monthLocation, selection, ChatMessageEntryAttributes(isAdmin: isAdmin, isContact: attributes.authorIsContact)))
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
let selection: ChatHistoryMessageSelection
|
selection = .none
|
||||||
if let selectedMessages = selectedMessages {
|
|
||||||
selection = .selectable(selected: selectedMessages.contains(message.id))
|
|
||||||
} else {
|
|
||||||
selection = .none
|
|
||||||
}
|
|
||||||
entries.append(.MessageEntry(message, presentationData, read, monthLocation, selection, ChatMessageEntryAttributes(isAdmin: isAdmin, isContact: attributes.authorIsContact)))
|
|
||||||
}
|
}
|
||||||
|
groupBucket.append((entry.message, entry.isRead, selection, ChatMessageEntryAttributes(isAdmin: isAdmin, isContact: entry.attributes.authorIsContact)))
|
||||||
|
} else {
|
||||||
|
let selection: ChatHistoryMessageSelection
|
||||||
|
if let selectedMessages = selectedMessages {
|
||||||
|
selection = .selectable(selected: selectedMessages.contains(entry.message.id))
|
||||||
|
} else {
|
||||||
|
selection = .none
|
||||||
|
}
|
||||||
|
entries.append(.MessageEntry(entry.message, presentationData, entry.isRead, entry.monthLocation, selection, ChatMessageEntryAttributes(isAdmin: isAdmin, isContact: entry.attributes.authorIsContact)))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let selection: ChatHistoryMessageSelection
|
||||||
|
if let selectedMessages = selectedMessages {
|
||||||
|
selection = .selectable(selected: selectedMessages.contains(entry.message.id))
|
||||||
|
} else {
|
||||||
|
selection = .none
|
||||||
|
}
|
||||||
|
entries.append(.MessageEntry(entry.message, presentationData, entry.isRead, entry.monthLocation, selection, ChatMessageEntryAttributes(isAdmin: isAdmin, isContact: entry.attributes.authorIsContact)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -132,76 +132,71 @@ private func galleryMessageCaptionText(_ message: Message) -> String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func galleryItemForEntry(context: AccountContext, presentationData: PresentationData, entry: MessageHistoryEntry, isCentral: Bool = false, streamVideos: Bool, loopVideos: Bool = false, hideControls: Bool = false, fromPlayingVideo: Bool = false, landscape: Bool = false, tempFilePath: String? = nil, playbackCompleted: @escaping () -> Void = {}, performAction: @escaping (GalleryControllerInteractionTapAction) -> Void = { _ in }, openActionOptions: @escaping (GalleryControllerInteractionTapAction) -> Void = { _ in }) -> GalleryItem? {
|
func galleryItemForEntry(context: AccountContext, presentationData: PresentationData, entry: MessageHistoryEntry, isCentral: Bool = false, streamVideos: Bool, loopVideos: Bool = false, hideControls: Bool = false, fromPlayingVideo: Bool = false, landscape: Bool = false, tempFilePath: String? = nil, playbackCompleted: @escaping () -> Void = {}, performAction: @escaping (GalleryControllerInteractionTapAction) -> Void = { _ in }, openActionOptions: @escaping (GalleryControllerInteractionTapAction) -> Void = { _ in }) -> GalleryItem? {
|
||||||
switch entry {
|
if let (media, mediaImage) = mediaForMessage(message: entry.message) {
|
||||||
case let .MessageEntry(message, _, location, _, _):
|
if let _ = media as? TelegramMediaImage {
|
||||||
if let (media, mediaImage) = mediaForMessage(message: message) {
|
return ChatImageGalleryItem(context: context, presentationData: presentationData, message: entry.message, location: entry.location, performAction: performAction, openActionOptions: openActionOptions)
|
||||||
if let _ = media as? TelegramMediaImage {
|
} else if let file = media as? TelegramMediaFile {
|
||||||
return ChatImageGalleryItem(context: context, presentationData: presentationData, message: message, location: location, performAction: performAction, openActionOptions: openActionOptions)
|
if file.isVideo {
|
||||||
} else if let file = media as? TelegramMediaFile {
|
let content: UniversalVideoContent
|
||||||
if file.isVideo {
|
if file.isAnimated {
|
||||||
let content: UniversalVideoContent
|
content = NativeVideoContent(id: .message(entry.message.id, entry.message.stableId, file.fileId), fileReference: .message(message: MessageReference(entry.message), media: file), imageReference: mediaImage.flatMap({ ImageMediaReference.message(message: MessageReference(entry.message), media: $0) }), loopVideo: true, enableSound: false, tempFilePath: tempFilePath)
|
||||||
if file.isAnimated {
|
} else {
|
||||||
content = NativeVideoContent(id: .message(message.id, message.stableId, file.fileId), fileReference: .message(message: MessageReference(message), media: file), imageReference: mediaImage.flatMap({ ImageMediaReference.message(message: MessageReference(message), media: $0) }), loopVideo: true, enableSound: false, tempFilePath: tempFilePath)
|
if true || (file.mimeType == "video/mpeg4" || file.mimeType == "video/mov" || file.mimeType == "video/mp4") {
|
||||||
} else {
|
content = NativeVideoContent(id: .message(entry.message.id, entry.message.stableId, file.fileId), fileReference: .message(message: MessageReference(entry.message), media: file), imageReference: mediaImage.flatMap({ ImageMediaReference.message(message: MessageReference(entry.message), media: $0) }), streamVideo: .conservative, loopVideo: loopVideos, tempFilePath: tempFilePath)
|
||||||
if true || (file.mimeType == "video/mpeg4" || file.mimeType == "video/mov" || file.mimeType == "video/mp4") {
|
|
||||||
content = NativeVideoContent(id: .message(message.id, message.stableId, file.fileId), fileReference: .message(message: MessageReference(message), media: file), imageReference: mediaImage.flatMap({ ImageMediaReference.message(message: MessageReference(message), media: $0) }), streamVideo: .conservative, loopVideo: loopVideos, tempFilePath: tempFilePath)
|
|
||||||
} else {
|
|
||||||
content = PlatformVideoContent(id: .message(message.id, message.stableId, file.fileId), fileReference: .message(message: MessageReference(message), media: file), streamVideo: streamVideos, loopVideo: loopVideos)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var entities: [MessageTextEntity] = []
|
|
||||||
for attribute in message.attributes {
|
|
||||||
if let attribute = attribute as? TextEntitiesMessageAttribute {
|
|
||||||
entities = attribute.entities
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let caption = galleryCaptionStringWithAppliedEntities(galleryMessageCaptionText(message), entities: entities)
|
|
||||||
return UniversalVideoGalleryItem(context: context, presentationData: presentationData, content: content, originData: GalleryItemOriginData(title: message.author?.displayTitle, timestamp: message.timestamp), indexData: location.flatMap { GalleryItemIndexData(position: Int32($0.index), totalCount: Int32($0.count)) }, contentInfo: .message(message), caption: caption, hideControls: hideControls, fromPlayingVideo: fromPlayingVideo, landscape: landscape, playbackCompleted: playbackCompleted, performAction: performAction, openActionOptions: openActionOptions)
|
|
||||||
} else {
|
} else {
|
||||||
if file.mimeType.hasPrefix("image/") && file.mimeType != "image/gif" {
|
content = PlatformVideoContent(id: .message(entry.message.id, entry.message.stableId, file.fileId), fileReference: .message(message: MessageReference(entry.message), media: file), streamVideo: streamVideos, loopVideo: loopVideos)
|
||||||
var pixelsCount: Int = 0
|
|
||||||
if let dimensions = file.dimensions {
|
|
||||||
pixelsCount = Int(dimensions.width) * Int(dimensions.height)
|
|
||||||
}
|
|
||||||
if (file.size == nil || file.size! < 4 * 1024 * 1024) && pixelsCount < 4096 * 4096 {
|
|
||||||
return ChatImageGalleryItem(context: context, presentationData: presentationData, message: message, location: location, performAction: performAction, openActionOptions: openActionOptions)
|
|
||||||
} else {
|
|
||||||
return ChatDocumentGalleryItem(context: context, presentationData: presentationData, message: message, location: location)
|
|
||||||
}
|
|
||||||
} else if internalDocumentItemSupportsMimeType(file.mimeType, fileName: file.fileName) {
|
|
||||||
return ChatDocumentGalleryItem(context: context, presentationData: presentationData, message: message, location: location)
|
|
||||||
} else {
|
|
||||||
return ChatExternalFileGalleryItem(context: context, presentationData: presentationData, message: message, location: location)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if let webpage = media as? TelegramMediaWebpage, case let .Loaded(webpageContent) = webpage.content {
|
|
||||||
var content: UniversalVideoContent?
|
|
||||||
switch websiteType(of: webpageContent) {
|
|
||||||
case .instagram where webpageContent.file != nil && webpageContent.image != nil && webpageContent.file!.isVideo:
|
|
||||||
content = NativeVideoContent(id: .message(message.id, message.stableId, webpageContent.file?.id ?? webpage.webpageId), fileReference: .message(message: MessageReference(message), media: webpageContent.file!), imageReference: webpageContent.image.flatMap({ ImageMediaReference.message(message: MessageReference(message), media: $0) }), streamVideo: .conservative, enableSound: true)
|
|
||||||
default:
|
|
||||||
if let embedUrl = webpageContent.embedUrl, let image = webpageContent.image {
|
|
||||||
if let file = webpageContent.file, file.isVideo {
|
|
||||||
content = NativeVideoContent(id: .message(message.id, message.stableId, file.fileId), fileReference: .message(message: MessageReference(message), media: file), imageReference: mediaImage.flatMap({ ImageMediaReference.message(message: MessageReference(message), media: $0) }), streamVideo: .conservative, loopVideo: loopVideos, tempFilePath: tempFilePath)
|
|
||||||
} else if URL(string: embedUrl)?.pathExtension == "mp4" {
|
|
||||||
content = SystemVideoContent(url: embedUrl, imageReference: .webPage(webPage: WebpageReference(webpage), media: image), dimensions: webpageContent.embedSize ?? CGSize(width: 640.0, height: 640.0), duration: Int32(webpageContent.duration ?? 0))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if content == nil, let webEmbedContent = WebEmbedVideoContent(webPage: webpage, webpageContent: webpageContent) {
|
|
||||||
content = webEmbedContent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if let content = content {
|
|
||||||
return UniversalVideoGalleryItem(context: context, presentationData: presentationData, content: content, originData: GalleryItemOriginData(title: message.author?.displayTitle, timestamp: message.timestamp), indexData: location.flatMap { GalleryItemIndexData(position: Int32($0.index), totalCount: Int32($0.count)) }, contentInfo: .message(message), caption: NSAttributedString(string: ""), fromPlayingVideo: fromPlayingVideo, landscape: landscape, performAction: performAction, openActionOptions: openActionOptions)
|
|
||||||
} else {
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var entities: [MessageTextEntity] = []
|
||||||
|
for attribute in entry.message.attributes {
|
||||||
|
if let attribute = attribute as? TextEntitiesMessageAttribute {
|
||||||
|
entities = attribute.entities
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let caption = galleryCaptionStringWithAppliedEntities(galleryMessageCaptionText(entry.message), entities: entities)
|
||||||
|
return UniversalVideoGalleryItem(context: context, presentationData: presentationData, content: content, originData: GalleryItemOriginData(title: entry.message.author?.displayTitle, timestamp: entry.message.timestamp), indexData: entry.location.flatMap { GalleryItemIndexData(position: Int32($0.index), totalCount: Int32($0.count)) }, contentInfo: .message(entry.message), caption: caption, hideControls: hideControls, fromPlayingVideo: fromPlayingVideo, landscape: landscape, playbackCompleted: playbackCompleted, performAction: performAction, openActionOptions: openActionOptions)
|
||||||
|
} else {
|
||||||
|
if file.mimeType.hasPrefix("image/") && file.mimeType != "image/gif" {
|
||||||
|
var pixelsCount: Int = 0
|
||||||
|
if let dimensions = file.dimensions {
|
||||||
|
pixelsCount = Int(dimensions.width) * Int(dimensions.height)
|
||||||
|
}
|
||||||
|
if (file.size == nil || file.size! < 4 * 1024 * 1024) && pixelsCount < 4096 * 4096 {
|
||||||
|
return ChatImageGalleryItem(context: context, presentationData: presentationData, message: entry.message, location: entry.location, performAction: performAction, openActionOptions: openActionOptions)
|
||||||
|
} else {
|
||||||
|
return ChatDocumentGalleryItem(context: context, presentationData: presentationData, message: entry.message, location: entry.location)
|
||||||
|
}
|
||||||
|
} else if internalDocumentItemSupportsMimeType(file.mimeType, fileName: file.fileName) {
|
||||||
|
return ChatDocumentGalleryItem(context: context, presentationData: presentationData, message: entry.message, location: entry.location)
|
||||||
|
} else {
|
||||||
|
return ChatExternalFileGalleryItem(context: context, presentationData: presentationData, message: entry.message, location: entry.location)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
default:
|
} else if let webpage = media as? TelegramMediaWebpage, case let .Loaded(webpageContent) = webpage.content {
|
||||||
break
|
var content: UniversalVideoContent?
|
||||||
|
switch websiteType(of: webpageContent) {
|
||||||
|
case .instagram where webpageContent.file != nil && webpageContent.image != nil && webpageContent.file!.isVideo:
|
||||||
|
content = NativeVideoContent(id: .message(entry.message.id, entry.message.stableId, webpageContent.file?.id ?? webpage.webpageId), fileReference: .message(message: MessageReference(entry.message), media: webpageContent.file!), imageReference: webpageContent.image.flatMap({ ImageMediaReference.message(message: MessageReference(entry.message), media: $0) }), streamVideo: .conservative, enableSound: true)
|
||||||
|
default:
|
||||||
|
if let embedUrl = webpageContent.embedUrl, let image = webpageContent.image {
|
||||||
|
if let file = webpageContent.file, file.isVideo {
|
||||||
|
content = NativeVideoContent(id: .message(entry.message.id, entry.message.stableId, file.fileId), fileReference: .message(message: MessageReference(entry.message), media: file), imageReference: mediaImage.flatMap({ ImageMediaReference.message(message: MessageReference(entry.message), media: $0) }), streamVideo: .conservative, loopVideo: loopVideos, tempFilePath: tempFilePath)
|
||||||
|
} else if URL(string: embedUrl)?.pathExtension == "mp4" {
|
||||||
|
content = SystemVideoContent(url: embedUrl, imageReference: .webPage(webPage: WebpageReference(webpage), media: image), dimensions: webpageContent.embedSize ?? CGSize(width: 640.0, height: 640.0), duration: Int32(webpageContent.duration ?? 0))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if content == nil, let webEmbedContent = WebEmbedVideoContent(webPage: webpage, webpageContent: webpageContent) {
|
||||||
|
content = webEmbedContent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let content = content {
|
||||||
|
return UniversalVideoGalleryItem(context: context, presentationData: presentationData, content: content, originData: GalleryItemOriginData(title: entry.message.author?.displayTitle, timestamp: entry.message.timestamp), indexData: entry.location.flatMap { GalleryItemIndexData(position: Int32($0.index), totalCount: Int32($0.count)) }, contentInfo: .message(entry.message), caption: NSAttributedString(string: ""), fromPlayingVideo: fromPlayingVideo, landscape: landscape, performAction: performAction, openActionOptions: openActionOptions)
|
||||||
|
} else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user