1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-03 09:57:46 +01:00
Telegram/Telegraph/TGConversationAddMemberRequestActor.m
2016-02-25 01:03:51 +01:00

120 lines
4.7 KiB
Objective-C

#import "TGConversationAddMemberRequestActor.h"
#import "TGUserDataRequestBuilder.h"
#import "TGMessage+Telegraph.h"
#import "TGConversation+Telegraph.h"
#import "ActionStage.h"
#import "SGraphObjectNode.h"
#import "TGTelegraph.h"
#import "TGTelegramNetworking.h"
#import "TGConversationAddMessagesActor.h"
#import "TLUpdates+TG.h"
#import "TLChat$chat.h"
@interface TGConversationAddMemberRequestActor ()
@property (nonatomic) int uid;
@end
@implementation TGConversationAddMemberRequestActor
@synthesize uid = _uid;
+ (NSString *)genericPath
{
return @"/tg/conversation/@/addMember/@";
}
- (void)execute:(NSDictionary *)options
{
NSNumber *nConversationId = [options objectForKey:@"conversationId"];
NSNumber *nUid = [options objectForKey:@"uid"];
if (nConversationId == nil || nUid == nil)
{
[ActionStageInstance() actionFailed:self.path reason:-1];
}
_uid = [nUid intValue];
self.cancelToken = [TGTelegraphInstance doAddConversationMember:[nConversationId longLongValue] uid:[nUid intValue] actor:self];
}
- (void)addMemberSuccess:(TLUpdates *)updates
{
[TGUserDataRequestBuilder executeUserDataUpdate:updates.users];
TGConversation *chatConversation = nil;
if (updates.chats.count != 0)
{
NSMutableDictionary *chats = [[NSMutableDictionary alloc] init];
TGMessage *message = updates.messages.count == 0 ? nil : [[TGMessage alloc] initWithTelegraphMessageDesc:updates.messages.firstObject];
for (TLChat *chatDesc in updates.chats)
{
TGConversation *conversation = [[TGConversation alloc] initWithTelegraphChatDesc:chatDesc];
if (conversation != nil)
{
if (chatConversation == nil)
{
chatConversation = conversation;
TGConversation *oldConversation = [TGDatabaseInstance() loadConversationWithId:chatConversation.conversationId];
chatConversation.chatParticipants = [oldConversation.chatParticipants copy];
if ([chatDesc isKindOfClass:[TLChat$chat class]])
{
chatConversation.chatParticipants.version = ((TLChat$chat *)chatDesc).version;
chatConversation.chatVersion = ((TLChat$chat *)chatDesc).version;
}
if (![chatConversation.chatParticipants.chatParticipantUids containsObject:@(_uid)])
{
NSMutableArray *newUids = [[NSMutableArray alloc] initWithArray:chatConversation.chatParticipants.chatParticipantUids];
[newUids addObject:@(_uid)];
chatConversation.chatParticipants.chatParticipantUids = newUids;
NSMutableDictionary *newInvitedBy = [[NSMutableDictionary alloc] initWithDictionary:chatConversation.chatParticipants.chatInvitedBy];
[newInvitedBy setObject:@(TGTelegraphInstance.clientUserId) forKey:@(_uid)];
chatConversation.chatParticipants.chatInvitedBy = newInvitedBy;
NSMutableDictionary *newInvitedDates = [[NSMutableDictionary alloc] initWithDictionary:chatConversation.chatParticipants.chatInvitedDates];
[newInvitedDates setObject:@(message.date) forKey:@(_uid)];
chatConversation.chatParticipants.chatInvitedDates = newInvitedDates;
}
conversation = chatConversation;
}
[chats setObject:conversation forKey:[[NSNumber alloc] initWithLongLong:conversation.conversationId]];
}
}
static int actionId = 0;
[[[TGConversationAddMessagesActor alloc] initWithPath:[[NSString alloc] initWithFormat:@"/tg/addmessage/(addMember%d)", actionId++] ] execute:[[NSDictionary alloc] initWithObjectsAndKeys:chats, @"chats", message == nil ? @[] : @[message], @"messages", nil]];
}
[[TGTelegramNetworking instance] addUpdates:updates];
int version = chatConversation.chatVersion;
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:[[NSNumber alloc] initWithInt:version] forKey:@"conversationVersion"];
[dict setObject:[NSNumber numberWithInt:_uid] forKey:@"uid"];
[ActionStageInstance() actionCompleted:self.path result:[[SGraphObjectNode alloc] initWithObject:dict]];
}
- (void)addMemberFailed:(int)reason
{
[ActionStageInstance() actionFailed:self.path reason:reason];
}
@end