Group boosts

This commit is contained in:
Ilya Laktyushin 2024-02-09 17:52:49 +04:00
parent fca918a106
commit ed7252b489
6 changed files with 63 additions and 39 deletions

View File

@ -11010,8 +11010,8 @@ Sorry for the inconvenience.";
"GroupBoost.Title.Other" = "Help Upgrade This Group";
"GroupBoost.Title.Current" = "Boost Group";
"GroupBoost.EnableStoriesText" = "Your group needs %1$@ to enable posting stories.\n\nAsk your **Premium** members to boost your group with this link:";
"GroupBoost.IncreaseLimitText" = "Your group needs %1$@ to post %2$@.\n\nAsk your **Premium** members to boost your group with this link:";
"GroupBoost.EnableStoriesText" = "Your group needs %1$@ to enable posting stories.";
"GroupBoost.IncreaseLimitText" = "Your group needs %1$@ to post %2$@.";
"BoostGift.Group.Description" = "Get more boosts for your group by gifting\nPremium to your subscribers.";

View File

@ -959,6 +959,7 @@ public protocol SharedAccountContext: AnyObject {
func makePremiumLimitController(context: AccountContext, subject: PremiumLimitSubject, count: Int32, forceDark: Bool, cancel: @escaping () -> Void, action: @escaping () -> Bool) -> ViewController
func makePremiumGiftController(context: AccountContext, source: PremiumGiftSource) -> ViewController
func makePremiumPrivacyControllerController(context: AccountContext, subject: PremiumPrivacySubject, peerId: EnginePeer.Id) -> ViewController
func makePremiumBoostLevelsController(context: AccountContext, peerId: EnginePeer.Id, boostStatus: ChannelBoostStatus, myBoostStatus: MyBoostStatus, forceDark: Bool) -> ViewController
func makeStickerPackScreen(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)?, mainStickerPack: StickerPackReference, stickerPacks: [StickerPackReference], loadedStickerPacks: [LoadedStickerPack], parentNavigationController: NavigationController?, sendSticker: ((FileMediaReference, UIView, CGRect) -> Bool)?) -> ViewController

View File

