Advertisement
Guest User

Untitled

a guest
Oct 13th, 2016
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.74 KB | None | 0 0
  1. - (void)loadAccountWithUsername:(NSString *)username
  2. password:(NSString *)password
  3. hostname:(NSString *)hostname
  4. oauth2Token:(NSString *)oauth2Token
  5. {
  6. self.imapSession = [[MCOIMAPSession alloc] init];
  7. self.imapSession.hostname = hostname;
  8. self.imapSession.port = 993;
  9. self.imapSession.username = username;
  10. self.imapSession.password = password;
  11. if (oauth2Token != nil) {
  12. self.imapSession.OAuth2Token = oauth2Token;
  13. self.imapSession.authType = MCOAuthTypeXOAuth2;
  14. }
  15. self.imapSession.connectionType = MCOConnectionTypeTLS;
  16. MasterViewController * __weak weakSelf = self;
  17. self.imapSession.connectionLogger = ^(void * connectionID, MCOConnectionLogType type, NSData * data) {
  18. @synchronized(weakSelf) {
  19. if (type != MCOConnectionLogTypeSentPrivate) {
  20. // NSLog(@"event logged:%p %i withData: %@", connectionID, type, [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
  21. }
  22. }
  23. };
  24.  
  25. // Reset the inbox
  26. self.messages = nil;
  27. self.totalNumberOfInboxMessages = -1;
  28. self.isLoading = NO;
  29. self.messagePreviews = [NSMutableDictionary dictionary];
  30. [self.tableView reloadData];
  31.  
  32. NSLog(@"checking account");
  33. self.imapCheckOp = [self.imapSession checkAccountOperation];
  34. [self.imapCheckOp start:^(NSError *error) {
  35. MasterViewController *strongSelf = weakSelf;
  36. NSLog(@"finished checking account.");
  37. if (error == nil) {
  38. [strongSelf loadLastNMessages:NUMBER_OF_MESSAGES_TO_LOAD];
  39. } else {
  40. NSLog(@"error loading account: %@", error);
  41. }
  42.  
  43. strongSelf.imapCheckOp = nil;
  44. }];
  45. }
  46.  
  47. - (void)loadLastNMessages:(NSUInteger)nMessages
  48. {
  49. self.isLoading = YES;
  50.  
  51. MCOIMAPMessagesRequestKind requestKind = (MCOIMAPMessagesRequestKind)
  52. (MCOIMAPMessagesRequestKindHeaders | MCOIMAPMessagesRequestKindStructure |
  53. MCOIMAPMessagesRequestKindInternalDate | MCOIMAPMessagesRequestKindHeaderSubject |
  54. MCOIMAPMessagesRequestKindFlags);
  55.  
  56. NSString *inboxFolder = @"INBOX";
  57. MCOIMAPFolderInfoOperation *inboxFolderInfo = [self.imapSession folderInfoOperation:inboxFolder];
  58.  
  59. [inboxFolderInfo start:^(NSError *error, MCOIMAPFolderInfo *info)
  60. {
  61. BOOL totalNumberOfMessagesDidChange =
  62. self.totalNumberOfInboxMessages != [info messageCount];
  63.  
  64. self.totalNumberOfInboxMessages = [info messageCount];
  65.  
  66. NSUInteger numberOfMessagesToLoad =
  67. MIN(self.totalNumberOfInboxMessages, nMessages);
  68.  
  69. if (numberOfMessagesToLoad == 0)
  70. {
  71. self.isLoading = NO;
  72. return;
  73. }
  74.  
  75. MCORange fetchRange;
  76.  
  77. // If total number of messages did not change since last fetch,
  78. // assume nothing was deleted since our last fetch and just
  79. // fetch what we don't have
  80. if (!totalNumberOfMessagesDidChange && self.messages.count)
  81. {
  82. numberOfMessagesToLoad -= self.messages.count;
  83.  
  84. fetchRange =
  85. MCORangeMake(self.totalNumberOfInboxMessages -
  86. self.messages.count -
  87. (numberOfMessagesToLoad - 1),
  88. (numberOfMessagesToLoad - 1));
  89. }
  90.  
  91. // Else just fetch the last N messages
  92. else
  93. {
  94. fetchRange =
  95. MCORangeMake(self.totalNumberOfInboxMessages -
  96. (numberOfMessagesToLoad - 1),
  97. (numberOfMessagesToLoad - 1));
  98. }
  99.  
  100. self.imapMessagesFetchOp =
  101. [self.imapSession fetchMessagesByNumberOperationWithFolder:inboxFolder
  102. requestKind:requestKind
  103. numbers:
  104. [MCOIndexSet indexSetWithRange:fetchRange]];
  105.  
  106. [self.imapMessagesFetchOp setProgress:^(unsigned int progress) {
  107. NSLog(@"Progress: %u of %u", progress, numberOfMessagesToLoad);
  108. }];
  109.  
  110. __weak MasterViewController *weakSelf = self;
  111. [self.imapMessagesFetchOp start:
  112. ^(NSError *error, NSArray *messages, MCOIndexSet *vanishedMessages)
  113. {
  114. MasterViewController *strongSelf = weakSelf;
  115. NSLog(@"fetched all messages.");
  116.  
  117. self.isLoading = NO;
  118.  
  119. NSSortDescriptor *sort =
  120. [NSSortDescriptor sortDescriptorWithKey:@"header.date" ascending:NO];
  121.  
  122. NSMutableArray *combinedMessages =
  123. [NSMutableArray arrayWithArray:messages];
  124. [combinedMessages addObjectsFromArray:strongSelf.messages];
  125.  
  126. strongSelf.messages =
  127. [combinedMessages sortedArrayUsingDescriptors:@[sort]];
  128. [strongSelf.tableView reloadData];
  129. }];
  130. }];
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement