package com.fsck.k9.mail.store.imap; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; import static com.fsck.k9.mail.store.imap.ImapResponseParser.equalsIgnoreCase; class CapabilityResponse { private final Set<String> capabilities; private CapabilityResponse(Set<String> capabilities) { this.capabilities = Collections.unmodifiableSet(capabilities); } public static CapabilityResponse parse(List<ImapResponse> responses) { for (ImapResponse response : responses) { CapabilityResponse result; if (!response.isEmpty() && equalsIgnoreCase(response.get(0), Responses.OK) && response.isList(1)) { ImapList capabilityList = response.getList(1); result = parse(capabilityList); } else if (response.getTag() == null) { result = parse(response); } else { result = null; } if (result != null) { return result; } } return null; } static CapabilityResponse parse(ImapList capabilityList) { if (capabilityList.isEmpty() || !equalsIgnoreCase(capabilityList.get(0), Responses.CAPABILITY)) { return null; } int size = capabilityList.size(); HashSet<String> capabilities = new HashSet<>(size - 1); for (int i = 1; i < size; i++) { if (!capabilityList.isString(i)) { return null; } String uppercaseCapability = capabilityList.getString(i).toUpperCase(Locale.US); capabilities.add(uppercaseCapability); } return new CapabilityResponse(capabilities); } public Set<String> getCapabilities() { return capabilities; } }