value = true;
}
try {
final MessageManager mailbox = getSelectedMailbox(session);
for (int i = 0; i < idSet.length; i++) {
final SelectedMailbox selected = session.getSelected();
MessageRange messageSet = messageRange(selected, idSet[i], useUids);
if (messageSet != null) {
final MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
final Map<Long, Flags> flagsByUid = mailbox.setFlags(flags, value, replace, messageSet, mailboxSession);
// As the STORE command is allowed to create a new "flag/keyword", we need to send a FLAGS and PERMANENTFLAGS response before the FETCH response
// if some new flag/keyword was used
// See IMAP-303
if (selected.hasNewApplicableFlags()) {
flags(responder, selected);
permanentFlags(responder, mailbox.getMetaData(false, mailboxSession, FetchGroup.NO_COUNT), selected);
selected.resetNewApplicableFlags();
}
if (!silent) {
for (Map.Entry<Long, Flags> entry : flagsByUid.entrySet()) {
final long uid = entry.getKey();
final int msn = selected.msn(uid);
if (msn == SelectedMailbox.NO_SUCH_MESSAGE)
throw new MailboxException("No message found with uid " + uid);
final Flags resultFlags = entry.getValue();
final Long resultUid;
if (useUids) {
resultUid = uid;
} else {
resultUid = null;
}
if (selected.isRecent(uid)) {
resultFlags.add(Flags.Flag.RECENT);
}
final FetchResponse response = new FetchResponse(msn, resultFlags, resultUid, null, null, null, null, null, null);
responder.respond(response);