Я ищу оптимальный способ получения списка топовых X самых последних активных тем Gmail.
Справочная информация:
Я использую Java для доступа к IMAP с OAuth в домене Google Apps для учебных заведений. Доступен входящий фид Gmail Atom , в котором могут быть перечислены последние 20 потоков, содержащих непрочитанные сообщения. Доступ к этому каналу кажется очень быстрым, намного быстрее, чем все, что мне удалось создать с помощью OAuth / IMAP.
Преимущество использования подхода IMAP перед входящим фидом Gmail Atom заключается в том, что с IMAP я могу получить доступ к произвольному количеству сообщений (не только 20), просмотреть прочитанные сообщения, получить размер потока, получить любые связанные ярлыки Google, получить сведения о квоте и проверьте флаги. По сути, это даст моим пользователям гораздо больше опыта, подобного Gmail (мне нужен только опыт чтения только для нашего портала). Моя проблема в том, что доступ по IMAP значительно медленнее, чем через канал Atom. Сравнение по методу IMAP занимает около 10 секунд, в то время как подача Atom обычно возвращается в течение 2 секунд.
Я знаю и работал с Gmail IMAP Extensions и Синтаксис расширенного поиска Gmail .
Текущий метод:
Представьте, что мне нужны 40 лучших тем из моей папки входящих сообщений IMAP. В настоящее время я загружаю произвольное количество сообщений (40 * 4), выбирая только X-GM-THRID . Я перебираю эти сообщения, сохраняя идентификатор потока на ходу (выбирая больше сообщений при необходимости), пока не исчерпаю список входящих сообщений или не достигну целевого числа потоков.
Затем у меня есть список идентификаторов потоков Gmail, которые я могу использовать для выполнения поиска IMAP (с соответствующим FetchProfile.Item, в зависимости от того, какие детали сообщения требуются).
Я перебираю результаты поиска, получая что-то вроде (используя замечательный Google Guava / Google Collections Multimap):
Multimap<Long, Message> threadMultiMap = LinkedListMultimap.create();
и это легко массируется в:
LinkedHashMap<Long, Message[]> threadMap;
Есть ли лучший способ, чем перебирать INBOX до тех пор, пока не будут определены X отдельных потоков сообщений?