private IOutlookSynchronizer CreateTaskSynchronizer(Options options, AvailableSynchronizerComponents componentsToFill) { var mappingParameters = GetMappingParameters <TaskMappingConfiguration> (options); var atypeRepository = new OutlookTaskRepository(_outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId, _daslFilterProvider); var calDavDataAccess = new CalDavDataAccess( new Uri(options.CalenderUrl), CreateWebDavClient( options.UserName, options.GetEffectivePassword(_outlookAccountPasswordProvider), options.CalenderUrl, _calDavConnectTimeout, options.ServerAdapterType, options.CloseAfterEachRequest, options.PreemptiveAuthentication, options.ForceBasicAuthentication, options.ProxyOptions)); componentsToFill.CalDavDataAccess = calDavDataAccess; var btypeRepository = new CalDavRepository( calDavDataAccess, new iCalendarSerializer(), CalDavRepository.EntityType.Todo, NullDateTimeRangeProvider.Instance, false); var outlookEventRelationDataFactory = new OutlookEventRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory <string, DateTime, TaskItemWrapper, WebResourceName, string, IICalendar> ( new TaskMapper(_outlookSession.Application.TimeZones.CurrentTimeZone.ID, mappingParameters), atypeRepository, btypeRepository, outlookEventRelationDataFactory, ExceptionHandler.Instance); var storageDataDirectory = _profileDataDirectoryFactory(options.Id); var btypeIdEqualityComparer = WebResourceName.Comparer; var atypeIdEqualityComparer = EqualityComparer <string> .Default; var synchronizer = new Synchronizer <string, DateTime, TaskItemWrapper, WebResourceName, string, IICalendar> ( atypeRepository, btypeRepository, InitialTaskSyncStateCreationStrategyFactory.Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution), new EntityRelationDataAccess <string, DateTime, OutlookEventRelationData, WebResourceName, string> (storageDataDirectory), outlookEventRelationDataFactory, new InitialTaskEntityMatcher(btypeIdEqualityComparer), atypeIdEqualityComparer, btypeIdEqualityComparer, _totalProgressFactory, ExceptionHandler.Instance); return(new OutlookSynchronizer <WebResourceName, string> (synchronizer)); }
private IOutlookSynchronizer CreateGoogleTaskSynchronizer(Options options) { var atypeRepository = new OutlookTaskRepository(_outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId, _daslFilterProvider); IWebProxy proxy = options.ProxyOptions != null?CreateProxy(options.ProxyOptions) : null; var tasksService = System.Threading.Tasks.Task.Run(() => OAuth.Google.GoogleHttpClientFactory.LoginToGoogleTasksService(options.UserName, proxy).Result).Result; TaskList taskList; try { taskList = tasksService.Tasklists.Get(options.CalenderUrl).Execute(); } catch (Google.GoogleApiException) { s_logger.ErrorFormat($"Profile '{options.Name}' (Id: '{options.Id}'): task list '{options.CalenderUrl}' not found."); throw; } var btypeRepository = new GoogleTaskRepository(tasksService, taskList); var relationDataFactory = new GoogleTaskRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory <string, DateTime, TaskItemWrapper, string, string, Task> ( new GoogleTaskMapper(), atypeRepository, btypeRepository, relationDataFactory, ExceptionHandler.Instance); var storageDataDirectory = _profileDataDirectoryFactory(options.Id); var btypeIdEqualityComparer = EqualityComparer <string> .Default; var atypeIdEqualityComparer = EqualityComparer <string> .Default; var synchronizer = new Synchronizer <string, DateTime, TaskItemWrapper, string, string, Task> ( atypeRepository, btypeRepository, InitialGoogleTaskSyncStateCreationStrategyFactory.Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution), new EntityRelationDataAccess <string, DateTime, GoogleTaskRelationData, string, string> (storageDataDirectory), relationDataFactory, new InitialGoogleTastEntityMatcher(btypeIdEqualityComparer), atypeIdEqualityComparer, btypeIdEqualityComparer, _totalProgressFactory, ExceptionHandler.Instance); return(new OutlookSynchronizer <string, string> (synchronizer)); }
private OutlookSynchronizer CreateTaskSynchronizer(Options options) { // TODO: dispose folder like it is done for events var calendarFolder = (Folder)_outlookSession.GetFolderFromID(options.OutlookFolderEntryId, options.OutlookFolderStoreId); var atypeRepository = new OutlookTaskRepository(calendarFolder, _outlookSession); var btypeRepository = new CalDavRepository( new CalDavDataAccess( new Uri(options.CalenderUrl), CreateWebDavClient( options.UserName, options.Password, _calDavConnectTimeout, options.ServerAdapterType, options.CloseAfterEachRequest, options.ProxyOptions)), new iCalendarSerializer(), CalDavRepository.EntityType.Todo, NullDateTimeRangeProvider.Instance); var outlookEventRelationDataFactory = new OutlookEventRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory <string, DateTime, TaskItemWrapper, Uri, string, IICalendar> ( new TaskMapper(_outlookSession.Application.TimeZones.CurrentTimeZone.ID), atypeRepository, btypeRepository, outlookEventRelationDataFactory, ExceptionHandler.Instance); var storageDataDirectory = _profileDataDirectoryFactory(options.Id); var btypeIdEqualityComparer = EqualityComparer <Uri> .Default; var atypeIdEqualityComparer = EqualityComparer <string> .Default; var synchronizer = new Synchronizer <string, DateTime, TaskItemWrapper, Uri, string, IICalendar> ( atypeRepository, btypeRepository, InitialTaskSyncStateCreationStrategyFactory.Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution), new EntityRelationDataAccess <string, DateTime, OutlookEventRelationData, Uri, string> (storageDataDirectory), outlookEventRelationDataFactory, new InitialTaskEntityMatcher(btypeIdEqualityComparer), atypeIdEqualityComparer, btypeIdEqualityComparer, _totalProgressFactory, ExceptionHandler.Instance); return(new OutlookSynchronizer(synchronizer, atypeRepository)); }
private void SwitchTaskCategories(ChangedOptions changedOption, string oldCategory, string newCategory) { using (var taskFolderWrapper = GenericComObjectWrapper.Create( (Folder)_session.GetFolderFromID(changedOption.New.OutlookFolderEntryId, changedOption.New.OutlookFolderStoreId))) { 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)); OutlookEventRepository.AddCategoryFilter(filterBuilder, oldCategory, false); var taskIds = OutlookTaskRepository.QueryFolder(_session, taskFolderWrapper, filterBuilder).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 OutlookSynchronizer CreateTaskSynchronizer (Options options) { // TODO: dispose folder like it is done for events var calendarFolder = (Folder) _outlookSession.GetFolderFromID (options.OutlookFolderEntryId, options.OutlookFolderStoreId); var atypeRepository = new OutlookTaskRepository (calendarFolder, _outlookSession); var btypeRepository = new CalDavRepository ( new CalDavDataAccess ( new Uri (options.CalenderUrl), CreateWebDavClient ( options.UserName, options.Password, _calDavConnectTimeout, options.ServerAdapterType, options.CloseAfterEachRequest, options.ProxyOptions)), new iCalendarSerializer(), CalDavRepository.EntityType.Todo, NullDateTimeRangeProvider.Instance); var outlookEventRelationDataFactory = new OutlookEventRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory<string, DateTime, TaskItemWrapper, Uri, string, IICalendar> ( new TaskMapper (_outlookSession.Application.TimeZones.CurrentTimeZone.ID), atypeRepository, btypeRepository, outlookEventRelationDataFactory, ExceptionHandler.Instance); var storageDataDirectory = _profileDataDirectoryFactory (options.Id); var btypeIdEqualityComparer = EqualityComparer<Uri>.Default; var atypeIdEqualityComparer = EqualityComparer<string>.Default; var synchronizer = new Synchronizer<string, DateTime, TaskItemWrapper, Uri, string, IICalendar> ( atypeRepository, btypeRepository, InitialTaskSyncStateCreationStrategyFactory.Create ( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution), new EntityRelationDataAccess<string, DateTime, OutlookEventRelationData, Uri, string> (storageDataDirectory), outlookEventRelationDataFactory, new InitialTaskEntityMatcher (btypeIdEqualityComparer), atypeIdEqualityComparer, btypeIdEqualityComparer, _totalProgressFactory, ExceptionHandler.Instance); return new OutlookSynchronizer (synchronizer, atypeRepository); }
private async Task <IOutlookSynchronizer> CreateGoogleTaskSynchronizer(Options options) { var mappingParameters = GetMappingParameters <TaskMappingConfiguration> (options); var atypeRepository = new OutlookTaskRepository(_outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId, _daslFilterProvider, mappingParameters); IWebProxy proxy = options.ProxyOptions != null?CreateProxy(options.ProxyOptions) : null; var tasksService = await OAuth.Google.GoogleHttpClientFactory.LoginToGoogleTasksService(options.UserName, proxy); TaskList taskList; try { taskList = tasksService.Tasklists.Get(options.CalenderUrl).Execute(); } catch (Google.GoogleApiException) { s_logger.ErrorFormat($"Profile '{options.Name}' (Id: '{options.Id}'): task list '{options.CalenderUrl}' not found."); throw; } var btypeRepository = new GoogleTaskRepository(tasksService, taskList); var relationDataFactory = new GoogleTaskRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory <string, DateTime, TaskItemWrapper, string, string, Task> ( new GoogleTaskMapper(), relationDataFactory, ExceptionHandler.Instance); var storageDataDirectory = _profileDataDirectoryFactory(options.Id); var btypeIdEqualityComparer = EqualityComparer <string> .Default; var atypeIdEqualityComparer = EqualityComparer <string> .Default; var atypeWriteRepository = BatchEntityRepositoryAdapter.Create(atypeRepository); var btypeWriteRepository = BatchEntityRepositoryAdapter.Create(btypeRepository); var synchronizer = new Synchronizer <string, DateTime, TaskItemWrapper, string, string, Task, int> ( atypeRepository, btypeRepository, atypeWriteRepository, btypeWriteRepository, InitialSyncStateCreationStrategyFactory <string, DateTime, TaskItemWrapper, string, string, Task> .Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution, e => new GoogleTaskConflictInitialSyncStateCreationStrategyAutomatic(e)), new EntityRelationDataAccess <string, DateTime, GoogleTaskRelationData, string, string> (storageDataDirectory), relationDataFactory, new InitialGoogleTastEntityMatcher(btypeIdEqualityComparer), atypeIdEqualityComparer, btypeIdEqualityComparer, _totalProgressFactory, ExceptionHandler.Instance, NullSynchronizationContextFactory.Instance, EqualityComparer <DateTime> .Default, EqualityComparer <string> .Default, syncStateFactory); return(new OutlookSynchronizer <string, string> (synchronizer)); }
private IOutlookSynchronizer CreateTaskSynchronizer(Options options, GeneralOptions generalOptions, AvailableSynchronizerComponents componentsToFill) { var mappingParameters = GetMappingParameters <TaskMappingConfiguration> (options); var atypeRepository = new OutlookTaskRepository(_outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId, _daslFilterProvider, mappingParameters); ICalDavDataAccess calDavDataAccess; var calendarUrl = new Uri(options.CalenderUrl); if (calendarUrl.Scheme == Uri.UriSchemeFile) { calDavDataAccess = new FileSystemDavDataAccess(calendarUrl); } else { calDavDataAccess = new CalDavDataAccess( calendarUrl, CreateWebDavClient( options.UserName, options.GetEffectivePassword(_outlookAccountPasswordProvider), options.CalenderUrl, generalOptions.CalDavConnectTimeout, options.ServerAdapterType, options.CloseAfterEachRequest, options.PreemptiveAuthentication, options.ForceBasicAuthentication, options.ProxyOptions, generalOptions.EnableClientCertificate, generalOptions.AcceptInvalidCharsInServerResponse)); } componentsToFill.CalDavDataAccess = calDavDataAccess; var btypeRepository = new CalDavRepository <int> ( calDavDataAccess, new iCalendarSerializer(), CalDavRepository.EntityType.Todo, NullDateTimeRangeProvider.Instance, false, options.IsChunkedSynchronizationEnabled ? new ChunkedExecutor(options.ChunkSize) : NullChunkedExecutor.Instance); var relationDataFactory = new TaskRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory <string, DateTime, TaskItemWrapper, WebResourceName, string, IICalendar> ( new TaskMapper(_outlookSession.Application.TimeZones.CurrentTimeZone.ID, mappingParameters), relationDataFactory, ExceptionHandler.Instance); var storageDataDirectory = _profileDataDirectoryFactory(options.Id); var btypeIdEqualityComparer = WebResourceName.Comparer; var atypeIdEqualityComparer = EqualityComparer <string> .Default; var atypeWriteRepository = BatchEntityRepositoryAdapter.Create(atypeRepository); var btypeWriteRepository = BatchEntityRepositoryAdapter.Create(btypeRepository); var synchronizer = new Synchronizer <string, DateTime, TaskItemWrapper, WebResourceName, string, IICalendar, int> ( atypeRepository, btypeRepository, atypeWriteRepository, btypeWriteRepository, InitialSyncStateCreationStrategyFactory <string, DateTime, TaskItemWrapper, WebResourceName, string, IICalendar> .Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution, e => new TaskConflictInitialSyncStateCreationStrategyAutomatic(e)), new EntityRelationDataAccess <string, DateTime, TaskRelationData, WebResourceName, string> (storageDataDirectory), relationDataFactory, new InitialTaskEntityMatcher(btypeIdEqualityComparer), atypeIdEqualityComparer, btypeIdEqualityComparer, _totalProgressFactory, ExceptionHandler.Instance, NullSynchronizationContextFactory.Instance, EqualityComparer <DateTime> .Default, EqualityComparer <string> .Default, syncStateFactory); return(new OutlookSynchronizer <WebResourceName, string> (synchronizer)); }