Esempio n. 1
0
        public static void Initialize(NameSpace mapiNameSpace)
        {
            s_mapiNameSpace = mapiNameSpace;
            const string testerServerEmailAddress = "*****@*****.**";

            if (mapiNameSpace == null)
            {
                throw new ArgumentNullException("mapiNameSpace");
            }

            _entityMapper = new EventEntityMapper(mapiNameSpace.CurrentUser.Address, new Uri("mailto:" + testerServerEmailAddress), mapiNameSpace.Application.TimeZones.CurrentTimeZone.ID, mapiNameSpace.Application.Version);

            s_outlookFolderEntryId = ConfigurationManager.AppSettings[string.Format("{0}.OutlookFolderEntryId", Environment.MachineName)];
            s_outlookFolderStoreId = ConfigurationManager.AppSettings[string.Format("{0}.OutlookFolderStoreId", Environment.MachineName)];

            _outlookRepository = new OutlookEventRepository(mapiNameSpace, s_outlookFolderEntryId, s_outlookFolderStoreId, NullDateTimeRangeProvider.Instance);

            s_synchronizerFactory = new SynchronizerFactory(
                @"a:\invalid path",
                NullTotalProgressFactory.Instance,
                s_mapiNameSpace,
                TimeSpan.Zero,
                TimeSpan.Zero);

            s_outlookEventRepository = new OutlookEventRepository(
                s_mapiNameSpace,
                s_outlookFolderEntryId,
                s_outlookFolderStoreId,
                NullDateTimeRangeProvider.Instance);
        }
