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