Пример #1
0
        public ExportablePsaTraceViewModel(PsaTraceInfo model)
        {
            if (model == null)
            {
                throw new ArgumentNullException("model");
            }
            this.model = model;

            foreach (PsaParametersSet set in model.Trace.ParametersSets)
            {
                ExportablePsaParametersSetViewModel vm =
                    new ExportablePsaParametersSetViewModel(set);
                RegisterExportableChild(vm);
                parametersSets.Add(vm);
            }
            containsUnrecognizedData = IsThereUnrecognizedData(model.Trace);
            if (containsUnrecognizedData)
            {
                SynchronizationStatus.Update(DataSynchronizationStatus.DataUnsupported);
            }
            else
            {
                SynchronizationStatus.Update(DataSynchronizationStatus.InProgress);
            }
        }
 private SynchronizationModel GetResponse(
     string message               = "",
     int updated                  = 0,
     SynchronizationState state   = SynchronizationState.Finished,
     SynchronizationStatus status = SynchronizationStatus.Success) =>
 new SynchronizationModel
 {
     Logs            = { message },
     ProductsUpdated = updated,
     Status          = status,
     State           = state,
 };
Пример #3
0
        public void TerminateTask(int galleryId, string taskId)
        {
            ISynchronizationStatus synchStatus = SynchronizationStatus.GetInstance(galleryId);

            try
            {
                synchStatus.CancelSynchronization(taskId);
            }
            catch (Exception ex)
            {
                AppErrorController.LogError(ex);
                throw;
            }
        }
Пример #4
0
        public void UpdateStatus(string id, SynchronizationStatus status)
        {
            var objectId = new ObjectId(id);
            var filter   = Builders <BsonDocument> .Filter.Eq("_id", objectId);

            var update = Builders <BsonDocument> .Update.Set("Status", status.ToString());

            var doc = base.collection.FindOneAndUpdate(filter, update);
            var dto = BsonSerializer.Deserialize <SynchronizationDto>(doc);

            if (dto.Status == status)
            {
                throw new StatusNotChangedException($"Status is already {status}");
            }
        }
Пример #5
0
        public async void SetSynchronizationStatus(ISynchronization sync, SynchronizationStatus status, string additionalInfo = null)
        {
            var    uri  = new Uri(this.syncUri, sync.Id + "/status");
            string body = $@"{{""Status"":""{status}""}}";

            Logging.Log().Debug($"Sending HTTP PUT request to {uri} with body {body}");

            var content = new StringContent(body, Encoding.UTF8, "application/json");

            var response = await this.httpClient.PutAsync(uri, content);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new StatusNotChangedException(response.ReasonPhrase);
            }
        }
        private void OnStatusChanged(object sender, ApiStatus status)
        {
            switch (status)
            {
            case ApiStatus.Running:
                if (Synchronization == SynchronizationStatus.Pending)
                {
                    Synchronization = SynchronizationStatus.Running;
                }
                break;

            case ApiStatus.Stopped:
                StopSynchronization();
                break;
            }
        }
        public void StartSynchronization()
        {
            if (Synchronization != SynchronizationStatus.Stopped || !IsApiAttached)
            {
                return;
            }

            _eliteAPI.StatusChanged       += OnStatusChanged;
            _eliteAPI.GameEvents.LoadGame += GameOnLoadGameAsync;

            _eliteAPI.PlayerEvents.Commander    += PlayerOnCommander;
            _eliteAPI.PlayerEvents.NewCommander += PlayerOnNewCommander;
            _eliteAPI.PlayerEvents.Friends      += PlayerOnFriendsAsync;
            _eliteAPI.PlayerEvents.Statistics   += PlayerOnStatisticsAsync;
            _eliteAPI.PlayerEvents.Rank         += PlayerOnRankAsync;
            _eliteAPI.PlayerEvents.Promotion    += PlayerOnPromotionAsync;
            _eliteAPI.PlayerEvents.Progress     += PlayerOnProgressAsync;
            _eliteAPI.PlayerEvents.Reputation   += PlayerOnReputationAsync;

            _eliteAPI.PowerplayEvents.Powerplay += PowerplayOnPowerplayAsync;

            _eliteAPI.TravelEvents.FsdJump  += TravelOnFsdJumpAsync;
            _eliteAPI.TravelEvents.Location += TravelOnLocationAsync;
            _eliteAPI.TravelEvents.Docked   += TravelOnDockedAsync;

            _eliteAPI.StationEvents.EngineerProgress += StationOnEngineerProgressAsync;
            _eliteAPI.StationEvents.ShipyardBuy      += StationOnShipyardBuyAsync;
            _eliteAPI.StationEvents.ShipyardNew      += StationOnShipyardNewAsync;
            _eliteAPI.StationEvents.SetUserShipName  += StationOnSetUserShipNameAsync;
            _eliteAPI.StationEvents.ShipyardSwap     += StationOnShipyardSwapAsync;
            _eliteAPI.StationEvents.ShipyardTransfer += StationEventsOnShipyardTransferAsync;

            _eliteAPI.ShipEvents.Loadout += ShipEventsOnLoadoutAsync;

            _eliteAPI.CombatEvents.Died               += CombatEventsOnDiedAsync;
            _eliteAPI.CombatEvents.Interdicted        += CombatEventsOnInterdictedAsync;
            _eliteAPI.CombatEvents.Interdiction       += CombatEventsOnInterdictionAsync;
            _eliteAPI.CombatEvents.EscapeInterdiction += CombatEventsOnEscapeInterdictionAsync;
            _eliteAPI.CombatEvents.PvpKill            += CombatEventsOnPvpKillAsync;

            _eliteAPI.Start();

            Synchronization = _eliteAPI.Status == ApiStatus.Running
                ? SynchronizationStatus.Running
                : SynchronizationStatus.Pending;
        }
