Refine search
/** * Get the deleted message count. */ public synchronized int getDeletedMessageCount() throws MessagingException { if (!opened) { checkExists(); // no way to do this on closed folders return -1; } // if opened, issue server-side search for messages that do // have the DELETED flag. Flags f = new Flags(); f.add(Flags.Flag.DELETED); try { synchronized(messageCacheLock) { int[] matches = getProtocol().search(new FlagTerm(f, true)); return matches.length; // NOTE: 'matches' is never null } } catch (ConnectionException cex) { throw new FolderClosedException(this, cex.getMessage()); } catch (ProtocolException pex) { // Shouldn't happen throw new MessagingException(pex.getMessage(), pex); } }
boolean recentFlagSupported = false; if (supportedFlags != null) { recentFlagSupported = supportedFlags.contains(Flags.Flag.RECENT); if (recentFlagSupported) { searchTerm = new FlagTerm(new Flags(Flags.Flag.RECENT), true); if (supportedFlags.contains(Flags.Flag.ANSWERED)) { NotTerm notAnswered = new NotTerm(new FlagTerm(new Flags(Flags.Flag.ANSWERED), true)); if (searchTerm == null) { searchTerm = notAnswered; if (supportedFlags.contains(Flags.Flag.DELETED)) { NotTerm notDeleted = new NotTerm(new FlagTerm(new Flags(Flags.Flag.DELETED), true)); if (searchTerm == null) { searchTerm = notDeleted; if (supportedFlags.contains(Flags.Flag.SEEN)) { NotTerm notSeen = new NotTerm(new FlagTerm(new Flags(Flags.Flag.SEEN), true)); if (searchTerm == null) { searchTerm = notSeen;
private SearchTerm applyTermsWhenNoRecentFlag(Folder folder, SearchTerm searchTerm) { NotTerm notFlagged = null; if (folder.getPermanentFlags().contains(Flag.USER)) { if (logger.isDebugEnabled()) { logger.debug("This email server does not support RECENT flag, but it does support " + "USER flags which will be used to prevent duplicates during email fetch." + " This receiver instance uses flag: " + getUserFlag()); } Flags siFlags = new Flags(); siFlags.add(getUserFlag()); notFlagged = new NotTerm(new FlagTerm(siFlags, true)); } else { logger.debug("This email server does not support RECENT or USER flags. " + "System flag 'Flag.FLAGGED' will be used to prevent duplicates during email fetch."); notFlagged = new NotTerm(new FlagTerm(new Flags(Flag.FLAGGED), true)); } if (searchTerm == null) { return notFlagged; } else { return new AndTerm(searchTerm, notFlagged); } }
protected Argument flag(FlagTerm term) throws SearchException { boolean set = term.getTestSet(); Argument result = new Argument(); Flags flags = term.getFlags(); Flags.Flag[] sf = flags.getSystemFlags(); String[] uf = flags.getUserFlags(); if (sf.length == 0 && uf.length == 0) throw new SearchException("Invalid FlagTerm"); for (int i = 0; i < sf.length; i++) { if (sf[i] == Flags.Flag.DELETED) result.writeAtom(set ? "DELETED": "UNDELETED"); else if (sf[i] == Flags.Flag.ANSWERED) result.writeAtom(set ? "ANSWERED": "UNANSWERED"); else if (sf[i] == Flags.Flag.DRAFT) result.writeAtom(set ? "DRAFT": "UNDRAFT"); else if (sf[i] == Flags.Flag.FLAGGED) result.writeAtom(set ? "FLAGGED": "UNFLAGGED"); else if (sf[i] == Flags.Flag.RECENT) result.writeAtom(set ? "RECENT": "OLD"); else if (sf[i] == Flags.Flag.SEEN) result.writeAtom(set ? "SEEN": "UNSEEN"); } for (int i = 0; i < uf.length; i++) { result.writeAtom(set ? "KEYWORD" : "UNKEYWORD"); result.writeAtom(uf[i]); } return result; }
@Test public void validateSearchTermsWhenShouldMarkAsReadWithExistingFlags() throws Exception { ImapMailReceiver receiver = new ImapMailReceiver(); receiver.setShouldMarkMessagesAsRead(true); receiver.setBeanFactory(mock(BeanFactory.class)); receiver.afterPropertiesSet(); Field folderField = AbstractMailReceiver.class.getDeclaredField("folder"); folderField.setAccessible(true); Folder folder = mock(Folder.class); when(folder.getPermanentFlags()).thenReturn(new Flags(Flags.Flag.USER)); folderField.set(receiver, folder); Method compileSearchTerms = ReflectionUtils.findMethod(receiver.getClass(), "compileSearchTerms", Flags.class); compileSearchTerms.setAccessible(true); Flags flags = new Flags(); flags.add(Flag.ANSWERED); SearchTerm searchTerms = (SearchTerm) compileSearchTerms.invoke(receiver, flags); assertTrue(searchTerms instanceof AndTerm); AndTerm andTerm = (AndTerm) searchTerms; SearchTerm[] terms = andTerm.getTerms(); assertEquals(2, terms.length); NotTerm notTerm = (NotTerm) terms[0]; assertTrue(((FlagTerm) notTerm.getTerm()).getFlags().contains(Flag.ANSWERED)); notTerm = (NotTerm) terms[1]; Flags siFlags = new Flags(); siFlags.add(AbstractMailReceiver.DEFAULT_SI_USER_FLAG); assertTrue(((FlagTerm) notTerm.getTerm()).getFlags().contains(siFlags)); }
public void validateSearchTermsWhenShouldMarkAsReadNoExistingFlagsGuts(String userFlag, ImapMailReceiver receiver) throws NoSuchFieldException, IllegalAccessException, InvocationTargetException { receiver.setShouldMarkMessagesAsRead(true); receiver.setBeanFactory(mock(BeanFactory.class)); Field folderField = AbstractMailReceiver.class.getDeclaredField("folder"); folderField.setAccessible(true); Folder folder = mock(Folder.class); when(folder.getPermanentFlags()).thenReturn(new Flags(Flags.Flag.USER)); folderField.set(receiver, folder); Method compileSearchTerms = ReflectionUtils.findMethod(receiver.getClass(), "compileSearchTerms", Flags.class); compileSearchTerms.setAccessible(true); Flags flags = new Flags(); SearchTerm searchTerms = (SearchTerm) compileSearchTerms.invoke(receiver, flags); assertTrue(searchTerms instanceof NotTerm); NotTerm notTerm = (NotTerm) searchTerms; Flags siFlags = new Flags(); siFlags.add(userFlag); assertEquals(siFlags, ((FlagTerm) notTerm.getTerm()).getFlags()); }
/** * Defines filter for many flags at once. * * @param flags The {@link Flags} to filter on. * @param value The {@link Flag} setting to check for. * @return this */ public EmailFilter flags(final Flags flags, final boolean value) { final SearchTerm flagTerm = new FlagTerm(flags, value); concat(flagTerm); return this; }
/** * Get the deleted message count. */ @Override public synchronized int getDeletedMessageCount() throws MessagingException { if (!opened) { checkExists(); // no way to do this on closed folders return -1; } // if opened, issue server-side search for messages that do // have the DELETED flag. Flags f = new Flags(); f.add(Flags.Flag.DELETED); try { synchronized(messageCacheLock) { int[] matches = getProtocol().search(new FlagTerm(f, true)); return matches.length; // NOTE: 'matches' is never null } } catch (ConnectionException cex) { throw new FolderClosedException(this, cex.getMessage()); } catch (ProtocolException pex) { // Shouldn't happen throw new MessagingException(pex.getMessage(), pex); } }
SearchTerm searchTerm = null; if (supportedFlags != null) { if (supportedFlags.contains(Flags.Flag.RECENT)) { searchTerm = new FlagTerm(new Flags(Flags.Flag.RECENT), true); if (supportedFlags.contains(Flags.Flag.ANSWERED)) { FlagTerm answeredTerm = new FlagTerm(new Flags(Flags.Flag.ANSWERED), false); if (searchTerm == null) { searchTerm = answeredTerm; if (supportedFlags.contains(Flags.Flag.DELETED)) { FlagTerm deletedTerm = new FlagTerm(new Flags(Flags.Flag.DELETED), false); if (searchTerm == null) { searchTerm = deletedTerm;
boolean recentFlagSupported = false; if (supportedFlags != null) { recentFlagSupported = supportedFlags.contains(Flags.Flag.RECENT); if (recentFlagSupported) { searchTerm = new FlagTerm(new Flags(Flags.Flag.RECENT), true); if (supportedFlags.contains(Flags.Flag.ANSWERED)) { NotTerm notAnswered = new NotTerm(new FlagTerm(new Flags(Flags.Flag.ANSWERED), true)); if (searchTerm == null) { searchTerm = notAnswered; if (supportedFlags.contains(Flags.Flag.DELETED)) { NotTerm notDeleted = new NotTerm(new FlagTerm(new Flags(Flags.Flag.DELETED), true)); if (searchTerm == null) { searchTerm = notDeleted; if (supportedFlags.contains(Flags.Flag.SEEN)) { NotTerm notSeen = new NotTerm(new FlagTerm(new Flags(Flags.Flag.SEEN), true)); if (searchTerm == null) { searchTerm = notSeen; Flags siFlags = new Flags(); siFlags.add(getUserFlag()); notFlagged = new NotTerm(new FlagTerm(siFlags, true)); notFlagged = new NotTerm(new FlagTerm(new Flags(Flags.Flag.FLAGGED), true));
protected Argument flag(FlagTerm term) throws SearchException { boolean set = term.getTestSet(); Argument result = new Argument(); Flags flags = term.getFlags(); Flags.Flag[] sf = flags.getSystemFlags(); String[] uf = flags.getUserFlags(); if (sf.length == 0 && uf.length == 0) throw new SearchException("Invalid FlagTerm"); for (int i = 0; i < sf.length; i++) { if (sf[i] == Flags.Flag.DELETED) result.writeAtom(set ? "DELETED": "UNDELETED"); else if (sf[i] == Flags.Flag.ANSWERED) result.writeAtom(set ? "ANSWERED": "UNANSWERED"); else if (sf[i] == Flags.Flag.DRAFT) result.writeAtom(set ? "DRAFT": "UNDRAFT"); else if (sf[i] == Flags.Flag.FLAGGED) result.writeAtom(set ? "FLAGGED": "UNFLAGGED"); else if (sf[i] == Flags.Flag.RECENT) result.writeAtom(set ? "RECENT": "OLD"); else if (sf[i] == Flags.Flag.SEEN) result.writeAtom(set ? "SEEN": "UNSEEN"); } for (int i = 0; i < uf.length; i++) { result.writeAtom(set ? "KEYWORD" : "UNKEYWORD"); result.writeAtom(uf[i]); } return result; }
Message[] unreadMessages = inbox.search(new FlagTerm(new Flags(Flag.SEEN), false)); for (int q = 0; q < unreadMessages.length; q++) { unreadMessages[q].setFlag(Flag.SEEN, true); }
SearchTerm searchTerm = null; if (supportedFlags != null) { if (supportedFlags.contains(Flags.Flag.RECENT)) { searchTerm = new FlagTerm(new Flags(Flags.Flag.RECENT), true); if (supportedFlags.contains(Flags.Flag.ANSWERED)) { FlagTerm answeredTerm = new FlagTerm(new Flags(Flags.Flag.ANSWERED), false); if (searchTerm == null) { searchTerm = answeredTerm; if (supportedFlags.contains(Flags.Flag.DELETED)) { FlagTerm deletedTerm = new FlagTerm(new Flags(Flags.Flag.DELETED), false); if (searchTerm == null) { searchTerm = deletedTerm;
protected Argument flag(FlagTerm term) throws SearchException { boolean set = term.getTestSet(); Argument result = new Argument(); Flags flags = term.getFlags(); Flags.Flag[] sf = flags.getSystemFlags(); String[] uf = flags.getUserFlags(); if (sf.length == 0 && uf.length == 0) throw new SearchException("Invalid FlagTerm"); for (int i = 0; i < sf.length; i++) { if (sf[i] == Flags.Flag.DELETED) result.writeAtom(set ? "DELETED": "UNDELETED"); else if (sf[i] == Flags.Flag.ANSWERED) result.writeAtom(set ? "ANSWERED": "UNANSWERED"); else if (sf[i] == Flags.Flag.DRAFT) result.writeAtom(set ? "DRAFT": "UNDRAFT"); else if (sf[i] == Flags.Flag.FLAGGED) result.writeAtom(set ? "FLAGGED": "UNFLAGGED"); else if (sf[i] == Flags.Flag.RECENT) result.writeAtom(set ? "RECENT": "OLD"); else if (sf[i] == Flags.Flag.SEEN) result.writeAtom(set ? "SEEN": "UNSEEN"); } for (int i = 0; i < uf.length; i++) { result.writeAtom(set ? "KEYWORD" : "UNKEYWORD"); result.writeAtom(uf[i]); } return result; }
FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false); Message messages[] = inbox.search(ft);