Integration work - thread view

pull/1/head
Frederic Jacobs 11 years ago
parent b58d2fb864
commit 1e3dd3d946

@ -48,7 +48,8 @@ typedef void(^ABReloadRequestCompletionBlock)(NSArray *contacts);
- (BOOL)isContactRegisteredWithTextSecure:(Contact*)contact;
-(void)doAfterEnvironmentInitSetup;
- (NSString*)nameStringForPhoneIdentifier:(NSString*)identifier;
- (NSString*)nameStringForPhoneIdentifier:(NSString*)identifier;
- (UIImage*)imageForPhoneIdentifier:(NSString*)identifier;
@end

@ -436,4 +436,15 @@ void onAddressBookChanged(ABAddressBookRef notifyAddressBook, CFDictionaryRef in
return nil;
}
- (UIImage*)imageForPhoneIdentifier:(NSString*)identifier{
for (Contact *contact in self.textSecureContacts) {
for (PhoneNumber *phoneNumber in contact.parsedPhoneNumbers) {
if ([phoneNumber.toE164 isEqualToString:identifier]) {
return contact.image;
}
}
}
return nil;
}
@end

@ -46,4 +46,8 @@
- (NSDate*)lastMessageDate;
- (NSString*)lastMessageLabel;
- (int)unreadMessages;
@end

@ -7,6 +7,10 @@
//
#import "TSThread.h"
#import "Environment.h"
#import "ContactsManager.h"
#import "TSInteraction.h"
#import "TSStorageManager.h"
#import "TSGroup.h"
@implementation TSThread
@ -19,7 +23,8 @@
self = [super initWithUniqueId:uniqueId];
if (self) {
_blocked = NO;
_blocked = NO;
_lastMessageId = 0;
}
return self;
@ -31,15 +36,41 @@
}
- (uint64_t)lastMessageId{
return 0;
return _lastMessageId;
}
- (NSDate*)lastMessageDate{
return [NSDate date];
__block NSDate *date;
[[TSStorageManager sharedManager].dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
date = [TSInteraction fetchObjectWithUniqueID:[TSInteraction stringFromTimeStamp:_lastMessageId] transaction:transaction].date;
}];
if (date) {
return date;
} else{
return [NSDate date];
}
}
- (UIImage*)image{
return nil;
}
- (NSString*)lastMessageLabel{
__block TSInteraction *interaction;
[[TSStorageManager sharedManager].dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
interaction = [TSInteraction fetchObjectWithUniqueID:[TSInteraction stringFromTimeStamp:_lastMessageId] transaction:transaction];
}];
return interaction.description;
}
- (int)unreadMessages{
return 0;
}
- (NSString *)name{
NSAssert(FALSE, @"Should be implemented in subclasses");
return nil;
}
@end

@ -57,6 +57,11 @@
return name;
}
- (UIImage*)image{
UIImage *image = [[Environment getCurrent].contactsManager imageForPhoneIdentifier:self.contactIdentifier];
return image;
}
+ (NSString*)threadIdFromContactId:(NSString*)contactId{
return [TSContactThreadPrefix stringByAppendingString:contactId];
}

@ -30,8 +30,11 @@ extern const struct TSMessageEdges {
- (NSDate*)date;
- (uint64_t)timeStamp;
- (NSString*)description;
#pragma mark Utility Method
+ (NSString*)stringFromTimeStamp:(uint64_t)timestamp;
+ (uint64_t)timeStampFromString:(NSString*)string;
@end

@ -52,10 +52,7 @@ const struct TSMessageEdges TSMessageEdges = {
#pragma mark Date operations
- (uint64_t)identifierToTimestamp{
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterNoStyle];
NSNumber * myNumber = [f numberFromString:self.uniqueId];
return [myNumber unsignedLongLongValue];
return [[self class] timeStampFromString:self.uniqueId];
}
- (NSDate*)date{
@ -72,4 +69,15 @@ const struct TSMessageEdges TSMessageEdges = {
return [[NSNumber numberWithUnsignedLongLong:timestamp] stringValue];
}
+ (uint64_t)timeStampFromString:(NSString*)string{
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterNoStyle];
NSNumber * myNumber = [f numberFromString:string];
return [myNumber unsignedLongLongValue];
}
- (NSString*)description{
return @"Interaction description";
}
@end

@ -94,6 +94,9 @@
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
[message setMessageState:TSOutgoingMessageStateSent];
[message saveWithTransaction:transaction];
TSThread *fetchedThread = [TSThread fetchObjectWithUniqueID:thread.uniqueId];
fetchedThread.lastMessageId = [TSInteraction timeStampFromString:message.uniqueId];
[thread saveWithTransaction:transaction];
}];
}

