Return to conversation after deleting long text

pull/2/head
Michael Kirk 6 years ago
parent 05cc3c00f2
commit b11308b2f8

@ -141,6 +141,7 @@ typedef enum : NSUInteger {
ConversationViewLayoutDelegate, ConversationViewLayoutDelegate,
ConversationViewCellDelegate, ConversationViewCellDelegate,
ConversationInputTextViewDelegate, ConversationInputTextViewDelegate,
LongTextViewDelegate,
MessageActionsDelegate, MessageActionsDelegate,
MessageDetailViewDelegate, MessageDetailViewDelegate,
MenuActionsViewControllerDelegate, MenuActionsViewControllerDelegate,
@ -1956,6 +1957,14 @@ typedef enum : NSUInteger {
[self.navigationController popToViewController:self animated:YES]; [self.navigationController popToViewController:self animated:YES];
} }
#pragma mark - LongTextViewDelegate
- (void)longTextViewMessageWasDeleted:(LongTextViewController *)longTextViewController
{
OWSLogInfo(@"");
[self.navigationController popToViewController:self animated:YES];
}
#pragma mark - MenuActionsViewControllerDelegate #pragma mark - MenuActionsViewControllerDelegate
- (void)menuActionsDidHide:(MenuActionsViewController *)menuActionsViewController - (void)menuActionsDidHide:(MenuActionsViewController *)menuActionsViewController
@ -2256,8 +2265,9 @@ typedef enum : NSUInteger {
OWSAssertDebug(conversationItem); OWSAssertDebug(conversationItem);
OWSAssertDebug([conversationItem.interaction isKindOfClass:[TSMessage class]]); OWSAssertDebug([conversationItem.interaction isKindOfClass:[TSMessage class]]);
LongTextViewController *view = [[LongTextViewController alloc] initWithViewItem:conversationItem]; LongTextViewController *viewController = [[LongTextViewController alloc] initWithViewItem:conversationItem];
[self.navigationController pushViewController:view animated:YES]; viewController.delegate = self;
[self.navigationController pushViewController:viewController animated:YES];
} }
- (void)didTapContactShareViewItem:(id<ConversationViewItem>)conversationItem - (void)didTapContactShareViewItem:(id<ConversationViewItem>)conversationItem

@ -1,15 +1,30 @@
// //
// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // Copyright (c) 2019 Open Whisper Systems. All rights reserved.
// //
import Foundation import Foundation
import SignalServiceKit import SignalServiceKit
import SignalMessaging import SignalMessaging
@objc
public protocol LongTextViewDelegate {
@objc
func longTextViewMessageWasDeleted(_ longTextViewController: LongTextViewController)
}
@objc @objc
public class LongTextViewController: OWSViewController { public class LongTextViewController: OWSViewController {
// MARK: Properties // MARK: - Dependencies
var uiDatabaseConnection: YapDatabaseConnection {
return OWSPrimaryStorage.shared().uiDatabaseConnection
}
// MARK: - Properties
@objc
weak var delegate: LongTextViewDelegate?
let viewItem: ConversationViewItem let viewItem: ConversationViewItem
@ -55,6 +70,54 @@ public class LongTextViewController: OWSViewController {
createViews() createViews()
self.messageTextView.contentOffset = CGPoint(x: 0, y: self.messageTextView.contentInset.top) self.messageTextView.contentOffset = CGPoint(x: 0, y: self.messageTextView.contentInset.top)
NotificationCenter.default.addObserver(self,
selector: #selector(uiDatabaseDidUpdate),
name: .OWSUIDatabaseConnectionDidUpdate,
object: OWSPrimaryStorage.shared().dbNotificationObject)
}
// MARK: - DB
@objc internal func uiDatabaseDidUpdate(notification: NSNotification) {
AssertIsOnMainThread()
guard let notifications = notification.userInfo?[OWSUIDatabaseConnectionNotificationsKey] as? [Notification] else {
owsFailDebug("notifications was unexpectedly nil")
return
}
guard let uniqueId = self.viewItem.interaction.uniqueId else {
Logger.error("Message is missing uniqueId.")
return
}
guard self.uiDatabaseConnection.hasChange(forKey: uniqueId,
inCollection: TSInteraction.collection(),
in: notifications) else {
Logger.debug("No relevant changes.")
return
}
do {
try uiDatabaseConnection.read { transaction in
guard TSInteraction.fetch(uniqueId: uniqueId, transaction: transaction) != nil else {
Logger.error("Message was deleted")
throw LongTextViewError.messageWasDeleted
}
}
} catch LongTextViewError.messageWasDeleted {
DispatchQueue.main.async {
self.delegate?.longTextViewMessageWasDeleted(self)
}
} catch {
owsFailDebug("unexpected error: \(error)")
}
}
enum LongTextViewError: Error {
case messageWasDeleted
} }
// MARK: - Create Views // MARK: - Create Views

@ -90,7 +90,7 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele
contactShareViewHelper.delegate = self contactShareViewHelper.delegate = self
do { do {
try updateDBConnectionAndMessageToLatest() try updateMessageToLatest()
} catch DetailViewError.messageWasDeleted { } catch DetailViewError.messageWasDeleted {
self.delegate?.detailViewMessageWasDeleted(self) self.delegate?.detailViewMessageWasDeleted(self)
} catch { } catch {
@ -543,7 +543,7 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele
} }
// This method should be called after self.databaseConnection.beginLongLivedReadTransaction(). // This method should be called after self.databaseConnection.beginLongLivedReadTransaction().
private func updateDBConnectionAndMessageToLatest() throws { private func updateMessageToLatest() throws {
AssertIsOnMainThread() AssertIsOnMainThread()
@ -589,7 +589,7 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele
} }
do { do {
try updateDBConnectionAndMessageToLatest() try updateMessageToLatest()
} catch DetailViewError.messageWasDeleted { } catch DetailViewError.messageWasDeleted {
DispatchQueue.main.async { DispatchQueue.main.async {
self.delegate?.detailViewMessageWasDeleted(self) self.delegate?.detailViewMessageWasDeleted(self)
@ -723,6 +723,7 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele
} }
let viewController = LongTextViewController(viewItem: viewItem) let viewController = LongTextViewController(viewItem: viewItem)
viewController.delegate = self
navigationController.pushViewController(viewController, animated: true) navigationController.pushViewController(viewController, animated: true)
} }
@ -789,3 +790,9 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele
self.dismiss(animated: true) self.dismiss(animated: true)
} }
} }
extension MessageDetailViewController: LongTextViewDelegate {
func longTextViewMessageWasDeleted(_ longTextViewController: LongTextViewController) {
self.delegate?.detailViewMessageWasDeleted(self)
}
}

Loading…
Cancel
Save