Sfoglia il codice sorgente

Merge branch 'master' of https://git.yishihui.com/iOS/BFFramework

wenweiwei 3 anni fa
parent
commit
67f9a94ee8

+ 39 - 39
BFFramework/Classes/Base/Model/PQBaseModel.swift

@@ -9,25 +9,25 @@
 import RealmSwift
 import UIKit
 
-class PQBaseModel: Object {
-    @objc dynamic var uniqueId: String? // 唯一ID
-    @objc dynamic var videoId: Int = 0 // 视频ID
-    @objc dynamic var eventId: String? // 事件ID
-    @objc dynamic var title: String? // 标题
-    @objc dynamic var attributedTitle: NSMutableAttributedString? // 富文本标题
-    @objc dynamic var summary: String? // 描述
-    @objc dynamic var imageUrl: String = "" // 图片地址
-    @objc dynamic var selectedImage: String = "" // 图片地址
-    @objc dynamic var isSelected: Bool = false
-    @objc dynamic var recommendLogVO: String? // 推荐日志对象
-    @objc dynamic var abInfoData: String? // AB
-    @objc dynamic var pageCategoryId: Int = 0 // 页面分类ID
-    @objc dynamic var version: String = versionName // 版本号
-    @objc dynamic var mid = getMachineCode() // 设备ID
-    @objc dynamic var date: Int = 0 // 当前时间戳  CGFloat(Date.init().timeIntervalSince1970) * 1000
-    @objc dynamic var itemWidth: Float = 0 // cell宽
-    @objc dynamic var primaryKeys: String? // 区分存储唯一值
-    override class func primaryKey() -> String? {
+public class PQBaseModel: 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"
     }
 
@@ -36,7 +36,7 @@ class PQBaseModel: Object {
         uniqueId = getUniqueId(desc: "uniqueId")
     }
 
-    override class func ignoredProperties() -> [String] {
+    override class public func ignoredProperties() -> [String] {
         return ["attributedTitle"]
     }
 
@@ -114,7 +114,7 @@ class PQBaseModel: Object {
 // MARK: - 当前应用本地存储的model
 
 /// 当前应用本地存储的model
-class PQLocalStoreModel: PQBaseModel {
+public  class PQLocalStoreModel: PQBaseModel {
     @objc dynamic var currentDate: String?
     @objc required init() {
         super.init()
@@ -125,16 +125,16 @@ class PQLocalStoreModel: PQBaseModel {
 // MARK: - oss上传model
 
 /// oss上传model
-class PQOssUploadModel: NSObject {
-    var accessKeyId: String?
-    var secretKeyId: String?
-    var securityToken: String?
-    var endpoint: String?
-    var endpoints: [String]?
-    var bucketName: String?
-    var fileName: String?
-    var uploadID: String?
-    var expiration: String? // 过期时间
+public class PQOssUploadModel: NSObject {
+    public var accessKeyId: String?
+    public var secretKeyId: String?
+    public var securityToken: String?
+    public var endpoint: String?
+    public var endpoints: [String]?
+    public var bucketName: String?
+    public var fileName: String?
+    public var uploadID: String?
+    public var expiration: String? // 过期时间
     init(jsonDict: [String: Any]) {
         super.init()
 
@@ -178,12 +178,12 @@ class PQOssUploadModel: NSObject {
 // MARK: - 空白页面model
 
 /// 空白页面model
-class PQEmptyModel: NSObject {
-    var title: String? // 标题
-    var summary: String? // 描述
-    var emptyImage: String? // 空白提示图
-    var isRefreshHidden: Bool = true // 是否隐藏刷新按钮
-    var refreshImage: String? // 刷新按钮图片
-    var refreshTitle: NSMutableAttributedString? // 刷新按钮文字
-    var refreshBgColor: UIColor? // 刷新按钮背景颜色
+public class PQEmptyModel: NSObject {
+    public var title: String? // 标题
+    public var summary: String? // 描述
+    public var emptyImage: String? // 空白提示图
+    public var isRefreshHidden: Bool = true // 是否隐藏刷新按钮
+    public var refreshImage: String? // 刷新按钮图片
+    public var refreshTitle: NSMutableAttributedString? // 刷新按钮文字
+    public var refreshBgColor: UIColor? // 刷新按钮背景颜色
 }

+ 19 - 0
BFFramework/Classes/Categorys/String+Ext.swift

@@ -15,6 +15,25 @@ extension String {
         return (self as NSString).pathExtension
     }
 
+    public func ga_widthForComment(font: UIFont, height: CGFloat = 15) -> CGFloat {
+
+        let rect = NSString(string: self).boundingRect(with: CGSize(width: CGFloat(MAXFLOAT), height: height), options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: font], context: nil)
+        return ceil(rect.width)
+    }
+//
+//    public  func ga_heightForComment(fontSize: CGFloat, width: CGFloat) -> CGFloat {
+//        let font = UIFont.systemFont(ofSize: fontSize)
+//        let rect = NSString(string: self).boundingRect(with: CGSize(width: width, height: CGFloat(MAXFLOAT)), options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: font], context: nil)
+//        return ceil(rect.height)
+//    }
+//
+//    public  func ga_heightForComment(fontSize: CGFloat, width: CGFloat, maxHeight: CGFloat) -> CGFloat {
+//        let font = UIFont.systemFont(ofSize: fontSize)
+//        let rect = NSString(string: self).boundingRect(with: CGSize(width: width, height: CGFloat(MAXFLOAT)), options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: font], context: nil)
+//        return ceil(rect.height)>maxHeight ? maxHeight : ceil(rect.height)
+//    }
+ 
+
     public  func enumerateSearchText(searchText: String?, complate: (_ idx: Int, _ range: NSRange) -> Void) {
         if searchText == nil || (searchText?.count ?? 0) <= 0 || !contains(searchText!) {
             return

+ 3 - 3
BFFramework/Classes/Enums/Enums.swift

@@ -319,7 +319,7 @@ enum businessType: String {
 // MARK: - autoType 自动动作的类型
 
 /// autoType 自动动作的类型
-enum autoType: Int {
+public enum autoType: Int {
     case AUTO_TYPE_SCROLL_VERTICAL_DOWN = 11 // 用户手动下划触发播放(播上一个视频)
     case AUTO_TYPE_SCROLL_VERTICAL_UP = 12 // 用户手动上划触发播放(播下一个视频)
     case AUTO_TYPE_SCROLL_HORIZON_RIGHT = 13 // 用户手动右划触发播放
@@ -452,7 +452,7 @@ enum reportLogType {
 // MARK: - 底部tab
 
 /// 底部tab
-enum TAB_PAGETYPE: String {
+public enum TAB_PAGETYPE: String {
     case TAB_PAGETYPE_NORMAL = "nomalTab" // 默认
     case TAB_PAGETYPE_RECOMM = "categoryTab" // 推荐
     case TAB_PAGETYPE_ATTEN = "followTab" // 关注
@@ -646,7 +646,7 @@ enum videoUploadSourceType: String {
 // MARK: - 进入创作工具入口
 
 /// 素材上传、保存、收藏相关
-enum videoMakeEntranceType: String {
+public enum videoMakeEntranceType: String {
     case entranceMineTabDraft = "draft_metab" // 我的Tab -> 草稿箱列表 -> 创作工具
     case entrancePublicTabDraft = "draft_uploadpopup" // 发布Tab -> 草稿箱列表 -> 创作工具
     case entrancePublicTabCompose = "composeVideo" // 发布Tab -> 视频合成 -> 创作工具

+ 44 - 44
BFFramework/Classes/EventTrack/Model/PQVideoMakeEventTrackModel.swift

@@ -8,9 +8,9 @@
 
 import UIKit
 
-class PQVideoMakeEventTrackModel: NSObject {
+public class PQVideoMakeEventTrackModel: NSObject {
     // 进入创作工具的入口
-    var entrance: videoMakeEntranceType = .entrancePublicTabCompose {
+    public var entrance: videoMakeEntranceType = .entrancePublicTabCompose {
         didSet {
             isPureUploadVideo = entrance == .entrancePublicTabUpload
             isReproduction = entrance == .entranceReproduction
@@ -18,24 +18,24 @@ class PQVideoMakeEventTrackModel: NSObject {
     }
 
     // 草稿 Id
-    var draftId: String?
+    public var draftId: String?
     // 项目 Id
-    var projectId: String?
+    public var projectId: String?
     // 再创作视频的父 projectId - 仅「再创作」视频存在
-    var fatherProjectId: String?
+    public var fatherProjectId: String?
     // 再创作视频的根 projectId - 仅「再创作」视频存在
-    var rootProjectId: String?
+    public var rootProjectId: String?
     // 再编辑视频的父 draftId - 仅「再编辑」视频存在
-    var fatherDraftId: String?
+    public var fatherDraftId: String?
 
     // 发布标题
-    var title: String?
+    public var title: String?
     // 发布描述
-    var videoDes: String?
+    public var videoDes: String?
     // 发布封面的 URL
-    var coverUrl: String?
+    public var coverUrl: String?
     // 发布的视频 Id
-    var videoId: String?
+    public var videoId: String?
 
     /**
       用户创作视频所用的时间成本,单位:毫秒(ms)
@@ -44,76 +44,76 @@ class PQVideoMakeEventTrackModel: NSObject {
      如果是再创作项目,不包含别人创作的时间消耗,仅记录发布这一次的时间消耗
      如果是多次发布的项目,不包含之前累计的时间消耗,仅记录发布这一次的时间消耗
      */
-    var editTimeCost: Float64 = 0
+    public var editTimeCost: Float64 = 0
     // 合成视频所用的时间成本,单位:毫秒(ms)
-    var composeTimeCost: Float64 = 0
+    public var composeTimeCost: Float64 = 0
     // 上传视频所用的时间成本,单位:毫秒(ms)
-    var uploadTimeCost: Float64 = 0
+    public var uploadTimeCost: Float64 = 0
 
     // 是否为纯上传视频 纯上传视频:true 加工工具视频:false
-    var isPureUploadVideo: Bool = false
+    public var isPureUploadVideo: Bool = false
     // 是否为再创作视频 再创作视频:true 非再创作视频:false
-    var isReproduction: Bool = false
+    public var isReproduction: Bool = false
     // 是否为再编辑视频 再编辑视频:true 非再编辑视频:false
-    var isCopyVideo: Bool = false
+    public var isCopyVideo: Bool = false
     // 段落相关-视频中存在的段落个数:number
-    var sectionNum: Int = 1
+    public var sectionNum: Int = 1
     // 文字相关 段落中的文字长度信息:number[] [​ section1-text-length, section2-text-length, ... ]
-    var secTextLength: [Int] = Array<Int>.init()
+    public var secTextLength: [Int] = Array<Int>.init()
     // 图片 / 视频素材相关 段落中的(本地素材)图片数量:number[] [ section1-localImage-num, section2-localImage-num, ... ]
-    var secLocalImageNum: [Int] = Array<Int>.init()
+    public var secLocalImageNum: [Int] = Array<Int>.init()
     // 图片 / 视频素材相关 段落中的(本地素材)动图数量:number[] [ section1-localGif-num, section2-localGif-num, ... ]
-    var secLocalGifNum: [Int] = Array<Int>.init()
+    public var secLocalGifNum: [Int] = Array<Int>.init()
     // 图片 / 视频素材相关 段落中的(本地素材)视频数量:number[] [ section1-localVideo-num, section2-localVideo-num, ... ]
-    var secLocalVideoNum: [Int] = Array<Int>.init()
+    public var secLocalVideoNum: [Int] = Array<Int>.init()
     // 图片/视频素材相关 -段落中的(网络素材)图片数量
-    var secCloudImageNum: [Int] = Array<Int>.init()
+    public var secCloudImageNum: [Int] = Array<Int>.init()
     // 图片/视频素材相关 -段落中(网络素材)动图数量
-    var secCloudGifNum: [Int] = Array<Int>.init()
+    public var secCloudGifNum: [Int] = Array<Int>.init()
     // 图片/视频素材相关 -段落中(网络素材)视频数量
-    var secCloudVideoNum: [Int] = Array<Int>.init()
+    public var secCloudVideoNum: [Int] = Array<Int>.init()
     // 文字转语音相关 -段落中使用的语音素材名称,若段落中没有使用则报""
-    var secTextToSpeechMaterial: [String] = Array<String>.init()
+    public var secTextToSpeechMaterial: [String] = Array<String>.init()
     // 文字转语音相关 -段落中文字转语音的毫秒数
-    var secTextToSpeechTime: [Int64] = Array<Int64>.init()
+    public var secTextToSpeechTime: [Int64] = Array<Int64>.init()
     // 语音转文字相关 -每个段落中使用录音的毫秒数
-    var secSpeechToTextTime: [Int64] = Array<Int64>.init()
+    public var secSpeechToTextTime: [Int64] = Array<Int64>.init()
 
     // 开始上传时间
-    var startUploadDate: Float64 = 0
+    public var startUploadDate: Float64 = 0
     // 结束上传时间
-    var endUploadDate: Float64 = 0 {
+    public var endUploadDate: Float64 = 0 {
         didSet {
             uploadTimeCost = (endUploadDate - startUploadDate) * 1000
         }
     }
 
     // 使用音乐的名称(未使用音乐默认为 "")
-    var musicName: String = ""
+    public var musicName: String = ""
     // 使用音乐Id
-    var musicId: String = ""
+    public var musicId: String = ""
     // 使用音乐的地址(未使用音乐默认为 "")
-    var musicUrl: String = ""
+    public var musicUrl: String = ""
     // 音乐的类型(未使用音乐默认为 "") - original - 原唱 - accompaniment - 伴奏
-    var musicType: String = ""
+    public var musicType: String = ""
     // 音乐是否为片段(未使用音乐默认为 "")- true - 音乐片段 - false - 完整音乐
-    var isMusicClip: Bool = false
+    public var isMusicClip: Bool = false
     // 画布比例
-    var canvasRatio: String = "original"
+    public var canvasRatio: String = "original"
     // 卡点视频 使用视频素材数量
-    var syncedUpVideoNumber: Int = 0
+    public var syncedUpVideoNumber: Int = 0
     // 卡点视频 使用图片素材数量
-    var syncedUpImageNumber: Int = 0
+    public var syncedUpImageNumber: Int = 0
     // 卡点视频 使用音乐Id
-    var syncedUpMusicId: String = ""
+    public var syncedUpMusicId: String = ""
     // 卡点视频 使用音乐名称
-    var syncedUpMusicName: String = ""
+    public var syncedUpMusicName: String = ""
     // 卡点视频 合成后视频长度(单位:毫秒)
-    var syncedUpVideoDuration: Float64 = 0
+    public var syncedUpVideoDuration: Float64 = 0
     // 卡点视频 原素材总时长(单位:毫秒)视频:报视频时长 图片:一张图报 1000ms
-    var syncedUpOriginalMaterialDuration: Float64 = 0
+    public var syncedUpOriginalMaterialDuration: Float64 = 0
     // 卡点视频 视频选用节奏名称(快节奏 1、适中 2、慢节奏 3))
-    var syncedUpRhythmNumber: Int = 2
+    public var syncedUpRhythmNumber: Int = 2
     override init() {
         super.init()
     }
@@ -219,7 +219,7 @@ class PQVideoMakeEventTrackModel: NSObject {
 
     /// 转换为字典
     /// - Returns: <#description#>
-    func toParams() -> [String: Any] {
+    public func toParams() -> [String: Any] {
         var eventTrackDic = Dictionary<String, Any>.init()
         // 进入创作工具的入口
         eventTrackDic["entrance"] = entrance.rawValue

+ 14 - 14
BFFramework/Classes/PModels/PQReCreateModel.swift

@@ -9,20 +9,20 @@
 import RealmSwift
 import UIKit
 
-class PQReCreateModel: Object {
-    @objc dynamic var canReproduce: Int = 0 // 是否可以被再创作,1:是,0:否
-    @objc dynamic var draftboxId: String? // 草稿ID
-    @objc dynamic var parentProjectId: String? // 父项目ID
-    @objc dynamic var rootProjectId: String? // 根项目ID
-    @objc dynamic var projectId: String? // 项目ID
-    @objc dynamic var projectLinkUrl: String? // 项目链接
-    @objc dynamic var reProduceCount: Int = 0 // 被再创作次数
-    @objc dynamic var reProduceVideoFlag: Int = 0 //  再创作视频标记,1:是,0:否
-    @objc dynamic var videoId: String? // 视频id
-    @objc dynamic var parentVideoId: String? // 父视频id
-    @objc dynamic var rootVideoId: String? // 根视频id
-    @objc dynamic var rhythmMusicFlag: Int = 0 // 是否有卡点音乐标记 1:是,0:否
-    @objc dynamic var rhythmMusicName: String? // 卡点音乐歌名
+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 // 卡点音乐显示宽度
 
     override required init() {

+ 38 - 38
BFFramework/Classes/PModels/PQUserInfoModel.swift

@@ -8,46 +8,46 @@
 
 import UIKit
 
-class PQUserInfoModel: PQBaseModel {
-    var avatarUrl: String? // 头像地址
-    var backgroundImage: String? // 背景图
+public class PQUserInfoModel: PQBaseModel {
+    public  var avatarUrl: String? // 头像地址
+    public var backgroundImage: String? // 背景图
 
-    var bothFollow: Bool = false // 是否相互关注
-    var fans: Int = 0 // 粉丝数
-    var followed: Int = 0 // 是否关注
-    var idols: Int = 0 // 关注的人数
-    var introduction: String?
-    var nickName: String? // 昵称
+    public var bothFollow: Bool = false // 是否相互关注
+    public var fans: Int = 0 // 粉丝数
+    public var followed: Int = 0 // 是否关注
+    public var idols: Int = 0 // 关注的人数
+    public var introduction: String?
+    public var nickName: String? // 昵称
 
-    var otherVideoShowCount: Int = 0
-    var playCountTotal: Int = 0 // 用户视频总播放数,按人去重 ,
-    var playCountFormatStr: String? // 用户视频总播放数,格式化后的值,前端直接显示 ,
-    var positionType: Int = 0
-    var sensitiveStatus: Int = 0
-    var subscribeStatus: Int = 0 // 0:未订阅,1:已订阅
-    var mySubscribes: Int = 0 // 我的订阅数
-    var otherSubscribes: Int = 0 // 别人订阅我的数量
-    var uid: Int = 0
-    var uploadDate: String?
-    var userType: Int = 0
-    var videos: Int = 0 // 视频数
-    var videosDescr: String = "0" // 视频数
-    var vipStatus: Int = 0 // vip状态,0:不是vip,1:是vip
-    var vipDesc: String? // vip身份描述
-    var tagList: [String]? // 标签
-    var picPathList: [[String: Any]]? // 推荐列表
-    var isLoginUser: Bool = false // 是否是登录用户
-    var gmtCreateTimestamp: Int = 0
-    var intimacy: Int = 0
-    var isBothFollow: Int = 0 // 是否相互关注 ,
-    var isFollowed: Bool = false // 是否关注
-    var lastTimestamp: Int = 0
-    var latestSendvideoId: Int = 0
-    var updated: Int = 0
-    var favoriteCount: Int = 0 // 喜欢的视频数
-    var shareCount: Int = 0 // 分享的视频数
-    var isBanned: Bool = false // 是否被拉黑
-    var tab_pageType: TAB_PAGETYPE = .TAB_PAGETYPE_NORMAL // 0-推荐 1-关注
+    public var otherVideoShowCount: Int = 0
+    public var playCountTotal: Int = 0 // 用户视频总播放数,按人去重 ,
+    public var playCountFormatStr: String? // 用户视频总播放数,格式化后的值,前端直接显示 ,
+    public var positionType: Int = 0
+    public var sensitiveStatus: Int = 0
+    public var subscribeStatus: Int = 0 // 0:未订阅,1:已订阅
+    public var mySubscribes: Int = 0 // 我的订阅数
+    public var otherSubscribes: Int = 0 // 别人订阅我的数量
+    public var uid: Int = 0
+    public var uploadDate: String?
+    public var userType: Int = 0
+    public var videos: Int = 0 // 视频数
+    public var videosDescr: String = "0" // 视频数
+    public var vipStatus: Int = 0 // vip状态,0:不是vip,1:是vip
+    public var vipDesc: String? // vip身份描述
+    public var tagList: [String]? // 标签
+    public var picPathList: [[String: Any]]? // 推荐列表
+    public var isLoginUser: Bool = false // 是否是登录用户
+    public var gmtCreateTimestamp: Int = 0
+    public var intimacy: Int = 0
+    public var isBothFollow: Int = 0 // 是否相互关注 ,
+    public var isFollowed: Bool = false // 是否关注
+    public var lastTimestamp: Int = 0
+    public var latestSendvideoId: Int = 0
+    public var updated: Int = 0
+    public var favoriteCount: Int = 0 // 喜欢的视频数
+    public var shareCount: Int = 0 // 分享的视频数
+    public var isBanned: Bool = false // 是否被拉黑
+    public var tab_pageType: TAB_PAGETYPE = .TAB_PAGETYPE_NORMAL // 0-推荐 1-关注
 
     required init() {
         super.init()

+ 110 - 110
BFFramework/Classes/PModels/PQVideoListModel.swift

@@ -8,124 +8,124 @@
 
 import UIKit
 
-class PQVideoListModel: PQBaseModel {
+public class PQVideoListModel: PQBaseModel {
     @objc required init() {
         super.init()
     }
 
-    var headVideoId: String? // 当前的相关推荐视频是属于哪个视频的相关推荐,值为那个头部视频的videoId
-    var auditStatus: Int = 0 // 审核状态 1 审核中,2 不通过 3 待修改,4 自己可见 5 通过 ,
-    var barrageCount: Int = 0 // 弹幕数量
-    var barrageSwitch: Int = 0 // 是否打开弹幕 1打开 -1关闭 ,
-    var auditReason: String? // 审核不通过或者待修改的原因
-    var barrage: Any? // 弹幕集合
-    var chargeDetail: [String: Any]? // 收费的相关信息
-    var commentCount: Int = 0 // 评论数量
-    var coverImg: [String: Any]? // 封面对象 ,
-    var cutVoStr: String? // h5剪切板内容 ,
-    var descr: String? // 视频简介 ,
-    var encryption: Int = 0 // 是否加密视频:0是1不是 ,
-    var favorited: Bool = false // 是否收藏 ,
-    var favoriteds: Int = 0 //  收藏数 ,
-    var fileExtensions: String? // 视频后缀 ,
-    var firstPicture: Bool = false // 封面是否是第一帧,false不是true是 ,
-    var gmtCreate: String? // 创建时间 ,
-    var gmtCreateDescr: String? // 发视频时间描述 ,
-    var gmtCreateTimestamp: Int = 0 // 创建时间戳 ,
-    var gmtModifie: String? // 修改时间 ,
-    var gmtModifiedTimestamp: Int = 0 // 修改时间戳 ,
-    var h5ShareImgPath: String? // h5分享图URL ,
-    var hasShareSpaceData: Bool = false // 是否有分享空间数据,
-    var height: CGFloat = 0 // 视频高 ,
-    var isRecommendShare: Int = 0 // 是否有分发推荐的封面和标题 1 有 0 无 传空或者不传默认为0,
-    var lastTimestamp: Int = 0 // 时间戳 ,
+    public var headVideoId: String? // 当前的相关推荐视频是属于哪个视频的相关推荐,值为那个头部视频的videoId
+    public var auditStatus: Int = 0 // 审核状态 1 审核中,2 不通过 3 待修改,4 自己可见 5 通过 ,
+    public var barrageCount: Int = 0 // 弹幕数量
+    public var barrageSwitch: Int = 0 // 是否打开弹幕 1打开 -1关闭 ,
+    public var auditReason: String? // 审核不通过或者待修改的原因
+    public var barrage: Any? // 弹幕集合
+    public var chargeDetail: [String: Any]? // 收费的相关信息
+    public var commentCount: Int = 0 // 评论数量
+    public var coverImg: [String: Any]? // 封面对象 ,
+    public var cutVoStr: String? // h5剪切板内容 ,
+    public var descr: String? // 视频简介 ,
+    public var encryption: Int = 0 // 是否加密视频:0是1不是 ,
+    public var favorited: Bool = false // 是否收藏 ,
+    public var favoriteds: Int = 0 //  收藏数 ,
+    public var fileExtensions: String? // 视频后缀 ,
+    public var firstPicture: Bool = false // 封面是否是第一帧,false不是true是 ,
+    public var gmtCreate: String? // 创建时间 ,
+    public var gmtCreateDescr: String? // 发视频时间描述 ,
+    public var gmtCreateTimestamp: Int = 0 // 创建时间戳 ,
+    public var gmtModifie: String? // 修改时间 ,
+    public var gmtModifiedTimestamp: Int = 0 // 修改时间戳 ,
+    public var h5ShareImgPath: String? // h5分享图URL ,
+    public var hasShareSpaceData: Bool = false // 是否有分享空间数据,
+    public var height: CGFloat = 0 // 视频高 ,
+    public var isRecommendShare: Int = 0 // 是否有分发推荐的封面和标题 1 有 0 无 传空或者不传默认为0,
+    public var lastTimestamp: Int = 0 // 时间戳 ,
     //  liteVideoData (LiteVideoDataVO, optional): lite数据,
-    var measure: Int = 0
-    var measureId: Int = 0
-    var measureType: Int = 0 // 0 非流量池 1曝光池2普通推荐测试池3待推荐测试池 ,
-    var playBeforeDay: Int = 0 // 播放时间距离今天的天数 ,
-    var playCount: Int = 0 // 播放次数 ,
-    var playCountFormatStr: String? //  用户视频总播放数,格式化后的值,前端直接显示 ,
-    var playCountTotal: Int = 0 // 总播放次数 ,
-    var playTime: Int = 0 // 播放时间 ,
-    var processShareHeadLab: [String: Any]? // 视频分享片尾数据 ,
-    var processShareTailLab: [String: Any]? // 视频分享片尾数据 ,
-    var pwd: String? // 视频密码 ,
-    var recommendId: String? // 推荐链路ID ,
-    var recommendSource: Int = 0 // 0 默认 1 第四范式
-    var recommendStatus: Int = 0 // 推荐状态 ,
-    var rotate: Int = 0 // 旋转角度 ,
-    var sampleJobId: String?
-    var sampleRequestId: String?
-    var sampleTotalTime: Int = 0
-    var sampleTranscodeStatus: Int = 0
-    var sampleTransedVideoPath: String?
-    var sendBeforeDay: Int = 0 // 发视频距离今天的天数 ,
-    var sensitiveMsg: String? // 敏感提示信息 ,
-    var sensitiveStatus: Int = 0 //  内容敏感状态(0:未检验,1:不敏感,2:敏感,3:敏感已审) ,
-    var shareCount: Int = 0 // 分享到朋友圈次数 ,
+    public var measure: Int = 0
+    public var measureId: Int = 0
+    public var measureType: Int = 0 // 0 非流量池 1曝光池2普通推荐测试池3待推荐测试池 ,
+    public var playBeforeDay: Int = 0 // 播放时间距离今天的天数 ,
+    public var playCount: Int = 0 // 播放次数 ,
+    public var playCountFormatStr: String? //  用户视频总播放数,格式化后的值,前端直接显示 ,
+    public var playCountTotal: Int = 0 // 总播放次数 ,
+    public var playTime: Int = 0 // 播放时间 ,
+    public var processShareHeadLab: [String: Any]? // 视频分享片尾数据 ,
+    public var processShareTailLab: [String: Any]? // 视频分享片尾数据 ,
+    public var pwd: String? // 视频密码 ,
+    public var recommendId: String? // 推荐链路ID ,
+    public var recommendSource: Int = 0 // 0 默认 1 第四范式
+    public var recommendStatus: Int = 0 // 推荐状态 ,
+    public var rotate: Int = 0 // 旋转角度 ,
+    public var sampleJobId: String?
+    public var sampleRequestId: String?
+    public var sampleTotalTime: Int = 0
+    public var sampleTranscodeStatus: Int = 0
+    public var sampleTransedVideoPath: String?
+    public var sendBeforeDay: Int = 0 // 发视频距离今天的天数 ,
+    public var sensitiveMsg: String? // 敏感提示信息 ,
+    public var sensitiveStatus: Int = 0 //  内容敏感状态(0:未检验,1:不敏感,2:敏感,3:敏感已审) ,
+    public var shareCount: Int = 0 // 分享到朋友圈次数 ,
     // add by ak 个人中心里我分享的视频列表返回的参数 e.g. 78C10B44-6892-42A8-AE69-F1B35F9E676F-534530
-    var shareId: String? // 分享的 ID
-    var shareCountFriend: Int = 0 // 分享到微信好友 ,
-    var shareImgPath: String? // 分享图URL ,
-    var shareLinkType: Int = 0 // 分享到微信好友的图片的链接的类型 ,
-    var sharePageType: Int = 0 // 0 综合模块 1 feed流 ,
-    var shareTitle: String? // 分享到微信好友的图片的title ,
-    var showHotRecommend: Bool = false // 是否需要显示热门推荐 ,
-    var size: Int = 0 //  大小 ,
-    var status: Int = 0 // 数据状态,1 有效,2 已删除,3 已屏蔽,4 关注可见,5 分享可见 6 自己可见 ,
-    var tabShareImgPath: String? // 转发分享图URL ,
-    var thumbnailImagePath: String? // 缩略图URL ,
-    var totalTime: Int = 0 // 视频时长 ,
-    var totalTimeParas: String? // 视频时长十分秒 ,
-    var transcodeStatus: Int = 0 // 转码状态:1-不需转码 2-转码中 3-转码完成 4-转码失败 ,
-    var transcodeVOList: [Any]? // 多码率数据 ,
-    var uid: Int = 0 // 视频的用户ID ,
-    var user: [String: Any]? //  用户对象 ,
-    var userInfo: PQUserInfoModel? //  用户对象 ,
-    var videoCollectionId: Int = 0 // 视频所在的视频集ID ,
-    var videoCoverSnapshotPath: String? // 原始封面图片 ,
-    var videoPath: String? // 视频地址 ,
-    var videoURL: String? // 视频地址 ,
-    var videoReportMeta: String? // 视频上报数据,上报时原样返回 ,
-    var videoShareJumpModel: [String: Any]? // 分享页跳转的信息 ,
-    var width: CGFloat = 0 // 视频宽
-    var itemHeight: CGFloat = 0 // 个人中心cell高
-    var originImageH: CGFloat = 0 // 原始图片的宽
-    var originImageW: CGFloat = 0 // 原始图片的高
-    var imageH: CGFloat = 0 // 图片的高
-    var imageW: CGFloat = 0 // 图片的宽
-    var titleH: CGFloat = 0 // 标题的高
-    var descH: CGFloat = 0 // 描述的高
-    var titleFontSize: CGFloat = 0 // add by ak 标题字号
-    var usnameW: CGFloat = 0 // add by ak 用户名宽度
-    var rotationH: CGFloat = 0 // add by ak 三个推荐视频高度包括标题
-    var watchInfoH: CGFloat = 0 // add by ak watch info 高度
-    var watchInfoY: CGFloat = 0 // add by ak watch info Y 值
-    var relationData: [PQVideoListModel]?
-    var playProgress: CGFloat = 0 // 已播放时长
-    var duration: CGFloat = 0 // 视频总时长
-    var tab_pageType: TAB_PAGETYPE = .TAB_PAGETYPE_NORMAL // 0-推荐 1-关注
-    var pageSource: PAGESOURCE = .sp_category
-    var isVerticality: Bool = false
-    var isShareList: Bool = false // 是否是分享列表
+    public var shareId: String? // 分享的 ID
+    public var shareCountFriend: Int = 0 // 分享到微信好友 ,
+    public var shareImgPath: String? // 分享图URL ,
+    public var shareLinkType: Int = 0 // 分享到微信好友的图片的链接的类型 ,
+    public var sharePageType: Int = 0 // 0 综合模块 1 feed流 ,
+    public var shareTitle: String? // 分享到微信好友的图片的title ,
+    public var showHotRecommend: Bool = false // 是否需要显示热门推荐 ,
+    public var size: Int = 0 //  大小 ,
+    public var status: Int = 0 // 数据状态,1 有效,2 已删除,3 已屏蔽,4 关注可见,5 分享可见 6 自己可见 ,
+    public var tabShareImgPath: String? // 转发分享图URL ,
+    public var thumbnailImagePath: String? // 缩略图URL ,
+    public var totalTime: Int = 0 // 视频时长 ,
+    public var totalTimeParas: String? // 视频时长十分秒 ,
+    public var transcodeStatus: Int = 0 // 转码状态:1-不需转码 2-转码中 3-转码完成 4-转码失败 ,
+    public var transcodeVOList: [Any]? // 多码率数据 ,
+    public var uid: Int = 0 // 视频的用户ID ,
+    public var user: [String: Any]? //  用户对象 ,
+    public var userInfo: PQUserInfoModel? //  用户对象 ,
+    public var videoCollectionId: Int = 0 // 视频所在的视频集ID ,
+    public var videoCoverSnapshotPath: String? // 原始封面图片 ,
+    public var videoPath: String? // 视频地址 ,
+    public var videoURL: String? // 视频地址 ,
+    public var videoReportMeta: String? // 视频上报数据,上报时原样返回 ,
+    public var videoShareJumpModel: [String: Any]? // 分享页跳转的信息 ,
+    public var width: CGFloat = 0 // 视频宽
+    public var itemHeight: CGFloat = 0 // 个人中心cell高
+    public var originImageH: CGFloat = 0 // 原始图片的宽
+    public var originImageW: CGFloat = 0 // 原始图片的高
+    public var imageH: CGFloat = 0 // 图片的高
+    public var imageW: CGFloat = 0 // 图片的宽
+    public var titleH: CGFloat = 0 // 标题的高
+    public var descH: CGFloat = 0 // 描述的高
+    public var titleFontSize: CGFloat = 0 // add by ak 标题字号
+    public var usnameW: CGFloat = 0 // add by ak 用户名宽度
+    public var rotationH: CGFloat = 0 // add by ak 三个推荐视频高度包括标题
+    public var watchInfoH: CGFloat = 0 // add by ak watch info 高度
+    public var watchInfoY: CGFloat = 0 // add by ak watch info Y 值
+    public var relationData: [PQVideoListModel]?
+    public var playProgress: CGFloat = 0 // 已播放时长
+    public var duration: CGFloat = 0 // 视频总时长
+    public var tab_pageType: TAB_PAGETYPE = .TAB_PAGETYPE_NORMAL // 0-推荐 1-关注
+    public var pageSource: PAGESOURCE = .sp_category
+    public var isVerticality: Bool = false
+    public var isShareList: Bool = false // 是否是分享列表
 
-    var funcH: CGFloat = cDefaultMargin * 33
-    let funcW: CGFloat = cDefaultMargin * 5
-    var uplpadImage: UIImage? // 上传的图片封面
-    var uplpadBucketKey: String? // 上传视频地址
-    var uplpadStatus: Int = 0 // 上传视频状态  1-上传中 2-上传完成 3-上传失败 4-发布中 4-发布完成
-    var uplpadRequest: OSSMultipartUploadRequest?
-    var stsToken: [String: Any]? // 上传信息
-    var localPath: String? // 地址
-    var progress: Float = 0
-    var projectId: String? // 项目ID-发布创作的视频时必传,会在进入创作工具页时生成,以app_no_projectdata为前缀
-    var reCreateVideoData: PQReCreateModel? // 再创作数据
+    public var funcH: CGFloat = cDefaultMargin * 33
+    public let funcW: CGFloat = cDefaultMargin * 5
+    public var uplpadImage: UIImage? // 上传的图片封面
+    public var uplpadBucketKey: String? // 上传视频地址
+    public var uplpadStatus: Int = 0 // 上传视频状态  1-上传中 2-上传完成 3-上传失败 4-发布中 4-发布完成
+    public var uplpadRequest: OSSMultipartUploadRequest?
+    public var stsToken: [String: Any]? // 上传信息
+    public var localPath: String? // 地址
+    public var progress: Float = 0
+    public var projectId: String? // 项目ID-发布创作的视频时必传,会在进入创作工具页时生成,以app_no_projectdata为前缀
+    public var reCreateVideoData: PQReCreateModel? // 再创作数据
     // 视频创作埋点数据
-    var eventTrackData: PQVideoMakeEventTrackModel?
-    var autoType: autoType? // autoType 自动动作的类型
+    public var eventTrackData: PQVideoMakeEventTrackModel?
+    public var autoType: autoType? // autoType 自动动作的类型
     // add by ak 发布视频来源类型
-    var videoFromScene: videoFromScene = .UploadNormal
+    public var videoFromScene: videoFromScene = .UploadNormal
 
     override init(jsonDict: [String: Any]) {
         super.init(jsonDict: jsonDict)
@@ -297,7 +297,7 @@ class PQVideoListModel: PQBaseModel {
         BFLog(message: "watchInfoY11111 is \(watchInfoY)")
     }
 
-    func updateReommendAgent() {
+    public func updateReommendAgent() {
         // 计算相关推荐高度
         var itemH: CGFloat = 0
         var verticality: Bool = false