session-ios/Signal/src/textsecure/Contacts/Threads/TSGroupThread.m
Christine Corbett 333c920e0b Group functionality
• create
• send/receive full functionality
• basic UI for group updating.

TODOS:
    -group avatars not supported
    -group update occurrence initiated by Android displayed in thread UI but not yet fully

Reviewed-by: @FredericJacobs
2015-01-04 11:30:26 +01:00

79 lines
2.1 KiB
Objective-C

//
// TSGroupThread.m
// TextSecureKit
//
// Created by Frederic Jacobs on 16/11/14.
// Copyright (c) 2014 Open Whisper Systems. All rights reserved.
//
#import "TSGroupThread.h"
#import "TSRecipient.h"
#import "NSData+Base64.h"
@implementation TSGroupThread
#define TSGroupThreadPrefix @"g"
- (instancetype)initWithGroupModel:(GroupModel *)groupModel{
NSString *uniqueIdentifier = [[self class] threadIdFromGroupId:groupModel.groupId];
self = [super initWithUniqueId:uniqueIdentifier];
_groupModel = groupModel;
return self;
}
+ (instancetype)threadWithGroupModel:(GroupModel *)groupModel transaction:(YapDatabaseReadWriteTransaction*)transaction{
TSGroupThread *thread = [self fetchObjectWithUniqueID:[self threadIdFromGroupId:groupModel.groupId] transaction:transaction];
if (!thread) {
thread = [[TSGroupThread alloc] initWithGroupModel:groupModel];
[thread saveWithTransaction:transaction];
}
else if(![thread.groupModel isEqual:groupModel]) {
thread.groupModel = groupModel;
[thread saveWithTransaction:transaction];
}
return thread;
}
- (BOOL)isGroupThread{
return true;
}
- (NSData *)groupId{
return [[self class] groupIdFromThreadId:self.uniqueId];
}
- (NSString*)name{
return self.groupModel.groupName;
}
+ (NSString*)threadIdFromGroupId:(NSData*)groupId{
return [TSGroupThreadPrefix stringByAppendingString:[groupId base64EncodedString]];
}
+ (NSData*)groupIdFromThreadId:(NSString*)threadId{
return [NSData dataFromBase64String:[threadId substringWithRange:NSMakeRange(1, threadId.length-1)]];
}
- (NSArray *)recipientsWithTransaction:(YapDatabaseReadTransaction*)transaction{
NSMutableArray *recipients = [[NSMutableArray alloc] init];
for(NSString *recipientId in _groupModel.groupMemberIds) {
TSRecipient *recipient = [TSRecipient recipientWithTextSecureIdentifier:recipientId withTransaction:transaction];
if (!recipient){
recipient = [[TSRecipient alloc] initWithTextSecureIdentifier:recipientId relay:nil];
}
[recipients addObject:recipient];
}
return recipients;
}
@end