Skip to content

Commit a47dd6f

Browse files
author
Isaac
committed
Merge commit '0ae2f9b53a2b0c1d369492dfb9c2bb36f6ea6e8d' into beta
2 parents 96be5f6 + 0ae2f9b commit a47dd6f

File tree

11 files changed

+115
-58
lines changed

11 files changed

+115
-58
lines changed

submodules/MediaPickerUI/Sources/MediaPickerScreen.swift

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -528,29 +528,7 @@ public final class MediaPickerScreenImpl: ViewController, MediaPickerScreen, Att
528528
if case let .assets(_, mode) = controller.subject, [.wallpaper, .story, .addImage, .cover, .createSticker, .createAvatar].contains(mode) {
529529

530530
} else {
531-
let selectionGesture = MediaPickerGridSelectionGesture<TGMediaSelectableItem>()
532-
selectionGesture.delegate = self.wrappedGestureRecognizerDelegate
533-
selectionGesture.began = { [weak self] in
534-
self?.controller?.cancelPanGesture()
535-
}
536-
selectionGesture.updateIsScrollEnabled = { [weak self] isEnabled in
537-
self?.gridNode.scrollView.isScrollEnabled = isEnabled
538-
}
539-
selectionGesture.itemAt = { [weak self] point in
540-
if let self, let itemNode = self.gridNode.itemNodeAtPoint(point) as? MediaPickerGridItemNode, let selectableItem = itemNode.selectableItem {
541-
return (selectableItem, self.controller?.interaction?.selectionState?.isIdentifierSelected(selectableItem.uniqueIdentifier) ?? false)
542-
} else {
543-
return nil
544-
}
545-
}
546-
selectionGesture.updateSelection = { [weak self] asset, selected in
547-
if let strongSelf = self {
548-
strongSelf.controller?.interaction?.selectionState?.setItem(asset, selected: selected, animated: true, sender: nil)
549-
}
550-
}
551-
selectionGesture.sideInset = 44.0
552-
self.gridNode.view.addGestureRecognizer(selectionGesture)
553-
self.selectionGesture = selectionGesture
531+
self.setupSelectionGesture()
554532
}
555533

556534
if let controller = self.controller, case let .assets(collection, _) = controller.subject, collection != nil {
@@ -713,6 +691,35 @@ public final class MediaPickerScreenImpl: ViewController, MediaPickerScreen, Att
713691
}
714692
}
715693