@ -606,11 +606,11 @@ private final class SheetContent: CombinedComponent {
switch subject {
case .stories:
if level == 0 {
textString = strings.ChannelBoost_EnableStoriesText(valueString).string
textString = isGroup ? strings.GroupBoost_EnableStoriesText(valueString).string : strings.ChannelBoost_EnableStoriesText(valueString).string
} else {
textString = strings.ChannelBoost_IncreaseLimitText(valueString, storiesString).string
textString = isGroup ? strings.GroupBoost_IncreaseLimitText(valueString, storiesString).string : strings.ChannelBoost_IncreaseLimitText(valueString, storiesString).string
}
needsSecondParagraph = false
needsSecondParagraph = isGroup
case let .channelReactions(reactionCount):
textString = strings.ChannelBoost_CustomReactionsText("\(reactionCount)", "\(reactionCount)").string
needsSecondParagraph = false
@ -1584,7 +1584,7 @@ public class PremiumBoostLevelsScreen: ViewController {
init(context: AccountContext, controller: PremiumBoostLevelsScreen) {
self.presentationData = context.sharedContext.currentPresentationData.with { $0 }
if controller.forceDark {
self.presentationData = self.presentationData.withUpdated(theme: defaultDarkPresentationTheme)
self.presentationData = self.presentationData.withUpdated(theme: defaultDarkColorPresentationTheme)
}
self.presentationData = self.presentationData.withUpdated(theme: self.presentationData.theme.withModalBlocksBackground())

View File

@ -1706,20 +1706,6 @@ private func editingItems(data: PeerInfoScreenData?, state: PeerInfoState, chatL
}))
}
// if isCreator || (channel.adminRights != nil && channel.hasPermission(.sendSomething)) {
// let messagesShouldHaveSignatures: Bool
// switch channel.info {
// case let .broadcast(info):
// messagesShouldHaveSignatures = info.flags.contains(.messagesShouldHaveSignatures)
// default:
// messagesShouldHaveSignatures = false
// }
// items[.peerSettings]!.append(PeerInfoScreenSwitchItem(id: ItemSignMessages, text: presentationData.strings.Channel_SignMessages, value: messagesShouldHaveSignatures, icon: UIImage(bundleImageName: "Chat/Info/GroupSignIcon"), toggled: { value in
// interaction.editingToggleMessageSignatures(value)
// }))
// items[.peerSettings]!.append(PeerInfoScreenCommentItem(id: ItemSignMessagesHelp, text: presentationData.strings.Channel_SignMessages_Help))
// }
var canEditMembers = false
if channel.hasPermission(.banMembers) && (channel.adminRights != nil || channel.flags.contains(.isCreator)) {
canEditMembers = true

View File

@ -1119,32 +1119,33 @@ final class ShareWithPeersScreenComponent: Component {
let _ = combineLatest(
queue: Queue.mainQueue(),
component.context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: peer.id)),
component.context.engine.peers.getChannelBoostStatus(peerId: peer.id)
).start(next: { [weak self] peer, status in
guard let self, let component = self.component, let peer, let status else {
component.context.engine.peers.getChannelBoostStatus(peerId: peer.id),
component.context.engine.peers.getMyBoostStatus()
).start(next: { [weak self] peer, boostStatus, myBoostStatus in
guard let self, let component = self.component, let peer, let boostStatus, let myBoostStatus else {
return
}
let link = status.url
if let navigationController = self.environment?.controller()?.navigationController as? NavigationController {
if let previousController = navigationController.viewControllers.last as? ShareWithPeersScreen {
previousController.dismiss()
}
let presentationData = component.context.sharedContext.currentPresentationData.with { $0 }
let controller = component.context.sharedContext.makePremiumLimitController(context: component.context, subject: .storiesChannelBoost(peer: peer, isCurrent: true, level: Int32(status.level), currentLevelBoosts: Int32(status.currentLevelBoosts), nextLevelBoosts: status.nextLevelBoosts.flatMap(Int32.init), link: link, myBoostCount: 0, canBoostAgain: false), count: Int32(status.boosts), forceDark: true, cancel: {}, action: { [weak navigationController] in
UIPasteboard.general.string = link
if let previousController = navigationController?.viewControllers.reversed().first(where: { $0 is ShareWithPeersScreen}) as? ShareWithPeersScreen {
previousController.dismiss(completion: { [weak navigationController] in
Queue.mainQueue().justDispatch {
if let controller = navigationController?.viewControllers.last as? ViewController {
controller.present(UndoOverlayController(presentationData: presentationData, content: .linkCopied(text: presentationData.strings.ChannelBoost_BoostLinkCopied), elevatedLayout: true, position: .top, animateInAsReplacement: false, action: { _ in return false }), in: .current)
}
}
})
}
return true
})
// let presentationData = component.context.sharedContext.currentPresentationData.with { $0 }
// let controller = component.context.sharedContext.makePremiumLimitController(context: component.context, subject: .storiesChannelBoost(peer: peer, isCurrent: true, level: Int32(status.level), currentLevelBoosts: Int32(status.currentLevelBoosts), nextLevelBoosts: status.nextLevelBoosts.flatMap(Int32.init), link: link, myBoostCount: 0, canBoostAgain: false), count: Int32(status.boosts), forceDark: true, cancel: {}, action: { [weak navigationController] in
// UIPasteboard.general.string = link
//
// if let previousController = navigationController?.viewControllers.reversed().first(where: { $0 is ShareWithPeersScreen}) as? ShareWithPeersScreen {
// previousController.dismiss(completion: { [weak navigationController] in
// Queue.mainQueue().justDispatch {
// if let controller = navigationController?.viewControllers.last as? ViewController {
// controller.present(UndoOverlayController(presentationData: presentationData, content: .linkCopied(text: presentationData.strings.ChannelBoost_BoostLinkCopied), elevatedLayout: true, position: .top, animateInAsReplacement: false, action: { _ in return false }), in: .current)
// }
// }
// })
// }
// return true
// })
let controller = component.context.sharedContext.makePremiumBoostLevelsController(context: component.context, peerId: peer.id, boostStatus: boostStatus, myBoostStatus: myBoostStatus, forceDark: true)
navigationController.pushViewController(controller)
}

View File

@ -2203,6 +2203,42 @@ public final class SharedAccountContextImpl: SharedAccountContext {
return controller
}
public func makePremiumBoostLevelsController(context: AccountContext, peerId: EnginePeer.Id, boostStatus: ChannelBoostStatus, myBoostStatus: MyBoostStatus, forceDark: Bool) -> ViewController {
var pushImpl: ((ViewController) -> Void)?
var dismissImpl: (() -> Void)?
let controller = PremiumBoostLevelsScreen(
context: context,
peerId: peerId,
mode: .owner(subject: .stories),
status: boostStatus,
myBoostStatus: myBoostStatus,
openStats: nil,
openGift: {
var updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)?
if forceDark {
let presentationData = context.sharedContext.currentPresentationData.with { $0 }.withUpdated(theme: defaultDarkColorPresentationTheme)
updatedPresentationData = (presentationData, .single(presentationData))
}
let controller = createGiveawayController(context: context, updatedPresentationData: updatedPresentationData, peerId: peerId, subject: .generic)
pushImpl?(controller)
Queue.mainQueue().after(0.4) {
dismissImpl?()
}
},
forceDark: forceDark
)
pushImpl = { [weak controller] c in
controller?.push(c)
}
dismissImpl = { [weak controller] in
if let controller, let navigationController = controller.navigationController as? NavigationController {
navigationController.setViewControllers(navigationController.viewControllers.filter { !($0 is PremiumBoostLevelsScreen) }, animated: false)
}
}
return controller
}
public func makeStickerPackScreen(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)?, mainStickerPack: StickerPackReference, stickerPacks: [StickerPackReference], loadedStickerPacks: [LoadedStickerPack], parentNavigationController: NavigationController?, sendSticker: ((FileMediaReference, UIView, CGRect) -> Bool)?) -> ViewController {
return StickerPackScreen(context: context, updatedPresentationData: updatedPresentationData, mainStickerPack: mainStickerPack, stickerPacks: stickerPacks, loadedStickerPacks: loadedStickerPacks, parentNavigationController: parentNavigationController, sendSticker: sendSticker)
}