wenweiwei преди 3 години
родител
ревизия
42f19b7c89

+ 13 - 1
BFCommonKit.podspec

@@ -24,12 +24,24 @@ TODO: Add long description of the pod here.
     gg.source_files = 'BFCommonKit/Classes/BFConfig/*'
     gg.frameworks = 'UIKit'
     gg.dependency 'BFCommonKit/BFEnums'
-    gg.dependency 'BFCommonKit/BFCategorys'
+  end
+  s.subspec 'BFEnv' do |gg|
+    gg.source_files = 'BFCommonKit/Classes/BFEnv/*'
+    gg.frameworks = 'UIKit'
+    gg.dependency 'BFCommonKit/BFConfig'
   end
   s.subspec 'BFEnums' do |ee|
     ee.source_files = 'BFCommonKit/Classes/BFEnums/*'
     ee.frameworks = 'Foundation'
   end
+  s.subspec 'BFModels' do |mm|
+    mm.source_files = 'BFCommonKit/Classes/BFModels/*'
+    mm.frameworks = 'Foundation'
+    mm.dependency 'BFCommonKit/BFEnums'
+    mm.dependency 'ObjectMapper'             ,'4.2.0'    # json转model库
+    mm.dependency 'RealmSwift'               ,'10.7.6'
+  end
+  
   s.subspec 'BFCategorys' do |cc|
     cc.source_files = 'BFCommonKit/Classes/BFCategorys/*'
     cc.frameworks = 'Foundation','UIKit','MobileCoreServices' # ,'CommonCrypto'

+ 1 - 1
BFCommonKit/Classes/BFConfig/BFConfig.swift