@ -211,6 +211,7 @@
}
[incomingMessage saveWithTransaction:transaction];
thread.lastMessageId = [TSInteraction timeStampFromString:incomingMessage.uniqueId];
[thread saveWithTransaction:transaction];
}];
}

@ -36,8 +36,7 @@
}];
}
- (void)removeWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
{
- (void)removeWithTransaction:(YapDatabaseReadWriteTransaction *)transaction{
[transaction removeObjectForKey:self.uniqueId inCollection:[[self class] collection]];
}
@ -45,6 +44,7 @@
- (void)remove{
[[TSStorageManager sharedManager].dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
[self removeWithTransaction:transaction];
[[transaction ext:@"relationships"] flush];
}];
}

@ -43,10 +43,10 @@
-(void)configureWithThread:(TSThread*)thread {
_nameLabel.text = thread.name;
_snippetLabel.text = @"Missing implementation";
_contactPictureView.image = nil;
_snippetLabel.text = thread.lastMessageLabel;
_contactPictureView.image = thread.image;
_timeLabel.attributedText = [self dateAttributedString:thread.lastMessageDate];
self.separatorInset = UIEdgeInsetsMake(0,_contactPictureView.frame.size.width*1.5f, 0, 0);
self.separatorInset = UIEdgeInsetsMake(0,_contactPictureView.frame.size.width*1.5f, 0, 0);
[self setUpLastAction:@"read"]; // TODO: Change
}

@ -12,8 +12,6 @@
@class TSThread;
@interface MessagesViewController : JSQMessagesViewController <UIImagePickerControllerDelegate,UINavigationControllerDelegate>
@property (strong, nonatomic) NSString* senderTitleString;
@property TSThread *thread;
- (void)setupWithThread:(TSThread*)thread;

