// Created by AI on 2025-10-11. import UIKit import Foundation @objc class EPProgressHUD: NSObject { private static var currentHUD: MBProgressHUD? private static var keyWindow: UIWindow? { if #available(iOS 13.0, *) { return UIApplication.shared.connectedScenes .compactMap { $0 as? UIWindowScene } .flatMap { $0.windows } .first { $0.isKeyWindow } } else { return UIApplication.shared.keyWindow } } @objc static func showProgress(_ uploaded: Int, total: Int) { DispatchQueue.main.async { guard let window = keyWindow else { return } if let hud = currentHUD { hud.label.text = String(format: YMLocalizedString("upload.progress_format"), uploaded, total) hud.progress = Float(uploaded) / Float(total) } else { let hud = MBProgressHUD.showAdded(to: window, animated: true) hud.mode = .determinateHorizontalBar hud.label.text = String(format: YMLocalizedString("upload.progress_format"), uploaded, total) hud.progress = Float(uploaded) / Float(total) hud.removeFromSuperViewOnHide = true currentHUD = hud } } } @objc static func showError(_ message: String) { DispatchQueue.main.async { guard let window = keyWindow else { return } let hud = MBProgressHUD.showAdded(to: window, animated: true) hud.mode = .text hud.label.text = message hud.label.numberOfLines = 0 hud.removeFromSuperViewOnHide = true hud.hide(animated: true, afterDelay: 2.0) } } @objc static func showSuccess(_ message: String) { DispatchQueue.main.async { guard let window = keyWindow else { return } let hud = MBProgressHUD.showAdded(to: window, animated: true) hud.mode = .text hud.label.text = message hud.label.numberOfLines = 0 hud.removeFromSuperViewOnHide = true hud.hide(animated: true, afterDelay: 2.0) } } @objc static func dismiss() { DispatchQueue.main.async { guard let hud = currentHUD else { return } hud.hide(animated: true) currentHUD = nil } } }