Skip to content

Commit b28ae37

Browse files
author
overtake
committed
no message
1 parent d9c9cd0 commit b28ae37

File tree

68 files changed

+921
-350
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+921
-350
lines changed

‎Telegram-Mac.xcworkspace/xcuserdata/keepcoder.xcuserdatad/xcdebugger/Expressions.xcexplist

+8
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,14 @@
220220
<ContextState
221221
contextName = "applyPaints(_:for:imageSize:):EditImageCanvasController.swift">
222222
</ContextState>
223+
<ContextState
224+
contextName = "closure #5 in SearchController.viewDidLoad():SearchController.swift">
225+
<PersistentStrings>
226+
<PersistentString
227+
value = "cachedData">
228+
</PersistentString>
229+
</PersistentStrings>
230+
</ContextState>
223231
<ContextState
224232
contextName = "closure #1 in closure #5 in EditThemeController(context:telegramTheme:presentation:):EditThemeController.swift">
225233
<PersistentStrings>

‎Telegram-Mac/Appearance.swift

+3-1
Original file line numberDiff line numberDiff line change
@@ -2303,7 +2303,9 @@ private func generateIcons(from palette: ColorPalette, bubbled: Bool) -> Telegra
23032303
chat_reply_count_overlay: { NSImage(named: "Icon_ChatRepliesCount")!.precomposed(.white, flipVertical: true) },
23042304
channel_comments_bubble: { NSImage(named: "Icon_ChannelComments_Bubble")!.precomposed(palette.accentIconBubble_incoming, flipVertical: true) },
23052305
channel_comments_bubble_next: { NSImage(named: "Icon_ChannelComments_Next")!.precomposed(palette.accentIconBubble_incoming, flipVertical: true) },
2306-
channel_comments_list: { NSImage(named: "Icon_ChannelComments")!.precomposed(palette.accent, flipVertical: true) }
2306+
channel_comments_list: { NSImage(named: "Icon_ChannelComments")!.precomposed(palette.accent, flipVertical: true) },
2307+
channel_comments_overlay: { NSImage(named: "Icon_ChannelComments_Bubble")!.precomposed(palette.accent, flipVertical: true) },
2308+
chat_replies_avatar: { NSImage(named: "Icon_RepliesChat")!.precomposed() }
23072309

23082310
)
23092311

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"images" : [
3+
{
4+
"idiom" : "universal",
5+
"filename" : "Icon_RepliesChat.png",
6+
"scale" : "1x"
7+
},
8+
{
9+
"idiom" : "universal",
10+
"filename" : "Icon_RepliesChat@2x.png",
11+
"scale" : "2x"
12+
},
13+
{
14+
"idiom" : "universal",
15+
"scale" : "3x"
16+
}
17+
],
18+
"info" : {
19+
"version" : 1,
20+
"author" : "xcode"
21+
}
22+
}

‎Telegram-Mac/AudioPlayerController.swift