@ -57,6 +57,8 @@ typedef enum : NSUInteger {
[super viewDidLoad];
// Do any additional setup after loading the view.
isGroupConversation = NO; // TODO: Support Group Conversations
JSQMessagesBubbleImageFactory *bubbleFactory = [[JSQMessagesBubbleImageFactory alloc] init];
self.outgoingBubbleImageData = [bubbleFactory outgoingMessagesBubbleImageWithColor:[UIColor jsq_messageBubbleBlueColor]];
@ -66,7 +68,6 @@ typedef enum : NSUInteger {
[self.uiDatabaseConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
[self.messageMappings updateWithTransaction:transaction];
NSLog(@"Total messages: %lu", (unsigned long)[self.messageMappings numberOfItemsInAllGroups]);
}];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"lock.png"] style:UIBarButtonItemStylePlain target:self action:@selector(showFingerprint)];
@ -76,13 +77,10 @@ typedef enum : NSUInteger {
self.collectionView.showsVerticalScrollIndicator = NO;
self.collectionView.showsHorizontalScrollIndicator = NO;
//DEBUG:
isGroupConversation = NO;
self.title = self.senderTitleString;
self.title = self.thread.name;
self.senderId = @"self";
self.senderDisplayName = @"self";
self.senderId = ME_MESSAGE_IDENTIFIER
self.senderDisplayName = ME_MESSAGE_IDENTIFIER;
self.automaticallyScrollsToMostRecentMessage = YES;
@ -142,8 +140,9 @@ typedef enum : NSUInteger {
#pragma mark - JSQMessage custom methods
-(void)updateMessageStatus:(JSQMessage*)message {
if ([message.senderId isEqualToString:self.senderId])
if ([message.senderId isEqualToString:self.senderId]){
message.status = kMessageReceived;
}
}
#pragma mark - JSQMessagesViewController method overrides

@ -13,6 +13,8 @@
#import "TSInteraction.h"
#import "TSThread.h"
#define ME_MESSAGE_IDENTIFIER @"Me";
@interface TSMessageAdapter : NSObject <JSQMessageData>
+ (instancetype)messageViewDataWithInteraction:(TSInteraction*)interaction inThread:(TSThread*)thread;

@ -41,13 +41,21 @@
if ([thread isKindOfClass:[TSContactThread class]]) {
adapter.thread = (TSContactThread*)thread;
if ([interaction isKindOfClass:[TSIncomingMessage class]]) {
NSString *contactId = ((TSContactThread*)thread).contactIdentifier;
adapter.senderId = contactId;
adapter.senderDisplayName = contactId;
} else{
adapter.senderId = ME_MESSAGE_IDENTIFIER;
adapter.senderDisplayName = @"Me";
}
} else if ([thread isKindOfClass:[TSGroupThread class]]){
if ([interaction isKindOfClass:[TSIncomingMessage class]]) {
TSIncomingMessage *message = (TSIncomingMessage*)interaction;
adapter.senderId = message.authorId;
adapter.senderDisplayName = message.authorId;
} else{
adapter.senderId = @"self";
adapter.senderId = ME_MESSAGE_IDENTIFIER;
adapter.senderDisplayName = @"Me";
}
}
@ -68,7 +76,12 @@
- (NSString*)senderId{
return self.thread.uniqueId;
if (_senderId) {
return _senderId;
}
else{
return ME_MESSAGE_IDENTIFIER;
}
}
- (NSString *)senderDisplayName{

@ -68,21 +68,7 @@ static NSString *const kSegueIndentifier = @"showSegue";
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if ([self.threadMappings numberOfItemsInAllGroups]==0)
{
CGRect r = CGRectMake(0, 60, 300, 70);
_emptyViewLabel = [[UILabel alloc]initWithFrame:r];
_emptyViewLabel.text = @"You have no messages yet.";
_emptyViewLabel.textColor = [UIColor grayColor];
_emptyViewLabel.font = [UIFont ows_thinFontWithSize:14.0f];
_emptyViewLabel.textAlignment = NSTextAlignmentCenter;
self.tableView.tableHeaderView = _emptyViewLabel;
} else {
_emptyViewLabel = nil;
self.tableView.tableHeaderView = nil;
}
[self updateTableViewHeader];
}
- (void)didReceiveMemoryWarning {
@ -109,7 +95,7 @@ static NSString *const kSegueIndentifier = @"showSegue";
- (InboxTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
InboxTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:inboxTableViewCell];
TSThread *thread = [self threadForIndexPath:indexPath];
TSThread *thread = [self threadForIndexPath:indexPath];
if (!cell) {
cell = [[InboxTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
@ -143,9 +129,7 @@ static NSString *const kSegueIndentifier = @"showSegue";
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
TSThread *thread = [self threadForIndexPath:indexPath];
[[TSStorageManager sharedManager].dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
[thread removeWithTransaction:transaction];
}];
[thread remove];
}
- (void)tableViewCellTappedArchive:(InboxTableViewCell*)cell {
@ -282,5 +266,23 @@ static NSString *const kSegueIndentifier = @"showSegue";
}
[self.tableView endUpdates];
[self updateTableViewHeader];
}
- (void)updateTableViewHeader{
if ([self.threadMappings numberOfItemsInAllGroups]==0)
{
CGRect r = CGRectMake(0, 60, 300, 70);
_emptyViewLabel = [[UILabel alloc]initWithFrame:r];
_emptyViewLabel.text = @"You have no messages yet.";
_emptyViewLabel.textColor = [UIColor grayColor];
_emptyViewLabel.font = [UIFont ows_thinFontWithSize:14.0f];
_emptyViewLabel.textAlignment = NSTextAlignmentCenter;
self.tableView.tableHeaderView = _emptyViewLabel;
} else {
_emptyViewLabel = nil;
self.tableView.tableHeaderView = nil;
}
}
@end

Loading…
Cancel
Save