mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-09-06 12:43:58 +00:00
Group boosts
This commit is contained in:
parent
fca918a106
commit
ed7252b489
@ -11010,8 +11010,8 @@ Sorry for the inconvenience.";
|
|||||||
"GroupBoost.Title.Other" = "Help Upgrade This Group";
|
"GroupBoost.Title.Other" = "Help Upgrade This Group";
|
||||||
"GroupBoost.Title.Current" = "Boost 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.EnableStoriesText" = "Your group needs %1$@ to enable posting stories.";
|
||||||
"GroupBoost.IncreaseLimitText" = "Your group needs %1$@ to post %2$@.\n\nAsk your **Premium** members to boost your group with this link:";
|
"GroupBoost.IncreaseLimitText" = "Your group needs %1$@ to post %2$@.";
|
||||||
|
|
||||||
"BoostGift.Group.Description" = "Get more boosts for your group by gifting\nPremium to your subscribers.";
|
"BoostGift.Group.Description" = "Get more boosts for your group by gifting\nPremium to your subscribers.";
|
||||||
|
|
||||||
|
@ -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 makePremiumLimitController(context: AccountContext, subject: PremiumLimitSubject, count: Int32, forceDark: Bool, cancel: @escaping () -> Void, action: @escaping () -> Bool) -> ViewController
|
||||||
func makePremiumGiftController(context: AccountContext, source: PremiumGiftSource) -> ViewController
|
func makePremiumGiftController(context: AccountContext, source: PremiumGiftSource) -> ViewController
|
||||||
func makePremiumPrivacyControllerController(context: AccountContext, subject: PremiumPrivacySubject, peerId: EnginePeer.Id) -> 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
|
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
|
||||||
|
|
||||||
|
@ -606,11 +606,11 @@ private final class SheetContent: CombinedComponent {
|
|||||||
switch subject {
|
switch subject {
|
||||||
case .stories:
|
case .stories:
|
||||||
if level == 0 {
|
if level == 0 {
|
||||||
textString = strings.ChannelBoost_EnableStoriesText(valueString).string
|
textString = isGroup ? strings.GroupBoost_EnableStoriesText(valueString).string : strings.ChannelBoost_EnableStoriesText(valueString).string
|
||||||
} else {
|
} 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):
|
case let .channelReactions(reactionCount):
|
||||||
textString = strings.ChannelBoost_CustomReactionsText("\(reactionCount)", "\(reactionCount)").string
|
textString = strings.ChannelBoost_CustomReactionsText("\(reactionCount)", "\(reactionCount)").string
|
||||||
needsSecondParagraph = false
|
needsSecondParagraph = false
|
||||||
@ -1584,7 +1584,7 @@ public class PremiumBoostLevelsScreen: ViewController {
|
|||||||
init(context: AccountContext, controller: PremiumBoostLevelsScreen) {
|
init(context: AccountContext, controller: PremiumBoostLevelsScreen) {
|
||||||
self.presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
self.presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||||
if controller.forceDark {
|
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())
|
self.presentationData = self.presentationData.withUpdated(theme: self.presentationData.theme.withModalBlocksBackground())
|
||||||
|
|
||||||
|
@ -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
|
var canEditMembers = false
|
||||||
if channel.hasPermission(.banMembers) && (channel.adminRights != nil || channel.flags.contains(.isCreator)) {
|
if channel.hasPermission(.banMembers) && (channel.adminRights != nil || channel.flags.contains(.isCreator)) {
|
||||||
canEditMembers = true
|
canEditMembers = true
|
||||||
|
@ -1119,32 +1119,33 @@ final class ShareWithPeersScreenComponent: Component {
|
|||||||
let _ = combineLatest(
|
let _ = combineLatest(
|
||||||
queue: Queue.mainQueue(),
|
queue: Queue.mainQueue(),
|
||||||
component.context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: peer.id)),
|
component.context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: peer.id)),
|
||||||
component.context.engine.peers.getChannelBoostStatus(peerId: peer.id)
|
component.context.engine.peers.getChannelBoostStatus(peerId: peer.id),
|
||||||
).start(next: { [weak self] peer, status in
|
component.context.engine.peers.getMyBoostStatus()
|
||||||
guard let self, let component = self.component, let peer, let status else {
|
).start(next: { [weak self] peer, boostStatus, myBoostStatus in
|
||||||
|
guard let self, let component = self.component, let peer, let boostStatus, let myBoostStatus else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let link = status.url
|
|
||||||
if let navigationController = self.environment?.controller()?.navigationController as? NavigationController {
|
if let navigationController = self.environment?.controller()?.navigationController as? NavigationController {
|
||||||
if let previousController = navigationController.viewControllers.last as? ShareWithPeersScreen {
|
if let previousController = navigationController.viewControllers.last as? ShareWithPeersScreen {
|
||||||
previousController.dismiss()
|
previousController.dismiss()
|
||||||
}
|
}
|
||||||
let presentationData = component.context.sharedContext.currentPresentationData.with { $0 }
|
// 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
|
// 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
|
// UIPasteboard.general.string = link
|
||||||
|
//
|
||||||
if let previousController = navigationController?.viewControllers.reversed().first(where: { $0 is ShareWithPeersScreen}) as? ShareWithPeersScreen {
|
// if let previousController = navigationController?.viewControllers.reversed().first(where: { $0 is ShareWithPeersScreen}) as? ShareWithPeersScreen {
|
||||||
previousController.dismiss(completion: { [weak navigationController] in
|
// previousController.dismiss(completion: { [weak navigationController] in
|
||||||
Queue.mainQueue().justDispatch {
|
// Queue.mainQueue().justDispatch {
|
||||||
if let controller = navigationController?.viewControllers.last as? ViewController {
|
// 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)
|
// 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
|
// return true
|
||||||
})
|
// })
|
||||||
|
let controller = component.context.sharedContext.makePremiumBoostLevelsController(context: component.context, peerId: peer.id, boostStatus: boostStatus, myBoostStatus: myBoostStatus, forceDark: true)
|
||||||
navigationController.pushViewController(controller)
|
navigationController.pushViewController(controller)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2203,6 +2203,42 @@ public final class SharedAccountContextImpl: SharedAccountContext {
|
|||||||
return controller
|
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 {
|
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)
|
return StickerPackScreen(context: context, updatedPresentationData: updatedPresentationData, mainStickerPack: mainStickerPack, stickerPacks: stickerPacks, loadedStickerPacks: loadedStickerPacks, parentNavigationController: parentNavigationController, sendSticker: sendSticker)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user