GLEGram 12.5 — Initial public release

Based on Swiftgram 12.5 (Telegram iOS 12.5).
All GLEGram features ported and organized in GLEGram/ folder.

Features: Ghost Mode, Saved Deleted Messages, Content Protection Bypass,
Font Replacement, Fake Profile, Chat Export, Plugin System, and more.

See CHANGELOG_12.5.md for full details.
This commit is contained in:
Leeksov
2026-04-06 09:48:12 +03:00
commit 4647310322
39685 changed files with 11052678 additions and 0 deletions
@@ -0,0 +1,75 @@
//
// ShapeContainerLayer.swift
// lottie-swift
//
// Created by Brandon Withrow on 1/30/19.
//
import Foundation
import QuartzCore
/// The base layer that holds Shapes and Shape Renderers
class ShapeContainerLayer: CALayer {
// MARK: Lifecycle
override init() {
super.init()
actions = [
"position" : NSNull(),
"bounds" : NSNull(),
"anchorPoint" : NSNull(),
"transform" : NSNull(),
"opacity" : NSNull(),
"hidden" : NSNull(),
]
}
required init?(coder _: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(layer: Any) {
guard let layer = layer as? ShapeContainerLayer else {
fatalError("init(layer:) wrong class.")
}
super.init(layer: layer)
}
// MARK: Internal
private(set) var renderLayers: [ShapeContainerLayer] = []
var renderScale: CGFloat = 1 {
didSet {
updateRenderScale()
}
}
func insertRenderLayer(_ layer: ShapeContainerLayer) {
renderLayers.append(layer)
insertSublayer(layer, at: 0)
}
func markRenderUpdates(forFrame: CGFloat) {
if hasRenderUpdate(forFrame: forFrame) {
rebuildContents(forFrame: forFrame)
}
guard isHidden == false else { return }
renderLayers.forEach { $0.markRenderUpdates(forFrame: forFrame) }
}
func hasRenderUpdate(forFrame _: CGFloat) -> Bool {
false
}
func rebuildContents(forFrame _: CGFloat) {
/// Override
}
func updateRenderScale() {
contentsScale = renderScale
renderLayers.forEach( { $0.renderScale = renderScale } )
}
}
@@ -0,0 +1,100 @@
//
// RenderLayer.swift
// lottie-swift
//
// Created by Brandon Withrow on 1/18/19.
//
import Foundation
import QuartzCore
/// The layer responsible for rendering shape objects
final class ShapeRenderLayer: ShapeContainerLayer {
// MARK: Lifecycle
init(renderer: Renderable & NodeOutput) {
self.renderer = renderer
super.init()
anchorPoint = .zero
actions = [
"position" : NSNull(),
"bounds" : NSNull(),
"anchorPoint" : NSNull(),
"path" : NSNull(),
"transform" : NSNull(),
"opacity" : NSNull(),
"hidden" : NSNull(),
]
shapeLayer.actions = [
"position" : NSNull(),
"bounds" : NSNull(),
"anchorPoint" : NSNull(),
"path" : NSNull(),
"fillColor" : NSNull(),
"strokeColor" : NSNull(),
"lineWidth" : NSNull(),
"miterLimit" : NSNull(),
"lineDashPhase" : NSNull(),
"opacity": NSNull(),
"hidden" : NSNull(),
]
addSublayer(shapeLayer)
renderer.setupSublayers(layer: shapeLayer)
}
override init(layer: Any) {
guard let layer = layer as? ShapeRenderLayer else {
fatalError("init(layer:) wrong class.")
}
renderer = layer.renderer
super.init(layer: layer)
}
required init?(coder _: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: Internal
fileprivate(set) var renderer: Renderable & NodeOutput
let shapeLayer = CAShapeLayer()
override func hasRenderUpdate(forFrame: CGFloat) -> Bool {
isHidden = !renderer.isEnabled
guard isHidden == false else { return false }
return renderer.hasRenderUpdates(forFrame)
}
override func rebuildContents(forFrame _: CGFloat) {
if renderer.shouldRenderInContext {
if let newPath = renderer.outputPath {
bounds = renderer.renderBoundsFor(newPath.boundingBox)
} else {
bounds = .zero
}
position = bounds.origin
setNeedsDisplay()
} else {
shapeLayer.path = renderer.outputPath
renderer.updateShapeLayer(layer: shapeLayer)
}
}
override func draw(in ctx: CGContext) {
if let path = renderer.outputPath {
if !path.isEmpty {
ctx.addPath(path)
}
}
renderer.render(ctx)
}
override func updateRenderScale() {
super.updateRenderScale()
shapeLayer.contentsScale = renderScale
}
}