mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-15 21:45:19 +00:00
Watch: add some int64 support
This commit is contained in:
parent
f5421b102f
commit
4011b75f17
@ -5,8 +5,8 @@
|
||||
|
||||
@interface TGBridgeUserCache : NSObject
|
||||
|
||||
- (TGBridgeUser *)userWithId:(int32_t)userId;
|
||||
- (NSDictionary *)usersWithIndexSet:(NSIndexSet *)indexSet;
|
||||
- (TGBridgeUser *)userWithId:(int64_t)userId;
|
||||
- (NSDictionary *)usersWithIds:(NSArray<NSNumber *> *)indexSet;
|
||||
- (void)storeUser:(TGBridgeUser *)user;
|
||||
- (void)storeUsers:(NSArray *)users;
|
||||
- (NSArray *)applyUserChanges:(NSArray *)userChanges;
|
||||
|
@ -33,7 +33,7 @@
|
||||
return self;
|
||||
}
|
||||
|
||||
- (TGBridgeUser *)userWithId:(int32_t)userId
|
||||
- (TGBridgeUser *)userWithId:(int64_t)userId
|
||||
{
|
||||
__block TGBridgeUser *user = nil;
|
||||
|
||||
@ -44,26 +44,28 @@
|
||||
return user;
|
||||
}
|
||||
|
||||
- (NSDictionary *)usersWithIndexSet:(NSIndexSet *)indexSet
|
||||
- (NSDictionary *)usersWithIds:(NSArray<NSNumber *> *)indexSet
|
||||
{
|
||||
NSMutableDictionary *users = [[NSMutableDictionary alloc] init];
|
||||
NSMutableIndexSet *neededUsers = [indexSet mutableCopy];
|
||||
NSMutableSet<NSNumber *> *neededUsers = [indexSet mutableCopy];
|
||||
|
||||
NSMutableIndexSet *foundUsers = [[NSMutableIndexSet alloc] init];
|
||||
NSMutableSet<NSNumber *> *foundUsers = [[NSMutableSet alloc] init];
|
||||
|
||||
OSSpinLockLock(&_userByUidLock);
|
||||
[neededUsers enumerateIndexesUsingBlock:^(NSUInteger index, BOOL * _Nonnull stop)
|
||||
{
|
||||
for (NSNumber *nId in neededUsers) {
|
||||
int64_t index = [nId longLongValue];
|
||||
TGBridgeUser *user = _userByUid[@(index)];
|
||||
if (user != nil)
|
||||
{
|
||||
users[@(index)] = user;
|
||||
[foundUsers addIndex:index];
|
||||
[foundUsers addObject:@(index)];
|
||||
}
|
||||
}];
|
||||
}
|
||||
OSSpinLockUnlock(&_userByUidLock);
|
||||
|
||||
[neededUsers removeIndexes:foundUsers];
|
||||
for (NSNumber *nId in foundUsers) {
|
||||
[neededUsers removeObject:nId];
|
||||
}
|
||||
|
||||
return users;
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ NSString *const TGNeoChatRowIdentifier = @"TGNeoChatRow";
|
||||
_currentChat = chat;
|
||||
|
||||
NSDictionary *oldUsers = _currentUsers;
|
||||
_currentUsers = [[TGBridgeUserCache instance] usersWithIndexSet:[chat involvedUserIds]];
|
||||
_currentUsers = [[TGBridgeUserCache instance] usersWithIds:[chat involvedUserIds]];
|
||||
|
||||
bool shouldUpdate = [self shouldUpdateContentFrom:oldChat oldUsers:oldUsers to:_currentChat newUsers:_currentUsers];
|
||||
if (shouldUpdate)
|
||||
|
@ -703,9 +703,10 @@ const NSInteger TGNeoConversationControllerInitialRenderCount = 4;
|
||||
NSMutableArray *botInfoSignals = [[NSMutableArray alloc] init];
|
||||
NSMutableArray *botUsers = [[NSMutableArray alloc] init];
|
||||
NSMutableArray *initialStates = [[NSMutableArray alloc] init];
|
||||
[_chatModel.participantsUserIds enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop)
|
||||
{
|
||||
TGBridgeUser *user = [[TGBridgeUserCache instance] userWithId:(int32_t)idx];
|
||||
|
||||
for (NSNumber *nId in _chatModel.participantsUserIds) {
|
||||
int64_t idx = [nId longLongValue];
|
||||
TGBridgeUser *user = [[TGBridgeUserCache instance] userWithId:idx];
|
||||
if ([user isBot])
|
||||
{
|
||||
[botUsers addObject:user];
|
||||
@ -718,7 +719,7 @@ const NSInteger TGNeoConversationControllerInitialRenderCount = 4;
|
||||
return botInfo.commandList;
|
||||
}]];
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
return [[SSignal combineSignals:botInfoSignals withInitialStates:initialStates] map:^id(NSArray *commandLists)
|
||||
{
|
||||
@ -767,15 +768,14 @@ const NSInteger TGNeoConversationControllerInitialRenderCount = 4;
|
||||
|
||||
if ([self peerIsAnyGroup])
|
||||
{
|
||||
[_chatModel.participantsUserIds enumerateIndexesUsingBlock:^(NSUInteger userId, BOOL * _Nonnull stop)
|
||||
{
|
||||
TGBridgeUser *user = [[TGBridgeUserCache instance] userWithId:(int32_t)userId];
|
||||
if ([user isBot])
|
||||
{
|
||||
for (NSNumber *nId in _chatModel.participantsUserIds) {
|
||||
int64_t userId = [nId longLongValue];
|
||||
TGBridgeUser *user = [[TGBridgeUserCache instance] userWithId:userId];
|
||||
if ([user isBot]) {
|
||||
_hasBots = true;
|
||||
*stop = true;
|
||||
break;
|
||||
}
|
||||
}];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -144,7 +144,7 @@ NSString *const TGNeoMessageAudioAnimatedIcon = @"animatedIcon";
|
||||
}
|
||||
|
||||
NSMutableDictionary *users = [NSMutableDictionary dictionaryWithDictionary:additionalPeers];
|
||||
[users addEntriesFromDictionary:[[TGBridgeUserCache instance] usersWithIndexSet:[message involvedUserIds]]];
|
||||
[users addEntriesFromDictionary:[[TGBridgeUserCache instance] usersWithIds:[message involvedUserIds]]];
|
||||
|
||||
return [[viewModelClass alloc] initWithMessage:message type:type users:users context:context];
|
||||
}
|
||||
|
@ -37,8 +37,8 @@
|
||||
@property (nonatomic) int32_t participantsCount;
|
||||
@property (nonatomic, strong) NSArray *participants;
|
||||
|
||||
- (NSIndexSet *)involvedUserIds;
|
||||
- (NSIndexSet *)participantsUserIds;
|
||||
- (NSArray<NSNumber *> *)involvedUserIds;
|
||||
- (NSArray<NSNumber *> *)participantsUserIds;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -94,13 +94,13 @@ NSString *const TGBridgeChatsArrayKey = @"chats";
|
||||
[aCoder encodeObject:self.participants forKey:TGBridgeChatGroupParticipantsKey];
|
||||
}
|
||||
|
||||
- (NSIndexSet *)involvedUserIds
|
||||
- (NSArray<NSNumber *> *)involvedUserIds
|
||||
{
|
||||
NSMutableIndexSet *userIds = [[NSMutableIndexSet alloc] init];
|
||||
NSMutableSet<NSNumber *> *userIds = [[NSMutableSet alloc] init];
|
||||
if (!self.isGroup && !self.isChannel && self.identifier != 0)
|
||||
[userIds addIndex:(int32_t)self.identifier];
|
||||
[userIds addObject:[NSNumber numberWithLongLong:self.identifier]];
|
||||
if ((!self.isChannel || self.isChannelGroup) && self.fromUid != self.identifier && self.fromUid != 0 && !TGPeerIdIsChannel(self.fromUid) && self.fromUid > 0)
|
||||
[userIds addIndex:(int32_t)self.fromUid];
|
||||
[userIds addObject:[NSNumber numberWithLongLong:self.fromUid]];
|
||||
|
||||
for (TGBridgeMediaAttachment *attachment in self.media)
|
||||
{
|
||||
@ -108,21 +108,30 @@ NSString *const TGBridgeChatsArrayKey = @"chats";
|
||||
{
|
||||
TGBridgeActionMediaAttachment *actionAttachment = (TGBridgeActionMediaAttachment *)attachment;
|
||||
if (actionAttachment.actionData[@"uid"] != nil)
|
||||
[userIds addIndex:[actionAttachment.actionData[@"uid"] integerValue]];
|
||||
[userIds addObject:[NSNumber numberWithLongLong:[actionAttachment.actionData[@"uid"] longLongValue]]];
|
||||
}
|
||||
}
|
||||
|
||||
return userIds;
|
||||
NSMutableArray *result = [[NSMutableArray alloc] init];
|
||||
for (NSNumber *object in userIds) {
|
||||
[result addObject:object];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
- (NSIndexSet *)participantsUserIds
|
||||
- (NSArray<NSNumber *> *)participantsUserIds
|
||||
{
|
||||
NSMutableIndexSet *userIds = [[NSMutableIndexSet alloc] init];
|
||||
NSMutableSet<NSNumber *> *userIds = [[NSMutableSet alloc] init];
|
||||
|
||||
for (NSNumber *uid in self.participants)
|
||||
[userIds addIndex:uid.unsignedIntegerValue];
|
||||
for (NSNumber *uid in self.participants) {
|
||||
[userIds addObject:[NSNumber numberWithLongLong:uid.longLongValue]];
|
||||
}
|
||||
|
||||
return userIds;
|
||||
NSMutableArray *result = [[NSMutableArray alloc] init];
|
||||
for (NSNumber *object in userIds) {
|
||||
[result addObject:object];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
- (BOOL)isEqual:(id)object
|
||||
|
@ -50,7 +50,7 @@ typedef NS_ENUM(NSUInteger, TGBridgeMessageDeliveryState) {
|
||||
@property (nonatomic, strong) NSArray *media;
|
||||
@property (nonatomic) bool forceReply;
|
||||
|
||||
- (NSIndexSet *)involvedUserIds;
|
||||
- (NSArray<NSNumber *> *)involvedUserIds;
|
||||
- (NSArray *)textCheckingResults;
|
||||
|
||||
+ (instancetype)temporaryNewMessageForText:(NSString *)text userId:(int32_t)userId;
|
||||
|
@ -60,11 +60,11 @@ NSString *const TGBridgeMessagesArrayKey = @"messages";
|
||||
[aCoder encodeBool:self.forceReply forKey:TGBridgeMessageForceReplyKey];
|
||||
}
|
||||
|
||||
- (NSIndexSet *)involvedUserIds
|
||||
- (NSArray<NSNumber *> *)involvedUserIds
|
||||
{
|
||||
NSMutableIndexSet *userIds = [[NSMutableIndexSet alloc] init];
|
||||
NSMutableSet<NSNumber *> *userIds = [[NSMutableSet alloc] init];
|
||||
if (!TGPeerIdIsChannel(self.fromUid))
|
||||
[userIds addIndex:(int32_t)self.fromUid];
|
||||
[userIds addObject:[NSNumber numberWithLongLong:self.fromUid]];
|
||||
|
||||
for (TGBridgeMediaAttachment *attachment in self.media)
|
||||
{
|
||||
@ -72,29 +72,33 @@ NSString *const TGBridgeMessagesArrayKey = @"messages";
|
||||
{
|
||||
TGBridgeContactMediaAttachment *contactAttachment = (TGBridgeContactMediaAttachment *)attachment;
|
||||
if (contactAttachment.uid != 0)
|
||||
[userIds addIndex:contactAttachment.uid];
|
||||
[userIds addObject:[NSNumber numberWithLongLong:contactAttachment.uid]];
|
||||
}
|
||||
else if ([attachment isKindOfClass:[TGBridgeForwardedMessageMediaAttachment class]])
|
||||
{
|
||||
TGBridgeForwardedMessageMediaAttachment *forwardAttachment = (TGBridgeForwardedMessageMediaAttachment *)attachment;
|
||||
if (forwardAttachment.peerId != 0 && !TGPeerIdIsChannel(forwardAttachment.peerId))
|
||||
[userIds addIndex:(int32_t)forwardAttachment.peerId];
|
||||
[userIds addObject:[NSNumber numberWithLongLong:forwardAttachment.peerId]];
|
||||
}
|
||||
else if ([attachment isKindOfClass:[TGBridgeReplyMessageMediaAttachment class]])
|
||||
{
|
||||
TGBridgeReplyMessageMediaAttachment *replyAttachment = (TGBridgeReplyMessageMediaAttachment *)attachment;
|
||||
if (replyAttachment.message != nil && !TGPeerIdIsChannel(replyAttachment.message.fromUid))
|
||||
[userIds addIndex:(int32_t)replyAttachment.message.fromUid];
|
||||
[userIds addObject:[NSNumber numberWithLongLong:replyAttachment.message.fromUid]];
|
||||
}
|
||||
else if ([attachment isKindOfClass:[TGBridgeActionMediaAttachment class]])
|
||||
{
|
||||
TGBridgeActionMediaAttachment *actionAttachment = (TGBridgeActionMediaAttachment *)attachment;
|
||||
if (actionAttachment.actionData[@"uid"] != nil)
|
||||
[userIds addIndex:(int32_t)[actionAttachment.actionData[@"uid"] intValue]];
|
||||
[userIds addObject:[NSNumber numberWithLongLong:[actionAttachment.actionData[@"uid"] intValue]]];
|
||||
}
|
||||
}
|
||||
|
||||
return userIds;
|
||||
NSMutableArray *result = [[NSMutableArray alloc] init];
|
||||
for (NSNumber *object in userIds) {
|
||||
[result addObject:object];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
- (NSArray *)textCheckingResults
|
||||
|
@ -37,8 +37,8 @@
|
||||
@property (nonatomic) int32_t participantsCount;
|
||||
@property (nonatomic, strong) NSArray *participants;
|
||||
|
||||
- (NSIndexSet *)involvedUserIds;
|
||||
- (NSIndexSet *)participantsUserIds;
|
||||
- (NSArray<NSNumber *> *)involvedUserIds;
|
||||
- (NSArray<NSNumber *> *)participantsUserIds;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -50,7 +50,7 @@ typedef NS_ENUM(NSUInteger, TGBridgeMessageDeliveryState) {
|
||||
@property (nonatomic, strong) NSArray *media;
|
||||
@property (nonatomic) bool forceReply;
|
||||
|
||||
- (NSIndexSet *)involvedUserIds;
|
||||
- (NSArray<NSNumber *> *)involvedUserIds;
|
||||
- (NSArray *)textCheckingResults;
|
||||
|
||||
+ (instancetype)temporaryNewMessageForText:(NSString *)text userId:(int32_t)userId;
|
||||
|
@ -94,13 +94,13 @@ NSString *const TGBridgeChatsArrayKey = @"chats";
|
||||
[aCoder encodeObject:self.participants forKey:TGBridgeChatGroupParticipantsKey];
|
||||
}
|
||||
|
||||
- (NSIndexSet *)involvedUserIds
|
||||
- (NSArray<NSNumber *> *)involvedUserIds
|
||||
{
|
||||
NSMutableIndexSet *userIds = [[NSMutableIndexSet alloc] init];
|
||||
NSMutableSet<NSNumber *> *userIds = [[NSMutableSet alloc] init];
|
||||
if (!self.isGroup && !self.isChannel && self.identifier != 0)
|
||||
[userIds addIndex:(int32_t)self.identifier];
|
||||
[userIds addObject:[NSNumber numberWithLongLong:self.identifier]];
|
||||
if ((!self.isChannel || self.isChannelGroup) && self.fromUid != self.identifier && self.fromUid != 0 && !TGPeerIdIsChannel(self.fromUid) && self.fromUid > 0)
|
||||
[userIds addIndex:(int32_t)self.fromUid];
|
||||
[userIds addObject:[NSNumber numberWithLongLong:self.fromUid]];
|
||||
|
||||
for (TGBridgeMediaAttachment *attachment in self.media)
|
||||
{
|
||||
@ -108,21 +108,30 @@ NSString *const TGBridgeChatsArrayKey = @"chats";
|
||||
{
|
||||
TGBridgeActionMediaAttachment *actionAttachment = (TGBridgeActionMediaAttachment *)attachment;
|
||||
if (actionAttachment.actionData[@"uid"] != nil)
|
||||
[userIds addIndex:[actionAttachment.actionData[@"uid"] integerValue]];
|
||||
[userIds addObject:[NSNumber numberWithLongLong:[actionAttachment.actionData[@"uid"] longLongValue]]];
|
||||
}
|
||||
}
|
||||
|
||||
return userIds;
|
||||
NSMutableArray *result = [[NSMutableArray alloc] init];
|
||||
for (NSNumber *object in userIds) {
|
||||
[result addObject:object];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
- (NSIndexSet *)participantsUserIds
|
||||
- (NSArray<NSNumber *> *)participantsUserIds
|
||||
{
|
||||
NSMutableIndexSet *userIds = [[NSMutableIndexSet alloc] init];
|
||||
NSMutableSet<NSNumber *> *userIds = [[NSMutableSet alloc] init];
|
||||
|
||||
for (NSNumber *uid in self.participants)
|
||||
[userIds addIndex:uid.unsignedIntegerValue];
|
||||
for (NSNumber *uid in self.participants) {
|
||||
[userIds addObject:[NSNumber numberWithLongLong:uid.longLongValue]];
|
||||
}
|
||||
|
||||
return userIds;
|
||||
NSMutableArray *result = [[NSMutableArray alloc] init];
|
||||
for (NSNumber *object in userIds) {
|
||||
[result addObject:object];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
- (BOOL)isEqual:(id)object
|
||||
|
@ -60,11 +60,11 @@ NSString *const TGBridgeMessagesArrayKey = @"messages";
|
||||
[aCoder encodeBool:self.forceReply forKey:TGBridgeMessageForceReplyKey];
|
||||
}
|
||||
|
||||
- (NSIndexSet *)involvedUserIds
|
||||
- (NSArray<NSNumber *> *)involvedUserIds
|
||||
{
|
||||
NSMutableIndexSet *userIds = [[NSMutableIndexSet alloc] init];
|
||||
NSMutableSet<NSNumber *> *userIds = [[NSMutableSet alloc] init];
|
||||
if (!TGPeerIdIsChannel(self.fromUid))
|
||||
[userIds addIndex:(int32_t)self.fromUid];
|
||||
[userIds addObject:[NSNumber numberWithLongLong:self.fromUid]];
|
||||
|
||||
for (TGBridgeMediaAttachment *attachment in self.media)
|
||||
{
|
||||
@ -72,29 +72,33 @@ NSString *const TGBridgeMessagesArrayKey = @"messages";
|
||||
{
|
||||
TGBridgeContactMediaAttachment *contactAttachment = (TGBridgeContactMediaAttachment *)attachment;
|
||||
if (contactAttachment.uid != 0)
|
||||
[userIds addIndex:contactAttachment.uid];
|
||||
[userIds addObject:[NSNumber numberWithLongLong:contactAttachment.uid]];
|
||||
}
|
||||
else if ([attachment isKindOfClass:[TGBridgeForwardedMessageMediaAttachment class]])
|
||||
{
|
||||
TGBridgeForwardedMessageMediaAttachment *forwardAttachment = (TGBridgeForwardedMessageMediaAttachment *)attachment;
|
||||
if (forwardAttachment.peerId != 0 && !TGPeerIdIsChannel(forwardAttachment.peerId))
|
||||
[userIds addIndex:(int32_t)forwardAttachment.peerId];
|
||||
[userIds addObject:[NSNumber numberWithLongLong:forwardAttachment.peerId]];
|
||||
}
|
||||
else if ([attachment isKindOfClass:[TGBridgeReplyMessageMediaAttachment class]])
|
||||
{
|
||||
TGBridgeReplyMessageMediaAttachment *replyAttachment = (TGBridgeReplyMessageMediaAttachment *)attachment;
|
||||
if (replyAttachment.message != nil && !TGPeerIdIsChannel(replyAttachment.message.fromUid))
|
||||
[userIds addIndex:(int32_t)replyAttachment.message.fromUid];
|
||||
[userIds addObject:[NSNumber numberWithLongLong:replyAttachment.message.fromUid]];
|
||||
}
|
||||
else if ([attachment isKindOfClass:[TGBridgeActionMediaAttachment class]])
|
||||
{
|
||||
TGBridgeActionMediaAttachment *actionAttachment = (TGBridgeActionMediaAttachment *)attachment;
|
||||
if (actionAttachment.actionData[@"uid"] != nil)
|
||||
[userIds addIndex:(int32_t)[actionAttachment.actionData[@"uid"] intValue]];
|
||||
[userIds addObject:[NSNumber numberWithLongLong:[actionAttachment.actionData[@"uid"] intValue]]];
|
||||
}
|
||||
}
|
||||
|
||||
return userIds;
|
||||
NSMutableArray *result = [[NSMutableArray alloc] init];
|
||||
for (NSNumber *object in userIds) {
|
||||
[result addObject:object];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
- (NSArray *)textCheckingResults
|
||||
|
Loading…
x
Reference in New Issue
Block a user