Unify the "message was sent" logic in conversation view. Ensure "message sent" sounds are played after sending attachments.

// FREEBIE
pull/1/head
Matthew Chen 8 years ago
parent 3bfb91d0c2
commit 5b70116209

@ -238,7 +238,8 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
UIImagePickerControllerDelegate, UIImagePickerControllerDelegate,
UINavigationControllerDelegate, UINavigationControllerDelegate,
UITextViewDelegate, UITextViewDelegate,
JSQLayoutDelegate> JSQLayoutDelegate,
GifPickerViewControllerDelegate>
@property (nonatomic) TSThread *thread; @property (nonatomic) TSThread *thread;
@property (nonatomic) TSMessageAdapter *lastDeliveredMessage; @property (nonatomic) TSMessageAdapter *lastDeliveredMessage;
@ -1685,10 +1686,10 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
text = [text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; text = [text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
if (text.length > 0) { if (text.length < 1) {
if ([Environment.preferences soundInForeground]) { return;
[JSQSystemSoundPlayer jsq_playMessageSentSound];
} }
// Limit outgoing text messages to 16kb. // Limit outgoing text messages to 16kb.
// //
// We convert large text messages to attachments // We convert large text messages to attachments
@ -1705,10 +1706,8 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
} else { } else {
message = [ThreadUtil sendMessageWithText:text inThread:self.thread messageSender:self.messageSender]; message = [ThreadUtil sendMessageWithText:text inThread:self.thread messageSender:self.messageSender];
} }
[self updateLastVisibleTimestamp:message.timestampForSorting];
self.lastMessageSentDate = [NSDate new]; [self messageWasSent:message];
[self clearUnreadMessagesIndicator];
if (updateKeyboardState) { if (updateKeyboardState) {
[self toggleDefaultKeyboard]; [self toggleDefaultKeyboard];
@ -1720,7 +1719,6 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
[self ensureDynamicInteractions]; [self ensureDynamicInteractions];
} }
} }
}
- (void)toggleDefaultKeyboard - (void)toggleDefaultKeyboard
{ {
@ -3209,10 +3207,42 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
{ {
GifPickerViewController *view = GifPickerViewController *view =
[[GifPickerViewController alloc] initWithThread:self.thread messageSender:self.messageSender]; [[GifPickerViewController alloc] initWithThread:self.thread messageSender:self.messageSender];
view.delegate = self;
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:view]; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:view];
[self presentViewController:navigationController animated:YES completion:nil]; [self presentViewController:navigationController animated:YES completion:nil];
} }
#pragma mark GifPickerViewControllerDelegate
- (void)gifPickerWillSend
{
[ThreadUtil addThreadToProfileWhitelistIfEmptyContactThread:self.thread];
}
- (void)gifPickerDidSendWithOutgoingMessage:(TSOutgoingMessage *)message
{
[self messageWasSent:message];
[self ensureDynamicInteractions];
}
- (void)messageWasSent:(TSOutgoingMessage *)message
{
OWSAssert([NSThread isMainThread]);
OWSAssert(message);
[self.editingDatabaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
[message saveWithTransaction:transaction];
}];
[self updateLastVisibleTimestamp:message.timestampForSorting];
self.lastMessageSentDate = [NSDate new];
[self clearUnreadMessagesIndicator];
if ([Environment.preferences soundInForeground]) {
[JSQSystemSoundPlayer jsq_playMessageSentSound];
}
}
#pragma mark UIDocumentMenuDelegate #pragma mark UIDocumentMenuDelegate
- (void)documentMenu:(UIDocumentMenuViewController *)documentMenu - (void)documentMenu:(UIDocumentMenuViewController *)documentMenu
@ -3488,12 +3518,9 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
BOOL didAddToProfileWhitelist = [ThreadUtil addThreadToProfileWhitelistIfEmptyContactThread:self.thread]; BOOL didAddToProfileWhitelist = [ThreadUtil addThreadToProfileWhitelistIfEmptyContactThread:self.thread];
TSOutgoingMessage *message = TSOutgoingMessage *message =
[ThreadUtil sendMessageWithAttachment:attachment inThread:self.thread messageSender:self.messageSender]; [ThreadUtil sendMessageWithAttachment:attachment inThread:self.thread messageSender:self.messageSender];
[self.editingDatabaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
[message saveWithTransaction:transaction]; [self messageWasSent:message];
}];
[self updateLastVisibleTimestamp:message.timestampForSorting];
self.lastMessageSentDate = [NSDate new];
[self clearUnreadMessagesIndicator];
if (didAddToProfileWhitelist) { if (didAddToProfileWhitelist) {
[self ensureDynamicInteractions]; [self ensureDynamicInteractions];
} }

@ -4,11 +4,19 @@
import Foundation import Foundation
@objc
protocol GifPickerViewControllerDelegate: class {
func gifPickerWillSend()
func gifPickerDidSend(outgoingMessage: TSOutgoingMessage)
}
class GifPickerViewController: OWSViewController, UISearchBarDelegate, UICollectionViewDataSource, UICollectionViewDelegate, GifPickerLayoutDelegate { class GifPickerViewController: OWSViewController, UISearchBarDelegate, UICollectionViewDataSource, UICollectionViewDelegate, GifPickerLayoutDelegate {
let TAG = "[GifPickerViewController]" let TAG = "[GifPickerViewController]"
// MARK: Properties // MARK: Properties
public weak var delegate: GifPickerViewControllerDelegate?
var thread: TSThread? var thread: TSThread?
var messageSender: MessageSender? var messageSender: MessageSender?
@ -166,7 +174,12 @@ class GifPickerViewController: OWSViewController, UISearchBarDelegate, UICollect
owsFail("\(TAG) Missing messageSender.") owsFail("\(TAG) Missing messageSender.")
return return
} }
ThreadUtil.sendMessage(with: attachment, in: thread, messageSender: messageSender)
self.delegate?.gifPickerWillSend()
let outgoingMessage = ThreadUtil.sendMessage(with: attachment, in: thread, messageSender: messageSender)
self.delegate?.gifPickerDidSend(outgoingMessage: outgoingMessage)
dismiss(animated: true, completion:nil) dismiss(animated: true, completion:nil)
} }

Loading…
Cancel
Save