package com.fsck.k9.mail.store.imap;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.fsck.k9.mail.store.imap.ImapResponseParser.equalsIgnoreCase;
import static com.fsck.k9.mail.store.imap.ImapUtility.getImapSequenceValues;
class CopyUidResponse {
private final Map<String, String> uidMapping;
private CopyUidResponse(Map<String, String> uidMapping) {
this.uidMapping = Collections.unmodifiableMap(uidMapping);
}
public static CopyUidResponse parse(ImapResponse response) {
if (!response.isTagged() || response.size() < 2 || !equalsIgnoreCase(response.get(0), Responses.OK) ||
!response.isList(1)) {
return null;
}
ImapList responseTextList = response.getList(1);
if (responseTextList.size() < 4 || !equalsIgnoreCase(responseTextList.get(0), Responses.COPYUID) ||
!responseTextList.isString(1) || !responseTextList.isString(2) || !responseTextList.isString(3)) {
return null;
}
List<String> sourceUids = getImapSequenceValues(responseTextList.getString(2));
List<String> destinationUids = getImapSequenceValues(responseTextList.getString(3));
int size = sourceUids.size();
if (size == 0 || size != destinationUids.size()) {
return null;
}
Map<String, String> uidMapping = new HashMap<>(size);
for (int i = 0; i < size; i++) {
String sourceUid = sourceUids.get(i);
String destinationUid = destinationUids.get(i);
uidMapping.put(sourceUid, destinationUid);
}
return new CopyUidResponse(uidMapping);
}
public Map<String, String> getUidMapping() {
return uidMapping;
}
}