mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
333c920e0b
• 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
79 lines
2.1 KiB
Objective-C
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
|