diff --git a/Classes/ChatConversationView.h b/Classes/ChatConversationView.h index 71b50bd43..d9a760bcf 100644 --- a/Classes/ChatConversationView.h +++ b/Classes/ChatConversationView.h @@ -40,6 +40,7 @@ @property(nonatomic) LinphoneChatRoom *chatRoom; @property(nonatomic) LinphoneChatRoomCbs *chatRoomCbs; +@property(nonatomic) Boolean markAsRead; @property(weak, nonatomic) IBOutlet UIIconButton *backButton; @property(nonatomic, strong) IBOutlet ChatConversationTableView *tableController; diff --git a/Classes/ChatConversationView.m b/Classes/ChatConversationView.m index f8f854fb3..7c77d67f7 100644 --- a/Classes/ChatConversationView.m +++ b/Classes/ChatConversationView.m @@ -84,7 +84,7 @@ static UICompositeViewDescription *compositeDescription = nil; - (void)viewDidLoad { [super viewDidLoad]; - + _markAsRead = TRUE; // if we use fragments, remove back button if (IPAD) { _backButton.hidden = YES; @@ -208,8 +208,10 @@ static UICompositeViewDescription *compositeDescription = nil; } - (void)applicationWillEnterForeground:(NSNotification *)notif { - if (_chatRoom) + if (_chatRoom && _markAsRead) [ChatConversationView markAsRead:_chatRoom]; + + _markAsRead = TRUE; } - (void)callUpdateEvent:(NSNotification *)notif { diff --git a/Classes/ChatsListTableView.m b/Classes/ChatsListTableView.m index b3fbf754f..4264087b9 100644 --- a/Classes/ChatsListTableView.m +++ b/Classes/ChatsListTableView.m @@ -141,16 +141,19 @@ static int sorted_history_comparison(LinphoneChatRoom *to_insert, LinphoneChatRo while (sorted) { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; LinphoneChatRoom *cr = sorted->data; - const LinphoneAddress *address = linphone_chat_room_get_peer_address(cr); + const LinphoneAddress *peer_address = linphone_chat_room_get_peer_address(cr); + const LinphoneAddress *local_address = linphone_chat_room_get_local_address(cr); NSString *display; - [dict setObject:[[NSString stringWithUTF8String:linphone_address_as_string_uri_only(address)] substringFromIndex:4] - forKey:@"address"]; + [dict setObject:[NSString stringWithUTF8String:linphone_address_as_string_uri_only(peer_address)] + forKey:@"peer"]; + [dict setObject:[NSString stringWithUTF8String:linphone_address_as_string_uri_only(local_address)] + forKey:@"local"]; if (linphone_chat_room_get_conference_address(cr)) display = [NSString stringWithUTF8String:linphone_chat_room_get_subject(cr)]; else { - display = [NSString stringWithUTF8String:linphone_address_get_display_name(address)?:linphone_address_get_username(address)]; - if ([FastAddressBook imageForAddress:address]) - [dict setObject:UIImageJPEGRepresentation([UIImage resizeImage:[FastAddressBook imageForAddress:address] + display = [NSString stringWithUTF8String:linphone_address_get_display_name(peer_address)?:linphone_address_get_username(peer_address)]; + if ([FastAddressBook imageForAddress:peer_address]) + [dict setObject:UIImageJPEGRepresentation([UIImage resizeImage:[FastAddressBook imageForAddress:peer_address] withMaxWidth:200 andMaxHeight:200], 1) diff --git a/Classes/LinphoneAppDelegate.m b/Classes/LinphoneAppDelegate.m index f7d5a4e8c..0d097876c 100644 --- a/Classes/LinphoneAppDelegate.m +++ b/Classes/LinphoneAppDelegate.m @@ -344,20 +344,35 @@ NSString *sipUri = [[url resourceSpecifier] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"/"]]; [VIEW(DialerView) setAddress:sipUri]; } else if ([scheme isEqualToString:@"linphone-widget"]) { - printf("cparla\n"); if ([[url host] isEqualToString:@"call_log"] && [[url path] isEqualToString:@"/show"]) { [VIEW(HistoryDetailsView) setCallLogId:[url query]]; [PhoneMainView.instance changeCurrentView:HistoryDetailsView.compositeViewDescription]; - } else if ([[url host] isEqualToString:@"chatroom"] && - [[url path] isEqualToString:@"/show"]) { - LinphoneChatRoom *cr = linphone_core_get_chat_room_from_uri(LC, url.query.UTF8String); + } else if ([[url host] isEqualToString:@"chatroom"] && [[url path] isEqualToString:@"/show"]) { + NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url + resolvingAgainstBaseURL:NO]; + NSArray *queryItems = urlComponents.queryItems; + NSString *peerAddress = [self valueForKey:@"peer" fromQueryItems:queryItems]; + NSString *localAddress = [self valueForKey:@"local" fromQueryItems:queryItems]; + LinphoneAddress *peer = linphone_address_new(peerAddress.UTF8String); + LinphoneAddress *local = linphone_address_new(localAddress.UTF8String); + LinphoneChatRoom *cr = linphone_core_find_chat_room(LC, peer, local); + linphone_address_unref(peer); + linphone_address_unref(local); + // TODO : Find a better fix + VIEW(ChatConversationView).markAsRead = FALSE; [PhoneMainView.instance goToChatRoom:cr]; } } return YES; } +- (NSString *)valueForKey:(NSString *)key fromQueryItems:(NSArray *)queryItems { + NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name=%@", key]; + NSURLQueryItem *queryItem = [[queryItems filteredArrayUsingPredicate:predicate] firstObject]; + return queryItem.value; +} + - (void)fixRing { if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { // iOS7 fix for notification sound not stopping. diff --git a/latestCallsWidget/Base.lproj/MainInterface.storyboard b/latestCallsWidget/Base.lproj/MainInterface.storyboard index defdc0555..1e3f45eed 100644 --- a/latestCallsWidget/Base.lproj/MainInterface.storyboard +++ b/latestCallsWidget/Base.lproj/MainInterface.storyboard @@ -36,7 +36,7 @@ -