// // TSGenerateBaseOperation.swift // AIRingtone // // Created by 100Years on 2025/3/24. // import Combine import Alamofire class TSGenerateBaseOperationQueue: TSBaseOperationQueue { // 存储每个操作的 AnyCancellable var stateables: [String: AnyCancellable] = [:] var generateOperationStateChanged:((String)->Void)? override func cancelOperations(uuid: String) { super.cancelOperations(uuid: uuid) stateables.removeValue(forKey: uuid) } func handleStateDatauPblished(uuid:String,generateOperation: TSGenerateBaseOperation,notificationName:Notification.Name) { stateables[uuid] = generateOperation.$stateDatauPblished.sink { [weak self] state in guard let self = self else { return } DispatchQueue.main.async { self.generateOperationStateChanged?(uuid) let uuidData = self.getUUIDData(uuid: uuid) NotificationCenter.default.post( name: notificationName, object: nil, userInfo: [ "uuid": uuid, "count":self.queue.maxConcurrentOperationCount, "state":uuidData.0, "actionInfo":uuidData.1, ]) } } } func getUUIDData(uuid:String)->(TSProgressState,TSActionInfoModel?){ return (.none,TSActionInfoModel()) } } class TSGenerateBaseOperation: TSBaseOperation , @unchecked Sendable{ var actionInfoDict:[String:Any]{ return [:] } @Published var stateDatauPblished:(TSProgressState,TSActionInfoModel?) = (TSProgressState.none,nil){ didSet{ dePrint("TSBaseOperation stateDatauPblished didSet = \(stateDatauPblished)") if case .start = stateDatauPblished.0 { start() }else if stateDatauPblished.0.isResult { finished() } } } var creatRequest:Request? var queryRequest:Request? var stopNetwork = false var generatingProgress = 0 var action_id:Int = 0 var currentActionInfoModelChanged:((TSActionInfoModel)->Void)? @Published var currentActionInfoModel: TSActionInfoModel = TSActionInfoModel() func getActionInfo(action_id:Int){ self.action_id = action_id queryRequest = TSNetworkShared.get(urlType: .actionInfo,parameters: ["action_id":action_id]) { [weak self] data,error in guard let self = self else { return } if let result = kNetWorkResultSuccess(data: data) { if let genmojiModel = TSActionInfoModel(JSON: result) { switch genmojiModel.actionStatus { case .success: TSToastShared.hideLoading() self.stateDatauPblished = (.success(nil),genmojiModel) generatingProgress = 0 case .failed: self.stateDatauPblished = (.failed(kNetWorkMessage(data: data) ?? ""),nil) generatingProgress = 0 default: stateDatauPblished = (.progressString(generating(progress: genmojiModel.percent)),nil) if stopNetwork == false { kDelayOnMainThread(1.0) { self.getActionInfo(action_id: action_id) } } } } }else{ self.stateDatauPblished = (.failed(error?.localizedDescription ?? ""),nil) } } } func generating(progress:Float) -> String { //Generating 0%-100% var progressInt = Int(progress*100) if generatingProgress >= progressInt{ return getGeneratingProgressText() } if progressInt > 99 { progressInt = 99 } generatingProgress = progressInt return getGeneratingProgressText() } func getGeneratingProgressText()->String{ return "Generating \(generatingProgress)%" } func cancelAllRequest(){ creatRequest?.cancel() queryRequest?.cancel() stopNetwork = true cancel() } } var kRandomBoolLastResult:Bool = true func kRandomBool() -> Bool { if !kRandomBoolLastResult { // 如果上一次是 false,这次必须返回 true kRandomBoolLastResult = true return true } else { // 如果上一次是 true,随机返回 true 或 false let randomResult = Bool.random() kRandomBoolLastResult = randomResult return randomResult } }