public OutlookContactRepository(IOutlookSession session, string folderId, string folderStoreId, IDaslFilterProvider daslFilterProvider, IQueryOutlookContactItemFolderStrategy queryFolderStrategy, IComWrapperFactory comWrapperFactory, bool useDefaultFolderItemType)
        {
            if (session == null)
            {
                throw new ArgumentNullException(nameof(session));
            }
            if (daslFilterProvider == null)
            {
                throw new ArgumentNullException(nameof(daslFilterProvider));
            }
            if (queryFolderStrategy == null)
            {
                throw new ArgumentNullException(nameof(queryFolderStrategy));
            }
            if (comWrapperFactory == null)
            {
                throw new ArgumentNullException(nameof(comWrapperFactory));
            }

            _session                  = session;
            _folderId                 = folderId;
            _folderStoreId            = folderStoreId;
            _daslFilterProvider       = daslFilterProvider;
            _queryFolderStrategy      = queryFolderStrategy;
            _comWrapperFactory        = comWrapperFactory;
            _useDefaultFolderItemType = useDefaultFolderItemType;
        }
示例#2
0
        public OutlookEventRepository(
            IOutlookSession session,
            string folderId,
            string folderStoreId,
            IDateTimeRangeProvider dateTimeRangeProvider,
            EventMappingConfiguration configuration,
            IDaslFilterProvider daslFilterProvider,
            IQueryOutlookAppointmentItemFolderStrategy queryFolderStrategy,
            IComWrapperFactory comWrapperFactory)
        {
            if (session == null)
            {
                throw new ArgumentNullException(nameof(session));
            }
            if (dateTimeRangeProvider == null)
            {
                throw new ArgumentNullException(nameof(dateTimeRangeProvider));
            }
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }
            if (daslFilterProvider == null)
            {
                throw new ArgumentNullException(nameof(daslFilterProvider));
            }
            if (queryFolderStrategy == null)
            {
                throw new ArgumentNullException(nameof(queryFolderStrategy));
            }
            if (comWrapperFactory == null)
            {
                throw new ArgumentNullException(nameof(comWrapperFactory));
            }

            _session               = session;
            _folderId              = folderId;
            _folderStoreId         = folderStoreId;
            _dateTimeRangeProvider = dateTimeRangeProvider;
            _configuration         = configuration;
            _daslFilterProvider    = daslFilterProvider;
            _queryFolderStrategy   = queryFolderStrategy;
            _comWrapperFactory     = comWrapperFactory;
        }
        public OutlookTaskRepository(IOutlookSession session, string folderId, string folderStoreId, IDaslFilterProvider daslFilterProvider, TaskMappingConfiguration configuration, IQueryOutlookTaskItemFolderStrategy queryFolderStrategy, IComWrapperFactory comWrapperFactory, bool useDefaultFolderItemType)
        {
            if (session == null)
            {
                throw new ArgumentNullException(nameof(session));
            }
            if (daslFilterProvider == null)
            {
                throw new ArgumentNullException(nameof(daslFilterProvider));
            }
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }
            if (queryFolderStrategy == null)
            {
                throw new ArgumentNullException(nameof(queryFolderStrategy));
            }
            if (comWrapperFactory == null)
            {
                throw new ArgumentNullException(nameof(comWrapperFactory));
            }
            if (String.IsNullOrEmpty(folderId))
            {
                throw new ArgumentException("Argument is null or empty", nameof(folderId));
            }
            if (String.IsNullOrEmpty(folderStoreId))
            {
                throw new ArgumentException("Argument is null or empty", nameof(folderStoreId));
            }

            _session                  = session;
            _folderId                 = folderId;
            _folderStoreId            = folderStoreId;
            _daslFilterProvider       = daslFilterProvider;
            _configuration            = configuration;
            _queryFolderStrategy      = queryFolderStrategy;
            _comWrapperFactory        = comWrapperFactory;
            _useDefaultFolderItemType = useDefaultFolderItemType;
        }
        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();
        }