fetchMessagesByNumberOperationWithFolder в MailCore2 не всегда возвращает последнее N количество писем
В большинстве папок fetchMessagesByNumber работает как положено. Если я ожидаю получить последние 40 сообщений в папке, он будет занимать около 35-40. Я предполагаю, что причина, почему я не всегда получаю 40/40, состоит в том, что порядковые номера не всегда последовательны в Gmail (??).
Однако в одной из папок "Все папки" моей входящей почты в Gmail, содержащей около 43 000 электронных писем, fetchMessagesByNumber почти всегда не возвращает никаких сообщений. Если "messagesToGet" равен 10, 100, 500, он не вернет никаких сообщений.
До тех пор, пока я не попытаюсь получить последние 3000 сообщений, я получаю любые электронные письма.
Какие предположения и я делаю, что неправильно с "fetchMessagesByNumber" и мой диапазон?
MCOIndexSet *numbers = [MCOIndexSet indexSetWithRange:MCORangeMake([info messageCount] - messagesToGet, messagesToGet)];
folderSync = [_imapSession
fetchMessagesByNumberOperationWithFolder:@"[Gmail]/All Mail"
requestKind:requestKind
numbers:numbers];
Чтобы обойти это, я использовал другой запрос вместо этого, но проблема с запросом к диапазону UID состоит в том, что теоретически он является более неточным, поскольку UID не гарантированно является последовательным. В идеале я хотел бы использовать вышеупомянутый запрос, но не могу заставить его работать.
MCOIndexSet *numbers = [MCOIndexSet indexSetWithRange:MCORangeMake(lastUID - messagesToGet, messagesToGet)];
folderSync = [_imapSession
fetchMessagesOperationWithFolder:@"[Gmail]/All Mail"
requestKind:requestKind
uids:numbers];
РЕДАКТИРОВАТЬ:
Я выяснил, почему мой метод не возвращает ожидаемое количество сообщений. Я использую MCOIMAPFolderStatusOperation вместо MCOIMAPFolderInfoOperation.
Я думал, что эти две команды взаимозаменяемы, так как они возвращают [info messageCount]. Я решил использовать первый, чтобы иметь доступ к свойству status.highestModSeqValue.
ОДНАКО, оказывается, MCOIMAPFolderStatusOperation возвращает messageCount из 44514, тогда как MCOIMAPFolderInfoOperation возвращает messageCount из 42459.
Это ожидается? Вот журналы для обоих. Это для MCOIMAPFolderStatusOperation:
2015-03-12 23:02:31.435 iOS UI Test[5529:4648946] checking account
2015-03-12 23:02:31.436 [5529:560f] MCOperationQueue.cpp:81: start thread
2015-03-12 23:02:31.442 [5529:560f] MCIMAPSession.cpp:569: connect <mailcore::IMAPSession:0x7fa043d5d0f0>
2015-03-12 23:02:31.772 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 0 withData: * OK Gimap ready for requests from 98.248.43.119 hl7mb54795112pad
2015-03-12 23:02:31.772 [5529:560f] MCIMAPSession.cpp:592: ssl connect imap.gmail.com 993 2
2015-03-12 23:02:31.774 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 1 withData: 1 CAPABILITY
2015-03-12 23:02:31.823 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 0 withData: * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN
1 OK Thats all she wrote! hl7mb54795112pad
2015-03-12 23:02:31.823 [5529:560f] MCIMAPSession.cpp:649: connect ok
2015-03-12 23:02:31.823 [5529:560f] MCIMAPSession.cpp:689: login
2015-03-12 23:02:31.984 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 0 withData: * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT
2 OK vu0tran@gmail.com authenticated (Success)
2015-03-12 23:02:31.984 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 1 withData: 3 COMPRESS DEFLATE
2015-03-12 23:02:32.043 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 0 withData: 3 OK Success
2015-03-12 23:02:32.043 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 1 withData: 4 ENABLE CONDSTORE
2015-03-12 23:02:32.098 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 0 withData: * ENABLED CONDSTORE
4 OK Success
2015-03-12 23:02:32.099 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 1 withData: 5 NAMESPACE
2015-03-12 23:02:32.151 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 0 withData: * NAMESPACE (("" "/")) NIL NIL
5 OK Success
2015-03-12 23:02:32.151 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 1 withData: 6 ID NIL
2015-03-12 23:02:32.208 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 0 withData: * ID ("name" "GImap" "vendor" "Google, Inc." "support-url" "http://support.google.com/mail" "version" "gmail_imap_150308.09_p0" "remote-host" "98.248.43.119")
6 OK Success
2015-03-12 23:02:32.208 [5529:560f] MCIMAPSession.cpp:935: login ok
2015-03-12 23:02:32.208 iOS UI Test[5529:4648946] finished checking account.
2015-03-12 23:02:32.209 [5529:560f] MCIMAPSession.cpp:1063: status
2015-03-12 23:02:32.209 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 1 withData: 7 STATUS "[Gmail]/All Mail" (UNSEEN MESSAGES RECENT UIDNEXT UIDVALIDITY HIGHESTMODSEQ)
2015-03-12 23:02:32.265 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 0 withData: * STATUS "[Gmail]/All Mail" (HIGHESTMODSEQ 4084511 MESSAGES 44514 RECENT 0 UIDNEXT 64049 UIDVALIDITY 612907046 UNSEEN 10719)
7 OK Success
2015-03-12 23:02:32.266 [5529:560f] MCIMAPSession.cpp:1086: status error : 0
2015-03-12 23:02:32.266 [5529:560f] MCIMAPSession.cpp:994: select
2015-03-12 23:02:32.266 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 1 withData: 8 SELECT "[Gmail]/All Mail"
2015-03-12 23:02:32.762 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 0 withData: * FLAGS (\Answered \Flagged \Draft \Deleted \Seen $Phishing $Forwarded JunkRecorded $NotJunk NotJunk $NotPhishing $Junk)
* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen $Phishing $Forwarded JunkRecorded $NotJunk NotJunk $NotPhishing $Junk \*)] Flags permitted.
* OK [UIDVALIDITY 612907046] UIDs valid.
* 42488 EXISTS
* 0 RECENT
* OK [UIDNEXT 64049] Predicted next UID.
* OK [HIGHESTMODSEQ 4084511]
8 OK [READ-WRITE] [Gmail]/All Mail selected. (Success)
2015-03-12 23:02:32.762 [5529:560f] MCIMAPSession.cpp:998: select error : 0
2015-03-12 23:02:32.762 [5529:560f] MCIMAPSession.cpp:1052: select ok
2015-03-12 23:02:32.762 [5529:560f] MCIMAPSession.cpp:2178: request flags
2015-03-12 23:02:32.763 [5529:560f] MCIMAPSession.cpp:2229: request envelope
2015-03-12 23:02:32.763 [5529:560f] MCIMAPSession.cpp:2251: request bodystructure
2015-03-12 23:02:32.763 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 1 withData: 9 FETCH 44505:44514 (UID FLAGS ENVELOPE BODYSTRUCTURE INTERNALDATE BODY.PEEK[HEADER.FIELDS (References Subject)])
2015-03-12 23:02:32.799 iOS UI Test[5529:4649416] event logged:0x7fa043d58870 0 withData: 9 OK Success
2015-03-12 23:02:32.800 iOS UI Test[5529:4648946] fetched all messages.
2015-03-12 23:02:33.899 [5529:main] MCOperationQueue.cpp:215: trying to quit 0x7fa043d605f0
2015-03-12 23:02:33.899 [5529:560f] MCOperationQueue.cpp:102: stopping 0x7fa043d605f0
2015-03-12 23:02:33.899 [5529:main] MCOperationQueue.cpp:230: thread stopped 0x7fa043d605f0
2015-03-12 23:02:33.899 [5529:560f] MCOperationQueue.cpp:151: cleanup thread 0x7fa043d605f0
2015-03-12 23:03:03.899 [5529:5313] MCOperationQueue.cpp:81: start thread
2015-03-12 23:03:04.980 [5529:main] MCOperationQueue.cpp:215: trying to quit 0x7fa043d605f0
2015-03-12 23:03:04.980 [5529:5313] MCOperationQueue.cpp:102: stopping 0x7fa043d605f0
2015-03-12 23:03:04.981 [5529:main] MCOperationQueue.cpp:230: thread stopped 0x7fa043d605f0
2015-03-12 23:03:04.981 [5529:5313] MCOperationQueue.cpp:151: cleanup thread 0x7fa043d605f0
Это для MCOIMAPFolderInfoOperation:
2015-03-12 23:09:11.390 iOS UI Test[8138:4681733] checking account
2015-03-12 23:09:11.391 [8138:560f] MCOperationQueue.cpp:81: start thread
2015-03-12 23:09:11.396 [8138:560f] MCIMAPSession.cpp:569: connect <mailcore::IMAPSession:0x7fcfb31218d0>
2015-03-12 23:09:11.767 iOS UI Test[8138:4682226] event logged:0x7fcfb311d980 0 withData: * OK Gimap ready for requests from 98.248.43.119 cm1mb31383387pbc
2015-03-12 23:09:11.767 [8138:560f] MCIMAPSession.cpp:592: ssl connect imap.gmail.com 993 2
2015-03-12 23:09:11.769 iOS UI Test[8138:4682226] event logged:0x7fcfb311d980 1 withData: 1 CAPABILITY
2015-03-12 23:09:11.824 iOS UI Test[8138:4682226] event logged:0x7fcfb311d980 0 withData: * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN
1 OK Thats all she wrote! cm1mb31383387pbc
2015-03-12 23:09:11.824 [8138:560f] MCIMAPSession.cpp:649: connect ok
2015-03-12 23:09:11.824 [8138:560f] MCIMAPSession.cpp:689: login
2015-03-12 23:09:11.907 iOS UI Test[8138:4682226] event logged:0x7fcfb311d980 0 withData: * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT
2 OK vu0tran@gmail.com authenticated (Success)
2015-03-12 23:09:11.907 iOS UI Test[8138:4682226] event logged:0x7fcfb311d980 1 withData: 3 COMPRESS DEFLATE
2015-03-12 23:09:11.959 iOS UI Test[8138:4682226] event logged:0x7fcfb311d980 0 withData: 3 OK Success
2015-03-12 23:09:11.960 iOS UI Test[8138:4682226] event logged:0x7fcfb311d980 1 withData: 4 ENABLE CONDSTORE
2015-03-12 23:09:12.012 iOS UI Test[8138:4682226] event logged:0x7fcfb311d980 0 withData: * ENABLED CONDSTORE
4 OK Success
2015-03-12 23:09:12.013 iOS UI Test[8138:4682226] event logged:0x7fcfb311d980 1 withData: 5 NAMESPACE
2015-03-12 23:09:12.069 iOS UI Test[8138:4682226] event logged:0x7fcfb311d980 0 withData: * NAMESPACE (("" "/")) NIL NIL
5 OK Success
2015-03-12 23:09:12.070 iOS UI Test[8138:4682226] event logged:0x7fcfb311d980 1 withData: 6 ID NIL
2015-03-12 23:09:12.123 iOS UI Test[8138:4682226] event logged:0x7fcfb311d980 0 withData: * ID ("name" "GImap" "vendor" "Google, Inc." "support-url" "http://support.google.com/mail" "version" "gmail_imap_150308.09_p0" "remote-host" "98.248.43.119
2015-03-12 23:09:12.124 iOS UI Test[8138:4682226] event logged:0x7fcfb311d980 0 withData: ")
6 OK Success
2015-03-12 23:09:12.124 [8138:560f] MCIMAPSession.cpp:935: login ok
2015-03-12 23:09:12.124 iOS UI Test[8138:4681733] finished checking account.
2015-03-12 23:09:12.124 [8138:560f] MCIMAPSession.cpp:994: select
2015-03-12 23:09:12.124 iOS UI Test[8138:4682226] event logged:0x7fcfb311d980 1 withData: 7 SELECT "[Gmail]/All Mail"
2015-03-12 23:09:12.620 iOS UI Test[8138:4682226] event logged:0x7fcfb311d980 0 withData: * FLAGS (\Answered \Flagged \Draft \Deleted \Seen $Phishing $Forwarded JunkRecorded $NotJunk NotJunk $NotPhishing $Junk)
* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen $Phishing $Forwarded JunkRecorded $NotJunk NotJunk $NotPhishing $Junk \*)] Flags permitted.
* OK [UIDVALIDITY 612907046] UIDs valid.
* 42488 EXISTS
* 0 RECENT
* OK [UIDNEXT 64049] Predicted next UID.
* OK [HIGHESTMODSEQ 4084511]
7 OK [READ-WRITE] [Gmail]/All Mail selected. (Success)
2015-03-12 23:09:12.620 [8138:560f] MCIMAPSession.cpp:998: select error : 0
2015-03-12 23:09:12.620 [8138:560f] MCIMAPSession.cpp:1052: select ok
2015-03-12 23:09:12.621 [8138:560f] MCIMAPSession.cpp:2178: request flags
2015-03-12 23:09:12.621 [8138:560f] MCIMAPSession.cpp:2229: request envelope
2015-03-12 23:09:12.621 [8138:560f] MCIMAPSession.cpp:2251: request bodystructure
2015-03-12 23:09:12.621 iOS UI Test[8138:4682226] event logged:0x7fcfb311d980 1 withData: 8 FETCH 42479:42488 (UID FLAGS ENVELOPE BODYSTRUCTURE INTERNALDATE BODY.PEEK[HEADER.FIELDS (References Subject)])