This commit is contained in:
Niels Andriesse 2020-01-28 15:08:42 +11:00
parent 0f0eba9325
commit 7762418ac1
32 changed files with 163 additions and 212 deletions

View File

@ -1618,7 +1618,7 @@ static NSTimeInterval launchStartedAt;
if (!isChatSetUp || !chat.isDeletable) {
[LKPublicChatManager.shared addChatWithServer:chat.server channel:chat.channel name:chat.displayName];
[OWSPrimaryStorage.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
TSGroupThread *thread = [TSGroupThread threadWithGroupId:[LKGroupUtil getEncodedPublichChatGroupIdAsData:chat.id] transaction:transaction];
TSGroupThread *thread = [TSGroupThread threadWithGroupId:[LKGroupUtilities getEncodedOpenGroupIDAsData:chat.id] transaction:transaction];
if (thread != nil) { [OWSProfileManager.sharedManager addThreadToProfileWhitelist:thread]; }
}];
[NSUserDefaults.standardUserDefaults setBool:YES forKey:userDefaultsKey];
@ -1634,7 +1634,7 @@ static NSTimeInterval launchStartedAt;
NSString *userDefaultsKey = [@"isRSSFeedSetUp." stringByAppendingString:feed.id];
BOOL isFeedSetUp = [NSUserDefaults.standardUserDefaults boolForKey:userDefaultsKey];
if (!isFeedSetUp || !feed.isDeletable) {
TSGroupModel *group = [[TSGroupModel alloc] initWithTitle:feed.displayName memberIds:@[ userHexEncodedPublicKey, feed.server ] image:nil groupId:[LKGroupUtil getEncodedRssFeedGroupIdAsData:feed.id] groupType:RSS_FEED adminIds:@[ userHexEncodedPublicKey, feed.server ]];
TSGroupModel *group = [[TSGroupModel alloc] initWithTitle:feed.displayName memberIds:@[ userHexEncodedPublicKey, feed.server ] image:nil groupId:[LKGroupUtilities getEncodedRSSFeedIDAsData:feed.id] groupType:rssFeed adminIds:@[ userHexEncodedPublicKey, feed.server ]];
__block TSGroupThread *thread;
[OWSPrimaryStorage.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
thread = [TSGroupThread getOrCreateThreadWithGroupModel:group transaction:transaction];
@ -1650,7 +1650,7 @@ static NSTimeInterval launchStartedAt;
// Only create the RSS feed pollers if their threads aren't deleted
__block TSGroupThread *lokiNewsFeedThread;
[OWSPrimaryStorage.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
lokiNewsFeedThread = [TSGroupThread threadWithGroupId:[LKGroupUtil getEncodedRssFeedGroupIdAsData:self.lokiNewsFeed.id] transaction:transaction];
lokiNewsFeedThread = [TSGroupThread threadWithGroupId:[LKGroupUtilities getEncodedRSSFeedIDAsData:self.lokiNewsFeed.id] transaction:transaction];
}];
if (lokiNewsFeedThread != nil && self.lokiNewsFeedPoller == nil) {
self.lokiNewsFeedPoller = [[LKRSSFeedPoller alloc] initForFeed:self.lokiNewsFeed];
@ -1672,7 +1672,7 @@ static NSTimeInterval launchStartedAt;
NSDictionary *userInfo = notification.userInfo;
NSString *threadID = (NSString *)userInfo[@"threadId"];
if (threadID == nil) { return; }
if ([threadID isEqualToString:[TSGroupThread threadIdFromGroupId:[LKGroupUtil getEncodedRssFeedGroupIdAsData:self.lokiNewsFeed.id]]] && self.lokiNewsFeedPoller != nil) {
if ([threadID isEqualToString:[TSGroupThread threadIdFromGroupId:[LKGroupUtilities getEncodedRSSFeedIDAsData:self.lokiNewsFeed.id]]] && self.lokiNewsFeedPoller != nil) {
[self.lokiNewsFeedPoller stop];
self.lokiNewsFeedPoller = nil;
}

View File

@ -48,7 +48,7 @@ public final class LokiRSSFeedPoller : NSObject {
guard let bodyAsData = bodyAsHTML.data(using: String.Encoding.unicode) else { return }
let options = [ NSAttributedString.DocumentReadingOptionKey.documentType : NSAttributedString.DocumentType.html ]
guard let body = try? NSAttributedString(data: bodyAsData, options: options, documentAttributes: nil).string else { return }
let id = LKGroupUtil.getEncodedRssFeedGroupId(asData: feed.id)
let id = LKGroupUtilities.getEncodedRSSFeedIDAsData(feed.id)
let groupContext = SSKProtoGroupContext.builder(id: id, type: .deliver)
groupContext.setName(feed.displayName)
let dataMessage = SSKProtoDataMessage.builder()

View File

@ -252,8 +252,9 @@ final class HomeVC : UIViewController, UITableViewDataSource, UITableViewDelegat
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(openSettings))
profilePictureView.addGestureRecognizer(tapGestureRecognizer)
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: profilePictureView)
// let createPrivateGroupChatButton = UIBarButtonItem(image: #imageLiteral(resourceName: "People"), style: .plain, target: self, action: #selector(createPrivateGroupChat))
// createPrivateGroupChatButton.tintColor = Colors.text
let newClosedGroupButton = UIBarButtonItem(image: #imageLiteral(resourceName: "btnGroup--white"), style: .plain, target: self, action: #selector(createClosedGroup))
newClosedGroupButton.tintColor = Colors.text
navigationItem.rightBarButtonItem = newClosedGroupButton
let joinPublicChatButton = UIBarButtonItem(image: #imageLiteral(resourceName: "Globe"), style: .plain, target: self, action: #selector(joinPublicChat))
joinPublicChatButton.tintColor = Colors.text
navigationItem.rightBarButtonItems = [ /*createPrivateGroupChatButton,*/ joinPublicChatButton ]
@ -362,8 +363,10 @@ final class HomeVC : UIViewController, UITableViewDataSource, UITableViewDelegat
present(navigationController, animated: true, completion: nil)
}
@objc private func createPrivateGroupChat() {
// TODO: Implement
@objc private func createClosedGroup() {
let newClosedGroupVC = NewGroupViewController()
let navigationController = OWSNavigationController(rootViewController: newClosedGroupVC)
present(navigationController, animated: true, completion: nil)
}
@objc func createPrivateChat() {

View File

@ -57,10 +57,6 @@ final class NewPrivateChatVC : UIViewController, UIPageViewControllerDataSource,
let closeButton = UIBarButtonItem(image: #imageLiteral(resourceName: "X"), style: .plain, target: self, action: #selector(close))
closeButton.tintColor = Colors.text
navigationItem.leftBarButtonItem = closeButton
let newPrivateGroupButton = UIBarButtonItem(image: #imageLiteral(resourceName: "btnGroup--white"), style: .plain, target: self, action: #selector(showNewPrivateGroupVC))
newPrivateGroupButton.tintColor = Colors.text
navigationItem.rightBarButtonItem = newPrivateGroupButton
// Customize title
let titleLabel = UILabel()
titleLabel.text = NSLocalizedString("New Session", comment: "")
@ -137,12 +133,6 @@ final class NewPrivateChatVC : UIViewController, UIPageViewControllerDataSource,
dismiss(animated: true, completion: nil)
}
// Loki - Show the VC of creating new private group chat
@objc private func showNewPrivateGroupVC() {
let newPrivateGroupVC = NewGroupViewController()
navigationController?.pushViewController(newPrivateGroupVC, animated: true)
}
func controller(_ controller: OWSQRCodeScanningViewController, didDetectQRCodeWith string: String) {
let hexEncodedPublicKey = string
startNewPrivateChatIfPossible(with: hexEncodedPublicKey)

View File

@ -126,7 +126,7 @@
#import <SignalServiceKit/TSPreKeyManager.h>
#import <SignalServiceKit/TSSocketManager.h>
#import <SignalServiceKit/TSThread.h>
#import <SignalServiceKit/LKGroupUtil.h>
#import <SignalServiceKit/LKGroupUtilities.h>
#import <SignalServiceKit/UIImage+OWS.h>
#import <WebRTC/RTCAudioSession.h>
#import <WebRTC/RTCCameraPreviewView.h>

View File

@ -4555,7 +4555,6 @@ typedef enum : NSUInteger {
quotedReplyModel:self.inputToolbar.quotedReply
linkPreviewDraft:self.inputToolbar.linkPreviewDraft
transaction:transaction];
OWSLogInfo(@"message generated here %@ %@", message.body, message.recipientIds[0]);
}];
[self.conversationViewModel appendUnsavedOutgoingTextMessage:message];

View File

@ -106,12 +106,11 @@ NS_ASSUME_NONNULL_BEGIN
NSMutableArray<NSString *> *recipientIds = [@[
unregisteredRecipientId,
validRecipientId,
[TSAccountManager localNumber],
TSAccountManager.localNumber,
] mutableCopy];
NSData *groupId = [Randomness generateRandomBytes:16];
//TODO: Figure out if this is correct
TSGroupModel *model =
[[TSGroupModel alloc] initWithTitle:groupName memberIds:recipientIds image:nil groupId:groupId groupType:SIGNAL adminIds:@[ [TSAccountManager localNumber] ]];
// TODO: Figure out if this is correct
TSGroupModel *model = [[TSGroupModel alloc] initWithTitle:groupName memberIds:recipientIds image:nil groupId:groupId groupType:closedGroup adminIds:@[ TSAccountManager.localNumber ]];
TSGroupThread *thread = [TSGroupThread getOrCreateThreadWithGroupModel:model];
[SignalApp.sharedApp presentConversationForThread:thread animated:YES];

View File

@ -3875,12 +3875,11 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
NSString *groupName = [NSUUID UUID].UUIDString;
NSMutableArray<NSString *> *recipientIds = [@[
recipientId,
[TSAccountManager localNumber],
TSAccountManager.localNumber,
] mutableCopy];
NSData *groupId = [Randomness generateRandomBytes:kGroupIdLength];
//TODO: Figure out if this is correct
TSGroupModel *groupModel =
[[TSGroupModel alloc] initWithTitle:groupName memberIds:recipientIds image:nil groupId:groupId groupType:SIGNAL adminIds:@[ [TSAccountManager localNumber] ]];
// TODO: Figure out if this is correct
TSGroupModel *groupModel = [[TSGroupModel alloc] initWithTitle:groupName memberIds:recipientIds image:nil groupId:groupId groupType:closedGroup adminIds:@[ TSAccountManager.localNumber ]];
__block TSGroupThread *thread;
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
@ -4276,7 +4275,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
@(now - 2 * (long long)kMonthInMs),
];
NSMutableArray<NSString *> *recipientIds = [thread.recipientIdentifiers mutableCopy];
[recipientIds removeObject:[TSAccountManager localNumber]];
[recipientIds removeObject:TSAccountManager.localNumber];
NSString *recipientId = (recipientIds.count > 0 ? recipientIds.firstObject : @"+19174054215");
[OWSPrimaryStorage.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
@ -4382,12 +4381,12 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
NSString *groupName = string;
NSMutableArray<NSString *> *recipientIds = [@[
recipientId,
[TSAccountManager localNumber],
TSAccountManager.localNumber,
] mutableCopy];
NSData *groupId = [Randomness generateRandomBytes:kGroupIdLength];
//TODO: Figure out if this is correct
// TODO: Figure out if this is correct
TSGroupModel *groupModel =
[[TSGroupModel alloc] initWithTitle:groupName memberIds:recipientIds image:nil groupId:groupId groupType:SIGNAL adminIds:@[ [TSAccountManager localNumber] ]];
[[TSGroupModel alloc] initWithTitle:groupName memberIds:recipientIds image:nil groupId:groupId groupType:closedGroup adminIds:@[ TSAccountManager.localNumber ]];
TSGroupThread *groupThread =
[TSGroupThread getOrCreateThreadWithGroupModel:groupModel transaction:transaction];
@ -4424,12 +4423,12 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
NSString *groupName = string;
NSMutableArray<NSString *> *recipientIds = [@[
recipientId,
[TSAccountManager localNumber],
TSAccountManager.localNumber,
] mutableCopy];
NSData *groupId = [Randomness generateRandomBytes:kGroupIdLength];
//TODO: Figure out if this is correct
// TODO: Figure out if this is correct
TSGroupModel *groupModel =
[[TSGroupModel alloc] initWithTitle:groupName memberIds:recipientIds image:nil groupId:groupId groupType:SIGNAL adminIds:@[ [TSAccountManager localNumber] ]];
[[TSGroupModel alloc] initWithTitle:groupName memberIds:recipientIds image:nil groupId:groupId groupType:closedGroup adminIds:@[ TSAccountManager.localNumber ]];
TSGroupThread *groupThread =
[TSGroupThread getOrCreateThreadWithGroupModel:groupModel transaction:transaction];
@ -4464,12 +4463,12 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
NSString *groupName = string;
NSMutableArray<NSString *> *recipientIds = [@[
recipientId,
[TSAccountManager localNumber],
TSAccountManager.localNumber,
] mutableCopy];
NSData *groupId = [Randomness generateRandomBytes:kGroupIdLength];
//TODO: Figure out if this is correct
// TODO: Figure out if this is correct
TSGroupModel *groupModel =
[[TSGroupModel alloc] initWithTitle:groupName memberIds:recipientIds image:nil groupId:groupId groupType:SIGNAL adminIds:@[ [TSAccountManager localNumber] ]];
[[TSGroupModel alloc] initWithTitle:groupName memberIds:recipientIds image:nil groupId:groupId groupType:closedGroup adminIds:@[ TSAccountManager.localNumber ]];
TSGroupThread *groupThread =
[TSGroupThread getOrCreateThreadWithGroupModel:groupModel transaction:transaction];

View File

@ -530,13 +530,13 @@ NS_ASSUME_NONNULL_BEGIN
__block TSGroupThread *thread;
[OWSPrimaryStorage.dbReadWriteConnection
readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
//TODO: Figure out if this is correct
// TODO: Figure out if this is correct
TSGroupModel *groupModel =
[[TSGroupModel alloc] initWithTitle:[groupThread.groupModel.groupName stringByAppendingString:@" Copy"]
memberIds:groupThread.groupModel.groupMemberIds
image:groupThread.groupModel.groupImage
groupId:[Randomness generateRandomBytes:kGroupIdLength]
groupType:SIGNAL
groupType:closedGroup
adminIds:groupThread.groupModel.groupAdminIds];
thread = [TSGroupThread getOrCreateThreadWithGroupModel:groupModel transaction:transaction];
}];
@ -561,12 +561,12 @@ NS_ASSUME_NONNULL_BEGIN
__block TSGroupThread *thread;
[OWSPrimaryStorage.dbReadWriteConnection readWriteWithBlock:^(
YapDatabaseReadWriteTransaction *_Nonnull transaction) {
//TODO: Figure out if this is correct
// TODO: Figure out if this is correct
TSGroupModel *groupModel = [[TSGroupModel alloc] initWithTitle:NSUUID.UUID.UUIDString
memberIds:recipientIds
image:nil
groupId:[Randomness generateRandomBytes:kGroupIdLength]
groupType:SIGNAL adminIds:@[ self.tsAccountManager.localNumber ]];
groupType:closedGroup adminIds:@[ self.tsAccountManager.localNumber ]];
thread = [TSGroupThread getOrCreateThreadWithGroupModel:groupModel transaction:transaction];
}];
OWSAssertDebug(thread);

View File

@ -88,8 +88,8 @@ NS_ASSUME_NONNULL_BEGIN
- (void)commonInit
{
_groupId = [LKGroupUtil getEncodedSignalGroupIdAsData:[[Randomness generateRandomBytes:kGroupIdLength] hexadecimalString]];
_groupType = SIGNAL;
_groupId = [LKGroupUtilities getEncodedClosedGroupIDAsData:[[Randomness generateRandomBytes:kGroupIdLength] hexadecimalString]];
_groupType = closedGroup;
_messageSender = SSKEnvironment.shared.messageSender;
_contactsViewHelper = [[ContactsViewHelper alloc] initWithDelegate:self];

View File

@ -188,12 +188,10 @@ const CGFloat kIconViewLength = 24;
-(BOOL)isPrivateGroupChat
{
if (self.isGroupThread) {
TSGroupThread *thread = (TSGroupThread*)self.thread;
if (thread.isRSSFeed || thread.isPublicChat) {
return false;
}
TSGroupThread *thread = (TSGroupThread *)self.thread;
return !thread.isRSSFeed && !thread.isPublicChat;
}
return true;
return false;
}
- (void)configureWithThread:(TSThread *)thread uiDatabaseConnection:(YapDatabaseConnection *)uiDatabaseConnection
@ -1085,7 +1083,6 @@ const CGFloat kIconViewLength = 24;
- (void)showGroupMembersView
{
OWSLogInfo(@"Setting show thread");
TSGroupThread *groupThread = (TSGroupThread *)self.thread;
ShowGroupMembersViewController *showGroupMembersViewController = [ShowGroupMembersViewController new];
[showGroupMembersViewController configWithThread:groupThread];

View File

@ -92,8 +92,6 @@ NS_ASSUME_NONNULL_BEGIN
OWSAssertDebug(self.thread.groupModel.groupMemberIds);
self.memberRecipientIds = [NSSet setWithArray:self.thread.groupModel.groupMemberIds];
OWSLogInfo(@"Setting show thread %@", self.thread.groupModel.groupName);
}
- (void)viewDidLoad
@ -114,7 +112,6 @@ NS_ASSUME_NONNULL_BEGIN
- (void)updateTableContents
{
// OWSLogInfo(@"Setting show thread %@", self.thread.groupModel.groupName);
OWSAssertDebug(self.thread);
OWSTableContents *contents = [OWSTableContents new];

View File

@ -527,7 +527,6 @@ NSString *const kSelectRecipientViewControllerCellIdentifier = @"kSelectRecipien
NSArray<SignalAccount *> *signalAccounts = helper.signalAccounts;
if (signalAccounts.count == 0) {
// No Contacts
OWSLogInfo(@"NO SIGNAL ACCOUNTS AT ALL");
[contactsSection
addItem:[OWSTableItem softCenterLabelItemWithText:
NSLocalizedString(@"SETTINGS_BLOCK_LIST_NO_CONTACTS",

View File

@ -189,7 +189,6 @@ NS_ASSUME_NONNULL_BEGIN
// Don't fire delegate "change" events during initialization.
if (self.shouldNotifyDelegateOfUpdatedContacts) {
OWSLogInfo(@"Fire delegate update function");
[self.delegate contactsViewHelperDidUpdateContacts];
self.hasUpdatedContactsAtLeastOnce = YES;
}

View File

@ -174,7 +174,7 @@ NS_ASSUME_NONNULL_BEGIN
{
[OWSPrimaryStorage.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction * _Nonnull transaction) {
for (LKPublicChat *chat in LKPublicChatAPI.defaultChats) {
TSGroupThread *thread = [TSGroupThread threadWithGroupId:[LKGroupUtil getEncodedPublichChatGroupIdAsData:chat.id] transaction:transaction];
TSGroupThread *thread = [TSGroupThread threadWithGroupId:[LKGroupUtilities getEncodedOpenGroupIDAsData:chat.id] transaction:transaction];
if (thread != nil) {
[LKDatabaseUtilities setPublicChat:chat threadID:thread.uniqueId transaction:transaction];
}
@ -183,8 +183,8 @@ NS_ASSUME_NONNULL_BEGIN
//If the thread is still using the old group id, it needs to be updated.
thread = [TSGroupThread threadWithGroupId:chat.idAsData transaction:transaction];
if (thread != nil) {
thread.groupModel.groupType = PUBLIC_CHAT;
[thread.groupModel updateGroupId:[LKGroupUtil getEncodedPublichChatGroupIdAsData:chat.id]];
thread.groupModel.groupType = openGroup;
[thread.groupModel updateGroupId:[LKGroupUtilities getEncodedOpenGroupIDAsData:chat.id]];
[thread saveWithTransaction:transaction];
[LKDatabaseUtilities setPublicChat:chat threadID:thread.uniqueId transaction:transaction];
}
@ -197,8 +197,8 @@ NS_ASSUME_NONNULL_BEGIN
for (LKRSSFeed *feed in feeds) {
TSGroupThread *thread = [TSGroupThread threadWithGroupId:[feed.id dataUsingEncoding:NSUTF8StringEncoding] transaction:transaction];
if (thread != nil) {
thread.groupModel.groupType = RSS_FEED;
[thread.groupModel updateGroupId:[LKGroupUtil getEncodedRssFeedGroupIdAsData:feed.id]];
thread.groupModel.groupType = rssFeed;
[thread.groupModel updateGroupId:[LKGroupUtilities getEncodedRSSFeedIDAsData:feed.id]];
[thread saveWithTransaction:transaction];
}
}

View File

@ -72,8 +72,6 @@ typedef NS_ENUM(NSInteger, LKThreadFriendRequestStatus) {
* @return YES if is a group thread, NO otherwise.
*/
- (BOOL)isGroupThread;
//- (BOOL)isPublicChat;
//- (BOOL)isRSSFeed;
/**
* Returns the name of the thread.

View File

@ -92,14 +92,13 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa
} else {
_conversationColorName = [self.class stableColorNameForNewConversationWithString:self.uniqueId];
}
_friendRequestStatus = LKThreadFriendRequestStatusNone;
// Loki - Friend request logic doesn't apply to group chats, always treat them as friends
// Loki: Friend request logic doesn't apply to group chats
if (self.isGroupThread) {
_friendRequestStatus = LKThreadFriendRequestStatusFriends;
} else {
_friendRequestStatus = LKThreadFriendRequestStatusNone;
}
// OWSLogInfo(@"FRIEND REQUEST STATUS %@", self.friendRequestStatusDescription);
}
return self;

View File

@ -4,7 +4,7 @@
#import "TSGroupModel.h"
#import "TSThread.h"
#import "LKGroupUtil.h"
#import "LKGroupUtilities.h"
NS_ASSUME_NONNULL_BEGIN

View File

@ -38,7 +38,7 @@ NSString *const TSGroupThread_NotificationKey_UniqueId = @"TSGroupThread_Notific
return self;
}
- (instancetype)initWithGroupId:(NSData *)groupId groupType:(GroupType) groupType
- (instancetype)initWithGroupId:(NSData *)groupId groupType:(GroupType)groupType
{
OWSAssertDebug(groupId.length > 0);
@ -124,7 +124,7 @@ NSString *const TSGroupThread_NotificationKey_UniqueId = @"TSGroupThread_Notific
+ (NSString *)threadIdFromGroupId:(NSData *)groupId
{
OWSAssertDebug(groupId.length > 0);
return [TSGroupThreadPrefix stringByAppendingString:[[LKGroupUtil getDecodedGroupIdAsData:groupId] base64EncodedString]];
return [TSGroupThreadPrefix stringByAppendingString:[[LKGroupUtilities getDecodedGroupIDAsData:groupId] base64EncodedString]];
}
+ (NSData *)groupIdFromThreadId:(NSString *)threadId
@ -132,7 +132,6 @@ NSString *const TSGroupThread_NotificationKey_UniqueId = @"TSGroupThread_Notific
OWSAssertDebug(threadId.length > 0);
return [NSData dataFromBase64String:[threadId substringWithRange:NSMakeRange(1, threadId.length - 1)]];
// return [NSData dataFromBase64String:[threadId componentsSeparatedByString:@"!"][1]];
}
- (NSArray<NSString *> *)recipientIdentifiers
@ -178,18 +177,12 @@ NSString *const TSGroupThread_NotificationKey_UniqueId = @"TSGroupThread_Notific
- (BOOL)isPublicChat
{
if (self.groupModel.groupType == PUBLIC_CHAT) {
return true;
}
return false;
return (self.groupModel.groupType == openGroup);
}
- (BOOL)isRSSFeed
{
if (self.groupModel.groupType == RSS_FEED) {
return true;
}
return false;
return (self.groupModel.groupType == rssFeed);
}
- (BOOL)isLocalUserInGroup
@ -285,12 +278,6 @@ NSString *const TSGroupThread_NotificationKey_UniqueId = @"TSGroupThread_Notific
return [self.class stableColorNameForNewConversationWithString:[self threadIdFromGroupId:groupId]];
}
//- (BOOL)isRSSFeed
//{
// NSString *groupID = [[NSString alloc] initWithData:self.groupModel.groupId encoding:NSUTF8StringEncoding];
// return groupID != nil && [groupID hasPrefix:@"rss://"];
//}
@end
NS_ASSUME_NONNULL_END

View File

@ -66,7 +66,7 @@ public final class LokiPublicChatManager : NSObject {
@objc(addChatWithServer:channel:name:)
public func addChat(server: String, channel: UInt64, name: String) -> LokiPublicChat? {
guard let chat = LokiPublicChat(channel: channel, server: server, displayName: name, isDeletable: true) else { return nil }
let model = TSGroupModel(title: chat.displayName, memberIds: [userHexEncodedPublicKey!, chat.server], image: nil, groupId: LKGroupUtil .getEncodedPublichChatGroupId(asData: chat.id), groupType: .PUBLIC_CHAT, adminIds: [])
let model = TSGroupModel(title: chat.displayName, memberIds: [userHexEncodedPublicKey!, chat.server], image: nil, groupId: LKGroupUtilities.getEncodedOpenGroupIDAsData(chat.id), groupType: .openGroup, adminIds: [])
// Store the group chat mapping
self.storage.dbReadWriteConnection.readWrite { transaction in

View File

@ -90,7 +90,7 @@ public final class LokiPublicChatPoller : NSObject {
} else {
senderDisplayName = generateDisplayName(from: message.displayName)
}
let id = LKGroupUtil .getEncodedPublichChatGroupId(asData: publicChat.id)
let id = LKGroupUtilities.getEncodedOpenGroupIDAsData(publicChat.id)
let groupContext = SSKProtoGroupContext.builder(id: id, type: .deliver)
groupContext.setName(publicChat.displayName)
let dataMessage = SSKProtoDataMessage.builder()

View File

@ -1,28 +0,0 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
NS_ASSUME_NONNULL_BEGIN
@interface LKGroupUtil : NSObject
+(NSString *)getEncodedPublichChatGroupId:(NSString *)groupId;
+(NSData *)getEncodedPublichChatGroupIdAsData:(NSString *)groupId;
+(NSString *)getEncodedRssFeedGroupId:(NSString *)groupId;
+(NSData *)getEncodedRssFeedGroupIdAsData:(NSString *)groupId;
+(NSString *)getEncodedSignalGroupId:(NSString *)groupId;
+(NSData *)getEncodedSignalGroupIdAsData:(NSString *)groupId;
+(NSString *)getEncodedMmsGroupId:(NSString *)groupId;
+(NSData *)getEncodedMmsGroupIdAsData:(NSString *)groupId;
+(NSString *)getEncodedGroupId:(NSData *)groupId;
+(NSString *)getDecodedGroupId:(NSData *)groupId;
+(NSData *)getDecodedGroupIdAsData:(NSData *)groupId;
@end
NS_ASSUME_NONNULL_END

View File

@ -1,80 +0,0 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
#import "LKGroupUtil.h"
@implementation LKGroupUtil
#define SignalGroupPrefix @"__textsecure_group__!"
#define MmsGroupPrefix @"__signal_mms_group__!"
#define PublicChatGroupPrefix @"__loki_public_chat_group__!"
#define RssFeedGroupPrefix @"__loki_rss_feed_group__!"
+(NSString *)getEncodedPublichChatGroupId:(NSString *)groupId
{
return [PublicChatGroupPrefix stringByAppendingString:groupId];
}
+(NSData *)getEncodedPublichChatGroupIdAsData:(NSString *)groupId
{
return [[PublicChatGroupPrefix stringByAppendingString:groupId] dataUsingEncoding:NSUTF8StringEncoding];
}
+(NSString *)getEncodedRssFeedGroupId:(NSString *)groupId
{
return [RssFeedGroupPrefix stringByAppendingString:groupId];
}
+(NSData *)getEncodedRssFeedGroupIdAsData:(NSString *)groupId
{
return [[RssFeedGroupPrefix stringByAppendingString:groupId] dataUsingEncoding:NSUTF8StringEncoding];
}
+(NSString *)getEncodedSignalGroupId:(NSString *)groupId
{
return [SignalGroupPrefix stringByAppendingString:groupId];
}
+(NSData *)getEncodedSignalGroupIdAsData:(NSString *)groupId
{
return [[SignalGroupPrefix stringByAppendingString:groupId] dataUsingEncoding:NSUTF8StringEncoding];
}
+(NSString *)getEncodedMmsGroupId:(NSString *)groupId
{
return [MmsGroupPrefix stringByAppendingString:groupId];
}
+(NSData *)getEncodedMmsGroupIdAsData:(NSString *)groupId
{
return [[MmsGroupPrefix stringByAppendingString:groupId] dataUsingEncoding:NSUTF8StringEncoding];
}
+(NSString *)getEncodedGroupId: (NSData *)groupId
{
return [[NSString alloc]initWithData:groupId encoding:NSUTF8StringEncoding];
}
+(NSString *)getDecodedGroupId:(NSData *)groupId
{
OWSAssertDebug(groupId.length > 0);
NSString *encodedGroupId = [[NSString alloc]initWithData:groupId encoding:NSUTF8StringEncoding];
if ([encodedGroupId componentsSeparatedByString:@"1"].count > 1) {
return [encodedGroupId componentsSeparatedByString:@"!"][1];
}
return [encodedGroupId componentsSeparatedByString:@"!"][0];
}
+(NSData *)getDecodedGroupIdAsData:(NSData *)groupId
{
OWSAssertDebug(groupId.length > 0);
NSString *encodedGroupId = [[NSString alloc]initWithData:groupId encoding:NSUTF8StringEncoding];
NSString *decodedGroupId = [encodedGroupId componentsSeparatedByString:@"!"][0];
if ([encodedGroupId componentsSeparatedByString:@"!"].count > 1) {
decodedGroupId =[encodedGroupId componentsSeparatedByString:@"!"][1];
}
return [decodedGroupId dataUsingEncoding:NSUTF8StringEncoding];
}
@end

View File

@ -1,7 +1,3 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
#import "LKFriendRequestMessage.h"
NS_ASSUME_NONNULL_BEGIN

View File

@ -1,13 +1,10 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
#import "LKSessionRequestMessage.h"
#import <SignalCoreKit/NSDate+OWS.h>
#import <SignalServiceKit/SignalServiceKit-Swift.h>
@implementation LKSessionRequestMessage
#pragma mark Initialization
- (instancetype)initWithThread:(TSThread *)thread {
return [self initOutgoingMessageWithTimestamp:NSDate.ows_millisecondTimeStamp inThread:thread messageBody:@"" attachmentIds:[NSMutableArray<NSString *> new]
expiresInSeconds:0 expireStartedAt:0 isVoiceMessage:NO groupMetaMessage:TSGroupMetaMessageUnspecified quotedMessage:nil contactShare:nil linkPreview:nil];

View File

@ -0,0 +1,24 @@
NS_ASSUME_NONNULL_BEGIN
@interface LKGroupUtilities : NSObject
+(NSString *)getEncodedOpenGroupID:(NSString *)groupID;
+(NSData *)getEncodedOpenGroupIDAsData:(NSString *)groupID;
+(NSString *)getEncodedRSSFeedID:(NSString *)groupID;
+(NSData *)getEncodedRSSFeedIDAsData:(NSString *)groupID;
+(NSString *)getEncodedClosedGroupID:(NSString *)groupID;
+(NSData *)getEncodedClosedGroupIDAsData:(NSString *)groupID;
+(NSString *)getEncodedMMSGroupID:(NSString *)groupID;
+(NSData *)getEncodedMMSGroupIDAsData:(NSString *)groupID;
+(NSString *)getEncodedGroupID:(NSData *)groupID;
+(NSString *)getDecodedGroupID:(NSData *)groupID;
+(NSData *)getDecodedGroupIDAsData:(NSData *)groupID;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,76 @@
#import "LKGroupUtilities.h"
@implementation LKGroupUtilities
#define ClosedGroupPrefix @"__textsecure_group__!" // a.k.a. private group chat
#define MMSGroupPrefix @"__signal_mms_group__!"
#define OpenGroupPrefix @"__loki_public_chat_group__!" // a.k.a. public group chat
#define RSSFeedPrefix @"__loki_rss_feed_group__!"
+(NSString *)getEncodedOpenGroupID:(NSString *)groupID
{
return [OpenGroupPrefix stringByAppendingString:groupID];
}
+(NSData *)getEncodedOpenGroupIDAsData:(NSString *)groupID
{
return [[OpenGroupPrefix stringByAppendingString:groupID] dataUsingEncoding:NSUTF8StringEncoding];
}
+(NSString *)getEncodedRSSFeedID:(NSString *)groupID
{
return [RSSFeedPrefix stringByAppendingString:groupID];
}
+(NSData *)getEncodedRSSFeedIDAsData:(NSString *)groupID
{
return [[RSSFeedPrefix stringByAppendingString:groupID] dataUsingEncoding:NSUTF8StringEncoding];
}
+(NSString *)getEncodedClosedGroupID:(NSString *)groupID
{
return [ClosedGroupPrefix stringByAppendingString:groupID];
}
+(NSData *)getEncodedClosedGroupIDAsData:(NSString *)groupID
{
return [[ClosedGroupPrefix stringByAppendingString:groupID] dataUsingEncoding:NSUTF8StringEncoding];
}
+(NSString *)getEncodedMMSGroupID:(NSString *)groupID
{
return [MMSGroupPrefix stringByAppendingString:groupID];
}
+(NSData *)getEncodedMMSGroupIDAsData:(NSString *)groupID
{
return [[MMSGroupPrefix stringByAppendingString:groupID] dataUsingEncoding:NSUTF8StringEncoding];
}
+(NSString *)getEncodedGroupID: (NSData *)groupID
{
return [[NSString alloc]initWithData:groupID encoding:NSUTF8StringEncoding];
}
+(NSString *)getDecodedGroupID:(NSData *)groupID
{
OWSAssertDebug(groupID.length > 0);
NSString *encodedGroupID = [[NSString alloc] initWithData:groupID encoding:NSUTF8StringEncoding];
if ([encodedGroupID componentsSeparatedByString:@"1"].count > 1) {
return [encodedGroupID componentsSeparatedByString:@"!"][1];
}
return [encodedGroupID componentsSeparatedByString:@"!"][0];
}
+(NSData *)getDecodedGroupIDAsData:(NSData *)groupID
{
OWSAssertDebug(groupID.length > 0);
NSString *encodedGroupID = [[NSString alloc]initWithData:groupID encoding:NSUTF8StringEncoding];
NSString *decodedGroupID = [encodedGroupID componentsSeparatedByString:@"!"][0];
if ([encodedGroupID componentsSeparatedByString:@"!"].count > 1) {
decodedGroupID = [encodedGroupID componentsSeparatedByString:@"!"][1];
}
return [decodedGroupID dataUsingEncoding:NSUTF8StringEncoding];
}
@end

View File

@ -48,8 +48,8 @@ NS_ASSUME_NONNULL_BEGIN
// Skip the other processing for recipient updates.
} else {
if (self.dataMessage.group) {
//TODO: Figure out if this is correct
_thread = [TSGroupThread getOrCreateThreadWithGroupId:_dataMessage.group.id groupType:SIGNAL transaction:transaction];
// TODO: Figure out if this is correct
_thread = [TSGroupThread getOrCreateThreadWithGroupId:_dataMessage.group.id groupType:closedGroup transaction:transaction];
} else {
_thread = [TSContactThread getOrCreateThreadWithContactId:_recipientId transaction:transaction];
}

View File

@ -1402,7 +1402,7 @@ NS_ASSUME_NONNULL_BEGIN
switch (dataMessage.group.type) {
case SSKProtoGroupContextTypeUpdate: {
if (oldGroupThread && ![oldGroupThread.groupModel.groupAdminIds containsObject:envelope.source]) {
OWSLogWarn(@"Loki - Received a group update message from a non-admin user for %@ %@", [LKGroupUtil getEncodedGroupId:groupId], @". Ignoring.");
OWSLogWarn(@"Loki - Received a group update message from a non-admin user for %@ %@", [LKGroupUtilities getEncodedGroupID:groupId], @". Ignoring.");
return nil;
}
// Ensures that the thread exists but doesn't update it.

View File

@ -10,9 +10,9 @@
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, GroupType) {
SIGNAL = 0,
PUBLIC_CHAT = 1,
RSS_FEED = 2
closedGroup = 0, // a.k.a. private group chat
openGroup = 1, // a.k.a. public group chat
rssFeed = 2
};
extern const int32_t kGroupIdLength;

View File

@ -12,4 +12,4 @@
#import <SignalServiceKit/SSKJobRecord.h>
#import <SignalServiceKit/TSOutgoingMessage.h>
#import <SignalServiceKit/TSYapDatabaseObject.h>
#import <SignalServiceKit/LKGroupUtil.h>
#import <SignalServiceKit/LKGroupUtilities.h>

View File

@ -372,8 +372,8 @@ class GroupThreadFactory: NSObject, Factory {
memberIds: groupThreadFactory.memberIdsBuilder(),
image: groupThreadFactory.imageBuilder(),
groupId: groupThreadFactory.groupIdBuilder(),
groupType: .SIGNAL,
adminIds: [])
groupType: .closedGroup,
adminIds: [])
}
@objc