mirror of
https://github.com/danog/Telegram.git
synced 2024-12-02 09:27:55 +01:00
94 lines
2.8 KiB
Objective-C
94 lines
2.8 KiB
Objective-C
#import "TGContactListSearchActor.h"
|
|
|
|
#import "ActionStage.h"
|
|
#import "SGraphObjectNode.h"
|
|
|
|
#import "TGDatabase.h"
|
|
|
|
#import "TGTelegraph.h"
|
|
|
|
#import "TGUserDataRequestBuilder.h"
|
|
#import "TGUser+Telegraph.h"
|
|
|
|
#import "TGTimer.h"
|
|
|
|
@interface TGContactListSearchActor ()
|
|
{
|
|
TGTimer *_timer;
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation TGContactListSearchActor
|
|
|
|
+ (NSString *)genericPath
|
|
{
|
|
return @"/tg/contacts/search/@";
|
|
}
|
|
|
|
- (void)dealloc
|
|
{
|
|
[_timer invalidate];
|
|
}
|
|
|
|
- (void)execute:(NSDictionary *)options
|
|
{
|
|
NSString *query = [options objectForKey:@"query"];
|
|
if (query == nil)
|
|
{
|
|
[ActionStageInstance() nodeRetrieveFailed:self.path];
|
|
return;
|
|
}
|
|
|
|
int ignoreUid = [[options objectForKey:@"ignoreUid"] intValue];
|
|
|
|
__weak TGContactListSearchActor *weakSelf = self;
|
|
|
|
NSTimeInterval delayStart = CFAbsoluteTimeGetCurrent();
|
|
[TGDatabaseInstance() searchContacts:query ignoreUid:ignoreUid searchPhonebook:[[options objectForKey:@"searchPhonebook"] boolValue] completion:^(NSDictionary *result)
|
|
{
|
|
[ActionStageInstance() dispatchOnStageQueue:^
|
|
{
|
|
[ActionStageInstance() dispatchMessageToWatchers:self.path messageType:@"localResults" message:result];
|
|
|
|
if (query.length < 5)
|
|
[ActionStageInstance() actionCompleted:self.path result:nil];
|
|
else
|
|
{
|
|
_timer = [[TGTimer alloc] initWithTimeout:MAX(0.0, CFAbsoluteTimeGetCurrent() - delayStart - 150) repeat:false completion:^{
|
|
__strong TGContactListSearchActor *strongSelf = weakSelf;
|
|
if (strongSelf != nil)
|
|
{
|
|
strongSelf.cancelToken = [TGTelegraphInstance doSearchContactsByName:query limit:1 completion:^(TLcontacts_Found *result)
|
|
{
|
|
__strong TGContactListSearchActor *strongSelf = weakSelf;
|
|
[strongSelf _processRemoteResults:result];
|
|
}];
|
|
}
|
|
} queue:[ActionStageInstance() globalStageDispatchQueue]];
|
|
[_timer start];
|
|
}
|
|
}];
|
|
}];
|
|
}
|
|
|
|
- (void)_processRemoteResults:(TLcontacts_Found *)result
|
|
{
|
|
if (result != nil)
|
|
{
|
|
NSMutableArray *users = [[NSMutableArray alloc] init];
|
|
for (id parsedUser in result.users)
|
|
{
|
|
TGUser *user = [[TGUser alloc] initWithTelegraphUserDesc:parsedUser];
|
|
if (user.uid != 0)
|
|
[users addObject:user];
|
|
}
|
|
[TGUserDataRequestBuilder executeUserObjectsUpdate:users];
|
|
[ActionStageInstance() dispatchMessageToWatchers:self.path messageType:@"globalResults" message:@{@"users": users}];
|
|
}
|
|
|
|
[ActionStageInstance() actionCompleted:self.path result:nil];
|
|
}
|
|
|
|
@end
|