694+
func setupSelectionGesture() {
695+
guard self.selectionGesture == nil else {
696+
return
697+
}
698+
let selectionGesture = MediaPickerGridSelectionGesture<TGMediaSelectableItem>()
699+
selectionGesture.delegate = self.wrappedGestureRecognizerDelegate
700+
selectionGesture.began = { [weak self] in
701+
self?.controller?.cancelPanGesture()
702+
}
703+
selectionGesture.updateIsScrollEnabled = { [weak self] isEnabled in
704+
self?.gridNode.scrollView.isScrollEnabled = isEnabled
705+
}
706+
selectionGesture.itemAt = { [weak self] point in
707+
if let self, let itemNode = self.gridNode.itemNodeAtPoint(point) as? MediaPickerGridItemNode, let selectableItem = itemNode.selectableItem {
708+
return (selectableItem, self.controller?.interaction?.selectionState?.isIdentifierSelected(selectableItem.uniqueIdentifier) ?? false)
709+
} else {
710+
return nil
711+
}
712+
}
713+
selectionGesture.updateSelection = { [weak self] asset, selected in
714+
if let strongSelf = self {
715+
strongSelf.controller?.interaction?.selectionState?.setItem(asset, selected: selected, animated: true, sender: nil)
716+
}
717+
}
718+
selectionGesture.sideInset = 44.0
719+
self.gridNode.view.addGestureRecognizer(selectionGesture)
720+
self.selectionGesture = selectionGesture
721+
}
722+
716723
@objc private func cameraTapped() {
717724
guard let camera = self.modernCamera, let previewView = self.modernCameraView else {
718725
return
@@ -2352,9 +2359,6 @@ public final class MediaPickerScreenImpl: ViewController, MediaPickerScreen, Att
23522359
let transition = ContainedViewLayoutTransition.animated(duration: 0.25, curve: .easeInOut)
23532360
var moreIsVisible = false
23542361
if case let .assets(_, mode) = self.subject, [.story, .createSticker].contains(mode) {
2355-
if count == 1 {
2356-
self.requestAttachmentMenuExpansion()
2357-
}
23582362
moreIsVisible = true
23592363
} else if case let .media(media) = self.subject {
23602364
self.titleView.title = media.count == 1 ? self.presentationData.strings.Attachment_Pasteboard : self.presentationData.strings.Attachment_SelectedMedia(count)
@@ -2618,6 +2622,8 @@ public final class MediaPickerScreenImpl: ViewController, MediaPickerScreen, Att
26182622

26192623
self.navigationItem.setRightBarButton(nil, animated: true)
26202624
self.explicitMultipleSelection = true
2625+
self.controllerNode.setupSelectionGesture()
2626+
self.requestAttachmentMenuExpansion()
26212627

26222628
if let state = self.controllerNode.state {
26232629
self.controllerNode.updateState(state)

submodules/PremiumUI/Sources/PremiumBoostLevelsScreen.swift

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1108,6 +1108,10 @@ private final class SheetContent: CombinedComponent {
11081108
func layoutLevel(_ level: Int32) {
11091109
var perks: [LevelSectionComponent.Perk] = []
11101110

1111+
if !isGroup && level >= requiredBoostSubjectLevel(subject: .autoTranslate, group: isGroup, context: component.context, configuration: premiumConfiguration) {
1112+
perks.append(.autoTranslate)
1113+
}
1114+
11111115
perks.append(.story(level))
11121116

11131117
if !isGroup {
@@ -1171,12 +1175,6 @@ private final class SheetContent: CombinedComponent {
11711175
if !isGroup && level >= requiredBoostSubjectLevel(subject: .noAds, group: isGroup, context: component.context, configuration: premiumConfiguration) {
11721176
perks.append(.noAds)
11731177
}
1174-
if !isGroup && level >= requiredBoostSubjectLevel(subject: .autoTranslate, group: isGroup, context: component.context, configuration: premiumConfiguration) {
1175-
perks.append(.autoTranslate)
1176-
}
1177-
// if !isGroup && level >= requiredBoostSubjectLevel(subject: .wearGift, group: isGroup, context: component.context, configuration: premiumConfiguration) {
1178-
// perks.append(.wearGift)
1179-
// }
11801178

11811179
levelItems.append(
11821180
AnyComponentWithIdentity(

submodules/TelegramCore/Sources/Network/FetchV2.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,10 @@ private final class FetchImpl {
103103
init(range: Range<Int64>) {
104104
self.range = range
105105
}
106+
107+
deinit {
108+
self.disposable?.dispose()
109+
}
106110
}
107111

108112
private final class HashRangeData {

submodules/TelegramCore/Sources/TelegramEngine/Payments/StarGifts.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2494,7 +2494,7 @@ private final class ResaleGiftsContextImpl {
24942494
let filterAttributes = self.filterAttributes
24952495
let currentAttributesHash = self.attributesHash
24962496

2497-
let dataState = self.dataState
2497+
let dataState = self.dataState
24982498

24992499
if case let .ready(true, initialNextOffset) = dataState {
25002500
self.dataState = .loading

submodules/TelegramUI/Components/CameraScreen/Sources/CameraScreen.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2553,6 +2553,8 @@ public class CameraScreenImpl: ViewController, CameraScreen {
25532553
transitionCircleLayer.animateScale(from: sourceLocalFrame.width / 320.0, to: 6.0, duration: 0.6, timingFunction: kCAMediaTimingFunctionSpring, removeOnCompletion: false, completion: { _ in
25542554
self.view.mask = nil
25552555
colorFillView.removeFromSuperview()
2556+
2557+
self.requestUpdateLayout(hasAppeared: true, transition: .immediate)
25562558
})
25572559
} else {
25582560
if case .story = controller.mode {

submodules/TelegramUI/Components/Gifts/GiftStoreScreen/Sources/GiftStoreScreen.swift

Lines changed: 49 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ final class GiftStoreScreenComponent: Component {
9595

9696
private var starsStateDisposable: Disposable?
9797
private var starsState: StarsContext.State?
98-
private var initialCount: Int?
98+
private var initialCount: Int32?
99+
private var showLoading = true
99100

100101
private var component: GiftStoreScreenComponent?
101102
private(set) weak var state: State?
@@ -338,7 +339,9 @@ final class GiftStoreScreenComponent: Component {
338339
guard let self else {
339340
return
340341
}
342+
self.showLoading = true
341343
self.state?.starGiftsContext.updateFilterAttributes([])
344+
self.scrollToTop()
342345
},
343346
animateScale: false
344347
)
@@ -357,7 +360,7 @@ final class GiftStoreScreenComponent: Component {
357360
var emptyResultsActionFrame = CGRect(
358361
origin: CGPoint(
359362
x: floorToScreenPixels((availableWidth - emptyResultsActionSize.width) / 2.0),
360-
y: max(self.scrollView.contentSize.height - 8.0, availableHeight - bottomInset - emptyResultsActionSize.height - 16.0)
363+
y: max(self.scrollView.contentSize.height - 70.0, availableHeight - bottomInset - emptyResultsActionSize.height - 16.0)
361364
),
362365
size: emptyResultsActionSize
363366
)
@@ -435,7 +438,7 @@ final class GiftStoreScreenComponent: Component {
435438
if view.superview == nil {
436439
view.alpha = 0.0
437440
fadeTransition.setAlpha(view: view, alpha: 1.0)
438-
self.insertSubview(view, belowSubview: self.loadingNode.view)
441+
self.scrollView.addSubview(view)
439442
}
440443
view.bounds = CGRect(origin: .zero, size: emptyResultsActionFrame.size)
441444
ComponentTransition.immediate.setPosition(view: view, position: emptyResultsActionFrame.center)
@@ -451,7 +454,7 @@ final class GiftStoreScreenComponent: Component {
451454
}
452455

453456
let bottomContentOffset = max(0.0, self.scrollView.contentSize.height - self.scrollView.contentOffset.y - self.scrollView.frame.height)
454-
if interactive, bottomContentOffset < 320.0 {
457+
if interactive, bottomContentOffset < 1000.0 {
455458
self.state?.starGiftsContext.loadMore()
456459
}
457460
}
@@ -471,6 +474,7 @@ final class GiftStoreScreenComponent: Component {
471474
guard let self else {
472475
return
473476
}
477+
self.showLoading = true
474478
self.state?.starGiftsContext.updateSorting(.value)
475479
self.scrollToTop()
476480
})))
@@ -481,6 +485,7 @@ final class GiftStoreScreenComponent: Component {
481485
guard let self else {
482486
return
483487
}
488+
self.showLoading = true
484489
self.state?.starGiftsContext.updateSorting(.date)
485490
self.scrollToTop()
486491
})))
@@ -491,6 +496,7 @@ final class GiftStoreScreenComponent: Component {
491496
guard let self else {
492497
return
493498
}
499+
self.showLoading = true
494500
self.state?.starGiftsContext.updateSorting(.number)
495501
self.scrollToTop()
496502
})))
@@ -514,7 +520,13 @@ final class GiftStoreScreenComponent: Component {
514520
} else {
515521
return false
516522
}
517-
}
523+
}.sorted(by: { lhs, rhs in
524+
if case let .model(_, lhsFile, _) = lhs, case let .model(_, rhsFile, _) = rhs, let lhsCount = self.state?.starGiftsState?.attributeCount[.model(lhsFile.fileId.id)], let rhsCount = self.state?.starGiftsState?.attributeCount[.model(rhsFile.fileId.id)] {
525+
return lhsCount > rhsCount
526+
} else {
527+
return false
528+
}
529+
})
518530

519531
let currentFilterAttributes = self.state?.starGiftsState?.filterAttributes ?? []
520532
let selectedModelAttributes = currentFilterAttributes.filter { attribute in
@@ -564,6 +576,7 @@ final class GiftStoreScreenComponent: Component {
564576
updatedFilterAttributes.append(attribute)
565577
}
566578
}
579+
self.showLoading = true
567580
self.state?.starGiftsContext.updateFilterAttributes(updatedFilterAttributes)
568581
self.scrollToTop()
569582
},
@@ -577,6 +590,7 @@ final class GiftStoreScreenComponent: Component {
577590
}
578591
return true
579592
}
593+
self.showLoading = true
580594
self.state?.starGiftsContext.updateFilterAttributes(updatedFilterAttributes)
581595
self.scrollToTop()
582596
}
@@ -607,7 +621,13 @@ final class GiftStoreScreenComponent: Component {
607621
} else {
608622
return false
609623
}
610-
}
624+
}.sorted(by: { lhs, rhs in
625+
if case let .backdrop(_, lhsId, _, _, _, _, _) = lhs, case let .backdrop(_, rhsId, _, _, _, _, _) = rhs, let lhsCount = self.state?.starGiftsState?.attributeCount[.backdrop(lhsId)], let rhsCount = self.state?.starGiftsState?.attributeCount[.backdrop(rhsId)] {
626+
return lhsCount > rhsCount
627+
} else {
628+
return false
629+
}
630+
})
611631

612632
let currentFilterAttributes = self.state?.starGiftsState?.filterAttributes ?? []
613633
let selectedBackdropAttributes = currentFilterAttributes.filter { attribute in
@@ -657,6 +677,7 @@ final class GiftStoreScreenComponent: Component {
657677
updatedFilterAttributes.append(attribute)
658678
}
659679
}
680+
self.showLoading = true
660681
self.state?.starGiftsContext.updateFilterAttributes(updatedFilterAttributes)
661682
self.scrollToTop()
662683
},
@@ -670,6 +691,7 @@ final class GiftStoreScreenComponent: Component {
670691
}
671692
return true
672693
}
694+
self.showLoading = true
673695
self.state?.starGiftsContext.updateFilterAttributes(updatedFilterAttributes)
674696
self.scrollToTop()
675697
}
@@ -700,7 +722,13 @@ final class GiftStoreScreenComponent: Component {
700722
} else {
701723
return false
702724
}
703-
}
725+
}.sorted(by: { lhs, rhs in
726+
if case let .pattern(_, lhsFile, _) = lhs, case let .pattern(_, rhsFile, _) = rhs, let lhsCount = self.state?.starGiftsState?.attributeCount[.pattern(lhsFile.fileId.id)], let rhsCount = self.state?.starGiftsState?.attributeCount[.pattern(rhsFile.fileId.id)] {
727+
return lhsCount > rhsCount
728+
} else {
729+
return false
730+
}
731+
})
704732