Esempio n. 2
0
        public void Initialize()
        {
            var applicationDataDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CalDavSynchronizer");

            var optionsDataAccess = new OptionsDataAccess(
                Path.Combine(
                    applicationDataDirectory,
                    ComponentContainer.GetOrCreateConfigFileName(applicationDataDirectory, "Outlook")
                    ));

            var options = optionsDataAccess.LoadOptions().Single(o => o.Name == ProfileName);

            if (ServerAdapterTypeOverride.HasValue)
            {
                options.ServerAdapterType = ServerAdapterTypeOverride.Value;
            }

            _calDavDataAccess = new CalDavDataAccess(
                new Uri(options.CalenderUrl),
                SynchronizerFactory.CreateWebDavClient(
                    options,
                    TimeSpan.FromSeconds(30),
                    new OutlookAccountPasswordProvider("Outlook", "16.0.0.4266"),
                    new GeneralOptionsDataAccess().LoadOptions()));
        }
        public ComponentContainer(Application application)
        {
            _uiService = new UiService();
            _generalOptionsDataAccess = new GeneralOptionsDataAccess();

            var generalOptions = _generalOptionsDataAccess.LoadOptions();

            FrameworkElement.LanguageProperty.OverrideMetadata(
                typeof(FrameworkElement),
                new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

            ConfigureServicePointManager(generalOptions);
            ConfigureLogLevel(generalOptions.EnableDebugLog);

            _itemChangeWatcher = new OutlookItemChangeWatcher(application.Inspectors);
            _itemChangeWatcher.ItemSavedOrDeleted += ItemChangeWatcherItemSavedOrDeleted;
            _session = application.Session;
            s_logger.Info("Startup...");

            EnsureSynchronizationContext();

            _applicationDataDirectory = Path.Combine(
                Environment.GetFolderPath(
                    generalOptions.StoreAppDataInRoamingFolder ? Environment.SpecialFolder.ApplicationData : Environment.SpecialFolder.LocalApplicationData),
                "CalDavSynchronizer");

            _optionsDataAccess = new OptionsDataAccess(
                Path.Combine(
                    _applicationDataDirectory,
                    GetOrCreateConfigFileName(_applicationDataDirectory, _session.CurrentProfileName)
                    ));

            var synchronizerFactory = new SynchronizerFactory(
                GetProfileDataDirectory,
                new TotalProgressFactory(
                    new ProgressFormFactory(),
                    int.Parse(ConfigurationManager.AppSettings["loadOperationThresholdForProgressDisplay"]),
                    ExceptionHandler.Instance),
                _session,
                TimeSpan.Parse(ConfigurationManager.AppSettings["calDavConnectTimeout"]));

            _synchronizationReportRepository = CreateSynchronizationReportRepository();

            _filteringSynchronizationReportRepository = new FilteringSynchronizationReportRepositoryWrapper(_synchronizationReportRepository);
            UpdateGeneralOptionDependencies(generalOptions);

            _filteringSynchronizationReportRepository.ReportAdded += _synchronizationReportRepository_ReportAdded;
            _scheduler = new Scheduler(
                synchronizerFactory,
                _filteringSynchronizationReportRepository,
                EnsureSynchronizationContext);
            _scheduler.SetOptions(_optionsDataAccess.LoadOptions(), generalOptions.CheckIfOnline);

            _updateChecker = new UpdateChecker(new AvailableVersionService(), () => _generalOptionsDataAccess.IgnoreUpdatesTilVersion);
            _updateChecker.NewerVersionFound += UpdateChecker_NewerVersionFound;
            _updateChecker.IsEnabled          = generalOptions.ShouldCheckForNewerVersions;

            _reportGarbageCollection = new ReportGarbageCollection(_synchronizationReportRepository, TimeSpan.FromDays(generalOptions.MaxReportAgeInDays));
        }
        public TestComponentContainer()
        {
            Application = new Application();
            Application.Session.Logon();

            _testComWrapperFactoryWrapper = new TestComWrapperFactoryWrapper(new TestComWrapperFactory(null));
            ComponentContainer            = new ComponentContainer(Application, new InMemoryGeneralOptionsDataAccess(), _testComWrapperFactoryWrapper, new TestExceptionHandlingStrategy());
            SynchronizerFactory           = ComponentContainer.GetSynchronizerFactory();
        }
 private IWebDavClient CreateWebDavClient()
 {
     return(SynchronizerFactory.CreateWebDavClient(
                _userNameTextBox.Text,
                _passwordTextBox.Text,
                TimeSpan.Parse(ConfigurationManager.AppSettings["calDavConnectTimeout"]),
                _serverAdapterTypeControl.SelectedServerAdapterType,
                _dependencies.CloseConnectionAfterEachRequest,
                _dependencies.ProxyOptions));
 }
Esempio n. 6
0
 private IWebDavClient CreateWebDavClient()
 {
     return(SynchronizerFactory.CreateWebDavClient(
                _emailAddressTextBox.Text,
                null,
                TimeSpan.Parse(ConfigurationManager.AppSettings["calDavConnectTimeout"]),
                ServerAdapterType.GoogleOAuth,
                _dependencies.CloseConnectionAfterEachRequest,
                _dependencies.ProxyOptions));
 }
Esempio n. 7
0
        public static WebClient CreateWebClientWithCredentialsAndProxy(NetworkCredential credentials, ProxyOptions proxyOptions)
        {
            var proxy = proxyOptions != null?SynchronizerFactory.CreateProxy(proxyOptions) : null;

            var client = new WebClient
            {
                Credentials = credentials,
                Proxy       = proxy
            };

            return(client);
        }
Esempio n. 8
0
 public IWebDavClient CreateWebDavClient()
 {
     return(SynchronizerFactory.CreateWebDavClient(
                _serverSettingsViewModel.UserName,
                _serverSettingsViewModel.UseAccountPassword ? _outlookAccountPasswordProvider.GetPassword(_outlookFolderViewModel.FolderAccountName) : _serverSettingsViewModel.Password,
                _serverSettingsViewModel.CalenderUrl,
                TimeSpan.Parse(ConfigurationManager.AppSettings["calDavConnectTimeout"]),
                _serverSettingsViewModel.ServerAdapterType,
                _networkSettingsViewModel.CloseConnectionAfterEachRequest,
                _networkSettingsViewModel.PreemptiveAuthentication,
                _networkSettingsViewModel.ForceBasicAuthentication,
                _networkSettingsViewModel.CreateProxyOptions()));
 }
 public void SetUp()
 {
     _synchronizerFactory = new SynchronizerFactory(
         g => @"A:\data",
         NullTotalProgressFactory.Instance,
         new OutlookSessionStub(),
         new NullDaslFilterProvider(),
         NullOutlookAccountPasswordProvider.Instance,
         new GlobalTimeZoneCache(),
         new NullQueryOutlookFolderStrategy(),
         new ExceptionHandlingStrategy(),
         new ComWrapperFactory());
 }
Esempio n. 10
0
 public IWebDavClient CreateWebDavClient()
 {
     return(SynchronizerFactory.CreateWebDavClient(
                _emailAddressTextBox.Text,
                null,
                _calenderUrlTextBox.Text,
                TimeSpan.Parse(ConfigurationManager.AppSettings["calDavConnectTimeout"]),
                ServerAdapterType.WebDavHttpClientBasedWithGoogleOAuth,
                _networkAndProxyOptions.CloseConnectionAfterEachRequest,
                _networkAndProxyOptions.PreemptiveAuthentication,
                _networkAndProxyOptions.ForceBasicAuthentication,
                _networkAndProxyOptions.ProxyOptions));
 }
Esempio n. 11
0
 private IWebDavClient CreateWebDavClient(NetworkSettingsViewModel networkSettings, GeneralOptions generalOptions)
 {
     return(SynchronizerFactory.CreateWebDavClient(
                EmailAddress,
                SecureStringUtility.ToSecureString(string.Empty),
                CalenderUrl,
                TimeSpan.Parse(ConfigurationManager.AppSettings["calDavConnectTimeout"]),
                ServerAdapterType.WebDavHttpClientBasedWithGoogleOAuth,
                networkSettings.CloseConnectionAfterEachRequest,
                networkSettings.PreemptiveAuthentication,
                networkSettings.ForceBasicAuthentication,
                networkSettings.CreateProxyOptions(),
                generalOptions.AcceptInvalidCharsInServerResponse));
 }
 public IWebDavClient CreateWebDavClient(Uri url)
 {
     return(SynchronizerFactory.CreateWebDavClient(
                _serverSettingsViewModel.UserName,
                _serverSettingsViewModel.UseAccountPassword ? _outlookAccountPasswordProvider.GetPassword(_outlookFolderViewModel.FolderAccountName) : _serverSettingsViewModel.Password,
                url.ToString(),
                TimeSpan.Parse(ConfigurationManager.AppSettings["calDavConnectTimeout"]),
                _serverSettingsViewModel.ServerAdapterType,
                _networkSettingsViewModel.CloseConnectionAfterEachRequest,
                _networkSettingsViewModel.PreemptiveAuthentication,
                _networkSettingsViewModel.ForceBasicAuthentication,
                _networkSettingsViewModel.CreateProxyOptions(),
                _generalOptions.AcceptInvalidCharsInServerResponse));
 }
 private IWebDavClient CreateWebDavClient(NetworkSettingsViewModel networkSettings, GeneralOptions generalOptions)
 {
     return(SynchronizerFactory.CreateWebDavClient(
                UserName,
                Password,
                CalenderUrl,
                TimeSpan.Parse(ConfigurationManager.AppSettings["calDavConnectTimeout"]),
                ServerAdapterType.WebDavHttpClientBased,
                networkSettings.CloseConnectionAfterEachRequest,
                networkSettings.PreemptiveAuthentication,
                networkSettings.ForceBasicAuthentication,
                networkSettings.CreateProxyOptions(),
                generalOptions.AcceptInvalidCharsInServerResponse));
 }
 private IWebDavClient CreateWebDavClient(NetworkSettingsViewModel networkSettings, GeneralOptions generalOptions, string davUrl)
 {
     return(SynchronizerFactory.CreateWebDavClient(
                UserName,
                UseAccountPassword ? _outlookAccountPasswordProvider.GetPassword(null) : Password,
                davUrl,
                generalOptions.CalDavConnectTimeout,
                ServerAdapterType.WebDavHttpClientBased,
                networkSettings.CloseConnectionAfterEachRequest,
                networkSettings.PreemptiveAuthentication,
                networkSettings.ForceBasicAuthentication,
                networkSettings.CreateProxyOptions(),
                generalOptions.AcceptInvalidCharsInServerResponse));
 }
Esempio n. 15
0
 public IWebDavClient CreateWebDavClient()
 {
     return(SynchronizerFactory.CreateWebDavClient(
                _userNameTextBox.Text,
                _useAccountPasswordCheckBox.Checked
       ? _outlookAccountPasswordProvider.GetPassword(_dependencies.FolderAccountName)
       : SecureStringUtility.ToSecureString(_passwordTextBox.Text),
                _calenderUrlTextBox.Text,
                TimeSpan.Parse(ConfigurationManager.AppSettings["calDavConnectTimeout"]),
                ServerAdapterType.WebDavHttpClientBased,
                _networkAndProxyOptions.CloseConnectionAfterEachRequest,
                _networkAndProxyOptions.PreemptiveAuthentication,
                _networkAndProxyOptions.ForceBasicAuthentication,
                _networkAndProxyOptions.ProxyOptions));
 }
 public IWebDavClient CreateWebDavClient(Uri url = null)
 {
     return(SynchronizerFactory.CreateWebDavClient(
                UserName,
                UseAccountPassword ? _outlookAccountPasswordProvider.GetPassword(FolderAccountName) : Password,
                url != null ? url.ToString() : CalenderUrl,
                _generalOptions.CalDavConnectTimeout,
                ServerAdapterType,
                CloseConnectionAfterEachRequest,
                PreemptiveAuthentication,
                ForceBasicAuthentication,
                CreateProxyOptions(),
                _generalOptions.EnableClientCertificate,
                _generalOptions.AcceptInvalidCharsInServerResponse));
 }
        public static async Task <bool> IsOnline(ProxyOptions proxyOptionsOrNull)
        {
            if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())
            {
                // Use NCSI to detect network status according to https://technet.microsoft.com/en-us/library/ee126135(v=WS.10).aspx
                // try DNS first
                try
                {
                    IPHostEntry hostEntry = await Dns.GetHostEntryAsync("dns.msftncsi.com");

                    IPAddress ipAddress = Array.Find(hostEntry.AddressList, ip => ip.AddressFamily == AddressFamily.InterNetwork);
                    if (ipAddress != null && ipAddress.ToString() == "131.107.255.255")
                    {
                        return(true);
                    }
                }
                catch (Exception)
                {
                }

                // if DNS failed, try to download the ncsi.txt
                try
                {
                    string txt;
                    using (var client = new WebClient())
                    {
                        IWebProxy proxy = (proxyOptionsOrNull != null) ? SynchronizerFactory.CreateProxy(proxyOptionsOrNull) : null;
                        client.Proxy = proxy;
                        txt          = await client.DownloadStringTaskAsync(new Uri("http://www.msftncsi.com/ncsi.txt"));
                    }

                    if (txt != "Microsoft NCSI")
                    {
                        return(false);
                    }
                    return(true);
                }
                catch (Exception)
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
Esempio n. 18
0
        public static void Initialize(NameSpace mapiNameSpace)
        {
            s_mapiNameSpace = mapiNameSpace;
            const string testerServerEmailAddress = "*****@*****.**";

            if (mapiNameSpace == null)
            {
                throw new ArgumentNullException("mapiNameSpace");
            }

            var globalTimeZoneCache = new GlobalTimeZoneCache();

            var eventMappingConfiguration = new EventMappingConfiguration();

            s_entityMapper = new EventEntityMapper(
                mapiNameSpace.CurrentUser.Address,
                new Uri("mailto:" + testerServerEmailAddress),
                mapiNameSpace.Application.TimeZones.CurrentTimeZone.ID,
                mapiNameSpace.Application.Version,
                new TimeZoneCache(null, false, globalTimeZoneCache),
                eventMappingConfiguration,
                null);

            s_outlookFolderEntryId = ConfigurationManager.AppSettings[string.Format("{0}.OutlookFolderEntryId", Environment.MachineName)];
            s_outlookFolderStoreId = ConfigurationManager.AppSettings[string.Format("{0}.OutlookFolderStoreId", Environment.MachineName)];

            var daslFilterProvider = new DaslFilterProvider(false);

            s_synchronizerFactory = new SynchronizerFactory(
                _ => @"a:\invalid path",
                NullTotalProgressFactory.Instance,
                s_mapiNameSpace,
                daslFilterProvider,
                new OutlookAccountPasswordProvider(mapiNameSpace.CurrentProfileName, mapiNameSpace.Application.Version),
                globalTimeZoneCache,
                QueryOutlookFolderByRequestingItemStrategy.Instance);

            s_outlookEventRepository = new OutlookEventRepository(
                s_mapiNameSpace,
                s_outlookFolderEntryId,
                s_outlookFolderStoreId,
                NullDateTimeRangeProvider.Instance,
                eventMappingConfiguration,
                daslFilterProvider,
                QueryOutlookFolderByRequestingItemStrategy.Instance);
        }
Esempio n. 19
0
        public void SetUp()
        {
            var profileTypeRegistry = MockRepository.GenerateStub <IProfileTypeRegistry>();

            profileTypeRegistry.Stub(_ => _.DetermineType(null)).IgnoreArguments().Return(new GenericProfile());
            _synchronizerFactory = new SynchronizerFactory(
                g => @"A:\data",
                NullTotalProgressFactory.Instance,
                new OutlookSessionStub(),
                new NullDaslFilterProvider(),
                NullOutlookAccountPasswordProvider.Instance,
                new GlobalTimeZoneCache(),
                new NullQueryOutlookFolderStrategy(),
                new ExceptionHandlingStrategy(),
                new ComWrapperFactory(),
                MockRepository.GenerateStub <IOptionsDataAccess>(),
                profileTypeRegistry);
        }
        public ComponentContainer(NameSpace session)
        {
            try
            {
                XmlConfigurator.Configure();

                _session = session;
                s_logger.Info("Startup...");

                EnsureSynchronizationContext();

                var applicationDataDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CalDavSynchronizer");

                _optionsDataAccess = new OptionsDataAccess(
                    Path.Combine(
                        applicationDataDirectory,
                        GetOrCreateConfigFileName(applicationDataDirectory, _session.CurrentProfileName)
                        ));

                var synchronizerFactory = new SynchronizerFactory(
                    applicationDataDirectory,
                    new TotalProgressFactory(
                        new ProgressFormFactory(),
                        int.Parse(ConfigurationManager.AppSettings["loadOperationThresholdForProgressDisplay"]),
                        ExceptionHandler.Instance),
                    _session,
                    TimeSpan.Parse(ConfigurationManager.AppSettings["calDavConnectTimeout"]),
                    TimeSpan.Parse(ConfigurationManager.AppSettings["calDavReadWriteTimeout"]));

                _scheduler = new Scheduler(synchronizerFactory, EnsureSynchronizationContext);
                _scheduler.SetOptions(_optionsDataAccess.LoadOptions());

                _updateChecker = new UpdateChecker(new AvailableVersionService());
                _updateChecker.NewerVersionFound += UpdateChecker_NewerVersionFound;
                _updateChecker.IsEnabled          = _optionsDataAccess.ShouldCheckForNewerVersions;
            }
            catch (Exception x)
            {
                ExceptionHandler.Instance.LogException(x, s_logger);
                throw;
            }

            s_logger.Info("Startup finnished");
        }
Esempio n. 21
0
        public void Initialize()
        {
            var applicationDataDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CalDavSynchronizer");

            var optionsDataAccess = new OptionsDataAccess(
                Path.Combine(
                    applicationDataDirectory,
                    ComponentContainer.GetOrCreateConfigFileName(applicationDataDirectory, "Outlook")
                    ));

            var options = optionsDataAccess.LoadOptions().Single(o => o.Name == ProfileName);

            _calDavDataAccess = SynchronizerFactory.CreateCalDavDataAccess(
                options.CalenderUrl,
                options.UserName,
                options.Password,
                TimeSpan.FromSeconds(30),
                options.ServerAdapterType);
        }
Esempio n. 22
0
        private void InitializeSynchronizer()
        {
            try
            {
                XmlConfigurator.Configure();

                Session = Application.Session;
                s_logger.Info("Startup...");

                EnsureSynchronizationContext();

                var applicationDataDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CalDavSynchronizer");

                OptionsDataAccess = new OptionsDataAccess(
                    Path.Combine(
                        applicationDataDirectory,
                        GetOrCreateConfigFileName(applicationDataDirectory, Session.CurrentProfileName)
                        ));

                var synchronizerFactory = new SynchronizerFactory(
                    applicationDataDirectory,
                    new TotalProgressFactory(
                        new Ui.ProgressFormFactory(),
                        int.Parse(ConfigurationManager.AppSettings["loadOperationThresholdForProgressDisplay"]),
                        ExceptionHandler.Instance),
                    Application.Session);

                Scheduler = new Scheduler(synchronizerFactory);
                Scheduler.SetOptions(OptionsDataAccess.LoadOptions());
            }
            catch (Exception x)
            {
                ExceptionHandler.Instance.LogException(x, s_logger);
                throw;
            }

            s_logger.Info("Startup finnished");
        }
Esempio n. 23
0
 public IWebProxy GetProxyIfConfigured()
 {
     return(_networkAndProxyOptions.ProxyOptions != null?SynchronizerFactory.CreateProxy(_networkAndProxyOptions.ProxyOptions) : null);
 }
        public ComponentContainer(Application application, IGeneralOptionsDataAccess generalOptionsDataAccess, IComWrapperFactory comWrapperFactory, IExceptionHandlingStrategy exceptionHandlingStrategy)
        {
            if (application == null)
            {
                throw new ArgumentNullException(nameof(application));
            }
            if (generalOptionsDataAccess == null)
            {
                throw new ArgumentNullException(nameof(generalOptionsDataAccess));
            }
            if (comWrapperFactory == null)
            {
                throw new ArgumentNullException(nameof(comWrapperFactory));
            }

            s_logger.Info("Startup...");
            s_logger.Info($"Version: {Assembly.GetExecutingAssembly().GetName().Version}");
            s_logger.Info($"Operating system: {Environment.OSVersion}");

            _profileTypeRegistry = ProfileTypeRegistry.Instance;

            if (GeneralOptionsDataAccess.WpfRenderModeSoftwareOnly)
            {
                RenderOptions.ProcessRenderMode = System.Windows.Interop.RenderMode.SoftwareOnly;
            }

            _generalOptionsDataAccess = generalOptionsDataAccess;

            _synchronizationStatus = new SynchronizationStatus();

            var generalOptions = _generalOptionsDataAccess.LoadOptions();

            _daslFilterProvider = new DaslFilterProvider(generalOptions.IncludeCustomMessageClasses);

            SetWpfLocale(generalOptions.CultureName);

            ConfigureServicePointManager(generalOptions);
            ConfigureLogLevel(generalOptions.EnableDebugLog);

            _session = application.Session;

            _outlookAccountPasswordProvider =
                string.IsNullOrEmpty(_session.CurrentProfileName)
              ? NullOutlookAccountPasswordProvider.Instance
              : new OutlookAccountPasswordProvider(_session.CurrentProfileName, application.Version);

            _globalTimeZoneCache = new GlobalTimeZoneCache();


            var applicationDataDirectoryBase = Path.Combine(
                Environment.GetFolderPath(
                    generalOptions.StoreAppDataInRoamingFolder ? Environment.SpecialFolder.ApplicationData : Environment.SpecialFolder.LocalApplicationData),
                "CalDavSynchronizer");

            string optionsFilePath;

            (_applicationDataDirectory, optionsFilePath) = GetOrCreateDataDirectory(applicationDataDirectoryBase, _session.CurrentProfileName);

            _optionsDataAccess = new OptionsDataAccess(optionsFilePath);

            _uiService = new UiService();
            var options = _optionsDataAccess.Load();

            _permanentStatusesViewModel = new PermanentStatusesViewModel(_uiService, this, options);
            _permanentStatusesViewModel.OptionsRequesting += PermanentStatusesViewModel_OptionsRequesting;

            _queryFolderStrategyWrapper = new OutlookFolderStrategyWrapper(QueryOutlookFolderByRequestingItemStrategy.Instance);

            _totalProgressFactory = new TotalProgressFactory(
                _uiService,
                generalOptions.ShowProgressBar,
                generalOptions.ThresholdForProgressDisplay,
                ExceptionHandler.Instance);


            _outlookSession      = new OutlookSession(_session);
            _synchronizerFactory = new SynchronizerFactory(
                GetProfileDataDirectory,
                _totalProgressFactory,
                _outlookSession,
                _daslFilterProvider,
                _outlookAccountPasswordProvider,
                _globalTimeZoneCache,
                _queryFolderStrategyWrapper,
                exceptionHandlingStrategy,
                comWrapperFactory,
                _optionsDataAccess,
                _profileTypeRegistry);

            _synchronizationReportRepository = CreateSynchronizationReportRepository();

            UpdateGeneralOptionDependencies(generalOptions);

            _scheduler = new Scheduler(
                _synchronizerFactory,
                this,
                EnsureSynchronizationContext,
                new FolderChangeWatcherFactory(
                    _session),
                _synchronizationStatus);

            EnsureCacheCompatibility(options);

            _availableVersionService          = new AvailableVersionService();
            _updateChecker                    = new UpdateChecker(_availableVersionService, () => _generalOptionsDataAccess.IgnoreUpdatesTilVersion);
            _updateChecker.NewerVersionFound += UpdateChecker_NewerVersionFound;
            _updateChecker.IsEnabled          = generalOptions.ShouldCheckForNewerVersions;

            _reportGarbageCollection = new ReportGarbageCollection(_synchronizationReportRepository, TimeSpan.FromDays(generalOptions.MaxReportAgeInDays));

            _trayNotifier = generalOptions.EnableTrayIcon ? new TrayNotifier(this) : NullTrayNotifer.Instance;

            try
            {
                using (var syncObjects = GenericComObjectWrapper.Create(_session.SyncObjects))
                {
                    if (syncObjects.Inner != null && syncObjects.Inner.Count > 0)
                    {
                        _syncObject = syncObjects.Inner[1];
                        if (generalOptions.TriggerSyncAfterSendReceive)
                        {
                            _syncObject.SyncEnd += SyncObject_SyncEnd;
                        }
                    }
                }
            }
            catch (COMException ex)
            {
                s_logger.Error("Can't access SyncObjects", ex);
            }

            _oneTimeTaskRunner = new OneTimeTaskRunner(_outlookSession);

            DDayICalWorkaround.DDayICalCustomization.InitializeNoThrow();
        }
 public IWebProxy GetProxyIfConfigured()
 {
     return(SynchronizerFactory.CreateProxy(CreateProxyOptions()));
 }
        public ComponentContainer(Application application)
        {
            s_logger.Info("Startup...");

            _generalOptionsDataAccess = new GeneralOptionsDataAccess();

            _synchronizationStatus = new SynchronizationStatus();

            var generalOptions = _generalOptionsDataAccess.LoadOptions();

            _daslFilterProvider = new DaslFilterProvider(generalOptions.IncludeCustomMessageClasses);

            FrameworkElement.LanguageProperty.OverrideMetadata(
                typeof(FrameworkElement),
                new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

            ConfigureServicePointManager(generalOptions);
            ConfigureLogLevel(generalOptions.EnableDebugLog);

            _session = application.Session;

            _outlookAccountPasswordProvider =
                string.IsNullOrEmpty(_session.CurrentProfileName)
              ? NullOutlookAccountPasswordProvider.Instance
              : new OutlookAccountPasswordProvider(_session.CurrentProfileName, application.Version);

            _globalTimeZoneCache = new GlobalTimeZoneCache();

            EnsureSynchronizationContext();

            _applicationDataDirectory = Path.Combine(
                Environment.GetFolderPath(
                    generalOptions.StoreAppDataInRoamingFolder ? Environment.SpecialFolder.ApplicationData : Environment.SpecialFolder.LocalApplicationData),
                "CalDavSynchronizer");

            _optionsDataAccess = new OptionsDataAccess(
                Path.Combine(
                    _applicationDataDirectory,
                    GetOrCreateConfigFileName(_applicationDataDirectory, _session.CurrentProfileName)
                    ));

            _synchronizerFactory = new SynchronizerFactory(
                GetProfileDataDirectory,
                new TotalProgressFactory(
                    new ProgressFormFactory(),
                    int.Parse(ConfigurationManager.AppSettings["loadOperationThresholdForProgressDisplay"]),
                    ExceptionHandler.Instance),
                _session,
                _daslFilterProvider,
                _outlookAccountPasswordProvider,
                _globalTimeZoneCache);

            _synchronizationReportRepository = CreateSynchronizationReportRepository();

            UpdateGeneralOptionDependencies(generalOptions);

            _scheduler = new Scheduler(
                _synchronizerFactory,
                this,
                EnsureSynchronizationContext,
                new FolderChangeWatcherFactory(
                    _session),
                _synchronizationStatus);

            var options = _optionsDataAccess.LoadOptions();

            EnsureCacheCompatibility(options);


            _profileStatusesViewModel = new ProfileStatusesViewModel(this);
            _profileStatusesViewModel.EnsureProfilesDisplayed(options);


            _availableVersionService          = new AvailableVersionService();
            _updateChecker                    = new UpdateChecker(_availableVersionService, () => _generalOptionsDataAccess.IgnoreUpdatesTilVersion);
            _updateChecker.NewerVersionFound += UpdateChecker_NewerVersionFound;
            _updateChecker.IsEnabled          = generalOptions.ShouldCheckForNewerVersions;

            _reportGarbageCollection = new ReportGarbageCollection(_synchronizationReportRepository, TimeSpan.FromDays(generalOptions.MaxReportAgeInDays));

            _trayNotifier = generalOptions.EnableTrayIcon ? new TrayNotifier(this) : NullTrayNotifer.Instance;
            _uiService    = new UiService(_profileStatusesViewModel);

            using (var syncObjects = GenericComObjectWrapper.Create(_session.SyncObjects))
            {
                if (syncObjects.Inner != null && syncObjects.Inner.Count > 0)
                {
                    _syncObject = syncObjects.Inner[1];
                    if (generalOptions.TriggerSyncAfterSendReceive)
                    {
                        _syncObject.SyncEnd += _sync_SyncEnd;
                    }
                }
            }
        }
        public async Task <ServerResources> GetServerResources()
        {
            var trimmedUrl = CalenderUrl.Trim();
            var url        = new Uri(trimmedUrl.EndsWith("/") ? trimmedUrl : trimmedUrl + "/");

            var webDavClient     = _prototypeModel.CreateWebDavClient();
            var calDavDataAccess = new CalDavDataAccess(url, webDavClient);
            var foundResources   = await calDavDataAccess.GetUserResourcesIncludingCalendarProxies(false);

            var cardDavDataAccess = new CardDavDataAccess(url, webDavClient, string.Empty, contentType => true);
            var foundAddressBooks = await cardDavDataAccess.GetUserAddressBooksNoThrow(true);

            var service = await GoogleHttpClientFactory.LoginToGoogleTasksService(EmailAddress, SynchronizerFactory.CreateProxy(_prototypeModel.CreateProxyOptions()));

            var taskLists = await service.Tasklists.List().ExecuteAsync();

            var taskListsData = taskLists?.Items.Select(i => new TaskListData(i.Id, i.Title, AccessPrivileges.All)).ToArray() ?? new TaskListData[] { };

            return(new ServerResources(foundResources.CalendarResources, foundAddressBooks, taskListsData));
        }
Esempio n. 28
0
        public async Task <ServerResources> GetServerResources(NetworkSettingsViewModel networkSettings, GeneralOptions generalOptions)
        {
            var trimmedUrl = CalenderUrl.Trim();
            var url        = new Uri(trimmedUrl.EndsWith("/") ? trimmedUrl : trimmedUrl + "/");

            var webDavClient     = CreateWebDavClient(networkSettings, generalOptions);
            var calDavDataAccess = new CalDavDataAccess(url, webDavClient);
            var foundResources   = await calDavDataAccess.GetUserResourcesNoThrow(false);

            var foundAddressBooks = new[] { new AddressBookData(new Uri("googleApi://defaultAddressBook"), "Default AddressBook") };

            var service = await GoogleHttpClientFactory.LoginToGoogleTasksService(EmailAddress, SynchronizerFactory.CreateProxy(networkSettings.CreateProxyOptions()));

            var taskLists = await service.Tasklists.List().ExecuteAsync();

            var taskListsData = taskLists?.Items.Select(i => new TaskListData(i.Id, i.Title)).ToArray() ?? new TaskListData[] { };

            return(new ServerResources(foundResources.CalendarResources, foundAddressBooks, taskListsData));
        }
        private async Task TestServerConnection()
        {
            const string connectionTestCaption = "Test settings";

            try
            {
                StringBuilder errorMessageBuilder = new StringBuilder();
                if (!ValidateCalendarUrl(errorMessageBuilder))
                {
                    MessageBox.Show(errorMessageBuilder.ToString(), "The calendar Url is invalid", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }


                var calDavDataAccess = SynchronizerFactory.CreateCalDavDataAccess(
                    _calenderUrlTextBox.Text,
                    _userNameTextBox.Text,
                    _passwordTextBox.Text,
                    TimeSpan.Parse(ConfigurationManager.AppSettings["calDavConnectTimeout"]),
                    SelectedServerAdapterType);

                var cardDavDataAccess = SynchronizerFactory.CreateCardDavDataAccess(
                    _calenderUrlTextBox.Text,
                    _userNameTextBox.Text,
                    _passwordTextBox.Text,
                    TimeSpan.Parse(ConfigurationManager.AppSettings["calDavConnectTimeout"]),
                    SelectedServerAdapterType);

                var isCalendar = await calDavDataAccess.IsResourceCalender();

                var isAddressBook = await cardDavDataAccess.IsResourceAddressBook();

                if (!isCalendar && !isAddressBook)
                {
                    MessageBox.Show("The specified Url is neither a calendar nor an addressbook!", connectionTestCaption);
                    return;
                }

                if (isCalendar && isAddressBook)
                {
                    MessageBox.Show("Ressources which are a calendar and a addressbook are not valid!", connectionTestCaption);
                    return;
                }

                bool hasError = false;
                errorMessageBuilder.Clear();

                if (isCalendar)
                {
                    hasError = await TestCalendar(calDavDataAccess, errorMessageBuilder);
                }

                if (isAddressBook)
                {
                    hasError = await TestAddressBook(cardDavDataAccess, errorMessageBuilder);
                }

                if (hasError)
                {
                    MessageBox.Show("Connection test NOT successful:" + Environment.NewLine + errorMessageBuilder.ToString(), connectionTestCaption);
                }
                else
                {
                    MessageBox.Show("Connection test successful.", connectionTestCaption);
                }
            }
            catch (Exception x)
            {
                MessageBox.Show(x.Message, connectionTestCaption);
            }
        }
Esempio n. 30
0
 public IWebProxy GetProxyIfConfigured()
 {
     return(SynchronizerFactory.CreateProxy(_networkSettingsViewModel.CreateProxyOptions()));
 }