@@ -54,7 +54,7 @@ public class BFConfig: NSObject {
     //划块使用的图片名 add by ak
     public var silderPinUsedImageName = "sliderTHBPin"
     //闪音卡点编辑区未选择中状态颜色 add by ak
-    public var pointEditNamalBackgroundColor = UIColor.hexColor(hexadecimal: "#F9F9F9")
+    public var pointEditNamalBackgroundColor = UIColor.init(red: 249 / 255, green: 249 / 255, blue: 249 / 255, alpha: 1)
     
     //三个模式 btn 高亮和默认图的文件名
     public var onlyMusicBtnImage_N = "onlyMusic_n"

+ 0 - 0
BFCommonKit/Classes/BFUtility/PQRequestURLUtil.swift → BFCommonKit/Classes/BFEnv/PQRequestURLUtil.swift


+ 123 - 0
BFCommonKit/Classes/BFEnv/PQSingletonEnvUtil.swift

@@ -0,0 +1,123 @@
+//
+//  PQSingletonEnvUtil.swift
+//  PQSpeed
+//
+//  Created by lieyunye on 2020/5/27.
+//  Copyright © 2020 BytesFlow. All rights reserved.
+//
+
+import Foundation
+
+// add by ak 开发和发布版本的不同设置  1 为正式版本发布的苹果  0 是测试 XXXX 上传苹果前要检查
+public let DEVELOPMENT_ENVIRONMENT: Int = 1
+
+public enum ENVMode: String {
+    case ENVModeOnline // 线上环境
+    case ENVModePre // 预发布环境
+    case ENVModeTest // 测试环境
+    case ENVModeBJPre // 北京区预发布环境
+}
+
+public class PQENVUtil {
+    public var envMode: ENVMode {
+        let config = NSDictionary(contentsOfFile: Bundle.main.path(forResource: "PQConfig.plist", ofType: nil) ?? "")
+        let enStr: String = (config?.object(forKey: "ENVMode") ?? "ENVModeOnline") as! String
+        return ENVMode(rawValue: enStr)!
+    }
+
+     static public let shared: PQENVUtil = {
+        let instance = PQENVUtil()
+        // setup code
+
+        return instance
+    }()
+
+    // 票圈视频主域名
+   public var longvideoapi: String {
+        switch envMode {
+        case .ENVModeTest:
+            return testLongvideoapi
+        case .ENVModePre:
+            return preLongvideoapi
+        case .ENVModeBJPre:
+            return preBJLongvideoapi
+        default:
+            return onlineLongvideoapi
+        }
+    }
+
+    // 票圈视频域名(热榜)
+   public var distribution: String {
+        switch envMode {
+        case .ENVModeTest:
+            return testDistributionApi
+        case .ENVModePre:
+            return preDistributionApi
+        case .ENVModeBJPre:
+            return preBJDistributionApi
+        default:
+            return onlineDistributionApi
+        }
+    }
+
+    // 通用域名-eg:数据上报
+    public var commonapi: String {
+        switch envMode {
+        case .ENVModeTest:
+            return testCommonapi
+        case .ENVModePre:
+            return preCommonapi
+        case .ENVModeBJPre:
+            return preBJCommonapi
+        default:
+            return onlineCommonapi
+        }
+    }
+
+    // 视频创作相关域名
+    public var clipapiapi: String {
+        switch envMode {
+        case .ENVModeTest:
+            return testLongvideoapi
+        case .ENVModePre, .ENVModeBJPre:
+            return preLongvideoapi
+        default:
+            return onlineClipapiApi
+        }
+    }
+
+    // 创作工具搜索素材相关域名
+    public var materialSearchApi: String {
+        switch envMode {
+        case .ENVModeTest:
+            return testMaterialSearchApi
+        case .ENVModePre, .ENVModeBJPre:
+            return preMaterialSearchApi
+        default:
+            return onlineMaterialSearchApi
+        }
+    }
+
+    // 消息相关域名
+    public var messageApi: String {
+        switch envMode {
+        case .ENVModeTest:
+            return testMessageApi
+        case .ENVModePre, .ENVModeBJPre:
+            return preMessageApi
+        default:
+            return onlineMessageApi
+        }
+    }
+    // 票圈Api域名
+    public var pqTvApi: String {
+        switch envMode {
+        case .ENVModeTest:
+            return testPQTvApi
+        case .ENVModePre, .ENVModeBJPre:
+            return prePQTvApi
+        default:
+            return onlinePQTvApi
+        }
+    }
+}

+ 113 - 0
BFCommonKit/Classes/BFModels/BFBaseModel.swift

@@ -0,0 +1,113 @@
+//
+//  BFBaseModel.swift
+//  PQSpeed
+//
+//  Created by SanW on 2020/5/25.
+//  Copyright © 2020 BytesFlow. All rights reserved.
+//
+
+import UIKit
+import RealmSwift
+
+open class BFBaseModel: Object {
+    @objc dynamic public var uniqueId: String? // 唯一ID
+    @objc dynamic public var videoId: Int = 0 // 视频ID
+    @objc dynamic public var eventId: String? // 事件ID
+    @objc dynamic public var title: String? // 标题
+    @objc dynamic public var attributedTitle: NSMutableAttributedString? // 富文本标题
+    @objc dynamic public var summary: String? // 描述
+    @objc dynamic public var imageUrl: String = "" // 图片地址
+    @objc dynamic public var selectedImage: String = "" // 图片地址
+    @objc dynamic public var isSelected: Bool = false
+    @objc dynamic public var recommendLogVO: String? // 推荐日志对象
+    @objc dynamic public var abInfoData: String? // AB
+    @objc dynamic public var pageCategoryId: Int = 0 // 页面分类ID
+    @objc dynamic public var version: String = versionName // 版本号
+    @objc dynamic public var mid = getMachineCode() // 设备ID
+    @objc dynamic public var date: Int = 0 // 当前时间戳  CGFloat(Date.init().timeIntervalSince1970) * 1000
+    @objc dynamic public var itemWidth: Float = 0 // cell宽
+    @objc dynamic public var primaryKeys: String? // 区分存储唯一值
+    override class public func primaryKey() -> String? {
+        return "uniqueId"
+    }
+
+    public override required  init() {
+        super.init()
+        uniqueId = getUniqueId(desc: "uniqueId")
+    }
+
+    override class open func ignoredProperties() -> [String] {
+        return ["attributedTitle"]
+    }
+
+    @objc func toString() -> String {
+        var json: [String: Any] = [
+            "version": version,
+            "mid": mid,
+            "pageCategoryId": pageCategoryId,
+            "selectedImage": selectedImage,
+            "isSelected": isSelected,
+            "imageUrl": imageUrl,
+        ]
+        if uniqueId != nil {
+            json["uniqueId"] = uniqueId
+            json["videoId"] = videoId
+        }
+        if eventId != nil {
+            json["eventId"] = eventId
+        }
+        if title != nil {
+            json["title"] = title
+        }
+        if summary != nil {
+            json["summary"] = summary
+        }
+        if recommendLogVO != nil {
+            json["recommendLogVO"] = recommendLogVO
+        }
+        return dictionaryToJsonString(json) ?? ""
+    }
+
+    public init(jsonDict: [String: Any]) {
+        super.init()
+        if jsonDict.keys.contains("id") {
+            uniqueId = "\(jsonDict["id"] ?? "")"
+            videoId = Int(uniqueId ?? "0") ?? 0
+        }
+        if jsonDict.keys.contains("uniqueId") {
+            uniqueId = "\(jsonDict["uniqueId"] ?? "")"
+            videoId = Int(uniqueId ?? "0") ?? 0
+        }
+        if jsonDict.keys.contains("eventId") {
+            eventId = "\(jsonDict["eventId"] ?? "")"
+        }
+        if jsonDict.keys.contains("title") {
+            title = "\(jsonDict["title"] ?? "")"
+        }
+        if jsonDict.keys.contains("summary") {
+            summary = "\(jsonDict["summary"] ?? "")"
+        }
+        if jsonDict.keys.contains("imageUrl") {
+            imageUrl = "\(jsonDict["imageUrl"] ?? "")"
+        }
+        if jsonDict.keys.contains("selectedImage") {
+            selectedImage = "\(jsonDict["selectedImage"] ?? "")"
+        }
+        if jsonDict.keys.contains("isSelected") {
+            isSelected = jsonDict["isSelected"] as! Bool
+        }
+        if jsonDict.keys.contains("recommendLogVO") {
+            recommendLogVO = "\(jsonDict["recommendLogVO"] ?? "")"
+        }
+        if jsonDict.keys.contains("pageCategoryId") {
+            pageCategoryId = Int("\(jsonDict["pageCategoryId"] ?? "0")") ?? 0
+        }
+        if jsonDict.keys.contains("version") {
+            version = "\(jsonDict["version"] ?? "")"
+        }
+        if jsonDict.keys.contains("mid") {
+            mid = "\(jsonDict["mid"] ?? "")"
+        }
+    }
+}
+

+ 82 - 0
BFCommonKit/Classes/BFModels/PQReCreateModel.swift

@@ -0,0 +1,82 @@
+//
+//  PQReCreateModel.swift
+//  PQSpeed
+//
+//  Created by SanW on 2020/12/28.
+//  Copyright © 2020 BytesFlow. All rights reserved.
+//
+
+import RealmSwift
+import UIKit
+import BFCommonKit
+
+public class PQReCreateModel: Object {
+    @objc dynamic public var canReproduce: Int = 0 // 是否可以被再创作,1:是,0:否
+    @objc dynamic public var draftboxId: String? // 草稿ID
+    @objc dynamic public var parentProjectId: String? // 父项目ID
+    @objc dynamic public var rootProjectId: String? // 根项目ID
+    @objc dynamic public var projectId: String? // 项目ID
+    @objc dynamic public var projectLinkUrl: String? // 项目链接
+    @objc dynamic public var reProduceCount: Int = 0 // 被再创作次数
+    @objc dynamic public var reProduceVideoFlag: Int = 0 //  再创作视频标记,1:是,0:否
+    @objc dynamic public var videoId: String? // 视频id
+    @objc dynamic public var parentVideoId: String? // 父视频id
+    @objc dynamic public var rootVideoId: String? // 根视频id
+    @objc dynamic public var rhythmMusicFlag: Int = 0 // 是否有卡点音乐标记 1:是,0:否
+    @objc dynamic public var rhythmMusicName: String? // 卡点音乐歌名
+    var rhythmMusicNameWidth: CGFloat = 0 // 卡点音乐显示宽度
+    
+    // add by ak 卡点模式(1:跳跃卡点,2:快慢速,3:仅配乐)
+    @objc dynamic public var rhythmMode:Int = 0
+    override required init() {
+        super.init()
+    }
+
+   public init(jsonDict: [String: Any]) {
+        super.init()
+        if jsonDict.keys.contains("canReproduce") {
+            canReproduce = Int("\(jsonDict["canReproduce"] ?? "0")") ?? 0
+        }
+        if jsonDict.keys.contains("draftboxId"), "\(jsonDict["draftboxId"] ?? "")" != "<null>" {
+            draftboxId = "\(jsonDict["draftboxId"] ?? "")"
+        }
+        if jsonDict.keys.contains("parentProjectId"), "\(jsonDict["parentProjectId"] ?? "")" != "<null>" {
+            parentProjectId = "\(jsonDict["parentProjectId"] ?? "")"
+        }
+        if jsonDict.keys.contains("rootProjectId"), "\(jsonDict["rootProjectId"] ?? "")" != "<null>" {
+            rootProjectId = "\(jsonDict["rootProjectId"] ?? "")"
+        }
+        if jsonDict.keys.contains("projectId"), "\(jsonDict["projectId"] ?? "")" != "<null>" {
+            projectId = "\(jsonDict["projectId"] ?? "")"
+        }
+        if jsonDict.keys.contains("projectLinkUrl") {
+            projectLinkUrl = "\(jsonDict["projectLinkUrl"] ?? "")"
+        }
+        if jsonDict.keys.contains("reProduceCount") {
+            reProduceCount = Int("\(jsonDict["reProduceCount"] ?? "0")") ?? 0
+        }
+        if jsonDict.keys.contains("reProduceVideoFlag") {
+            reProduceVideoFlag = Int("\(jsonDict["reProduceVideoFlag"] ?? "0")") ?? 0
+        }
+        
+        if jsonDict.keys.contains("rhythmMode"){
+            rhythmMode = Int("\(jsonDict["rhythmMode"] ?? "0")") ?? 0
+        }
+        if jsonDict.keys.contains("parentVideoId"), "\(jsonDict["parentVideoId"] ?? "")" != "<null>" {
+            parentVideoId = "\(jsonDict["parentVideoId"] ?? "")"
+        }
+        if jsonDict.keys.contains("rhythmMusicFlag") {
+            rhythmMusicFlag = Int("\(jsonDict["rhythmMusicFlag"] ?? "0")") ?? 0
+        }
+        if jsonDict.keys.contains("rhythmMusicName"), "\(jsonDict["rhythmMusicName"] ?? "")" != "<null>" {
+            rhythmMusicName = "\(jsonDict["rhythmMusicName"] ?? "")"
+            if rhythmMusicFlag == 1 {
+                rhythmMusicNameWidth = sizeWithText(text: rhythmMusicName ?? "", font: UIFont.systemFont(ofSize: 13), size: CGSize(width: UIScreen.main.bounds.width - 100 - 32 - 40, height: 30)).width
+                if rhythmMusicNameWidth < 40 {
+                    rhythmMusicNameWidth = 40
+                }
+                rhythmMusicNameWidth = rhythmMusicNameWidth + 32 + 40
+            }
+        }
+    }
+}

+ 6 - 0
Example/BFCommonKit.xcodeproj/project.pbxproj

@@ -275,6 +275,9 @@
 				"${BUILT_PRODUCTS_DIR}/KeychainAccess/KeychainAccess.framework",
 				"${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework",
 				"${BUILT_PRODUCTS_DIR}/KingfisherWebP/KingfisherWebP.framework",
+				"${BUILT_PRODUCTS_DIR}/ObjectMapper/ObjectMapper.framework",
+				"${BUILT_PRODUCTS_DIR}/Realm/Realm.framework",
+				"${BUILT_PRODUCTS_DIR}/RealmSwift/RealmSwift.framework",
 				"${BUILT_PRODUCTS_DIR}/Toast-Swift/Toast_Swift.framework",
 				"${BUILT_PRODUCTS_DIR}/libwebp/libwebp.framework",
 			);
