88
99#import " ChatViewController+Mutability.h"
1010
11- #import " Message.h"
11+ // #import "Message.h"
1212
1313
1414#define ClearConversationButtonIndex 0
1515
1616@implementation ChatViewController (Mutability)
1717
18+ + (NSDate *) sendDateInMessage : (id )message {
19+ return [message valueForKey: @" sentDate" ];
20+ }
1821
19-
22+ + (void ) setIsMine : (BOOL )isMine inMessage : (id )message {
23+ [message setValue: [NSNumber numberWithBool: isMine] forKey: @" isMine" ];
24+ }
2025// Returns number of objects added to cellMap (1 or 2).
21- - (NSUInteger )addMessage : (Message * )message
26+ - (NSUInteger )addMessage : (id )message
2227{
2328 // Show sentDates at most every 15 minutes.
24- NSDate *currentSentDate = message.sentDate ;
29+ NSDate *currentSentDate = [[ self class ] sendDateInMessage: message]; // message.sentDate;
2530 NSUInteger numberOfObjectsAdded = 1 ;
2631 NSUInteger prevIndex = [cellMap count ] - 1 ;
2732
2833 // Show sentDates at most every 15 minutes.
2934
3035 if ([cellMap count ])
3136 {
32- BOOL prevIsMessage = [[cellMap objectAtIndex: prevIndex] isKindOfClass: [Message class ]];
37+ // BOOL prevIsMessage = [[cellMap objectAtIndex:prevIndex] isKindOfClass:[Message class]];
38+ BOOL prevIsMessage = ! [[cellMap objectAtIndex: prevIndex] isKindOfClass: [NSDate class ]];
39+
3340 if (prevIsMessage)
3441 {
35- Message * temp = [cellMap objectAtIndex: prevIndex];
36- NSDate * previousSentDate = temp.sentDate ;
42+ id temp = [cellMap objectAtIndex: prevIndex];
43+ NSDate * previousSentDate =[[ self class ] sendDateInMessage: temp]; // temp.sentDate;
3744 // if there has been more than a 15 min gap between this and the previous message!
3845 if ([currentSentDate timeIntervalSinceDate: previousSentDate] > SECONDS_BETWEEN_MESSAGES)
3946 {
@@ -51,7 +58,9 @@ - (NSUInteger)addMessage:(Message *)message
5158
5259 [cellMap addObject: message];
5360
54- message.isMine = [NSNumber numberWithBool: (([cellMap count ] %3 ) == 0 )];
61+ BOOL isMine_ = (([cellMap count ] %3 ) == 0 );
62+ [[self class ] setIsMine: isMine_ inMessage: message];
63+ // message.isMine = [NSNumber numberWithBool: (([cellMap count] %3) == 0)];
5564
5665 // [message.managedObjectContext save: nil];
5766
@@ -71,7 +80,7 @@ - (NSUInteger)removeMessageAtIndex:(NSUInteger)index {
7180 BOOL isLastObject = index == cellMapCount;
7281 BOOL prevIsDate = [[cellMap objectAtIndex: prevIndex] isKindOfClass: [NSDate class ]];
7382
74- if (isLastObject && prevIsDate ||
83+ if (( isLastObject && prevIsDate) ||
7584 prevIsDate && [[cellMap objectAtIndex: index] isKindOfClass: [NSDate class ]]) {
7685 [cellMap removeObjectAtIndex: prevIndex];
7786 numberOfObjectsRemoved = 2 ;
@@ -93,26 +102,20 @@ - (void)clearAll {
93102
94103}
95104
105+ - (void ) removeMessage : (id )message {
106+
107+ }
108+
109+ - (void ) clearAllMessage {
110+
111+ }
96112#pragma mark UIActionSheetDelegate
97113
98114- (void )actionSheet : (UIActionSheet *)modalView clickedButtonAtIndex : (NSInteger )buttonIndex {
99115 switch (buttonIndex) {
100116 case ClearConversationButtonIndex: {
101- NSError *error;
102- fetchedResultsController.delegate = nil ; // turn off delegate callbacks
103- for (Message *message in [fetchedResultsController fetchedObjects ]) {
104- [managedObjectContext deleteObject: message];
105- }
106- if (![managedObjectContext save: &error]) {
107- // TODO: Handle the error appropriately.
108- NSLog (@" Delete message error %@ , %@ " , error, [error userInfo ]);
109- }
110- fetchedResultsController.delegate = self; // reconnect after mass delete
111- if (![fetchedResultsController performFetch: &error]) { // resync controller
112- // TODO: Handle the error appropriately.
113- NSLog (@" fetchResults error %@ , %@ " , error, [error userInfo ]);
114- }
115-
117+ [self clearAllMessage ];
118+
116119 [cellMap removeAllObjects ];
117120 [chatContent reloadData ];
118121
@@ -134,7 +137,9 @@ - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView
134137
135138
136139- (BOOL )tableView : (UITableView *)tableView canEditRowAtIndexPath : (NSIndexPath *)indexPath {
137- return [[cellMap objectAtIndex: [indexPath row ]] isKindOfClass: [Message class ]];
140+ return ! [[cellMap objectAtIndex: [indexPath row ]] isKindOfClass: [NSDate class ]];
141+
142+ // return [[cellMap objectAtIndex:[indexPath row]] isKindOfClass:[Message class]];
138143 // return [[tableView cellForRowAtIndexPath:indexPath] reuseIdentifier] == kMessageCell;
139144}
140145
@@ -150,13 +155,7 @@ - (void)tableView:(UITableView *)tableView
150155
151156 // NSLog(@"Delete %@", object);
152157
153- // Remove message from managed object context by index path.
154- [managedObjectContext deleteObject: (Message *)object];
155- NSError *error;
156- if (![managedObjectContext save: &error]) {
157- // TODO: Handle the error appropriately.
158- NSLog (@" Delete message error %@ , %@ " , error, [error userInfo ]);
159- }
158+ [self removeMessage: object];
160159 }
161160}
162161
0 commit comments