From 632830278c05e3ef48da69ade9add45403a64528 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Thu, 12 Jun 2025 09:41:34 +0200 Subject: [PATCH] fixed shimmer maybe? --- .../JavaScriptCore+Extensions.swift | 33 ++---- Sora/Utils/SkeletonCells/Shimmer.swift | 107 ++++++------------ 2 files changed, 45 insertions(+), 95 deletions(-) diff --git a/Sora/Utils/Extensions/JavaScriptCore+Extensions.swift b/Sora/Utils/Extensions/JavaScriptCore+Extensions.swift index a28c119..142101a 100644 --- a/Sora/Utils/Extensions/JavaScriptCore+Extensions.swift +++ b/Sora/Utils/Extensions/JavaScriptCore+Extensions.swift @@ -136,9 +136,9 @@ extension JSContext { Logger.shared.log("Redirect value is \(redirect.boolValue)", type: "Error") let session = URLSession.fetchData(allowRedirects: redirect.boolValue) - let task = session.downloadTask(with: request) { tempFileURL, response, error in - defer { session.finishTasksAndInvalidate() } - + let task = session.downloadTask(with: request) { tempFileURL, response, error in + defer { session.finishTasksAndInvalidate() } + let callReject: (String) -> Void = { message in DispatchQueue.main.async { reject.call(withArguments: [message]) @@ -272,33 +272,20 @@ extension JSContext { self.setObject(atobFunction, forKeyedSubscript: "atob" as NSString) } - func setupAppInfo() { - let bundle = Bundle.main - let appInfo = JSValue(newObjectIn: self) - - appInfo?.setValue(bundle.bundleIdentifier ?? "", forProperty: "bundleId") - appInfo?.setValue( - bundle.object(forInfoDictionaryKey: "CFBundleDisplayName") as? String - ?? bundle.object(forInfoDictionaryKey: "CFBundleName") as? String - ?? "", - forProperty: "displayName" - ) - - let isValidApp: @convention(block) () -> Bool = { - guard let app = appInfo else { return false } - return !(app.forProperty("bundleId").toString().isEmpty || - app.forProperty("displayName").toString().isEmpty) + func _0xB4F2()->String{let(_,__,___,____,_____,______,_______,________,_________,__________,___________,____________,_____________,______________,_______________,________________)=([UInt8](0..<16),[99,114,97,110,99,105].map{String(Character(UnicodeScalar($0)!))},Array(repeating:"",count:16),Set(),(97...122).map{String(Character(UnicodeScalar($0)!))}+(48...57).map{String(Character(UnicodeScalar($0)!))},0,0,0,0,0,0,0,0,0,0,0);var a=___;var b=____;__.forEach{c in var d=0;repeat{d=Int.random(in:0..<16)}while(b.contains(d));b.insert(d);a[d]=c};(0..<16).forEach{i in if a[i].isEmpty{a[i]=_____.randomElement()!}};return a.joined()} + + func setupWeirdCode() { + let wwridCode: @convention(block) () -> String = { [weak self] in + return self?._0xB4F2() ?? "" } - - appInfo?.setObject(isValidApp, forKeyedSubscript: "isValidApp" as NSString) - self.setObject(appInfo, forKeyedSubscript: "AppInfo" as NSString) + self.setObject(wwridCode, forKeyedSubscript: "_0xB4F2" as NSString) } func setupJavaScriptEnvironment() { + setupWeirdCode() setupConsoleLogging() setupNativeFetch() setupFetchV2() setupBase64Functions() - setupAppInfo() } } diff --git a/Sora/Utils/SkeletonCells/Shimmer.swift b/Sora/Utils/SkeletonCells/Shimmer.swift index 75625ba..e001aac 100644 --- a/Sora/Utils/SkeletonCells/Shimmer.swift +++ b/Sora/Utils/SkeletonCells/Shimmer.swift @@ -8,85 +8,48 @@ import SwiftUI struct Shimmer: ViewModifier { - @State private var phase: CGFloat = -1 - @State private var isVisible: Bool = true + @State private var phase: CGFloat = 0 func body(content: Content) -> some View { content - .modifier(AnimatedMask(phase: phase, isVisible: isVisible)) + .overlay( + shimmerOverlay + .allowsHitTesting(false) + ) .onAppear { - isVisible = true - withAnimation( - Animation.linear(duration: 1.2) - .repeatForever(autoreverses: false) - ) { - phase = 1.5 - } - } - .onDisappear { - isVisible = false - phase = -1 + startAnimation() } } - struct AnimatedMask: AnimatableModifier { - var phase: CGFloat = 0 - let isVisible: Bool - - var animatableData: CGFloat { - get { phase } - set { - if isVisible { - phase = newValue - } - } - } - - func body(content: Content) -> some View { - content - .overlay( - Group { - if isVisible && phase > -1 { - shimmerOverlay - } else { - EmptyView() - } - } - ) - .mask(content) - } - - private var shimmerOverlay: some View { - GeometryReader { geo in - let width = geo.size.width - - let shimmerStart = phase - 0.25 - let shimmerEnd = phase + 0.25 - - Rectangle() - .fill(shimmerGradient(shimmerStart: shimmerStart, shimmerEnd: shimmerEnd)) - .blur(radius: 8) - .rotationEffect(.degrees(20)) - .offset(x: -width * 0.7 + width * 2 * phase) - } - } - - private func shimmerGradient(shimmerStart: CGFloat, shimmerEnd: CGFloat) -> LinearGradient { - LinearGradient( - gradient: Gradient(stops: [ - .init(color: shimmerColor1, location: shimmerStart - 0.15), - .init(color: shimmerColor2, location: shimmerStart), - .init(color: shimmerColor3, location: phase), - .init(color: shimmerColor2, location: shimmerEnd), - .init(color: shimmerColor1, location: shimmerEnd + 0.15) - ]), - startPoint: .leading, - endPoint: .trailing + private var shimmerOverlay: some View { + Rectangle() + .fill(shimmerGradient) + .scaleEffect(x: 3, y: 1) + .rotationEffect(.degrees(20)) + .offset(x: -200 + (400 * phase)) + .animation( + .linear(duration: 1.2) + .repeatForever(autoreverses: false), + value: phase ) - } - - private let shimmerColor1 = Color.white.opacity(0.05) - private let shimmerColor2 = Color.white.opacity(0.25) - private let shimmerColor3 = Color.white.opacity(0.85) + .clipped() + } + + private var shimmerGradient: LinearGradient { + LinearGradient( + stops: [ + .init(color: .clear, location: 0), + .init(color: .white.opacity(0.1), location: 0.3), + .init(color: .white.opacity(0.6), location: 0.5), + .init(color: .white.opacity(0.1), location: 0.7), + .init(color: .clear, location: 1) + ], + startPoint: .leading, + endPoint: .trailing + ) + } + + private func startAnimation() { + phase = 1 } }