@@ -285,6 +288,9 @@
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KeychainAccess.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Kingfisher.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KingfisherWebP.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjectMapper.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RealmSwift.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Toast_Swift.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libwebp.framework",
 			);

+ 21 - 2
Example/Podfile.lock

@@ -4,14 +4,21 @@ PODS:
     - BFCommonKit/BFCategorys (= 1.5.2)
     - BFCommonKit/BFConfig (= 1.5.2)
     - BFCommonKit/BFEnums (= 1.5.2)
+    - BFCommonKit/BFEnv (= 1.5.2)
+    - BFCommonKit/BFModels (= 1.5.2)
     - BFCommonKit/BFUtility (= 1.5.2)
     - BFCommonKit/BFVendors (= 1.5.2)
   - BFCommonKit/BFCategorys (1.5.2):
     - KingfisherWebP (= 1.3.0)
   - BFCommonKit/BFConfig (1.5.2):
-    - BFCommonKit/BFCategorys
     - BFCommonKit/BFEnums
   - BFCommonKit/BFEnums (1.5.2)
+  - BFCommonKit/BFEnv (1.5.2):
+    - BFCommonKit/BFConfig
+  - BFCommonKit/BFModels (1.5.2):
+    - BFCommonKit/BFEnums
+    - ObjectMapper (= 4.2.0)
+    - RealmSwift (= 10.7.6)
   - BFCommonKit/BFUtility (1.5.2):
     - Alamofire (= 5.4.4)
     - BFCommonKit/BFCategorys