705733
let currentFilterAttributes = self.state?.starGiftsState?.filterAttributes ?? []
706734
let selectedPatternAttributes = currentFilterAttributes.filter { attribute in
@@ -750,6 +778,7 @@ final class GiftStoreScreenComponent: Component {
750778
updatedFilterAttributes.append(attribute)
751779
}
752780
}
781+
self.showLoading = true
753782
self.state?.starGiftsContext.updateFilterAttributes(updatedFilterAttributes)
754783
self.scrollToTop()
755784
},
@@ -763,6 +792,7 @@ final class GiftStoreScreenComponent: Component {
763792
}
764793
return true
765794
}
795+
self.showLoading = true
766796
self.state?.starGiftsContext.updateFilterAttributes(updatedFilterAttributes)
767797
self.scrollToTop()
768798
}
@@ -804,6 +834,12 @@ final class GiftStoreScreenComponent: Component {
804834
self.component = component
805835

806836
let isLoading = self.effectiveIsLoading
837+
if case let .ready(loadMore, nextOffset) = self.state?.starGiftsState?.dataState {
838+
if loadMore && nextOffset == nil {
839+
} else {
840+
self.showLoading = false
841+
}
842+
}
807843

808844
let theme = environment.theme
809845
let strings = environment.strings
@@ -812,7 +848,7 @@ final class GiftStoreScreenComponent: Component {
812848
self.backgroundColor = environment.theme.list.blocksBackgroundColor
813849
}
814850

815-
let bottomContentInset: CGFloat = 24.0
851+
let bottomContentInset: CGFloat = 56.0
816852
let sideInset: CGFloat = 16.0 + environment.safeInsets.left
817853
let headerSideInset: CGFloat = 24.0 + environment.safeInsets.left
818854

@@ -927,7 +963,7 @@ final class GiftStoreScreenComponent: Component {
927963
}
928964

929965
let effectiveCount: Int32
930-
if let count = self.effectiveGifts?.count, count > 0 || self.initialCount != nil {
966+
if let count = self.state?.starGiftsState?.count, count > 0 || self.initialCount != nil {
931967
if self.initialCount == nil {
932968
self.initialCount = count
933969
}
@@ -1047,6 +1083,7 @@ final class GiftStoreScreenComponent: Component {
10471083

10481084
let loadingTransition: ComponentTransition = .easeInOut(duration: 0.25)
10491085

1086+
var showingFilters = false
10501087
let filterSize = self.filterSelector.update(
10511088
transition: transition,
10521089
component: AnyComponent(FilterSelectorComponent(
@@ -1069,6 +1106,7 @@ final class GiftStoreScreenComponent: Component {
10691106

10701107
if let initialCount = self.initialCount, initialCount >= minimumCountToDisplayFilters {
10711108
loadingTransition.setAlpha(view: filterSelectorView, alpha: 1.0)
1109+
showingFilters = true
10721110
}
10731111
}
10741112

@@ -1112,8 +1150,8 @@ final class GiftStoreScreenComponent: Component {
11121150

11131151
self.updateScrolling(transition: transition)
11141152

1115-
if isLoading {
1116-
self.loadingNode.update(size: availableSize, theme: environment.theme, transition: .immediate)
1153+
if isLoading && self.showLoading {
1154+
self.loadingNode.update(size: availableSize, theme: environment.theme, showFilters: !showingFilters, transition: .immediate)
11171155
loadingTransition.setAlpha(view: self.loadingNode.view, alpha: 1.0)
11181156
} else {
11191157
loadingTransition.setAlpha(view: self.loadingNode.view, alpha: 0.0)

0 commit comments

Comments
 (0)