Пример #8
0
        public SynchStatusWebEntity GetCurrentStatus(int galleryId)
        {
            ISynchronizationStatus synchStatus = SynchronizationStatus.GetInstance(galleryId);

            try
            {
                SynchStatusWebEntity synchStatusWeb = new SynchStatusWebEntity();

                synchStatusWeb.SynchId          = synchStatus.SynchId;
                synchStatusWeb.TotalFileCount   = synchStatus.TotalFileCount;
                synchStatusWeb.CurrentFileIndex = synchStatus.CurrentFileIndex + 1;

                if ((synchStatus.CurrentFilePath != null) && (synchStatus.CurrentFileName != null))
                {
                    synchStatusWeb.CurrentFile = System.IO.Path.Combine(synchStatus.CurrentFilePath, synchStatus.CurrentFileName);
                }

                synchStatusWeb.Status          = synchStatus.Status.ToString();
                synchStatusWeb.StatusForUI     = GetFriendlyStatusText(synchStatus.Status);
                synchStatusWeb.PercentComplete = CalculatePercentComplete(synchStatus);

                // Update the Skipped Files, but only when the synch is complete.
                lock (synchStatus)
                {
                    if (synchStatus.Status == SynchronizationState.Complete)
                    {
                        if (synchStatus.SkippedMediaObjects.Count > GlobalConstants.MaxNumberOfSkippedObjectsToDisplayAfterSynch)
                        {
                            // We have a large number of skipped media objects. We don't want to send it all to the browsers, because it might take
                            // too long or cause an error if it serializes to a string longer than int.MaxValue, so let's trim it down.
                            synchStatus.SkippedMediaObjects.RemoveRange(GlobalConstants.MaxNumberOfSkippedObjectsToDisplayAfterSynch,
                                                                        synchStatus.SkippedMediaObjects.Count -
                                                                        GlobalConstants.MaxNumberOfSkippedObjectsToDisplayAfterSynch);
                        }
                        synchStatusWeb.SkippedFiles = synchStatus.SkippedMediaObjects;
                    }
                }
                return(synchStatusWeb);
            }
            catch (Exception ex)
            {
                AppErrorController.LogError(ex, synchStatus.GalleryId);
                throw;
            }
        }
        public void StopSynchronization()
        {
            if (Synchronization == SynchronizationStatus.Stopped)
            {
                return;
            }

            _eliteAPI.StatusChanged       -= OnStatusChanged;
            _eliteAPI.GameEvents.LoadGame -= GameOnLoadGameAsync;

            _eliteAPI.PlayerEvents.Commander    -= PlayerOnCommander;
            _eliteAPI.PlayerEvents.NewCommander -= PlayerOnNewCommander;
            _eliteAPI.PlayerEvents.Friends      -= PlayerOnFriendsAsync;
            _eliteAPI.PlayerEvents.Statistics   -= PlayerOnStatisticsAsync;
            _eliteAPI.PlayerEvents.Rank         -= PlayerOnRankAsync;
            _eliteAPI.PlayerEvents.Promotion    -= PlayerOnPromotionAsync;
            _eliteAPI.PlayerEvents.Progress     -= PlayerOnProgressAsync;
            _eliteAPI.PlayerEvents.Reputation   -= PlayerOnReputationAsync;

            _eliteAPI.PowerplayEvents.Powerplay -= PowerplayOnPowerplayAsync;

            _eliteAPI.TravelEvents.FsdJump  -= TravelOnFsdJumpAsync;
            _eliteAPI.TravelEvents.Location -= TravelOnLocationAsync;
            _eliteAPI.TravelEvents.Docked   -= TravelOnDockedAsync;

            _eliteAPI.StationEvents.EngineerProgress -= StationOnEngineerProgressAsync;
            _eliteAPI.StationEvents.ShipyardBuy      -= StationOnShipyardBuyAsync;
            _eliteAPI.StationEvents.ShipyardNew      -= StationOnShipyardNewAsync;
            _eliteAPI.StationEvents.SetUserShipName  -= StationOnSetUserShipNameAsync;
            _eliteAPI.StationEvents.ShipyardSwap     -= StationOnShipyardSwapAsync;
            _eliteAPI.StationEvents.ShipyardTransfer -= StationEventsOnShipyardTransferAsync;

            _eliteAPI.ShipEvents.Loadout -= ShipEventsOnLoadoutAsync;

            _eliteAPI.CombatEvents.Died               -= CombatEventsOnDiedAsync;
            _eliteAPI.CombatEvents.Interdicted        -= CombatEventsOnInterdictedAsync;
            _eliteAPI.CombatEvents.Interdiction       -= CombatEventsOnInterdictionAsync;
            _eliteAPI.CombatEvents.EscapeInterdiction -= CombatEventsOnEscapeInterdictionAsync;
            _eliteAPI.CombatEvents.PvpKill            -= CombatEventsOnPvpKillAsync;

            Synchronization = SynchronizationStatus.Stopped;
        }
        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 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;
                    }
                }
            }
        }
