165 lines
5.8 KiB
Swift
165 lines
5.8 KiB
Swift
//
|
|
// AppRouter.swift
|
|
// Crush
|
|
//
|
|
// Created by Leon on 2025/7/12.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
@objcMembers class AppRouter: NSObject {
|
|
static let shared = AppRouter()
|
|
var isBlockBackRootVc: Bool = false
|
|
|
|
static func goBackRootController(jumpIndex: TabBarItemIndex = .home, block: (() -> Void)? = nil) {
|
|
guard let window = UIWindow.applicationKey else {
|
|
assert(false)
|
|
block?()
|
|
return
|
|
}
|
|
guard let rootVC = window.rootViewController else {
|
|
assert(false)
|
|
block?()
|
|
return
|
|
}
|
|
|
|
// 取消拦截
|
|
// if AppRouter.shared.isBlockBackRootVc {
|
|
// block?()
|
|
// return
|
|
// }
|
|
|
|
AppRouter.shared.isBlockBackRootVc = true
|
|
|
|
var presentedController: UIViewController?
|
|
if rootVC is UITabBarController {
|
|
if let vc = (rootVC as? TabBarController)?.selectedViewController {
|
|
presentedController = vc
|
|
}
|
|
}
|
|
var presentedControllers = [UIViewController]()
|
|
while presentedController?.presentedViewController != nil {
|
|
if let vc = rootVC.presentedViewController {
|
|
presentedControllers.append(vc)
|
|
presentedController = vc
|
|
}
|
|
}
|
|
if presentedControllers.count > 0 {
|
|
dismissControllers(presentedControllers: presentedControllers, index: presentedControllers.count - 1) {
|
|
popToRootController(from: rootVC) {
|
|
guard let vc = rootVC as? TabBarController else {
|
|
AppRouter.shared.isBlockBackRootVc = false
|
|
return
|
|
}
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) {
|
|
vc.setSelected(index: jumpIndex)
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) {
|
|
block?()
|
|
AppRouter.shared.isBlockBackRootVc = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
popToRootController(from: presentedController ?? rootVC, animated: false) {
|
|
guard let vc = rootVC as? TabBarController else {
|
|
AppRouter.shared.isBlockBackRootVc = false
|
|
return
|
|
}
|
|
// DispatchQueue.main.asyncAfter(deadline: .now() + 0) { // 0.25
|
|
vc.setSelected(index: jumpIndex)
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) {
|
|
block?()
|
|
AppRouter.shared.isBlockBackRootVc = false
|
|
}
|
|
// }
|
|
}
|
|
}
|
|
}
|
|
|
|
static func dismissControllers(presentedControllers: [UIViewController], index: Int, completion: @escaping (() -> Void)) {
|
|
if index < 0 {
|
|
completion()
|
|
} else {
|
|
guard let vc = presentedControllers[safe: index] else { return }
|
|
vc.dismiss(animated: false) {
|
|
dismissControllers(presentedControllers: presentedControllers, index: index - 1, completion: completion)
|
|
}
|
|
}
|
|
}
|
|
|
|
static func popToRootController(from vc: UIViewController, animated: Bool? = true, completion: @escaping (() -> Void)) {
|
|
if vc is UINavigationController {
|
|
if let navc = vc as? UINavigationController {
|
|
navc.popToRootViewController(animated: animated ?? true)
|
|
completion()
|
|
}
|
|
}
|
|
if let navc = vc.navigationController {
|
|
navc.popToRootViewController(animated: animated ?? true)
|
|
completion()
|
|
}
|
|
}
|
|
}
|
|
|
|
extension AppRouter{
|
|
static func goCreateEditAIRole(aiId: Int? = nil, aiEditInfo: AIUserModel? = nil) {
|
|
if AppDictManager.shared.aiDict == nil{
|
|
Hud.showIndicator()
|
|
AppDictManager.shared.loadAIDict { ok in
|
|
Hud.hideIndicator()
|
|
if ok{
|
|
AppRouter.goCreateEditAIRole(aiId: aiId)
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
if let id = aiId, id > 0{ // 编辑
|
|
if aiEditInfo == nil{ // 请求编辑用信息
|
|
Hud.showIndicator()
|
|
AIRoleProvider.request(.aiInfoMineGet(id: id), modelType: AIUserModel.self) { result in
|
|
Hud.hideIndicator()
|
|
switch result {
|
|
case .success(let success):
|
|
if let editInfo = success{
|
|
AppRouter.goCreateEditAIRole(aiId: id, aiEditInfo: editInfo)
|
|
}
|
|
case .failure:
|
|
break
|
|
}
|
|
}
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
let vc = RoleClassificationSelectController()
|
|
vc.viewModel.editAIInfo = aiEditInfo
|
|
let navc = CLNavigationController(rootViewController: vc)
|
|
UIWindow.getTopViewController()?.present(navc, animated: true)
|
|
}
|
|
|
|
static func goAIRoleHome(aiId: Int?){
|
|
guard let id = aiId else {return}
|
|
let vc = RoleHomePagerController()
|
|
vc.aiId = id
|
|
UIWindow.getTopNavigationController()?.pushViewController(vc, animated: true)
|
|
}
|
|
|
|
// 首次创建, alert是否创建相册
|
|
static func alertCreateAlbumsToRoleHome(aiId: Int?){
|
|
|
|
let alert = Alert(title: "Create Album", text: "Go to your personal homepage to create albums for your characters, attract interlocutors and increase revenue.")
|
|
let action1 = AlertAction(title: "Go", actionStyle: .confirm) {
|
|
AppRouter.goAIRoleHome(aiId: aiId)
|
|
}
|
|
let action2 = AlertAction(title: "Not now", actionStyle: .cancel)
|
|
alert.addAction(action1)
|
|
alert.addAction(action2)
|
|
alert.show()
|
|
}
|
|
|
|
|
|
}
|