mirror of
https://github.com/ichmagmaus111/ghostgram.git
synced 2026-06-09 03:23:55 +02:00
chore: migrate to new version + fixed several critical bugs
- Migrated project to latest Telegram iOS base (v12.3.2+) - Fixed circular dependency between GhostModeManager and MiscSettingsManager - Fixed multiple Bazel build configuration errors (select() default conditions) - Fixed duplicate type definitions in PeerInfoScreen - Fixed swiftmodule directory resolution in build scripts - Added Ghostgram Settings tab in main Settings menu with all 5 features - Cleared sensitive credentials from config.json (template-only now) - Excluded bazel-cache from version control
This commit is contained in:
+114
-4
@@ -10,6 +10,7 @@ import Postbox
|
||||
import WallpaperBackgroundNode
|
||||
import ChatMessageItemCommon
|
||||
import ContextUI
|
||||
import HierarchyTrackingLayer
|
||||
|
||||
public class ChatMessageShareButton: ASDisplayNode {
|
||||
private let referenceNode: ContextReferenceContentNode
|
||||
@@ -21,15 +22,18 @@ public class ChatMessageShareButton: ASDisplayNode {
|
||||
private let topButton: HighlightTrackingButtonNode
|
||||
private let topIconNode: ASImageNode
|
||||
private var topIconOffset = CGPoint()
|
||||
|
||||
|
||||
private var bottomButton: HighlightTrackingButtonNode?
|
||||
private var bottomIconNode: ASImageNode?
|
||||
|
||||
private var starsView: StarsView?
|
||||
|
||||
private var separatorNode: ASDisplayNode?
|
||||
|
||||
private var theme: PresentationTheme?
|
||||
private var isReplies: Bool = false
|
||||
private var hasMore: Bool = false
|
||||
private var isExpand: Bool = false
|
||||
|
||||
private var textNode: ImmediateTextNode?
|
||||
|
||||
@@ -103,7 +107,7 @@ public class ChatMessageShareButton: ASDisplayNode {
|
||||
self.morePressed?()
|
||||
}
|
||||
|
||||
public func update(presentationData: ChatPresentationData, controllerInteraction: ChatControllerInteraction, chatLocation: ChatLocation, subject: ChatControllerSubject?, message: Message, account: Account, disableComments: Bool = false) -> CGSize {
|
||||
public func update(presentationData: ChatPresentationData, controllerInteraction: ChatControllerInteraction, chatLocation: ChatLocation, subject: ChatControllerSubject?, message: Message, account: Account, disableComments: Bool = false, isSummarize: Bool = false) -> CGSize {
|
||||
var isReplies = false
|
||||
var isNavigate = false
|
||||
var replyCount = 0
|
||||
@@ -134,15 +138,27 @@ public class ChatMessageShareButton: ASDisplayNode {
|
||||
hasMore = true
|
||||
}
|
||||
|
||||
if self.theme !== presentationData.theme.theme || self.isReplies != isReplies || self.hasMore != hasMore {
|
||||
var isExpand = false
|
||||
if controllerInteraction.summarizedMessageIds.contains(message.id) {
|
||||
isExpand = true
|
||||
}
|
||||
|
||||
if self.theme !== presentationData.theme.theme || self.isReplies != isReplies || self.hasMore != hasMore || self.isExpand != isExpand {
|
||||
self.theme = presentationData.theme.theme
|
||||
self.isReplies = isReplies
|
||||
self.hasMore = hasMore
|
||||
self.isExpand = isExpand
|
||||
|
||||
var updatedIconImage: UIImage?
|
||||
var updatedBottomIconImage: UIImage?
|
||||
var updatedIconOffset = CGPoint()
|
||||
if let _ = message.adAttribute {
|
||||
if isSummarize {
|
||||
if isExpand {
|
||||
updatedIconImage = PresentationResourcesChat.chatFreeExpandButtonIcon(presentationData.theme.theme, wallpaper: presentationData.theme.wallpaper)
|
||||
} else {
|
||||
updatedIconImage = PresentationResourcesChat.chatFreeCollapseButtonIcon(presentationData.theme.theme, wallpaper: presentationData.theme.wallpaper)
|
||||
}
|
||||
} else if let _ = message.adAttribute {
|
||||
updatedIconImage = PresentationResourcesChat.chatFreeCloseButtonIcon(presentationData.theme.theme, wallpaper: presentationData.theme.wallpaper)
|
||||
updatedIconOffset = CGPoint(x: UIScreenPixel, y: UIScreenPixel)
|
||||
|
||||
@@ -167,6 +183,17 @@ public class ChatMessageShareButton: ASDisplayNode {
|
||||
updatedIconImage = PresentationResourcesChat.chatFreeShareButtonIcon(presentationData.theme.theme, wallpaper: presentationData.theme.wallpaper)
|
||||
}
|
||||
|
||||
if isSummarize {
|
||||
if self.topIconNode.image != nil, let snapshotView = self.topIconNode.view.snapshotContentTree() {
|
||||
self.view.addSubview(snapshotView)
|
||||
|
||||
snapshotView.layer.animateScale(from: 1.0, to: 0.01, duration: 0.25, removeOnCompletion: false, completion: { _ in
|
||||
snapshotView.removeFromSuperview()
|
||||
})
|
||||
self.topIconNode.layer.animateScale(from: 0.01, to: 1.0, duration: 0.25)
|
||||
}
|
||||
}
|
||||
|
||||
self.topIconNode.image = updatedIconImage
|
||||
self.topIconOffset = updatedIconOffset
|
||||
|
||||
@@ -309,6 +336,22 @@ public class ChatMessageShareButton: ASDisplayNode {
|
||||
self.backgroundBlurView?.view.isHidden = false
|
||||
}
|
||||
|
||||
if isSummarize {
|
||||
let starsView: StarsView
|
||||
if let current = self.starsView {
|
||||
starsView = current
|
||||
} else {
|
||||
starsView = StarsView()
|
||||
self.starsView = starsView
|
||||
self.view.insertSubview(starsView, belowSubview: self.topIconNode.view)
|
||||
}
|
||||
starsView.frame = CGRect(origin: .zero, size: size)
|
||||
starsView.update(size: size, color: .white)
|
||||
} else if let starsView = self.starsView {
|
||||
self.starsView = nil
|
||||
starsView.removeFromSuperview()
|
||||
}
|
||||
|
||||
return size
|
||||
}
|
||||
|
||||
@@ -322,3 +365,70 @@ public class ChatMessageShareButton: ASDisplayNode {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private final class StarsView: UIView {
|
||||
private let hierarchyTrackingLayer: HierarchyTrackingLayer
|
||||
private let topStar = SimpleLayer()
|
||||
private let bottomStar = SimpleLayer()
|
||||
|
||||
override init(frame: CGRect) {
|
||||
self.hierarchyTrackingLayer = HierarchyTrackingLayer()
|
||||
|
||||
super.init(frame: frame)
|
||||
|
||||
self.clipsToBounds = true
|
||||
self.layer.addSublayer(self.hierarchyTrackingLayer)
|
||||
|
||||
self.hierarchyTrackingLayer.didEnterHierarchy = { [weak self] in
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
self.updateAnimations()
|
||||
}
|
||||
|
||||
self.layer.addSublayer(self.topStar)
|
||||
self.layer.addSublayer(self.bottomStar)
|
||||
|
||||
let image = UIImage(bundleImageName: "Settings/Storage/ParticleStar")
|
||||
self.topStar.contents = image?.cgImage
|
||||
self.bottomStar.contents = image?.cgImage
|
||||
|
||||
self.topStar.bounds = CGRect(origin: .zero, size: CGSize(width: 10.0, height: 10.0))
|
||||
self.bottomStar.bounds = CGRect(origin: .zero, size: CGSize(width: 10.0, height: 10.0))
|
||||
|
||||
self.topStar.opacity = 0.5
|
||||
self.bottomStar.opacity = 0.5
|
||||
}
|
||||
|
||||
required init(coder: NSCoder) {
|
||||
preconditionFailure()
|
||||
}
|
||||
|
||||
func updateAnimations() {
|
||||
let topAnimation = CAKeyframeAnimation(keyPath: "transform.scale")
|
||||
topAnimation.values = [1.0 as NSNumber, 1.0 as NSNumber, 0.55 as NSNumber]
|
||||
topAnimation.keyTimes = [0.0 as NSNumber, 0.1 as NSNumber, 1.0 as NSNumber]
|
||||
topAnimation.duration = 0.9
|
||||
topAnimation.autoreverses = true
|
||||
topAnimation.repeatCount = Float.infinity
|
||||
topAnimation.beginTime = CACurrentMediaTime()
|
||||
self.topStar.add(topAnimation, forKey: "blink")
|
||||
|
||||
let bottomAnimation = CAKeyframeAnimation(keyPath: "transform.scale")
|
||||
bottomAnimation.values = [1.0 as NSNumber, 1.0 as NSNumber, 0.55 as NSNumber]
|
||||
bottomAnimation.keyTimes = [0.0 as NSNumber, 0.1 as NSNumber, 1.0 as NSNumber]
|
||||
bottomAnimation.duration = 0.9
|
||||
bottomAnimation.autoreverses = true
|
||||
bottomAnimation.repeatCount = Float.infinity
|
||||
bottomAnimation.beginTime = CACurrentMediaTime() + 0.9
|
||||
self.bottomStar.add(bottomAnimation, forKey: "blink")
|
||||
}
|
||||
|
||||
func update(size: CGSize, color: UIColor) {
|
||||
self.topStar.layerTintColor = color.cgColor
|
||||
self.bottomStar.layerTintColor = color.cgColor
|
||||
|
||||
self.topStar.position = CGPoint(x: 9.0, y: 9.0)
|
||||
self.bottomStar.position = CGPoint(x: size.width - 9.0, y: size.height - 9.0)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user