public Task <IReadOnlyList <EntityVersion <string, DateTime> > > GetAllVersions(IEnumerable <string> idsOfknownEntities, int context) { List <EntityVersion <string, DateTime> > tasks; Func <TaskItem, EntityVersion <string, DateTime> > selector = a => new EntityVersion <string, DateTime>(a.EntryID, a.LastModificationTime); using (var taskFolderWrapper = CreateFolderWrapper()) { bool isInstantSearchEnabled = false; try { using (var store = GenericComObjectWrapper.Create(taskFolderWrapper.Inner.Store)) { if (store.Inner != null) { isInstantSearchEnabled = store.Inner.IsInstantSearchEnabled; } } } catch (COMException) { s_logger.Info("Can't access IsInstantSearchEnabled property of store, defaulting to false."); } var filterBuilder = new StringBuilder(_daslFilterProvider.GetTaskFilter(isInstantSearchEnabled)); if (_configuration.UseTaskCategoryAsFilter) { OutlookEventRepository.AddCategoryFilter(filterBuilder, _configuration.TaskCategory, _configuration.InvertTaskCategoryFilter); } s_logger.InfoFormat("Using Outlook DASL filter: {0}", filterBuilder.ToString()); tasks = QueryFolder(_mapiNameSpace, taskFolderWrapper, filterBuilder, selector); } if (_configuration.UseTaskCategoryAsFilter) { var knownEntitesThatWereFilteredOut = idsOfknownEntities.Except(tasks.Select(e => e.Id)); tasks.AddRange( knownEntitesThatWereFilteredOut .Select(id => _mapiNameSpace.GetEntryOrNull <TaskItem>(id, _folderId, _folderStoreId)) .Where(i => i != null) .ToSafeEnumerable() .Select(selector)); } return(Task.FromResult <IReadOnlyList <EntityVersion <string, DateTime> > > (tasks)); }
public Task <IEnumerable <EntityVersion <string, DateTime> > > GetAllVersions(IEnumerable <string> idsOfknownEntities, int context, IGetVersionsLogger logger) { List <EntityVersion <string, DateTime> > tasks; using (var taskFolderWrapper = CreateFolderWrapper()) { bool isInstantSearchEnabled = false; try { using (var store = GenericComObjectWrapper.Create(taskFolderWrapper.Inner.Store)) { if (store.Inner != null) { isInstantSearchEnabled = store.Inner.IsInstantSearchEnabled; } } } catch (COMException) { s_logger.Info("Can't access IsInstantSearchEnabled property of store, defaulting to false."); } var filterBuilder = new StringBuilder(_daslFilterProvider.GetTaskFilter(isInstantSearchEnabled)); if (_configuration.UseTaskCategoryAsFilter) { OutlookEventRepository.AddCategoryFilter(filterBuilder, _configuration.TaskCategory, _configuration.InvertTaskCategoryFilter, _configuration.IncludeEmptyTaskCategoryFilter); } s_logger.DebugFormat("Using Outlook DASL filter: {0}", filterBuilder.ToString()); tasks = _queryFolderStrategy.QueryTaskFolder(_session, taskFolderWrapper.Inner, filterBuilder.ToString(), logger); } if (_configuration.IsCategoryFilterSticky && _configuration.UseTaskCategoryAsFilter) { var knownEntitesThatWereFilteredOut = idsOfknownEntities.Except(tasks.Select(e => e.Id)); tasks.AddRange( knownEntitesThatWereFilteredOut .Select(id => _session.GetTaskItemOrNull(id, _folderId, _folderStoreId)) .Where(i => i != null) .ToSafeEnumerable() .Select(t => new EntityVersion <string, DateTime> (t.EntryID, t.LastModificationTime.ToUniversalTime()))); } return(Task.FromResult <IEnumerable <EntityVersion <string, DateTime> > > (tasks)); }
private void SwitchTaskCategories(ChangedOptions changedOption, string oldCategory, string newCategory) { using (var taskFolderWrapper = GenericComObjectWrapper.Create( (Folder)_session.GetFolderFromID(changedOption.New.OutlookFolderEntryId, changedOption.New.OutlookFolderStoreId))) { s_logger.Info($"Switching category of items in folder '{taskFolderWrapper.Inner.Name}' from '{oldCategory}' to '{newCategory}', due to changes in profile '{changedOption.New.Name}' (OptionId:'{changedOption.New.Id}' FolderId:'{changedOption.New.OutlookFolderEntryId}' StoreId:'{changedOption.New.OutlookFolderStoreId}')"); var isInstantSearchEnabled = false; try { using (var store = GenericComObjectWrapper.Create(taskFolderWrapper.Inner.Store)) { if (store.Inner != null) { isInstantSearchEnabled = store.Inner.IsInstantSearchEnabled; } } } catch (COMException) { s_logger.Info("Can't access IsInstantSearchEnabled property of store, defaulting to false."); } var filterBuilder = new StringBuilder(_daslFilterProvider.GetTaskFilter(isInstantSearchEnabled)); OutlookEventRepository.AddCategoryFilter(filterBuilder, oldCategory, false, false); var taskIds = _queryFolderStrategyWrapper.QueryTaskFolder(_session, taskFolderWrapper.Inner, filterBuilder.ToString()).Select(e => e.Id); // todo concat Ids from cache foreach (var taskId in taskIds) { try { SwitchTaskCategories(changedOption, oldCategory, newCategory, taskId); } catch (Exception x) { s_logger.Error(null, x); } } } }
private void SwitchEventCategories(ChangedOptions changedOption, string oldCategory, string newCategory) { using (var calendarFolderWrapper = GenericComObjectWrapper.Create( (Folder)_session.GetFolderFromID(changedOption.New.OutlookFolderEntryId, changedOption.New.OutlookFolderStoreId))) { bool isInstantSearchEnabled = false; try { using (var store = GenericComObjectWrapper.Create(calendarFolderWrapper.Inner.Store)) { if (store.Inner != null) { isInstantSearchEnabled = store.Inner.IsInstantSearchEnabled; } } } catch (COMException) { s_logger.Info("Can't access IsInstantSearchEnabled property of store, defaulting to false."); } var filterBuilder = new StringBuilder(_daslFilterProvider.GetAppointmentFilter(isInstantSearchEnabled)); OutlookEventRepository.AddCategoryFilter(filterBuilder, oldCategory, false); var eventIds = OutlookEventRepository.QueryFolder(_session, calendarFolderWrapper, filterBuilder).Select(e => e.Id); // todo concat Ids from cache foreach (var eventId in eventIds) { try { SwitchEventCategories(changedOption, oldCategory, newCategory, eventId); } catch (Exception x) { s_logger.Error(null, x); } } } }
private void SwitchCategories(ChangedOptions changedOption, string oldCategory, string newCategory) { using (var calendarFolderWrapper = GenericComObjectWrapper.Create( (Folder)_session.GetFolderFromID(changedOption.New.OutlookFolderEntryId, changedOption.New.OutlookFolderStoreId))) { var filterBuilder = new StringBuilder(OutlookEventRepository.PR_MESSAGE_CLASS_DASLFILTER); OutlookEventRepository.AddCategoryFilter(filterBuilder, oldCategory); var eventIds = OutlookEventRepository.QueryFolder(_session, calendarFolderWrapper, filterBuilder).Select(e => e.Id); // todo concat Ids from cache foreach (var eventId in eventIds) { try { SwitchCategories(changedOption, oldCategory, newCategory, eventId); } catch (Exception x) { s_logger.Error(null, x); } } } }