public static void MapCustomProperties2To1 (ICalendarPropertyList sourceList, GenericComObjectWrapper<UserProperties> userPropertiesWrapper, bool mapAllCustomProperties, PropertyMapping[] mappings, IEntityMappingLogger logger, ILog s_logger)
{
var alreadyMappedOutlookProperties = new HashSet<string>();
foreach (var mapping in mappings)
{
var prop = sourceList.FirstOrDefault (p => p.Name == mapping.DavProperty);
if (prop != null)
{
try
{
alreadyMappedOutlookProperties.Add(mapping.OutlookProperty);
using (var userProperty = GenericComObjectWrapper.Create (userPropertiesWrapper.Inner.Find (mapping.OutlookProperty)))
{
if (userProperty.Inner != null)
{
userProperty.Inner.Value = prop.Value;
}
else
{
using (var newUserProperty = GenericComObjectWrapper.Create (userPropertiesWrapper.Inner.Add (mapping.OutlookProperty, OlUserPropertyType.olText, true)))
{
newUserProperty.Inner.Value = prop.Value;
}
}
}
}
catch (COMException ex)
{
s_logger.Warn ("Can't set UserProperty of Item!", ex);
logger.LogMappingWarning ("Can't set UserProperty of Item!", ex);
}
}
}
if (mapAllCustomProperties)
{
foreach (var prop in sourceList.Where(p => p.Name.StartsWith("X-CALDAVSYNCHRONIZER-")))
{
var outlookProperty = prop.Name.Replace("X-CALDAVSYNCHRONIZER-", "");
if (!alreadyMappedOutlookProperties.Contains(outlookProperty))
{
try
{
using (var userProperty = GenericComObjectWrapper.Create(userPropertiesWrapper.Inner.Find(outlookProperty)))
{
if (userProperty.Inner != null)
{
userProperty.Inner.Value = prop.Value;
}
else
{
using (var newUserProperty = GenericComObjectWrapper.Create(userPropertiesWrapper.Inner.Add(outlookProperty, OlUserPropertyType.olText, true)))
{
newUserProperty.Inner.Value = prop.Value;
}
}
}
}
catch (COMException ex)
{
s_logger.Warn("Can't set UserProperty of Item!", ex);
logger.LogMappingWarning("Can't set UserProperty of Item!", ex);
}
}
}
}
}
}