mirror of
https://github.com/moparisthebest/davmail
synced 2024-12-14 11:42:23 -05:00
EWS: move mailbox folder urls to DavExchangeSession
git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@1098 3d1905a2-6b24-0410-a738-b14d5a86fcbd
This commit is contained in:
parent
0bd3eba7c4
commit
d552bc2993
@ -96,17 +96,6 @@ public abstract class ExchangeSession {
|
||||
protected static final String JUNK = "Junk";
|
||||
protected static final String UNSENT = "Unsent Messages";
|
||||
|
||||
/**
|
||||
* Various standard mail boxes Urls
|
||||
*/
|
||||
protected String inboxUrl;
|
||||
protected String deleteditemsUrl;
|
||||
protected String sentitemsUrl;
|
||||
protected String sendmsgUrl;
|
||||
protected String draftsUrl;
|
||||
protected String calendarUrl;
|
||||
protected String contactsUrl;
|
||||
protected String outboxUrl;
|
||||
protected String publicFolderUrl;
|
||||
|
||||
/**
|
||||
@ -114,7 +103,7 @@ public abstract class ExchangeSession {
|
||||
*/
|
||||
protected String mailPath;
|
||||
protected String email;
|
||||
private String alias;
|
||||
protected String alias;
|
||||
protected final HttpClient httpClient;
|
||||
|
||||
private final String userName;
|
||||
@ -812,37 +801,6 @@ public abstract class ExchangeSession {
|
||||
sendMessage(properties, mailBuffer.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert logical or relative folder path to absolute folder path.
|
||||
*
|
||||
* @param folderName folder name
|
||||
* @return folder path
|
||||
*/
|
||||
public String getFolderPath(String folderName) {
|
||||
String folderPath;
|
||||
if (folderName.startsWith(INBOX)) {
|
||||
folderPath = folderName.replaceFirst(INBOX, inboxUrl);
|
||||
} else if (folderName.startsWith(TRASH)) {
|
||||
folderPath = folderName.replaceFirst(TRASH, deleteditemsUrl);
|
||||
} else if (folderName.startsWith(DRAFTS)) {
|
||||
folderPath = folderName.replaceFirst(DRAFTS, draftsUrl);
|
||||
} else if (folderName.startsWith(SENT)) {
|
||||
folderPath = folderName.replaceFirst(SENT, sentitemsUrl);
|
||||
} else if (folderName.startsWith(CALENDAR)) {
|
||||
folderPath = folderName.replaceFirst(CALENDAR, calendarUrl);
|
||||
} else if (folderName.startsWith(CONTACTS)) {
|
||||
folderPath = folderName.replaceFirst(CONTACTS, contactsUrl);
|
||||
} else if (folderName.startsWith("public")) {
|
||||
folderPath = publicFolderUrl + folderName.substring("public".length());
|
||||
// absolute folder path
|
||||
} else if (folderName.startsWith("/")) {
|
||||
folderPath = folderName;
|
||||
} else {
|
||||
folderPath = mailPath + folderName;
|
||||
}
|
||||
return folderPath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get folder object.
|
||||
* Folder name can be logical names INBOX, Drafts, Trash or calendar,
|
||||
@ -2479,46 +2437,7 @@ public abstract class ExchangeSession {
|
||||
* @return Exchange folder path
|
||||
* @throws IOException on error
|
||||
*/
|
||||
public String buildCalendarPath(String principal, String folderName) throws IOException {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
// other user calendar => replace principal folder name in mailPath
|
||||
if (principal != null && !alias.equalsIgnoreCase(principal) && !email.equalsIgnoreCase(principal)) {
|
||||
LOGGER.debug("Detected shared calendar path for principal " + principal + ", user principal is " + email);
|
||||
int index = mailPath.lastIndexOf('/', mailPath.length() - 2);
|
||||
if (index >= 0 && mailPath.endsWith("/")) {
|
||||
buffer.append(mailPath.substring(0, index + 1)).append(principal).append('/');
|
||||
} else {
|
||||
throw new DavMailException("EXCEPTION_INVALID_MAIL_PATH", mailPath);
|
||||
}
|
||||
} else if (principal != null) {
|
||||
buffer.append(mailPath);
|
||||
}
|
||||
|
||||
if (folderName != null && (folderName.startsWith("calendar") || folderName.startsWith("contacts")
|
||||
// OSX address book name
|
||||
|| folderName.startsWith("addressbook"))) {
|
||||
if (folderName.startsWith("calendar")) {
|
||||
// replace 'calendar' folder name with i18n name
|
||||
buffer.append(calendarUrl.substring(calendarUrl.lastIndexOf('/') + 1));
|
||||
} else {
|
||||
// replace 'contacts' folder name with i18n name
|
||||
buffer.append(contactsUrl.substring(contactsUrl.lastIndexOf('/') + 1));
|
||||
}
|
||||
|
||||
// sub calendar folder => append sub folder name
|
||||
int index = folderName.indexOf('/');
|
||||
if (index >= 0) {
|
||||
buffer.append(folderName.substring(index));
|
||||
}
|
||||
// replace 'inbox' folder name with i18n name
|
||||
} else if ("inbox".equals(folderName)) {
|
||||
buffer.append(inboxUrl.substring(inboxUrl.lastIndexOf('/') + 1));
|
||||
// append folder name without replace (public folder)
|
||||
} else if (folderName != null && folderName.length() > 0) {
|
||||
buffer.append(folderName);
|
||||
}
|
||||
return buffer.toString();
|
||||
}
|
||||
public abstract String buildCalendarPath(String principal, String folderName) throws IOException;
|
||||
|
||||
/**
|
||||
* Test if folderPath is inside user mailbox.
|
||||
|
@ -74,6 +74,102 @@ public class DavExchangeSession extends ExchangeSession {
|
||||
WELL_KNOWN_FOLDERS.add(Field.get("outbox").davPropertyName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Various standard mail boxes Urls
|
||||
*/
|
||||
protected String inboxUrl;
|
||||
protected String deleteditemsUrl;
|
||||
protected String sentitemsUrl;
|
||||
protected String sendmsgUrl;
|
||||
protected String draftsUrl;
|
||||
protected String calendarUrl;
|
||||
protected String contactsUrl;
|
||||
protected String outboxUrl;
|
||||
|
||||
/**
|
||||
* Convert logical or relative folder path to absolute folder path.
|
||||
*
|
||||
* @param folderName folder name
|
||||
* @return folder path
|
||||
*/
|
||||
public String getFolderPath(String folderName) {
|
||||
String folderPath;
|
||||
if (folderName.startsWith(INBOX)) {
|
||||
folderPath = folderName.replaceFirst(INBOX, inboxUrl);
|
||||
} else if (folderName.startsWith(TRASH)) {
|
||||
folderPath = folderName.replaceFirst(TRASH, deleteditemsUrl);
|
||||
} else if (folderName.startsWith(DRAFTS)) {
|
||||
folderPath = folderName.replaceFirst(DRAFTS, draftsUrl);
|
||||
} else if (folderName.startsWith(SENT)) {
|
||||
folderPath = folderName.replaceFirst(SENT, sentitemsUrl);
|
||||
} else if (folderName.startsWith(CALENDAR)) {
|
||||
folderPath = folderName.replaceFirst(CALENDAR, calendarUrl);
|
||||
} else if (folderName.startsWith(CONTACTS)) {
|
||||
folderPath = folderName.replaceFirst(CONTACTS, contactsUrl);
|
||||
} else if (folderName.startsWith("public")) {
|
||||
folderPath = publicFolderUrl + folderName.substring("public".length());
|
||||
// absolute folder path
|
||||
} else if (folderName.startsWith("/")) {
|
||||
folderPath = folderName;
|
||||
} else {
|
||||
folderPath = mailPath + folderName;
|
||||
}
|
||||
return folderPath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build Caldav calendar path for principal and folder name.
|
||||
* - prefix is current user mailbox path if principal is current user,
|
||||
* else prefix is parent folder of current user mailbox path followed by principal
|
||||
* - suffix according to well known folder names (internationalized on Exchange)
|
||||
*
|
||||
* @param principal calendar principal
|
||||
* @param folderName requested folder name
|
||||
* @return Exchange folder path
|
||||
* @throws IOException on error
|
||||
*/
|
||||
public String buildCalendarPath(String principal, String folderName) throws IOException {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
// other user calendar => replace principal folder name in mailPath
|
||||
if (principal != null && !alias.equalsIgnoreCase(principal) && !email.equalsIgnoreCase(principal)) {
|
||||
LOGGER.debug("Detected shared calendar path for principal " + principal + ", user principal is " + email);
|
||||
int index = mailPath.lastIndexOf('/', mailPath.length() - 2);
|
||||
if (index >= 0 && mailPath.endsWith("/")) {
|
||||
buffer.append(mailPath.substring(0, index + 1)).append(principal).append('/');
|
||||
} else {
|
||||
throw new DavMailException("EXCEPTION_INVALID_MAIL_PATH", mailPath);
|
||||
}
|
||||
} else if (principal != null) {
|
||||
buffer.append(mailPath);
|
||||
}
|
||||
|
||||
if (folderName != null && (folderName.startsWith("calendar") || folderName.startsWith("contacts")
|
||||
// OSX address book name
|
||||
|| folderName.startsWith("addressbook"))) {
|
||||
if (folderName.startsWith("calendar")) {
|
||||
// replace 'calendar' folder name with i18n name
|
||||
buffer.append(calendarUrl.substring(calendarUrl.lastIndexOf('/') + 1));
|
||||
} else {
|
||||
// replace 'contacts' folder name with i18n name
|
||||
buffer.append(contactsUrl.substring(contactsUrl.lastIndexOf('/') + 1));
|
||||
}
|
||||
|
||||
// sub calendar folder => append sub folder name
|
||||
int index = folderName.indexOf('/');
|
||||
if (index >= 0) {
|
||||
buffer.append(folderName.substring(index));
|
||||
}
|
||||
// replace 'inbox' folder name with i18n name
|
||||
} else if ("inbox".equals(folderName)) {
|
||||
buffer.append(inboxUrl.substring(inboxUrl.lastIndexOf('/') + 1));
|
||||
// append folder name without replace (public folder)
|
||||
} else if (folderName != null && folderName.length() > 0) {
|
||||
buffer.append(folderName);
|
||||
}
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
|
@ -458,6 +458,11 @@ public class EwsExchangeSession extends ExchangeSession {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String buildCalendarPath(String principal, String folderName) throws IOException {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void loadVtimezone() {
|
||||
throw new UnsupportedOperationException();
|
||||
|
Loading…
Reference in New Issue
Block a user