111 lines
3.3 KiB
Swift
111 lines
3.3 KiB
Swift
//
|
||
// NRReadChapterModel.swift
|
||
// ReaderHive
|
||
//
|
||
// Created by 澜声世纪 on 2025/11/28.
|
||
//
|
||
|
||
import UIKit
|
||
import SmartCodable
|
||
|
||
class NRReadChapterModel: NSObject, SmartCodable {
|
||
required override init() { }
|
||
|
||
var id: String?
|
||
|
||
///章节id
|
||
var short_play_video_id: String?
|
||
///小说id
|
||
var short_play_id: String?
|
||
|
||
var episode: String?
|
||
var name: String?
|
||
//字数
|
||
var duration: Int?
|
||
var coins: Int?
|
||
var status: Int?
|
||
|
||
var nr_description: String?
|
||
///正文
|
||
var novel_txt: String?
|
||
|
||
|
||
/// 完整富文本内容
|
||
@IgnoredKey
|
||
var fullContent:NSAttributedString!
|
||
/// 内容属性变化记录(我这里就只判断内容了字体属性变化了,标题也就跟着变化或者保存变化都无所谓了。如果有需求可以在加上比较标题属性变化)
|
||
@IgnoredKey
|
||
private var attributes:[NSAttributedString.Key:Any]! = [:]
|
||
@IgnoredKey
|
||
var pageList: [NRReadPageModel]?
|
||
@IgnoredKey
|
||
var pageCount: Int = 0
|
||
|
||
@IgnoredKey
|
||
var recommandPage: NRReadPageModel?
|
||
@IgnoredKey
|
||
var finishPage: NRReadPageModel?
|
||
|
||
|
||
static func mappingForKey() -> [SmartKeyTransformer]? {
|
||
return [
|
||
CodingKeys.nr_description <--- ["description"],
|
||
]
|
||
}
|
||
|
||
///解析数据
|
||
func parser() {
|
||
let tempAttributes = NRNovelReadSetManager.manager.textAttributes()
|
||
|
||
guard !NSDictionary(dictionary: attributes).isEqual(to: tempAttributes) else { return }
|
||
|
||
attributes = tempAttributes
|
||
fullContent = fullContentAttrString()
|
||
|
||
|
||
pageList = NRReadParser.pageing(attrString: fullContent, rect: NRNovelReadSetManager.manager.readRect)
|
||
pageCount = pageList?.count ?? 0
|
||
|
||
if let pageModel = self.recommandPage {
|
||
let pagePoint = pageModel.pagePoint ?? 0
|
||
let page = Int(CGFloat(pageCount) * pagePoint)
|
||
pageList?.insert(pageModel, at: page)
|
||
}
|
||
|
||
if let pageModel = self.finishPage {
|
||
pageList?.append(pageModel)
|
||
}
|
||
}
|
||
|
||
///只解析文本,不解析标题
|
||
func parserText(attributes: [NSAttributedString.Key : Any] = NRNovelReadSetManager.manager.textAttributes()) {
|
||
self.fullContent = NSMutableAttributedString(string: novel_txt ?? "", attributes: attributes)
|
||
pageList = NRReadParser.pageing(attrString: fullContent, rect: NRNovelReadSetManager.manager.readRect)
|
||
}
|
||
|
||
///解析一个空白页面
|
||
func parserEmpty(_ text: String) {
|
||
fullContent = NSMutableAttributedString(string: "\n\n\n\n\n\n\n" + text, attributes: NRNovelReadSetManager.manager.emptyAttributes())
|
||
|
||
let pageModel = NRReadPageModel()
|
||
pageModel.content = fullContent
|
||
|
||
pageList = [pageModel]
|
||
pageCount = 1
|
||
}
|
||
|
||
|
||
/// 完整内容排版
|
||
private func fullContentAttrString() ->NSMutableAttributedString {
|
||
let name = "\n\(self.name ?? "")\n\n"
|
||
let titleString = NSMutableAttributedString(string: name, attributes: NRNovelReadSetManager.manager.titleAttributes())
|
||
|
||
let contentString = NSMutableAttributedString(string: novel_txt ?? "", attributes: NRNovelReadSetManager.manager.textAttributes())
|
||
|
||
titleString.append(contentString)
|
||
|
||
return titleString
|
||
}
|
||
|
||
}
|