@@ -35,6 +42,12 @@ PODS:
   - libwebp/mux (1.2.1):
     - libwebp/demux
   - libwebp/webp (1.2.1)
+  - ObjectMapper (4.2.0)
+  - Realm (10.7.6):
+    - Realm/Headers (= 10.7.6)
+  - Realm/Headers (10.7.6)
+  - RealmSwift (10.7.6):
+    - Realm (= 10.7.6)
   - Toast-Swift (5.0.1)
 
 DEPENDENCIES:
@@ -47,6 +60,9 @@ SPEC REPOS:
     - Kingfisher
     - KingfisherWebP
     - libwebp
+    - ObjectMapper
+    - Realm
+    - RealmSwift
     - Toast-Swift
 
 EXTERNAL SOURCES:
@@ -55,11 +71,14 @@ EXTERNAL SOURCES:
 
 SPEC CHECKSUMS:
   Alamofire: f3b09a368f1582ab751b3fff5460276e0d2cf5c9
-  BFCommonKit: e5b316ffd438574754886fbd93c904318bc7df7a
+  BFCommonKit: 261846b8eeebdebc817f20bec78bff2cc3905dea
   KeychainAccess: c0c4f7f38f6fc7bbe58f5702e25f7bd2f65abf51
   Kingfisher: 016c8b653a35add51dd34a3aba36b580041acc74
   KingfisherWebP: dec17a5eb1af2658791bde1f93ae9a853678f826
   libwebp: 98a37e597e40bfdb4c911fc98f2c53d0b12d05fc
+  ObjectMapper: 1eb41f610210777375fa806bf161dc39fb832b81
+  Realm: ed860452717c8db8f4bf832b6807f7f2ce708839
+  RealmSwift: e31c4ddbcc42ac879313d656b86f9ca539f6f4f4
   Toast-Swift: 9b6a70f28b3bf0b96c40d46c0c4b9d6639846711
 
 PODFILE CHECKSUM: 46a6541d329ac57725f417e3184d8a4670ea443f