+52-29
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,23 @@ enum APEntry : Comparable, Identifiable {
306306
func isEqual(to message:Message) -> Bool {
307307
return stableId == message.chatStableId
308308
}
309+
310+
func isEqual(to messageId: MessageId) -> Bool {
311+
switch self {
312+
case let .song(message):
313+
return message.id == messageId
314+
case let .single(wrapper):
315+
if let stableId = wrapper.id.base as? ChatHistoryEntryId {
316+
switch stableId {
317+
case let .message(message):
318+
return message.id == messageId
319+
default:
320+
break
321+
}
322+
}
323+
}
324+
return false
325+
}
309326

310327
var index: MessageIndex {
311328
switch self {
@@ -770,13 +787,8 @@ class APController : NSResponder {
770787
itemDisposable.set(item.pullResource().start(next: { [weak self] resource in
771788
if let strongSelf = self {
772789
if resource.complete {
773-
// strongSelf.player = .player(for: resource.path)
774-
// strongSelf.player?.delegate = strongSelf
775-
// strongSelf.player?.play()
776-
777-
778790
let items = strongSelf.items.modify({$0}).filter({$0 is APSongItem}).map{$0 as! APSongItem}
779-
if let index = items.index(of: item) {
791+
if let index = items.firstIndex(of: item) {
780792
let previous = index - 1
781793
let next = index + 1
782794
if previous >= 0 {
@@ -928,7 +940,7 @@ class APController : NSResponder {
928940
}
929941

930942
func remove(listener:NSObject) {
931-
let index = listeners.index(where: { (weakValue) -> Bool in
943+
let index = listeners.firstIndex(where: { (weakValue) -> Bool in
932944
return listener == weakValue.value
933945
})
934946
if let index = index {
@@ -941,10 +953,11 @@ class APChatController : APController {
941953

942954
private let peerId:PeerId
943955
private let index:MessageIndex?
944-
945-
init(context: AccountContext, peerId: PeerId, index: MessageIndex?, streamable: Bool, baseRate: Double = 1.0) {
956+
let messages: [Message]
957+
init(context: AccountContext, peerId: PeerId, index: MessageIndex?, streamable: Bool, baseRate: Double = 1.0, messages: [Message] = []) {
946958
self.peerId = peerId
947959
self.index = index
960+
self.messages = messages
948961
super.init(context: context, streamable: streamable, baseRate: baseRate)
949962
}
950963

@@ -960,27 +973,37 @@ class APChatController : APController {
960973
let account = self.context.account
961974
let peerId = self.peerId
962975
let index = self.index
963-
let apply = history.get() |> distinctUntilChanged |> mapToSignal { location -> Signal<(MessageHistoryView, ViewUpdateType, InitialMessageHistoryData?), NoError> in
964-
switch location {
965-
case .initial:
966-
return account.viewTracker.aroundMessageHistoryViewForLocation(.peer(peerId), index: MessageHistoryAnchorIndex.upperBound, anchorIndex: MessageHistoryAnchorIndex.upperBound, count: 100, fixedCombinedReadStates: nil, tagMask: tagMask, orderStatistics: [], additionalData: [])
967-
case let .index(index):
968-
return account.viewTracker.aroundMessageHistoryViewForLocation(.peer(peerId), index: MessageHistoryAnchorIndex.message(index), anchorIndex: MessageHistoryAnchorIndex.message(index), count: 100, fixedCombinedReadStates: nil, tagMask: tagMask, orderStatistics: [], additionalData: [])
969-
}
970-
971-
} |> map { view -> (APHistory?,APHistory) in
976+
let apply: Signal<APTransition, NoError>
977+
if messages.isEmpty {
978+
apply = history.get() |> distinctUntilChanged |> mapToSignal { location -> Signal<(MessageHistoryView, ViewUpdateType, InitialMessageHistoryData?), NoError> in
979+
switch location {
980+
case .initial:
981+
return account.viewTracker.aroundMessageHistoryViewForLocation(.peer(peerId), index: MessageHistoryAnchorIndex.upperBound, anchorIndex: MessageHistoryAnchorIndex.upperBound, count: 100, fixedCombinedReadStates: nil, tagMask: tagMask, orderStatistics: [], additionalData: [])
982+
case let .index(index):
983+
return account.viewTracker.aroundMessageHistoryViewForLocation(.peer(peerId), index: MessageHistoryAnchorIndex.message(index), anchorIndex: MessageHistoryAnchorIndex.message(index), count: 100, fixedCombinedReadStates: nil, tagMask: tagMask, orderStatistics: [], additionalData: [])
984+
}
985+
986+
} |> map { view -> (APHistory?,APHistory) in
987+
var entries:[APEntry] = []
988+
for viewEntry in view.0.entries {
989+
entries.append(.song(viewEntry.message))
990+
}
991+
992+
let new = APHistory(original: view.0, filtred: entries)
993+
return (list.swap(new),new)
994+
}
995+
|> mapToQueue { view -> Signal<APTransition, NoError> in
996+
let transition = prepareItems(from: view.0?.filtred, to: view.1.filtred, account: account)
997+
return transition
998+
} |> deliverOnMainQueue
999+
} else {
9721000
var entries:[APEntry] = []
973-
for viewEntry in view.0.entries {
974-
entries.append(.song(viewEntry.message))
1001+
for message in messages {
1002+
entries.append(.song(message))
9751003
}
976-
977-
let new = APHistory(original: view.0, filtred: entries)
978-
return (list.swap(new),new)
1004+
apply = prepareItems(from: [], to: entries, account: account) |> deliverOnMainQueue
9791005
}
980-
|> mapToQueue { view -> Signal<APTransition, NoError> in
981-
let transition = prepareItems(from: view.0?.filtred, to: view.1.filtred, account: account)
982-
return transition
983-
} |> deliverOnMainQueue
1006+
9841007

9851008
let first:Atomic<Bool> = Atomic(value:true)
9861009
disposable.set(apply.start(next: {[weak self] (transition) in
@@ -1016,8 +1039,8 @@ class APChatController : APController {
10161039

10171040
class APChatMusicController : APChatController {
10181041

1019-
init(context: AccountContext, peerId: PeerId, index: MessageIndex?, baseRate: Double = 1.0) {
1020-
super.init(context: context, peerId: peerId, index: index, streamable: true, baseRate: baseRate)
1042+
init(context: AccountContext, peerId: PeerId, index: MessageIndex?, baseRate: Double = 1.0, messages: [Message] = []) {
1043+
super.init(context: context, peerId: peerId, index: index, streamable: true, baseRate: baseRate, messages: messages)
10211044
}
10221045

10231046
required init?(coder: NSCoder) {

‎Telegram-Mac/ChannelCommentsControls.swift

+10-2
Original file line numberDiff line numberDiff line change
@@ -232,13 +232,21 @@ final class ChannelCommentsSmallControl : Control {
232232
if let title = renderData.title {
233233
var iconFrame = focus(size)
234234
iconFrame.origin.y = 5
235-
ctx.draw(theme.chat_comments_overlay, in: iconFrame)
235+
if theme.bubbled && theme.backgroundMode.hasWallpaper {
236+
ctx.draw(theme.chat_comments_overlay, in: iconFrame)
237+
} else {
238+
ctx.draw(theme.icons.channel_comments_overlay, in: iconFrame)
239+
}
236240
var titleFrame = focus(title.0.size)
237241
titleFrame.origin.y = iconFrame.maxY
238242
title.1.draw(titleFrame, in: ctx, backingScaleFactor: backingScaleFactor, backgroundColor: .clear)
239243
} else {
240244
let iconFrame = focus(size)
241-
ctx.draw(theme.chat_comments_overlay, in: iconFrame)
245+
if theme.bubbled && theme.backgroundMode.hasWallpaper {
246+
ctx.draw(theme.chat_comments_overlay, in: iconFrame)
247+
} else {
248+
ctx.draw(theme.icons.channel_comments_overlay, in: iconFrame)
249+
}
242250
}
243251
}
244252

+127
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
//
2+
// ChatCommentsHeaderItem.swift
3+
// Telegram
4+
//
5+
// Created by Mikhail Filimonov on 15/09/2020.
6+
// Copyright © 2020 Telegram. All rights reserved.
7+
//
8+
9+
10+
import Cocoa
11+
import TGUIKit
12+
import TelegramCore
13+
import SyncCore
14+
import Postbox
15+
16+
17+
18+
class ChatCommentsHeaderItem : TableStickItem {
19+
20+
private let entry:ChatHistoryEntry
21+
fileprivate let chatInteraction:ChatInteraction?
22+
let isBubbled: Bool
23+
let layout:TextViewLayout
24+
init(_ initialSize:NSSize, _ entry:ChatHistoryEntry, interaction: ChatInteraction, theme: TelegramPresentationTheme) {
25+
self.entry = entry
26+
self.isBubbled = entry.renderType == .bubble
27+
self.chatInteraction = interaction
28+
29+
30+
let text: String
31+
switch entry {
32+
case let .commentsHeader(empty, _, _):
33+
if empty {
34+
text = L10n.chatCommentsHeaderEmpty
35+
} else {
36+
text = L10n.chatCommentsHeaderFull
37+
}
38+
default:
39+
text = ""
40+
}
41+
42+
self.layout = TextViewLayout(.initialize(string: text, color: theme.chatServiceItemTextColor, font: .medium(theme.fontSize)), maximumNumberOfLines: 1, truncationType: .end, alignment: .center)
43+
44+
45+
super.init(initialSize)
46+
}
47+
48+
override var canBeAnchor: Bool {
49+
return false
50+
}
51+
52+
required init(_ initialSize: NSSize) {
53+
entry = .commentsHeader(true, MessageIndex.absoluteLowerBound(), .list)
54+
self.isBubbled = false
55+
self.layout = TextViewLayout(NSAttributedString())
56+
self.chatInteraction = nil
57+
super.init(initialSize)
58+
}
59+
60+
override func makeSize(_ width: CGFloat, oldWidth:CGFloat) -> Bool {
61+
let success = super.makeSize(width, oldWidth: oldWidth)
62+
layout.measure(width: width - 40)
63+
return success
64+
}
65+
66+
override var stableId: AnyHashable {
67+
return entry.stableId
68+
}
69+
70+
override var height: CGFloat {
71+
return 30
72+
}
73+
74+
override func viewClass() -> AnyClass {
75+
return ChatCommentsHeaderView.self
76+
}
77+
78+
79+
}
80+
81+
class ChatCommentsHeaderView : TableRowView {
82+
private let textView:TextView
83+
private let containerView: Control = Control()
84+
private var borderView: View = View()
85+
required init(frame frameRect: NSRect) {
86+
self.textView = TextView()
87+
self.textView.isSelectable = false
88+
self.containerView.wantsLayer = true
89+
self.textView.disableBackgroundDrawing = true
90+
super.init(frame: frameRect)
91+
addSubview(textView)
92+
}
93+
94+
95+
required init?(coder: NSCoder) {
96+
fatalError("init(coder:) has not been implemented")
97+
}
98+
99+
override var backdorColor: NSColor {
100+
return .clear
101+
}
102+
103+
104+
override func updateColors() {
105+
super.updateColors()
106+
textView.backgroundColor = theme.chatServiceItemColor
107+
}
108+
109+
override func draw(_ layer: CALayer, in ctx: CGContext) {
110+
super.draw(layer, in: ctx)
111+
}
112+
113+
override func layout() {
114+
super.layout()
115+
textView.center()
116+
}
117+
118+
override func set(item: TableRowItem, animated: Bool) {
119+
if let item = item as? ChatCommentsHeaderItem {
120+
textView.update(item.layout)
121+
textView.setFrameSize(item.layout.layoutSize.width + 16, item.layout.layoutSize.height + 6)
122+
textView.layer?.cornerRadius = textView.frame.height / 2
123+
self.needsLayout = true
124+
}
125+
super.set(item: item, animated:animated)
126+
}
127+
}

0 commit comments

Comments
 (0)