/Telegraph/TGBridgeContextService.m

https://gitlab.com/iranjith4/Telegram · Objective C · 96 lines · 74 code · 22 blank · 0 comment · 13 complexity · 5789db37e75103d535658211aa67dcee MD5 · raw file

  1. #import "TGBridgeContextService.h"
  2. #import "TGChatListSignals.h"
  3. #import "TGBridgeServer.h"
  4. #import "TGBridgeChat+TGConversation.h"
  5. #import "TGBridgeUser+TGUser.h"
  6. #import "TGDatabase.h"
  7. const NSUInteger TGBridgeContextChatsCount = 4;
  8. @interface TGBridgeContextService ()
  9. {
  10. SSignal *_chatListSignal;
  11. SMetaDisposable *_disposable;
  12. }
  13. @property (nonatomic, weak) TGBridgeServer *server;
  14. @end
  15. @implementation TGBridgeContextService
  16. - (instancetype)initWithServer:(TGBridgeServer *)server
  17. {
  18. self = [super init];
  19. if (self != nil)
  20. {
  21. self.server = server;
  22. _chatListSignal = [server serviceSignalForKey:@"chatList" producer:^SSignal *
  23. {
  24. return [TGChatListSignals chatListWithLimit:24];
  25. }];
  26. __weak TGBridgeContextService *weakSelf = self;
  27. _disposable = [[SMetaDisposable alloc] init];
  28. [_disposable setDisposable:[_chatListSignal startWithNext:^(NSArray *next)
  29. {
  30. __strong TGBridgeContextService *strongSelf = weakSelf;
  31. if (strongSelf == nil)
  32. return;
  33. if (next.count > 0)
  34. {
  35. NSUInteger limit = MIN(next.count, TGBridgeContextChatsCount);
  36. NSMutableArray *bridgeChats = [[NSMutableArray alloc] init];
  37. NSMutableDictionary *bridgeUsers = [[NSMutableDictionary alloc] init];
  38. NSMutableIndexSet *userIds = [[NSMutableIndexSet alloc] init];
  39. NSUInteger i = 0;
  40. for (TGConversation *chat in next)
  41. {
  42. if (chat.isBroadcast || chat.isEncrypted)
  43. continue;
  44. if (i >= limit)
  45. break;
  46. TGBridgeChat *bridgeChat = [TGBridgeChat chatWithTGConversation:chat];
  47. if (bridgeChat != nil)
  48. {
  49. [bridgeChats addObject:bridgeChat];
  50. [userIds addIndexes:[bridgeChat involvedUserIds]];
  51. }
  52. i++;
  53. }
  54. [userIds enumerateIndexesUsingBlock:^(NSUInteger userId, __unused BOOL *stop)
  55. {
  56. TGBridgeUser *bridgeUser = [TGBridgeUser userWithTGUser:[[TGDatabase instance] loadUser:(int)userId]];
  57. if (bridgeUser != nil)
  58. bridgeUsers[@(userId)] = bridgeUser;
  59. }];
  60. [strongSelf.server setStartupData:@{ TGBridgeChatsArrayKey: bridgeChats, TGBridgeUsersDictionaryKey: bridgeUsers }];
  61. }
  62. else
  63. {
  64. [strongSelf.server setStartupData:nil];
  65. }
  66. }]];
  67. }
  68. return self;
  69. }
  70. - (void)dealloc
  71. {
  72. [_disposable dispose];
  73. }
  74. @end