Пример #12
0
        public static List <DynamicsMailBox> GetXrmMailBoxes(IOrganizationService service, string emailAddress, SynchronizationStatus filter = SynchronizationStatus.Any)
        {
            var qe = new QueryExpression("mailbox")
            {
                ColumnSet = new ColumnSet(true),
                TopCount  = 1
            };

            if (filter == SynchronizationStatus.UnapprovedOnly)
            {
                qe.Criteria.AddCondition(new ConditionExpression("isemailaddressapprovedbyo365admin", ConditionOperator.Equal, false));
            }
            if (filter == SynchronizationStatus.FailedOnly)
            {
                var statusFilter = new FilterExpression(LogicalOperator.Or);
                statusFilter.AddCondition(new ConditionExpression("incomingemailstatus", ConditionOperator.Equal, EmailStatus.Failure));
                statusFilter.AddCondition(new ConditionExpression("outgoingemailstatus", ConditionOperator.Equal, EmailStatus.Failure));
                statusFilter.AddCondition(new ConditionExpression("actstatus", ConditionOperator.Equal, EmailStatus.Failure));
                qe.Criteria.AddFilter(statusFilter);
            }

            var result = service.RetrieveMultiple(qe);

            return(result.Entities.Select(e => new DynamicsMailBox
            {
                EmailAddress = e.Attributes["emailaddress"].ToString(),
                MailBox = e,
                EntityType = e.LogicalName
            }).ToList());
        }
Пример #13
0
 public IndexingStatus(IndexingState state, SynchronizationStatus synchronizationStatus)
 {
     State = state;
     SynchronizationStatus = synchronizationStatus;
 }
Пример #14
0
 public IndexingStatus(IndexingState state, SynchronizationStatus synchronizationStatus)
 {
     State = state;
     SynchronizationStatus = synchronizationStatus;
 }
Пример #15
0
 public void UpdateStatus(string id, SynchronizationStatus status)
 {
     this.command.UpdateStatus(id, status);
 }
Пример #16
0
        public ComponentContainer(Application application)
        {
            s_logger.Info("Startup...");

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

            _generalOptionsDataAccess = new GeneralOptionsDataAccess();

            _synchronizationStatus = new SynchronizationStatus();

            var generalOptions = _generalOptionsDataAccess.LoadOptions();

            _daslFilterProvider = new DaslFilterProvider(generalOptions.IncludeCustomMessageClasses);

            SetWpfLocale();

            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)
                    ));
            _profileStatusesViewModel = new ProfileStatusesViewModel(this);
            _uiService = new UiService(_profileStatusesViewModel);

            _queryFolderStrategyWrapper = new OutlookFolderStrategyWrapper(QueryOutlookFolderByRequestingItemStrategy.Instance);

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


            _synchronizerFactory = new SynchronizerFactory(
                GetProfileDataDirectory,
                _totalProgressFactory,
                _session,
                _daslFilterProvider,
                _outlookAccountPasswordProvider,
                _globalTimeZoneCache,
                _queryFolderStrategyWrapper);

            _synchronizationReportRepository = CreateSynchronizationReportRepository();

            UpdateGeneralOptionDependencies(generalOptions);

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

            var options = _optionsDataAccess.Load();

            EnsureCacheCompatibility(options);


            _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;

            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);
            }

            _categorySwitcher = new CategorySwitcher(_session, _daslFilterProvider, _queryFolderStrategyWrapper);
        }