mirror of
https://github.com/wahyd4/Yep.git
synced 2026-08-09 12:56:15 +10:00
refactor deleteConversation; directly delete deletedFeedConversation
This commit is contained in:
+58
-50
@@ -1058,6 +1058,61 @@ func updateUserWithUserID(userID: String, useUserInfo userInfo: JSONDictionary)
|
||||
|
||||
// MARK: Delete
|
||||
|
||||
private func clearMessagesOfConversation(conversation: Conversation, inRealm realm: Realm) {
|
||||
|
||||
let messages = conversation.messages
|
||||
|
||||
// delete all media files of messages
|
||||
|
||||
messages.forEach { deleteMediaFilesOfMessage($0) }
|
||||
|
||||
// delete all mediaMetaDatas
|
||||
|
||||
for message in messages {
|
||||
if let mediaMetaData = message.mediaMetaData {
|
||||
let _ = try? realm.write {
|
||||
realm.delete(mediaMetaData)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// delete all messages in conversation
|
||||
|
||||
let _ = try? realm.write {
|
||||
realm.delete(messages)
|
||||
}
|
||||
}
|
||||
|
||||
func deleteConversation(conversation: Conversation, inRealm realm: Realm) {
|
||||
|
||||
clearMessagesOfConversation(conversation, inRealm: realm)
|
||||
|
||||
// delete conversation, finally
|
||||
|
||||
let _ = try? realm.write {
|
||||
|
||||
if let group = conversation.withGroup {
|
||||
|
||||
if let feed = conversation.withGroup?.withFeed {
|
||||
|
||||
feed.cascadeDelete()
|
||||
}
|
||||
|
||||
let groupID = group.groupID
|
||||
|
||||
FayeService.sharedManager.unsubscribeGroup(groupID: groupID)
|
||||
|
||||
leaveGroup(groupID: groupID, failureHandler: nil, completion: {
|
||||
println("leaved group: \(groupID)")
|
||||
})
|
||||
|
||||
realm.delete(group)
|
||||
}
|
||||
|
||||
realm.delete(conversation)
|
||||
}
|
||||
}
|
||||
|
||||
func tryDeleteOrClearHistoryOfConversation(conversation: Conversation, inViewController vc: UIViewController?, whenAfterClearedHistory afterClearedHistory: () -> Void, afterDeleted: () -> Void, orCanceled cancelled: () -> Void) {
|
||||
|
||||
guard let realm = conversation.realm else {
|
||||
@@ -1066,58 +1121,11 @@ func tryDeleteOrClearHistoryOfConversation(conversation: Conversation, inViewCon
|
||||
}
|
||||
|
||||
let clearMessages: () -> Void = {
|
||||
|
||||
let messages = conversation.messages
|
||||
|
||||
// delete all media files of messages
|
||||
|
||||
messages.forEach { deleteMediaFilesOfMessage($0) }
|
||||
|
||||
// delete all mediaMetaDatas
|
||||
|
||||
for message in messages {
|
||||
if let mediaMetaData = message.mediaMetaData {
|
||||
let _ = try? realm.write {
|
||||
realm.delete(mediaMetaData)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// delete all messages in conversation
|
||||
|
||||
let _ = try? realm.write {
|
||||
realm.delete(messages)
|
||||
}
|
||||
clearMessagesOfConversation(conversation, inRealm: realm)
|
||||
}
|
||||
|
||||
let delete: () -> Void = {
|
||||
|
||||
clearMessages()
|
||||
|
||||
// delete conversation, finally
|
||||
|
||||
let _ = try? realm.write {
|
||||
|
||||
if let group = conversation.withGroup {
|
||||
|
||||
if let feed = conversation.withGroup?.withFeed {
|
||||
|
||||
feed.cascadeDelete()
|
||||
}
|
||||
|
||||
let groupID = group.groupID
|
||||
|
||||
FayeService.sharedManager.unsubscribeGroup(groupID: groupID)
|
||||
|
||||
leaveGroup(groupID: groupID, failureHandler: nil, completion: {
|
||||
println("leaved group: \(groupID)")
|
||||
})
|
||||
|
||||
realm.delete(group)
|
||||
}
|
||||
|
||||
realm.delete(conversation)
|
||||
}
|
||||
deleteConversation(conversation, inRealm: realm)
|
||||
}
|
||||
|
||||
// show ActionSheet before delete
|
||||
@@ -1153,5 +1161,5 @@ func tryDeleteOrClearHistoryOfConversation(conversation: Conversation, inViewCon
|
||||
|
||||
afterDeleted()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -148,38 +148,54 @@ extension FeedConversationsViewController: UITableViewDataSource, UITableViewDel
|
||||
|
||||
if editingStyle == .Delete {
|
||||
|
||||
guard let conversation = feedConversations[safe: indexPath.row] else {
|
||||
guard let conversation = feedConversations[safe: indexPath.row], feed = conversation.withGroup?.withFeed else {
|
||||
tableView.setEditing(false, animated: true)
|
||||
return
|
||||
}
|
||||
|
||||
tryDeleteOrClearHistoryOfConversation(conversation, inViewController: self, whenAfterClearedHistory: { [weak self] in
|
||||
if feed.deleted {
|
||||
|
||||
tableView.setEditing(false, animated: true)
|
||||
|
||||
// update cell
|
||||
|
||||
if let cell = tableView.cellForRowAtIndexPath(indexPath) as? ConversationCell {
|
||||
if let conversation = self?.feedConversations[safe: indexPath.row] {
|
||||
let radius = min(CGRectGetWidth(cell.avatarImageView.bounds), CGRectGetHeight(cell.avatarImageView.bounds)) * 0.5
|
||||
cell.configureWithConversation(conversation, avatarRadius: radius, tableView: tableView, indexPath: indexPath)
|
||||
}
|
||||
guard let realm = conversation.realm else {
|
||||
tableView.setEditing(false, animated: true)
|
||||
return
|
||||
}
|
||||
|
||||
dispatch_async(dispatch_get_main_queue()) {
|
||||
NSNotificationCenter.defaultCenter().postNotificationName(YepConfig.Notification.changedConversation, object: nil)
|
||||
}
|
||||
deleteConversation(conversation, inRealm: realm)
|
||||
|
||||
}, afterDeleted: {
|
||||
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
|
||||
|
||||
dispatch_async(dispatch_get_main_queue()) {
|
||||
NSNotificationCenter.defaultCenter().postNotificationName(YepConfig.Notification.changedConversation, object: nil)
|
||||
}
|
||||
NSNotificationCenter.defaultCenter().postNotificationName(YepConfig.Notification.changedConversation, object: nil)
|
||||
|
||||
}, orCanceled: {
|
||||
tableView.setEditing(false, animated: true)
|
||||
})
|
||||
} else {
|
||||
|
||||
tryDeleteOrClearHistoryOfConversation(conversation, inViewController: self, whenAfterClearedHistory: { [weak self] in
|
||||
|
||||
tableView.setEditing(false, animated: true)
|
||||
|
||||
// update cell
|
||||
|
||||
if let cell = tableView.cellForRowAtIndexPath(indexPath) as? ConversationCell {
|
||||
if let conversation = self?.feedConversations[safe: indexPath.row] {
|
||||
let radius = min(CGRectGetWidth(cell.avatarImageView.bounds), CGRectGetHeight(cell.avatarImageView.bounds)) * 0.5
|
||||
cell.configureWithConversation(conversation, avatarRadius: radius, tableView: tableView, indexPath: indexPath)
|
||||
}
|
||||
}
|
||||
|
||||
dispatch_async(dispatch_get_main_queue()) {
|
||||
NSNotificationCenter.defaultCenter().postNotificationName(YepConfig.Notification.changedConversation, object: nil)
|
||||
}
|
||||
|
||||
}, afterDeleted: {
|
||||
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
|
||||
|
||||
dispatch_async(dispatch_get_main_queue()) {
|
||||
NSNotificationCenter.defaultCenter().postNotificationName(YepConfig.Notification.changedConversation, object: nil)
|
||||
}
|
||||
|
||||
}, orCanceled: {
|
||||
tableView.setEditing(false, animated: true)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user