86 lines
2.5 KiB
Swift
86 lines
2.5 KiB
Swift
|
|
|
|
// 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
|
|
}
|
|
}
|
|
}
|
|
|