IMAP: Implement custom IMAP flags to keywords mapping in settings

git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@2051 3d1905a2-6b24-0410-a738-b14d5a86fcbd
This commit is contained in:
mguessan 2012-10-11 21:57:18 +00:00
parent 0cf9f1ce80
commit aa1898d138
2 changed files with 68 additions and 26 deletions

View File

@ -22,10 +22,7 @@ import davmail.ui.tray.DavGatewayTray;
import org.apache.log4j.*; import org.apache.log4j.*;
import java.io.*; import java.io.*;
import java.util.Enumeration; import java.util.*;
import java.util.Iterator;
import java.util.Properties;
import java.util.TreeSet;
/** /**
* Settings facade. * Settings facade.
@ -465,6 +462,32 @@ public final class Settings {
} }
} }
/**
* Get all properties that are in the specified scope, that is, that start with '<scope>.'.
*
* @param scope start of property name
* @return properties
*/
public static synchronized Properties getSubProperties(String scope) {
final String keyStart;
if (scope == null || scope.length() == 0) {
keyStart = "";
} else if (scope.endsWith(".")) {
keyStart = scope;
} else {
keyStart = scope + '.';
}
Properties result = new Properties();
for (Map.Entry entry : SETTINGS.entrySet()) {
String key = (String)entry.getKey();
if (key.startsWith(keyStart)) {
String value = (String)entry.getValue();
result.setProperty(key.substring(keyStart.length()), value);
}
}
return result;
}
/** /**
* Set Log4J logging level for the category * Set Log4J logging level for the category
* *

View File

@ -1472,39 +1472,58 @@ public abstract class ExchangeSession {
/** /**
* Convert keyword value to IMAP flag. * Convert keyword value to IMAP flag.
*
* @param value keyword value * @param value keyword value
* @return IMAP flag * @return IMAP flag
*/ */
public String convertKeywordToFlag(String value) { public String convertKeywordToFlag(String value) {
String result = value; // first test for keyword in settings
// convert flags to Thunderbird flags Properties flagSettings = Settings.getSubProperties("davmail.imapFlags");
Enumeration flagSettingsEnum = flagSettings.propertyNames();
while (flagSettingsEnum.hasMoreElements()) {
String key = (String) flagSettingsEnum.nextElement();
if (value.equalsIgnoreCase(flagSettings.getProperty(key))) {
return key;
}
}
ResourceBundle flagBundle = ResourceBundle.getBundle("imapflags"); ResourceBundle flagBundle = ResourceBundle.getBundle("imapflags");
Enumeration<String> flagEnumeration = flagBundle.getKeys(); Enumeration<String> flagBundleEnum = flagBundle.getKeys();
while (flagEnumeration.hasMoreElements()) { while (flagBundleEnum.hasMoreElements()) {
String key = flagEnumeration.nextElement(); String key = flagBundleEnum.nextElement();
if (value.equalsIgnoreCase(flagBundle.getString(key))) { if (value.equalsIgnoreCase(flagBundle.getString(key))) {
result = key; return key;
} }
} }
return result;
// fall back to raw value
return value;
} }
/** /**
* Convert IMAP flag to keyword value. * Convert IMAP flag to keyword value.
*
* @param value IMAP flag * @param value IMAP flag
* @return keyword value * @return keyword value
*/ */
public String convertFlagToKeyword(String value) { public String convertFlagToKeyword(String value) {
String result = value; // first test for flag in settings
// convert flags to Thunderbird flags Properties flagSettings = Settings.getSubProperties("davmail.imapFlags");
String flagValue = flagSettings.getProperty(value);
if (flagValue != null) {
return flagValue;
}
// fall back to predefined flags
ResourceBundle flagBundle = ResourceBundle.getBundle("imapflags"); ResourceBundle flagBundle = ResourceBundle.getBundle("imapflags");
try { try {
result = flagBundle.getString(value); return flagBundle.getString(value);
} catch (MissingResourceException e) { } catch (MissingResourceException e) {
// ignore // ignore
} }
return result; // fall back to raw value
return value;
} }
/** /**