1
0
mirror of https://github.com/danog/Telegram.git synced 2025-01-22 05:52:06 +01:00
Telegram/Telegraph/TGUpdatePresenceActor.m
2015-10-01 19:19:52 +03:00

82 lines
1.8 KiB
Objective-C

#import "TGUpdatePresenceActor.h"
#import "TGTelegraph.h"
#import "ActionStage.h"
#import "TGTimer.h"
@interface TGUpdatePresenceActor ()
@property (nonatomic, strong) TGTimer *timeoutTimer;
@end
@implementation TGUpdatePresenceActor
@synthesize timeoutTimer = _timeoutTimer;
+ (NSString *)genericPath
{
return @"/tg/service/updatepresence/@";
}
- (void)dealloc
{
if (_timeoutTimer != nil)
{
[_timeoutTimer invalidate];
_timeoutTimer = nil;
}
}
- (void)execute:(NSDictionary *)__unused options
{
NSString *presence = [self.path substringWithRange:NSMakeRange(28, self.path.length - 1 - 28)];
if ([presence isEqualToString:@"timeout"])
{
__weak TGUpdatePresenceActor *weakSelf = self;
_timeoutTimer = [[TGTimer alloc] initWithTimeout:5.0 repeat:false completion:^
{
__strong TGUpdatePresenceActor *strongSelf = weakSelf;
if (strongSelf != nil)
{
strongSelf->_timeoutTimer = nil;
strongSelf.cancelToken = [TGTelegraphInstance doSetPresence:false actor:strongSelf];
}
} queue:[ActionStageInstance() globalStageDispatchQueue]];
[_timeoutTimer start];
}
else if ([presence isEqualToString:@"online"])
{
self.cancelToken = [TGTelegraphInstance doSetPresence:true actor:self];
}
else
{
self.cancelToken = [TGTelegraphInstance doSetPresence:false actor:self];
}
}
- (void)updatePresenceSuccess
{
[ActionStageInstance() actionCompleted:self.path result:nil];
}
- (void)updatePresenceFailed
{
[ActionStageInstance() actionFailed:self.path reason:-1];
}
- (void)cancel
{
if (_timeoutTimer != nil)
{
[_timeoutTimer invalidate];
_timeoutTimer = nil;
}
[super cancel];
}
@end