From d7d8c463189ab786db7bf7ccb0454485cb0539c1 Mon Sep 17 00:00:00 2001 From: nixzhu Date: Tue, 24 Nov 2015 14:47:32 +0800 Subject: [PATCH] better deleteAttachmentInRealm for Message (also delete mediaMetaData & socialWork) --- Yep/Realm/Models.swift | 72 ++++++++++++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 23 deletions(-) diff --git a/Yep/Realm/Models.swift b/Yep/Realm/Models.swift index 0cf4fcaf..04f3bf16 100644 --- a/Yep/Realm/Models.swift +++ b/Yep/Realm/Models.swift @@ -505,6 +505,51 @@ class Message: Object { dynamic var fromFriend: User? dynamic var conversation: Conversation? + + + func deleteAttachmentInRealm(realm: Realm) { + + if let mediaMetaData = mediaMetaData { + realm.delete(mediaMetaData) + } + + switch mediaType { + + case MessageMediaType.Image.rawValue: + NSFileManager.removeMessageImageFileWithName(localAttachmentName) + + case MessageMediaType.Video.rawValue: + NSFileManager.removeMessageVideoFilesWithName(localAttachmentName, thumbnailName: localThumbnailName) + + case MessageMediaType.Audio.rawValue: + NSFileManager.removeMessageAudioFileWithName(localAttachmentName) + + case MessageMediaType.Location.rawValue: + NSFileManager.removeMessageImageFileWithName(localAttachmentName) + + case MessageMediaType.SocialWork.rawValue: + + if let socialWork = socialWork { + + if let githubRepo = socialWork.githubRepo { + realm.delete(githubRepo) + } + + if let dribbbleShot = socialWork.dribbbleShot { + realm.delete(dribbbleShot) + } + + if let instagramMedia = socialWork.instagramMedia { + realm.delete(instagramMedia) + } + + realm.delete(socialWork) + } + + default: + break // TODO: if have other message media need to delete + } + } } class Draft: Object { @@ -972,27 +1017,6 @@ func messageWithMessageID(messageID: String, inRealm realm: Realm) -> Message? { return messages.first } -func deleteMediaFilesOfMessage(message: Message) { - - switch message.mediaType { - - case MessageMediaType.Image.rawValue: - NSFileManager.removeMessageImageFileWithName(message.localAttachmentName) - - case MessageMediaType.Video.rawValue: - NSFileManager.removeMessageVideoFilesWithName(message.localAttachmentName, thumbnailName: message.localThumbnailName) - - case MessageMediaType.Audio.rawValue: - NSFileManager.removeMessageAudioFileWithName(message.localAttachmentName) - - case MessageMediaType.Location.rawValue: - NSFileManager.removeMessageImageFileWithName(message.localAttachmentName) - - default: - break // TODO: if have other message media need to delete - } -} - func avatarWithAvatarURLString(avatarURLString: String, inRealm realm: Realm) -> Avatar? { let predicate = NSPredicate(format: "avatarURLString = %@", avatarURLString) return realm.objects(Avatar).filter(predicate).first @@ -1326,9 +1350,11 @@ private func clearMessagesOfConversation(conversation: Conversation, inRealm rea let messages = conversation.messages - // delete all media files of messages + // delete attachments of messages - messages.forEach { deleteMediaFilesOfMessage($0) } + let _ = try? realm.write { + messages.forEach { $0.deleteAttachmentInRealm(realm) } + } // delete all mediaMetaDatas