private async Task <IOutlookSynchronizer> CreateEventSynchronizer(Options options, GeneralOptions generalOptions, AvailableSynchronizerComponents componentsToFill) { ICalDavDataAccess calDavDataAccess; var calendarUrl = new Uri(options.CalenderUrl); if (calendarUrl.Scheme == Uri.UriSchemeFile) { calDavDataAccess = new FileSystemDavDataAccess(calendarUrl); } else { calDavDataAccess = new CalDavDataAccess( calendarUrl, CreateWebDavClient(options, _outlookAccountPasswordProvider, generalOptions)); } componentsToFill.CalDavDataAccess = calDavDataAccess; var storageDataDirectory = _profileDataDirectoryFactory(options.Id); var entityRelationDataAccess = new EntityRelationDataAccess <AppointmentId, DateTime, OutlookEventRelationData, WebResourceName, string> (storageDataDirectory); return(await CreateEventSynchronizer(options, calDavDataAccess, entityRelationDataAccess)); }
private void EnsureCacheCompatibility(Options[] options) { var currentEntityCacheVersion = _generalOptionsDataAccess.EntityCacheVersion; if (currentEntityCacheVersion == 0 && c_requiredEntityCacheVersion == 1) { try { s_logger.InfoFormat("Converting caches from 0 to 1"); EntityCacheVersionConversion.Version0To1.Convert( options.Select(o => EntityRelationDataAccess.GetRelationStoragePath(GetProfileDataDirectory(o.Id))).ToArray()); _generalOptionsDataAccess.EntityCacheVersion = c_requiredEntityCacheVersion; } catch (Exception x) { s_logger.Error("Error during conversion. Deleting caches", x); if (DeleteCachesForProfiles(options.Select(p => Tuple.Create(p.Id, p.Name)))) { _generalOptionsDataAccess.EntityCacheVersion = c_requiredEntityCacheVersion; } } } else if (currentEntityCacheVersion != c_requiredEntityCacheVersion) { s_logger.InfoFormat("Image requires cache version '{0}',but caches have version '{1}'. Deleting caches.", c_requiredEntityCacheVersion, currentEntityCacheVersion); if (DeleteCachesForProfiles(options.Select(p => Tuple.Create(p.Id, p.Name)))) { _generalOptionsDataAccess.EntityCacheVersion = c_requiredEntityCacheVersion; } } }
private IOutlookSynchronizer CreateGoogleContactSynchronizer(Options options, AvailableSynchronizerComponents componentsToFill) { var atypeRepository = new OutlookContactRepository <GoogleContactContext> ( _outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId, _daslFilterProvider); IWebProxy proxy = options.ProxyOptions != null?CreateProxy(options.ProxyOptions) : null; var googleApiExecutor = new GoogleApiOperationExecutor( System.Threading.Tasks.Task.Run(() => OAuth.Google.GoogleHttpClientFactory.LoginToContactsService(options.UserName, proxy).Result).Result); var mappingParameters = GetMappingParameters <ContactMappingConfiguration> (options); var atypeIdEqulityComparer = EqualityComparer <string> .Default; var btypeIdEqualityComparer = EqualityComparer <string> .Default; var btypeRepository = new GoogleContactRepository(googleApiExecutor, options.UserName, mappingParameters, btypeIdEqualityComparer); var entityMapper = new GoogleContactEntityMapper(mappingParameters); var entityRelationDataFactory = new GoogleContactRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory <string, DateTime, ContactItemWrapper, string, GoogleContactVersion, GoogleContactWrapper> ( entityMapper, entityRelationDataFactory, ExceptionHandler.Instance); var storageDataDirectory = _profileDataDirectoryFactory(options.Id); var storageDataAccess = new EntityRelationDataAccess <string, DateTime, GoogleContactRelationData, string, GoogleContactVersion> (storageDataDirectory); var atypeWriteRepository = BatchEntityRepositoryAdapter.Create <ContactItemWrapper, string, DateTime, GoogleContactContext> (atypeRepository); var synchronizer = new Synchronizer <string, DateTime, ContactItemWrapper, string, GoogleContactVersion, GoogleContactWrapper, GoogleContactContext> ( atypeRepository, btypeRepository, atypeWriteRepository, btypeRepository, InitialSyncStateCreationStrategyFactory <string, DateTime, ContactItemWrapper, string, GoogleContactVersion, GoogleContactWrapper> .Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution, e => new GoogleContactConflictInitialSyncStateCreationStrategyAutomatic(e)), storageDataAccess, entityRelationDataFactory, new InitialGoogleContactEntityMatcher(btypeIdEqualityComparer), atypeIdEqulityComparer, btypeIdEqualityComparer, _totalProgressFactory, ExceptionHandler.Instance, new GoogleContactContextFactory(googleApiExecutor, btypeIdEqualityComparer, options.UserName), EqualityComparer <DateTime> .Default, new GoogleContactVersionComparer()); return(new OutlookSynchronizer <string, GoogleContactVersion> (synchronizer)); }
private OutlookSynchronizer CreateContactSynchronizer(Options options) { var atypeRepository = new OutlookContactRepository( _outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId); IEntityRepository <vCard, Uri, string> btypeRepository = new CardDavRepository( new CardDavDataAccess( new Uri(options.CalenderUrl), CreateWebDavClient( options.UserName, options.Password, _calDavConnectTimeout, options.ServerAdapterType, options.CloseAfterEachRequest, options.ProxyOptions))); var mappingParameters = GetMappingParameters <ContactMappingConfiguration> (options); var entityMapper = new ContactEntityMapper(mappingParameters); var entityRelationDataFactory = new OutlookContactRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory <string, DateTime, ContactItemWrapper, Uri, string, vCard> ( entityMapper, atypeRepository, btypeRepository, entityRelationDataFactory, ExceptionHandler.Instance); var btypeIdEqualityComparer = EqualityComparer <Uri> .Default; var atypeIdEqulityComparer = EqualityComparer <string> .Default; var storageDataDirectory = _profileDataDirectoryFactory(options.Id); var storageDataAccess = new EntityRelationDataAccess <string, DateTime, OutlookContactRelationData, Uri, string> (storageDataDirectory); var synchronizer = new Synchronizer <string, DateTime, ContactItemWrapper, Uri, string, vCard> ( atypeRepository, btypeRepository, InitialContactSyncStateCreationStrategyFactory.Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution), storageDataAccess, entityRelationDataFactory, new InitialContactEntityMatcher(btypeIdEqualityComparer), atypeIdEqulityComparer, btypeIdEqualityComparer, _totalProgressFactory, ExceptionHandler.Instance); return(new OutlookSynchronizer(synchronizer, atypeRepository)); }
private ISynchronizer <DistributionListSychronizationContext> CreateDistListSynchronizer( Options options, GeneralOptions generalOptions, CardDavEntityRepository <DistributionList, int, DistributionListSychronizationContext> btypeRepository) { var atypeRepository = new OutlookDistListRepository <DistributionListSychronizationContext> ( _outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId, _daslFilterProvider, _queryFolderStrategy); var entityMapper = new DistListEntityMapper(); var entityRelationDataFactory = new DistListRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory <string, DateTime, GenericComObjectWrapper <DistListItem>, WebResourceName, string, DistributionList, DistributionListSychronizationContext> ( entityMapper, entityRelationDataFactory, ExceptionHandler.Instance); var btypeIdEqualityComparer = WebResourceName.Comparer; var atypeIdEqulityComparer = EqualityComparer <string> .Default; var storageDataDirectory = _profileDataDirectoryFactory(options.Id); var storageDataAccess = new EntityRelationDataAccess <string, DateTime, DistListRelationData, WebResourceName, string> (storageDataDirectory, "distList"); var atypeWriteRepository = BatchEntityRepositoryAdapter.Create(atypeRepository); var btypeWriteRepository = BatchEntityRepositoryAdapter.Create(btypeRepository); var synchronizer = new Synchronizer <string, DateTime, GenericComObjectWrapper <DistListItem>, WebResourceName, string, DistributionList, DistributionListSychronizationContext> ( atypeRepository, btypeRepository, atypeWriteRepository, btypeWriteRepository, InitialSyncStateCreationStrategyFactory <string, DateTime, GenericComObjectWrapper <DistListItem>, WebResourceName, string, DistributionList, DistributionListSychronizationContext> .Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution, e => new DistListConflictInitialSyncStateCreationStrategyAutomatic(e)), storageDataAccess, entityRelationDataFactory, new InitialDistListEntityMatcher(btypeIdEqualityComparer), atypeIdEqulityComparer, btypeIdEqualityComparer, _totalProgressFactory, EqualityComparer <DateTime> .Default, EqualityComparer <string> .Default, syncStateFactory); return(synchronizer); }
private OutlookSynchronizer CreateEventSynchronizer(Options options) { var calDavDataAccess = new CalDavDataAccess( new Uri(options.CalenderUrl), CreateWebDavClient(options, _calDavConnectTimeout)); var storageDataDirectory = _profileDataDirectoryFactory(options.Id); var entityRelationDataAccess = new EntityRelationDataAccess <string, DateTime, OutlookEventRelationData, Uri, string> (storageDataDirectory); return(CreateEventSynchronizer(options, calDavDataAccess, entityRelationDataAccess)); }
private ISynchronizer CreateContactSynchronizer(Options options) { var atypeRepository = new OutlookContactRepository( _outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId); IEntityRepository <vCard, Uri, string> btypeRepository = new CardDavRepository( CreateCardDavDataAccess( options.CalenderUrl, options.UserName, options.Password, _calDavConnectTimeout, options.ServerAdapterType)); var entityRelationDataFactory = new OutlookContactRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory <string, DateTime, GenericComObjectWrapper <ContactItem>, Uri, string, vCard> ( new ContactEntityMapper(), atypeRepository, btypeRepository, entityRelationDataFactory, ExceptionHandler.Instance); var btypeIdEqualityComparer = EqualityComparer <Uri> .Default; var atypeIdEqulityComparer = EqualityComparer <string> .Default; var storageDataDirectory = Path.Combine( _applicationDataDirectory, options.Id.ToString() ); var storageDataAccess = new EntityRelationDataAccess <string, DateTime, OutlookContactRelationData, Uri, string> (storageDataDirectory); return(new Synchronizer <string, DateTime, GenericComObjectWrapper <ContactItem>, Uri, string, vCard> ( atypeRepository, btypeRepository, InitialContactSyncStateCreationStrategyFactory.Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution), storageDataAccess, entityRelationDataFactory, new InitialContactEntityMatcher(btypeIdEqualityComparer), atypeIdEqulityComparer, btypeIdEqualityComparer, _totalProgressFactory, ExceptionHandler.Instance)); }
private IOutlookSynchronizer CreateEventSynchronizer(Options options, GeneralOptions generalOptions, AvailableSynchronizerComponents componentsToFill) { var calDavDataAccess = new CalDavDataAccess( new Uri(options.CalenderUrl), CreateWebDavClient(options, _calDavConnectTimeout, _outlookAccountPasswordProvider, generalOptions)); componentsToFill.CalDavDataAccess = calDavDataAccess; var storageDataDirectory = _profileDataDirectoryFactory(options.Id); var entityRelationDataAccess = new EntityRelationDataAccess <string, DateTime, OutlookEventRelationData, WebResourceName, string> (storageDataDirectory); return(CreateEventSynchronizer(options, calDavDataAccess, entityRelationDataAccess)); }
private ISynchronizer CreateEventSynchronizer(Options options) { var storageDataDirectory = Path.Combine( _applicationDataDirectory, options.Id.ToString() ); var storageDataAccess = new EntityRelationDataAccess <string, DateTime, OutlookEventRelationData, Uri, string> (storageDataDirectory); var btypeIdEqualityComparer = EqualityComparer <Uri> .Default; var atypeIdComparer = EqualityComparer <string> .Default; var synchronizationContext = new EventSynchronizationContext( _outlookSession, storageDataAccess, options, _outlookEmailAddress, TimeSpan.Parse(ConfigurationManager.AppSettings["calDavConnectTimeout"]), TimeSpan.Parse(ConfigurationManager.AppSettings["calDavReadWriteTimeout"]), Boolean.Parse(ConfigurationManager.AppSettings["disableCertificateValidation"]), Boolean.Parse(ConfigurationManager.AppSettings["enableSsl3"]), Boolean.Parse(ConfigurationManager.AppSettings["enableTls12"]), btypeIdEqualityComparer); var syncStateFactory = new EntitySyncStateFactory <string, DateTime, AppointmentItemWrapper, Uri, string, IICalendar> ( synchronizationContext.EntityMapper, synchronizationContext.AtypeRepository, synchronizationContext.BtypeRepository, synchronizationContext.EntityRelationDataFactory, ExceptionHandler.Instance ); return(new Synchronizer <string, DateTime, AppointmentItemWrapper, Uri, string, IICalendar> ( synchronizationContext, InitialEventSyncStateCreationStrategyFactory.Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution), _totalProgressFactory, atypeIdComparer, btypeIdEqualityComparer, ExceptionHandler.Instance)); }
private ISynchronizer CreateEventSynchronizer(Options options) { var calDavDataAccess = CreateCalDavDataAccess( options.CalenderUrl, options.UserName, options.Password, _calDavConnectTimeout, options.ServerAdapterType); var storageDataDirectory = Path.Combine( _applicationDataDirectory, options.Id.ToString() ); var entityRelationDataAccess = new EntityRelationDataAccess <string, DateTime, OutlookEventRelationData, Uri, string> (storageDataDirectory); return(CreateEventSynchronizer(options, calDavDataAccess, entityRelationDataAccess)); }
public ContactSynchronizerComponents(Options options, OutlookContactRepository <ICardDavRepositoryLogger> atypeRepository, IEntityRepository <WebResourceName, string, vCard, ICardDavRepositoryLogger> btypeRepository, EntitySyncStateFactory <string, DateTime, IContactItemWrapper, WebResourceName, string, vCard, ICardDavRepositoryLogger> syncStateFactory, EntityRelationDataAccess <string, DateTime, OutlookContactRelationData, WebResourceName, string> storageDataAccess, OutlookContactRelationDataFactory entityRelationDataFactory, IEqualityComparer <WebResourceName> btypeIdEqualityComparer, EqualityComparer <string> atypeIdEqulityComparer, IWebDavClient webDavClientOrNullIfFileAccess, LoggingCardDavRepositoryDecorator repository, ContactMappingConfiguration mappingParameters, string storageDataDirectory, Uri serverUrl, ICardDavDataAccess cardDavDataAccess, IStateAwareEntityRepository <WebResourceName, string, ICardDavRepositoryLogger, string> btypeStateAwareEntityRepository, IStateTokenDataAccess <int, string> stateTokenDataAccess, EqualityComparer <string> btypeVersionComparer) { Options = options; AtypeRepository = atypeRepository; BtypeRepository = btypeRepository; SyncStateFactory = syncStateFactory; StorageDataAccess = storageDataAccess; EntityRelationDataFactory = entityRelationDataFactory; BtypeIdEqualityComparer = btypeIdEqualityComparer; AtypeIdEqulityComparer = atypeIdEqulityComparer; WebDavClientOrNullIfFileAccess = webDavClientOrNullIfFileAccess; Repository = repository; MappingParameters = mappingParameters; StorageDataDirectory = storageDataDirectory; ServerUrl = serverUrl; CardDavDataAccess = cardDavDataAccess; BtypeStateAwareEntityRepository = btypeStateAwareEntityRepository; StateTokenDataAccess = stateTokenDataAccess; BtypeVersionComparer = btypeVersionComparer; }
private IOutlookSynchronizer CreateContactSynchronizer(Options options, GeneralOptions generalOptions, AvailableSynchronizerComponents componentsToFill) { var atypeRepository = new OutlookContactRepository <int> ( _outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId, _daslFilterProvider); var cardDavDataAccess = new CardDavDataAccess( new Uri(options.CalenderUrl), CreateWebDavClient( options.UserName, options.GetEffectivePassword(_outlookAccountPasswordProvider), options.CalenderUrl, _calDavConnectTimeout, options.ServerAdapterType, options.CloseAfterEachRequest, options.PreemptiveAuthentication, options.ForceBasicAuthentication, options.ProxyOptions, generalOptions.AcceptInvalidCharsInServerResponse)); componentsToFill.CardDavDataAccess = cardDavDataAccess; IEntityRepository <vCard, WebResourceName, string, int> btypeRepository = new CardDavRepository( cardDavDataAccess); var mappingParameters = GetMappingParameters <ContactMappingConfiguration> (options); var entityMapper = new ContactEntityMapper(mappingParameters); var entityRelationDataFactory = new OutlookContactRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory <string, DateTime, ContactItemWrapper, WebResourceName, string, vCard> ( entityMapper, entityRelationDataFactory, ExceptionHandler.Instance); var btypeIdEqualityComparer = WebResourceName.Comparer; var atypeIdEqulityComparer = EqualityComparer <string> .Default; var storageDataDirectory = _profileDataDirectoryFactory(options.Id); var storageDataAccess = new EntityRelationDataAccess <string, DateTime, OutlookContactRelationData, WebResourceName, string> (storageDataDirectory); var atypeWriteRepository = BatchEntityRepositoryAdapter.Create(atypeRepository); var btypeWriteRepository = BatchEntityRepositoryAdapter.Create(btypeRepository); var synchronizer = new Synchronizer <string, DateTime, ContactItemWrapper, WebResourceName, string, vCard, int> ( atypeRepository, btypeRepository, atypeWriteRepository, btypeWriteRepository, InitialSyncStateCreationStrategyFactory <string, DateTime, ContactItemWrapper, WebResourceName, string, vCard> .Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution, e => new ContactConflictInitialSyncStateCreationStrategyAutomatic(e)), storageDataAccess, entityRelationDataFactory, new InitialContactEntityMatcher(btypeIdEqualityComparer), atypeIdEqulityComparer, btypeIdEqualityComparer, _totalProgressFactory, ExceptionHandler.Instance, NullSynchronizationContextFactory.Instance, EqualityComparer <DateTime> .Default, EqualityComparer <string> .Default); return(new OutlookSynchronizer <WebResourceName, string> (synchronizer)); }
private IOutlookSynchronizer CreateContactSynchronizer(Options options, GeneralOptions generalOptions, AvailableSynchronizerComponents componentsToFill) { var atypeRepository = new OutlookContactRepository <ICardDavRepositoryLogger> ( _outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId, _daslFilterProvider, _queryFolderStrategy); ICardDavDataAccess cardDavDataAccess; var serverUrl = new Uri(options.CalenderUrl); IWebDavClient webDavClientOrNullIfFileAccess = null; if (serverUrl.Scheme == Uri.UriSchemeFile) { cardDavDataAccess = new FileSystemDavDataAccess(serverUrl); } else { webDavClientOrNullIfFileAccess = CreateWebDavClient( options.UserName, options.GetEffectivePassword(_outlookAccountPasswordProvider), options.CalenderUrl, generalOptions.CalDavConnectTimeout, options.ServerAdapterType, options.CloseAfterEachRequest, options.PreemptiveAuthentication, options.ForceBasicAuthentication, options.ProxyOptions, generalOptions.EnableClientCertificate, generalOptions.AcceptInvalidCharsInServerResponse); cardDavDataAccess = new CardDavDataAccess( serverUrl, webDavClientOrNullIfFileAccess, contentType => contentType != "text/x-vlist"); } componentsToFill.CardDavDataAccess = cardDavDataAccess; var chunkedExecutor = options.IsChunkedSynchronizationEnabled ? new ChunkedExecutor(options.ChunkSize) : NullChunkedExecutor.Instance; var cardDavRepository = new CardDavRepository( cardDavDataAccess, chunkedExecutor); var btypeRepository = new LoggingCardDavRepositoryDecorator( cardDavRepository); componentsToFill.CardDavEntityRepository = cardDavRepository; var mappingParameters = GetMappingParameters <ContactMappingConfiguration> (options); var entityMapper = new ContactEntityMapper(mappingParameters); var entityRelationDataFactory = new OutlookContactRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory <string, DateTime, ContactItemWrapper, WebResourceName, string, vCard, ICardDavRepositoryLogger> ( entityMapper, entityRelationDataFactory, ExceptionHandler.Instance); var btypeIdEqualityComparer = WebResourceName.Comparer; var atypeIdEqulityComparer = EqualityComparer <string> .Default; var storageDataDirectory = _profileDataDirectoryFactory(options.Id); var storageDataAccess = new EntityRelationDataAccess <string, DateTime, OutlookContactRelationData, WebResourceName, string> (storageDataDirectory); var atypeWriteRepository = BatchEntityRepositoryAdapter.Create(atypeRepository); var btypeWriteRepository = BatchEntityRepositoryAdapter.Create(btypeRepository); var synchronizer = new Synchronizer <string, DateTime, ContactItemWrapper, WebResourceName, string, vCard, ICardDavRepositoryLogger> ( atypeRepository, btypeRepository, atypeWriteRepository, btypeWriteRepository, InitialSyncStateCreationStrategyFactory <string, DateTime, ContactItemWrapper, WebResourceName, string, vCard, ICardDavRepositoryLogger> .Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution, e => new ContactConflictInitialSyncStateCreationStrategyAutomatic(e)), storageDataAccess, entityRelationDataFactory, new InitialContactEntityMatcher(btypeIdEqualityComparer), atypeIdEqulityComparer, btypeIdEqualityComparer, _totalProgressFactory, EqualityComparer <DateTime> .Default, EqualityComparer <string> .Default, syncStateFactory); if (mappingParameters.MapDistributionLists) { CardDavEntityRepository <DistributionList, int, DistributionListSychronizationContext> bDistListRepository; // TODO: muss auch für das file funktionieren ICardDavDataAccess distListDataAccess = new CardDavDataAccess( serverUrl, webDavClientOrNullIfFileAccess, contentType => contentType == "text/x-vlist"); componentsToFill.DistListDataAccess = distListDataAccess; switch (mappingParameters.DistributionListType) { case DistributionListType.Sogo: bDistListRepository = new SogoDistributionListRepository(distListDataAccess, chunkedExecutor); break; default: throw new NotImplementedException($"{nameof(DistributionListType)} '{mappingParameters.DistributionListType}' not implemented."); } var distributionListSynchronizer = CreateDistListSynchronizer(options, generalOptions, bDistListRepository); return(new OutlookSynchronizer <WebResourceName, string>( new ContactAndDistListSynchronizer( synchronizer, distributionListSynchronizer, new EmailAddressCacheDataAccess(Path.Combine(storageDataDirectory, "emailAddressCache.xml")), btypeRepository, storageDataAccess, atypeRepository, _outlookSession))); } else { return(new OutlookSynchronizer <WebResourceName, string>( new ContextCreatingSynchronizerDecorator <string, DateTime, ContactItemWrapper, WebResourceName, string, vCard, ICardDavRepositoryLogger>( synchronizer, new SynchronizationContextFactory <ICardDavRepositoryLogger>(() => NullCardDavRepositoryLogger.Instance)))); } }