mirror of
https://github.com/Finb/Bark.git
synced 2025-12-08 21:36:01 +00:00
移除Message 的 isDeleted 字段
This commit is contained in:
parent
152c9842f4
commit
59655ca4b8
@ -14,13 +14,24 @@ let kRealmDefaultConfiguration = {
|
||||
let fileUrl = groupUrl?.appendingPathComponent("bark.realm")
|
||||
let config = Realm.Configuration(
|
||||
fileURL: fileUrl,
|
||||
schemaVersion: 13,
|
||||
migrationBlock: { _, oldSchemaVersion in
|
||||
// We haven’t migrated anything yet, so oldSchemaVersion == 0
|
||||
if oldSchemaVersion < 1 {
|
||||
// Nothing to do!
|
||||
// Realm will automatically detect new properties and removed properties
|
||||
// And will update the schema on disk automatically
|
||||
schemaVersion: 14,
|
||||
migrationBlock: { migration, oldSchemaVersion in
|
||||
switch oldSchemaVersion {
|
||||
case 0...13:
|
||||
migration.enumerateObjects(ofType: Message.className()) { oldObject, newObject in
|
||||
guard let obj = oldObject else {
|
||||
return
|
||||
}
|
||||
guard let isDeleted = obj["isDeleted"] as? Bool else {
|
||||
return
|
||||
}
|
||||
// 旧版软删除的数据,迁移到新版时硬删除掉,新版不再过滤 isDeleted 字段
|
||||
if isDeleted, let newObject {
|
||||
migration.delete(newObject)
|
||||
}
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
@ -37,7 +37,6 @@ class MessageListViewModel: ViewModel, ViewModelType {
|
||||
private func getResults(filterGroups: [String?], searchText: String?) -> Results<Message>? {
|
||||
if let realm = try? Realm() {
|
||||
var results = realm.objects(Message.self)
|
||||
.filter("isDeleted != true")
|
||||
.sorted(byKeyPath: "createDate", ascending: false)
|
||||
if filterGroups.count > 0 {
|
||||
results = results.filter("group in %@", filterGroups)
|
||||
@ -171,10 +170,9 @@ class MessageListViewModel: ViewModel, ViewModelType {
|
||||
// 删除message
|
||||
input.itemDelete.drive(onNext: { [weak self] index in
|
||||
if var section = messagesRelay.value.first {
|
||||
if let realm = try? Realm() {
|
||||
if let realm = try? Realm(), let message = self?.results?[index] {
|
||||
try? realm.write {
|
||||
let message = self?.results?[index]
|
||||
message?.isDeleted = true
|
||||
realm.delete(message)
|
||||
}
|
||||
}
|
||||
section.messages.remove(at: index)
|
||||
@ -203,17 +201,7 @@ class MessageListViewModel: ViewModel, ViewModelType {
|
||||
return
|
||||
}
|
||||
|
||||
// 不再使用icecream 了
|
||||
// 所以需要手动删除
|
||||
// try? realm.write {
|
||||
// for msg in messages {
|
||||
// msg.isDeleted = true
|
||||
// }
|
||||
// }
|
||||
try? realm.write {
|
||||
for msg in messages {
|
||||
msg.isDeleted = true
|
||||
}
|
||||
realm.delete(messages)
|
||||
}
|
||||
}
|
||||
@ -227,7 +215,6 @@ class MessageListViewModel: ViewModel, ViewModelType {
|
||||
let groupFilter = input.groupTap.compactMap { () -> GroupFilterViewModel? in
|
||||
if let realm = try? Realm() {
|
||||
let groups = realm.objects(Message.self)
|
||||
.filter("isDeleted != true")
|
||||
.distinct(by: ["group"])
|
||||
.value(forKeyPath: "group") as? [String?]
|
||||
|
||||
|
||||
@ -79,7 +79,6 @@ class MessageSettingsViewModel: ViewModel, ViewModelType {
|
||||
.map { _ in
|
||||
if let realm = try? Realm() {
|
||||
return realm.objects(Message.self)
|
||||
.filter("isDeleted != true")
|
||||
.count
|
||||
}
|
||||
return 0
|
||||
@ -204,7 +203,6 @@ class MessageSettingsViewModel: ViewModel, ViewModelType {
|
||||
.compactMap { _ in
|
||||
if let realm = try? Realm() {
|
||||
let messages = realm.objects(Message.self)
|
||||
.filter("isDeleted != true")
|
||||
.sorted(byKeyPath: "createDate", ascending: false)
|
||||
|
||||
var arr = [[String: AnyObject]]()
|
||||
|
||||
@ -17,9 +17,6 @@ class Message: Object {
|
||||
@objc dynamic var group: String?
|
||||
@objc dynamic var createDate: Date?
|
||||
|
||||
// 设置为 true 后,将被IceCream自动清理
|
||||
@objc dynamic var isDeleted = false
|
||||
|
||||
override class func primaryKey() -> String? {
|
||||
return "id"
|
||||
}
|
||||
|
||||
@ -19,7 +19,9 @@ enum MessageListCellDateStyle {
|
||||
}
|
||||
|
||||
class MessageTableViewCellViewModel: ViewModel {
|
||||
// 不要在删除消息后,再次使用这个对象,否则会crash
|
||||
let message: Message
|
||||
var identity: String
|
||||
|
||||
let title: BehaviorRelay<String>
|
||||
let body: BehaviorRelay<String>
|
||||
@ -30,7 +32,7 @@ class MessageTableViewCellViewModel: ViewModel {
|
||||
|
||||
init(message: Message) {
|
||||
self.message = message
|
||||
|
||||
self.identity = message.id
|
||||
self.title = BehaviorRelay<String>(value: message.title ?? "")
|
||||
self.body = BehaviorRelay<String>(value: message.body ?? "")
|
||||
self.url = BehaviorRelay<String>(value: message.url ?? "")
|
||||
@ -76,10 +78,6 @@ extension MessageSection: AnimatableSectionModelType {
|
||||
extension MessageTableViewCellViewModel: IdentifiableType {
|
||||
typealias Identity = String
|
||||
|
||||
var identity: String {
|
||||
return "\(self.message.id)"
|
||||
}
|
||||
|
||||
override func isEqual(_ object: Any?) -> Bool {
|
||||
if let obj = object as? MessageTableViewCellViewModel {
|
||||
// 消息列表cell上显示的时间需要随着时间的变化而变化(1分钟前、2分钟前 ...),如果时间不一样的就需要刷新界面
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user