123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- //
- // TSNetWork+Business.swift
- // AIEmoji
- //
- // Created by 100Years on 2025/1/16.
- //
- /// 基础 URL(根据需求修改)
- private let baseURL = "http://ai.soundmove.cn"
- //private let baseChinaURL = "http://ai.100yearslater100.com"
- import Alamofire
- enum TSNeURLType:String {
-
- case musicCreate = "/api/music/create" //音乐生成
- case actionInfo = "/api/action/info" //查询生成过程接口
- case upload = "/api/upload" //上传
-
- // func getUrlString() -> String {
- // if Locale.current.identifier.contains("_CN") {//中国区
- // return baseChinaURL + self.rawValue
- // }else{
- // return baseURL + self.rawValue
- // }
- // }
-
- func getUrlString() -> String {
- return baseURL + self.rawValue
- }
- }
- func getUserInfoJsonString()->[String:Any] {
- let uuid: String
- let uuidUdKey = "my_UUID"
- if let saved = UserDefaults.standard.string(forKey: uuidUdKey),
- !saved.isEmpty {
- uuid = saved
- } else {
- let newUuid = UUID().uuidString
- UserDefaults.standard.set(newUuid, forKey: uuidUdKey)
- UserDefaults.standard.synchronize()
- uuid = newUuid
- }
-
- let dic:[String:Any] = [
- "device":UIDevice.current.modelName,
- "deviceId":uuid,
- "iosVersion":UIDevice.current.systemVersion,
- "appVersion":appShortVersion(),
- // "subscriptionStatus":kPurchaseDefault.isVip ? "active" : "fallow",
- ]
- return dic
- }
- func getLanguageCode()->String{
- if Locale.current.identifier.contains("zh-Hant"){
- return "zh-Hant"
- }
- if let languageCode = Locale.current.languageCode {
- // print("当前设备语言简写: \(languageCode)") // 输出如 "en", "ja", "zh" 等
- return languageCode
- }
- return "en"
- }
- extension TSNetworkManager {
-
- /// 通用 get 请求
- func get<T: TSBaseModel>(
- urlType: TSNeURLType,
- parameters: [String: Any]? = nil,
- responseType: T.Type? = nil,
- completion: @escaping (Result<Any, Error>) -> Void
- ) -> Request {
- let urlString = urlType.getUrlString()
- return request(method: .get, urlString: urlString, parameters:parameters) { result in
- completion(result)
- }
- }
- /// 通用 POST 请求
- /// - Parameters:
- /// - endpoint: 接口路径
- /// - parameters: 请求参数
- /// - responseType: 响应数据模型(可选)
- /// - completion: 请求完成的回调
- func post<T: TSBaseModel>(
- urlType: TSNeURLType,
- parameters: [String: Any]? = nil,
- responseType: T.Type? = nil,
- completion: @escaping (Result<Any, Error>) -> Void
- ) -> Request {
- let urlString = urlType.getUrlString()
- return request(method: .post, urlString: urlString, parameters:parameters) { result in
- completion(result)
- }
- }
-
- /// 通用 POST Stream 请求
- /// - Parameters:
- /// - endpoint: 接口路径
- /// - parameters: 请求参数
- /// - responseType: 响应数据模型(可选)
- /// - completion: 请求完成的回调
- func postStream<T: TSBaseModel>(
- urlType: TSNeURLType,
- parameters: [String: Any]? = nil,
- responseType: T.Type? = nil,
- streamHandler:@escaping (String) -> Void,
- completion: @escaping (Result<Any, Error>) -> Void
- ) -> Request?{
- let urlString = urlType.getUrlString()
- let streamRequest = postStreamRequest(urlString: urlString, parameters: parameters, streamHandler: streamHandler, completion: completion)
- return streamRequest
- }
-
- /// 上传多个 Data 数据
- /// - Parameters:
- /// - urlType: TSNeURLType
- /// - dataArray: Data 数组,每个元素是一个字典,包含 Data 和字段名
- /// - parameters: 其他参数(可选)
- /// - headers: 自定义请求头(可选)
- /// - completion: 完成回调,返回结果或错误
- func uploadData<T: TSBaseModel>(
- urlType: TSNeURLType,
- dataArray: [[String: Any]], // Data 数组,每个元素包含 Data 和字段名
- parameters: [String: Any]? = nil,
- responseType: T.Type? = nil,
- progressHandler: @escaping (Float) -> Void, // 上传进度回调
- completion: @escaping (Result<Any, Error>) -> Void
- ) -> Request?{
- let urlString = urlType.getUrlString()
- let request = uploadData(urlString: urlString,dataArray:dataArray, parameters: parameters, progressHandler: { progress in
- progressHandler(Float(progress.fractionCompleted))
- },completion: completion)
- return request
- }
-
- func downloadFile(
- urlString: String,
- to destination: URL,
- progressHandler: ((Double) -> Void)? = nil,
- completion: @escaping (URL?, Error?) -> Void
- ) -> DownloadRequest? {
- let request = self.downloadFile(
- urlString: urlString,
- to: destination,
- progressHandler: { progress in
- print("下载进度: \(progress * 100)%")
- progressHandler?(progress)
- },
- completion: { result in
- switch result {
- case .success(let fileURL):
- dePrint("下载完成,文件保存在: \(fileURL.path)")
- completion(fileURL,nil)
- case .failure(let error):
- dePrint("下载失败: \(error.localizedDescription)")
- completion(nil,error)
- }
- }
- )
- return request
- }
- }
- extension TSNetworkManager {
-
- // func uploadAudio(
- // fileURL:URL,
- // progressHandler: @escaping (Float) -> Void, // 上传进度回调
- // completion: @escaping (Any?, Error?) -> Void)
- // -> Request?{
- //
- // let urlString = TSNeURLType.upload.getUrlString()
- //
- // let request = uploadFile(urlString: urlString, fileURL: fileURL, multipartBuilder: { multipart in
- // multipart.append(fileURL, withName: "file", fileName: "audio.mp3", mimeType: "audio/mp3")
- // }) { progress in
- // progressHandler(Float(progress.fractionCompleted))
- // } completion: { [weak self] result in
- // guard let self = self else { return }
- // switch result {
- // case .success(let data):
- // if let dataDict = kNetWorkCodeSuccess(data: data),
- // let picUrl = dataDict["result"] as? String{
- // completion(picUrl,nil)
- // }else{
- // let error = NSError(domain: "Service exception", code: 0)
- // completion(nil,error)
- // }
- // case .failure(let error):
- // completion(nil,error)
- // }
- // }
- //
- // return request
- // }
-
-
- func uploadAudio(
- fileURL:URL,
- progressHandler: @escaping (Float) -> Void, // 上传进度回调
- completion: @escaping (Any?, Error?) -> Void)
- -> Request?{
- let urlString = TSNeURLType.upload.getUrlString()
-
-
- dePrint("✈️✈️✈️网络请求:\(urlString)")
- guard let url = URL(string: urlString) else {
- completion(nil,NSError(domain: "url nil", code: 0))
- return nil
- }
- return AF.upload(
- multipartFormData: { multipart in
- multipart.append(fileURL, withName: "file", fileName: "audio.mp3", mimeType: "audio/mp3")
- },
- to: url
- )
- .uploadProgress { progress in
- dePrint("✈️✈️✈️进度: \(progress.fractionCompleted * 100)%")
- progressHandler(Float(progress.fractionCompleted))
- }
- .responseString { response in
- self.handleResponse(response) { [weak self] result in
- guard let self = self else { return }
- switch result {
- case .success(let data):
- if let dataDict = kNetWorkCodeSuccess(data: data),
- let picUrl = dataDict["result"] as? String{
- completion(picUrl,nil)
- }else{
- let error = NSError(domain: "Service exception", code: 0)
- completion(nil,error)
- }
- case .failure(let error):
- completion(nil,error)
- }
- }
- }
- }
- }
|