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

234 lines
7.4 KiB
Objective-C

#import "TLUpdates+TG.h"
#import "TL/TLMetaScheme.h"
#import "TLUpdates$modernUpdateShortChatMessage.h"
#import "TLUpdates$modernUpdateShortMessage.h"
#import "TLMessage$modernMessage.h"
#import "TLUpdates$updateShortSentMessage.h"
#import "TLUpdate$updateChangePts.h"
@implementation TLUpdates (TG)
- (NSArray *)users
{
if ([self isKindOfClass:[TLUpdates$updates class]])
return ((TLUpdates$updates *)self).users;
return @[];
}
- (NSArray *)chats
{
if ([self isKindOfClass:[TLUpdates$updates class]])
return ((TLUpdates$updates *)self).chats;
return @[];
}
- (NSArray *)messages
{
if ([self isKindOfClass:[TLUpdates$updates class]])
{
NSMutableArray *messages = [[NSMutableArray alloc] init];
for (id update in ((TLUpdates$updates *)self).updates)
{
if ([update isKindOfClass:[TLUpdate$updateNewMessage class]])
[messages addObject:((TLUpdate$updateNewMessage *)update).message];
else if ([update isKindOfClass:[TLUpdate$updateNewChannelMessage class]])
[messages addObject:((TLUpdate$updateNewChannelMessage *)update).message];
else if ([update isKindOfClass:[TLUpdate$updateEditChannelMessage class]])
[messages addObject:((TLUpdate$updateEditChannelMessage *)update).message];
}
return messages;
}
return @[];
}
- (TLMessage *)messageAtIndex:(NSUInteger)index pts:(int32_t *)pts pts_count:(int32_t *)pts_count
{
NSInteger i = -1;
if ([self isKindOfClass:[TLUpdates$updates class]])
{
for (id update in ((TLUpdates$updates *)self).updates)
{
if ([update isKindOfClass:[TLUpdate$updateNewMessage class]])
{
i++;
if (i == (NSInteger)index)
{
if (pts)
*pts = ((TLUpdate$updateNewMessage *)update).pts;
if (pts_count)
*pts_count = ((TLUpdate$updateNewMessage *)update).pts_count;
return ((TLUpdate$updateNewMessage *)update).message;
}
}
else if ([update isKindOfClass:[TLUpdate$updateNewChannelMessage class]])
{
i++;
if (i == (NSInteger)index)
{
if (pts)
*pts = ((TLUpdate$updateNewChannelMessage *)update).pts;
if (pts_count)
*pts_count = ((TLUpdate$updateNewChannelMessage *)update).pts_count;
return ((TLUpdate$updateNewChannelMessage *)update).message;
}
}
}
}
return nil;
}
- (bool)maxPtsAndCount:(int32_t *)pts ptsCount:(int32_t *)ptsCount
{
bool single = true;
int32_t maxPts = 0;
int32_t maxPtsCount = 0;
if ([self isKindOfClass:[TLUpdates$updates class]] || [self isKindOfClass:[TLUpdates$updatesCombined class]])
{
NSArray *containedUpdates = @[];
if ([self isKindOfClass:[TLUpdates$updates class]])
{
TLUpdates$updates *updates = (TLUpdates$updates *)self;
containedUpdates = updates.updates;
}
else if ([self isKindOfClass:[TLUpdates$updatesCombined class]])
{
TLUpdates$updatesCombined *updatesCombined = (TLUpdates$updatesCombined *)self;
containedUpdates = updatesCombined.updates;
}
for (TLUpdate *update in containedUpdates)
{
if ([update hasPts])
{
NSAssert([update respondsToSelector:@selector(pts_count)], @"update with pts should also contain pts_count");
if ([(TLUpdate$updateNewMessage *)update pts] > maxPts)
{
if (maxPts != 0)
single = false;
maxPts = [(TLUpdate$updateNewMessage *)update pts];
maxPtsCount = [(TLUpdate$updateNewMessage *)update pts_count];
}
}
}
}
else if ([self isKindOfClass:[TLUpdates$updateShort class]])
{
TLUpdates$updateShort *updateShort = (TLUpdates$updateShort *)self;
if ([updateShort.update hasPts])
{
NSAssert([updateShort.update respondsToSelector:@selector(pts_count)], @"update with pts should also contain pts_count");
if ([(TLUpdate$updateNewMessage *)updateShort.update pts] > maxPts)
{
if (maxPts != 0)
single = false;
maxPts = [(TLUpdate$updateNewMessage *)updateShort.update pts];
maxPtsCount = [(TLUpdate$updateNewMessage *)updateShort.update pts_count];
}
}
}
else if ([self isKindOfClass:[TLUpdates$modernUpdateShortChatMessage class]])
{
TLUpdates$modernUpdateShortChatMessage *updateShortChatMessage = (TLUpdates$modernUpdateShortChatMessage *)self;
if (updateShortChatMessage.pts > maxPts)
{
if (maxPts != 0)
single = false;
maxPts = updateShortChatMessage.pts;
maxPtsCount = updateShortChatMessage.pts_count;
}
}
else if ([self isKindOfClass:[TLUpdates$modernUpdateShortMessage class]])
{
TLUpdates$modernUpdateShortMessage *updateShortMessage = (TLUpdates$modernUpdateShortMessage *)self;
if (updateShortMessage.pts > maxPts)
{
if (maxPts != 0)
single = false;
maxPts = updateShortMessage.pts;
maxPtsCount = updateShortMessage.pts_count;
}
}
else if ([self isKindOfClass:[TLUpdates$updateShortSentMessage class]])
{
TLUpdates$updateShortSentMessage *updateShortSentMessage = (TLUpdates$updateShortSentMessage *)self;
if (updateShortSentMessage.pts > maxPts)
{
if (maxPts != 0)
single = false;
maxPts = updateShortSentMessage.pts;
maxPtsCount = updateShortSentMessage.pts_count;
}
}
if (pts)
*pts = maxPts;
if (ptsCount)
*ptsCount = maxPtsCount;
return single;
}
- (int32_t)maxSeq
{
if ([self isKindOfClass:[TLUpdates$updates class]] || [self isKindOfClass:[TLUpdates$updatesCombined class]])
{
return ((TLUpdates$updates *)self).seq;
}
return 0;
}
- (NSArray *)updatesList
{
if ([self isKindOfClass:[TLUpdates$updates class]])
{
return ((TLUpdates$updates *)self).updates;
}
if ([self isKindOfClass:[TLUpdates$updatesCombined class]])
{
return ((TLUpdates$updatesCombined *)self).updates;
}
return @[];
}
@end
@implementation TLUpdate (TG)
- (bool)hasPts
{
if ([self isKindOfClass:[TLUpdate$updateNewMessage class]]) {
return true;
} else if ([self isKindOfClass:[TLUpdate$updateDeleteMessages class]]) {
return true;
} else if ([self isKindOfClass:[TLUpdate$updateReadHistoryInbox class]]) {
return true;
} else if ([self isKindOfClass:[TLUpdate$updateReadHistoryOutbox class]]) {
return true;
} else if ([self isKindOfClass:[TLUpdate$updateReadMessagesContents class]]) {
return true;
} else if ([self isKindOfClass:[TLUpdate$updateChangePts class]]) {
return true;
} else if ([self isKindOfClass:[TLUpdate$updateWebPage class]]) {
return true;
}
return false;
}
@end