mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-17 03:40:18 +00:00
Stories
This commit is contained in:
parent
e8fe2b0042
commit
ab3d486026
@ -938,7 +938,7 @@ public final class PresentationGroupCallImpl: PresentationGroupCall {
|
|||||||
messageLifetime = Int32(value)
|
messageLifetime = Int32(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
if isStream {
|
if streamPeerId != nil {
|
||||||
messageLifetime = Int32.max
|
messageLifetime = Int32.max
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -948,7 +948,7 @@ public final class PresentationGroupCallImpl: PresentationGroupCall {
|
|||||||
reference: .id(id: initialCall.description.id, accessHash: initialCall.description.accessHash),
|
reference: .id(id: initialCall.description.id, accessHash: initialCall.description.accessHash),
|
||||||
e2eContext: self.e2eContext,
|
e2eContext: self.e2eContext,
|
||||||
messageLifetime: messageLifetime,
|
messageLifetime: messageLifetime,
|
||||||
isLiveStream: isStream
|
isLiveStream: streamPeerId != nil
|
||||||
)
|
)
|
||||||
self.messagesStatePromise.set(self.messagesContext!.state)
|
self.messagesStatePromise.set(self.messagesContext!.state)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -126,7 +126,7 @@ private final class BadgeComponent: Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
|
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
|
||||||
if self.badgeView.frame.contains(point) {
|
if self.isUserInteractionEnabled && self.badgeView.frame.contains(point) {
|
||||||
return self
|
return self
|
||||||
} else {
|
} else {
|
||||||
return nil
|
return nil
|
||||||
@ -1401,7 +1401,18 @@ private final class ChatSendStarsScreenComponent: Component {
|
|||||||
}
|
}
|
||||||
let sideInset: CGFloat = floor((availableSize.width - fillingSize) * 0.5) + 16.0
|
let sideInset: CGFloat = floor((availableSize.width - fillingSize) * 0.5) + 16.0
|
||||||
|
|
||||||
|
var isOnlyDisplay = false
|
||||||
|
switch component.initialData.subjectInitialData {
|
||||||
|
case let .react(reactData):
|
||||||
|
if case let .liveStream(_, _, _, _, _, isOnlyDisplayValue) = reactData.reactSubject {
|
||||||
|
isOnlyDisplay = isOnlyDisplayValue
|
||||||
|
}
|
||||||
|
case .liveStreamMessage:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
let context = component.context
|
let context = component.context
|
||||||
|
if !isOnlyDisplay {
|
||||||
let balanceSize = self.balanceOverlay.update(
|
let balanceSize = self.balanceOverlay.update(
|
||||||
transition: .immediate,
|
transition: .immediate,
|
||||||
component: AnyComponent(
|
component: AnyComponent(
|
||||||
@ -1456,6 +1467,7 @@ private final class ChatSendStarsScreenComponent: Component {
|
|||||||
}
|
}
|
||||||
view.frame = CGRect(origin: CGPoint(x: floorToScreenPixels((availableSize.width - balanceSize.width) / 2.0), y: environment.statusBarHeight + 5.0), size: balanceSize)
|
view.frame = CGRect(origin: CGPoint(x: floorToScreenPixels((availableSize.width - balanceSize.width) / 2.0), y: environment.statusBarHeight + 5.0), size: balanceSize)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if self.component == nil {
|
if self.component == nil {
|
||||||
self.balance = component.initialData.balance
|
self.balance = component.initialData.balance
|
||||||
@ -1500,7 +1512,7 @@ private final class ChatSendStarsScreenComponent: Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
case let .liveStream(_, _, _, _, availableSendAsPeers):
|
case let .liveStream(_, _, _, _, availableSendAsPeers, _):
|
||||||
self.channelsForPublicReaction = availableSendAsPeers.filter({ $0.id != reactData.myPeer.id })
|
self.channelsForPublicReaction = availableSendAsPeers.filter({ $0.id != reactData.myPeer.id })
|
||||||
}
|
}
|
||||||
case let .liveStreamMessage(liveStreamMessageData):
|
case let .liveStreamMessage(liveStreamMessageData):
|
||||||
@ -1653,7 +1665,7 @@ private final class ChatSendStarsScreenComponent: Component {
|
|||||||
self.isPastTopCutoff = nil
|
self.isPastTopCutoff = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if case let .liveStream(_, _, _, liveChatMessageParams, _) = reactData.reactSubject {
|
if case let .liveStream(_, _, _, liveChatMessageParams, _, _) = reactData.reactSubject {
|
||||||
let color = GroupCallMessagesContext.getStarAmountParamMapping(params: liveChatMessageParams, value: Int64(self.amount.realValue)).color ?? GroupCallMessagesContext.Message.Color(rawValue: 0x985FDC)
|
let color = GroupCallMessagesContext.getStarAmountParamMapping(params: liveChatMessageParams, value: Int64(self.amount.realValue)).color ?? GroupCallMessagesContext.Message.Color(rawValue: 0x985FDC)
|
||||||
sliderColor = StoryLiveChatMessageComponent.getMessageColor(color: color)
|
sliderColor = StoryLiveChatMessageComponent.getMessageColor(color: color)
|
||||||
}
|
}
|
||||||
@ -1680,6 +1692,10 @@ private final class ChatSendStarsScreenComponent: Component {
|
|||||||
self.scrollContentView.addSubview(self.badgeStars)
|
self.scrollContentView.addSubview(self.badgeStars)
|
||||||
self.scrollContentView.addSubview(sliderBackgroundView)
|
self.scrollContentView.addSubview(sliderBackgroundView)
|
||||||
self.scrollContentView.addSubview(sliderView)
|
self.scrollContentView.addSubview(sliderView)
|
||||||
|
|
||||||
|
if isOnlyDisplay {
|
||||||
|
sliderView.isUserInteractionEnabled = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
transition.setFrame(view: sliderView, frame: sliderFrame)
|
transition.setFrame(view: sliderView, frame: sliderFrame)
|
||||||
|
|
||||||
@ -1703,6 +1719,9 @@ private final class ChatSendStarsScreenComponent: Component {
|
|||||||
var badgeFrame = CGRect(origin: CGPoint(x: sliderForegroundFrame.minX + sliderForegroundFrame.width - floorToScreenPixels(sliderMinWidth * 0.5), y: sliderForegroundFrame.minY - 8.0), size: badgeSize)
|
var badgeFrame = CGRect(origin: CGPoint(x: sliderForegroundFrame.minX + sliderForegroundFrame.width - floorToScreenPixels(sliderMinWidth * 0.5), y: sliderForegroundFrame.minY - 8.0), size: badgeSize)
|
||||||
if let badgeView = self.badge.view as? BadgeComponent.View {
|
if let badgeView = self.badge.view as? BadgeComponent.View {
|
||||||
if badgeView.superview == nil {
|
if badgeView.superview == nil {
|
||||||
|
if isOnlyDisplay {
|
||||||
|
badgeView.isUserInteractionEnabled = false
|
||||||
|
}
|
||||||
self.scrollContentView.insertSubview(badgeView, belowSubview: self.badgeStars)
|
self.scrollContentView.insertSubview(badgeView, belowSubview: self.badgeStars)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2238,7 +2257,7 @@ private final class ChatSendStarsScreenComponent: Component {
|
|||||||
|
|
||||||
var peerColor: UIColor = UIColor(rgb: 0xFFB10D)
|
var peerColor: UIColor = UIColor(rgb: 0xFFB10D)
|
||||||
var topPlace: Int?
|
var topPlace: Int?
|
||||||
if case let .liveStream(_, _, _, liveChatMessageParams, _) = reactData.reactSubject {
|
if case let .liveStream(_, _, _, liveChatMessageParams, _, _) = reactData.reactSubject {
|
||||||
let color = GroupCallMessagesContext.getStarAmountParamMapping(params: liveChatMessageParams, value: Int64(topPeer.count)).color ?? GroupCallMessagesContext.Message.Color(rawValue: 0x985FDC)
|
let color = GroupCallMessagesContext.getStarAmountParamMapping(params: liveChatMessageParams, value: Int64(topPeer.count)).color ?? GroupCallMessagesContext.Message.Color(rawValue: 0x985FDC)
|
||||||
peerColor = StoryLiveChatMessageComponent.getMessageColor(color: color)
|
peerColor = StoryLiveChatMessageComponent.getMessageColor(color: color)
|
||||||
topPlace = validIds.count - 1
|
topPlace = validIds.count - 1
|
||||||
@ -2488,7 +2507,12 @@ private final class ChatSendStarsScreenComponent: Component {
|
|||||||
let buttonString: String
|
let buttonString: String
|
||||||
switch component.initialData.subjectInitialData {
|
switch component.initialData.subjectInitialData {
|
||||||
case .react:
|
case .react:
|
||||||
|
if isOnlyDisplay {
|
||||||
|
//TODO:localize
|
||||||
|
buttonString = "Close"
|
||||||
|
} else {
|
||||||
buttonString = environment.strings.SendStarReactions_SendButtonTitle("\(self.amount.realValue)").string
|
buttonString = environment.strings.SendStarReactions_SendButtonTitle("\(self.amount.realValue)").string
|
||||||
|
}
|
||||||
case .liveStreamMessage:
|
case .liveStreamMessage:
|
||||||
//TODO:localize
|
//TODO:localize
|
||||||
buttonString = "Add # \(self.amount.realValue)"
|
buttonString = "Add # \(self.amount.realValue)"
|
||||||
@ -2522,6 +2546,19 @@ private final class ChatSendStarsScreenComponent: Component {
|
|||||||
guard let self, let component = self.component else {
|
guard let self, let component = self.component else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch component.initialData.subjectInitialData {
|
||||||
|
case let .react(reactData):
|
||||||
|
if case let .liveStream(_, _, _, _, _, isOnlyDisplay) = reactData.reactSubject {
|
||||||
|
if isOnlyDisplay {
|
||||||
|
self.environment?.controller()?.dismiss()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case .liveStreamMessage:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
guard let balance = self.balance else {
|
guard let balance = self.balance else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -2604,10 +2641,11 @@ private final class ChatSendStarsScreenComponent: Component {
|
|||||||
|
|
||||||
var buttonDescriptionTextSize: CGSize?
|
var buttonDescriptionTextSize: CGSize?
|
||||||
if case .react = component.initialData.subjectInitialData {
|
if case .react = component.initialData.subjectInitialData {
|
||||||
|
//TODO:localize
|
||||||
buttonDescriptionTextSize = self.buttonDescriptionText.update(
|
buttonDescriptionTextSize = self.buttonDescriptionText.update(
|
||||||
transition: .immediate,
|
transition: .immediate,
|
||||||
component: AnyComponent(MultilineTextComponent(
|
component: AnyComponent(MultilineTextComponent(
|
||||||
text: .markdown(text: environment.strings.SendStarReactions_TermsOfServiceFooter, attributes: MarkdownAttributes(
|
text: .markdown(text: isOnlyDisplay ? "You can't send star reactions to own story." : environment.strings.SendStarReactions_TermsOfServiceFooter, attributes: MarkdownAttributes(
|
||||||
body: MarkdownAttributeSet(font: Font.regular(13.0), textColor: environment.theme.list.itemSecondaryTextColor),
|
body: MarkdownAttributeSet(font: Font.regular(13.0), textColor: environment.theme.list.itemSecondaryTextColor),
|
||||||
bold: MarkdownAttributeSet(font: Font.semibold(13.0), textColor: environment.theme.list.itemSecondaryTextColor),
|
bold: MarkdownAttributeSet(font: Font.semibold(13.0), textColor: environment.theme.list.itemSecondaryTextColor),
|
||||||
link: MarkdownAttributeSet(font: Font.regular(13.0), textColor: environment.theme.list.itemAccentColor),
|
link: MarkdownAttributeSet(font: Font.regular(13.0), textColor: environment.theme.list.itemAccentColor),
|
||||||
@ -2716,7 +2754,7 @@ private final class ChatSendStarsScreenComponent: Component {
|
|||||||
public class ChatSendStarsScreen: ViewControllerComponentContainer {
|
public class ChatSendStarsScreen: ViewControllerComponentContainer {
|
||||||
public enum ReactSubject {
|
public enum ReactSubject {
|
||||||
case message(EngineMessage.Id)
|
case message(EngineMessage.Id)
|
||||||
case liveStream(peerId: EnginePeer.Id, storyId: Int32, minAmount: Int, liveChatMessageParams: LiveChatMessageParams, availableSendAsPeers: [EnginePeer])
|
case liveStream(peerId: EnginePeer.Id, storyId: Int32, minAmount: Int, liveChatMessageParams: LiveChatMessageParams, availableSendAsPeers: [EnginePeer], isDisplayOnly: Bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate enum SubjectInitialData {
|
fileprivate enum SubjectInitialData {
|
||||||
@ -2925,7 +2963,7 @@ public class ChatSendStarsScreen: ViewControllerComponentContainer {
|
|||||||
switch reactSubject {
|
switch reactSubject {
|
||||||
case .message:
|
case .message:
|
||||||
channelsForPublicReaction = context.engine.peers.channelsForPublicReaction(useLocalCache: true)
|
channelsForPublicReaction = context.engine.peers.channelsForPublicReaction(useLocalCache: true)
|
||||||
case let .liveStream(_, _, _, _, availableSendAsPeers):
|
case let .liveStream(_, _, _, _, availableSendAsPeers, _):
|
||||||
channelsForPublicReaction = .single(availableSendAsPeers)
|
channelsForPublicReaction = .single(availableSendAsPeers)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2958,7 +2996,7 @@ public class ChatSendStarsScreen: ViewControllerComponentContainer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var minAmount = 1
|
var minAmount = 1
|
||||||
if case let .liveStream(_, _, minAmountValue, _, _) = reactSubject {
|
if case let .liveStream(_, _, minAmountValue, _, _, _) = reactSubject {
|
||||||
minAmount = minAmountValue
|
minAmount = minAmountValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3306,10 +3306,10 @@ public final class StoryItemSetContainerComponent: Component {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
sendStarsAction: (isLiveStream && canSendStars) ? { [weak self] sourceView, isLongPress in
|
sendStarsAction: (isLiveStream && canSendStars) ? { [weak self] sourceView, isLongPress in
|
||||||
guard let self else {
|
guard let self, let component = self.component else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if isLongPress {
|
if isLongPress || component.isEmbeddedInCamera {
|
||||||
self.sendMessageContext.openSendStars(view: self)
|
self.sendMessageContext.openSendStars(view: self)
|
||||||
} else {
|
} else {
|
||||||
self.sendMessageContext.performSendStars(view: self, buttonView: sourceView, count: 1, isFromExpandedView: false)
|
self.sendMessageContext.performSendStars(view: self, buttonView: sourceView, count: 1, isFromExpandedView: false)
|
||||||
|
|||||||
@ -4041,7 +4041,7 @@ final class StoryItemSetContainerSendMessage: @unchecked(Sendable) {
|
|||||||
context: component.context,
|
context: component.context,
|
||||||
peerId: peerId,
|
peerId: peerId,
|
||||||
myPeer: (sendAsPeer?.peer).flatMap(EnginePeer.init),
|
myPeer: (sendAsPeer?.peer).flatMap(EnginePeer.init),
|
||||||
reactSubject: .liveStream(peerId: peerId, storyId: focusedItem.storyItem.id, minAmount: Int(minAmount), liveChatMessageParams: LiveChatMessageParams(appConfig: component.context.currentAppConfiguration.with({ $0 })), availableSendAsPeers: self.sendAsData?.availablePeers.map({ EnginePeer($0.peer) }) ?? []),
|
reactSubject: .liveStream(peerId: peerId, storyId: focusedItem.storyItem.id, minAmount: Int(minAmount), liveChatMessageParams: LiveChatMessageParams(appConfig: component.context.currentAppConfiguration.with({ $0 })), availableSendAsPeers: component.isEmbeddedInCamera ? [] : (self.sendAsData?.availablePeers.map({ EnginePeer($0.peer) }) ?? []), isDisplayOnly: component.isEmbeddedInCamera),
|
||||||
topPeers: topPeers,
|
topPeers: topPeers,
|
||||||
completion: { [weak self, weak view] amount, privacy, _, _ in
|
completion: { [weak self, weak view] amount, privacy, _, _ in
|
||||||
guard let self, let view else {
|
guard let self, let view else {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user