private void GetAccountSettings()
 {
     _getAccountSettingsCommand.SetCanExecute(false);
     try
     {
         var serverAccountSettings = _outlookAccountPasswordProvider.GetAccountServerSettings(_currentOptions.FolderAccountName);
         EmailAddress = serverAccountSettings.EmailAddress;
         string path = !string.IsNullOrEmpty(CalenderUrl) ? new Uri(CalenderUrl).AbsolutePath : string.Empty;
         bool   success;
         var    dnsDiscoveredUrl = OptionTasks.DoSrvLookup(EmailAddress, OlItemType.olAppointmentItem, out success);
         CalenderUrl        = success ? dnsDiscoveredUrl : "https://" + serverAccountSettings.ServerString + path;
         UserName           = serverAccountSettings.UserName;
         UseAccountPassword = true;
     }
     catch (Exception x)
     {
         s_logger.Error("Exception while getting account settings.", x);
         string message = null;
         for (Exception ex = x; ex != null; ex = ex.InnerException)
         {
             message += ex.Message + Environment.NewLine;
         }
         MessageBox.Show(message, "Account settings");
     }
     finally
     {
         _getAccountSettingsCommand.SetCanExecute(true);
     }
 }
        public async Task <ServerResources> GetServerResources(NetworkSettingsViewModel networkSettings, GeneralOptions generalOptions)
        {
            string caldavUrlString;
            string carddavUrlString;

            if (string.IsNullOrEmpty(CalenderUrl) && !string.IsNullOrEmpty(EmailAddress))
            {
                bool success;
                caldavUrlString  = OptionTasks.DoSrvLookup(EmailAddress, OlItemType.olAppointmentItem, out success);
                carddavUrlString = OptionTasks.DoSrvLookup(EmailAddress, OlItemType.olContactItem, out success);
            }
            else
            {
                caldavUrlString  = CalenderUrl;
                carddavUrlString = CalenderUrl;
            }

            var trimmedCaldavUrl = caldavUrlString.Trim();
            var caldavUrl        = new Uri(trimmedCaldavUrl.EndsWith("/") ? trimmedCaldavUrl : trimmedCaldavUrl + "/");

            var trimmedCarddavUrl = carddavUrlString.Trim();
            var carddavUrl        = new Uri(trimmedCarddavUrl.EndsWith("/") ? trimmedCarddavUrl : trimmedCarddavUrl + "/");

            var webDavClientCaldav  = CreateWebDavClient(networkSettings, generalOptions, trimmedCaldavUrl);
            var webDavClientCarddav = CreateWebDavClient(networkSettings, generalOptions, trimmedCarddavUrl);
            var calDavDataAccess    = new CalDavDataAccess(caldavUrl, webDavClientCaldav);
            var cardDavDataAccess   = new CardDavDataAccess(carddavUrl, webDavClientCarddav);

            return(await GetUserResources(calDavDataAccess, cardDavDataAccess));
        }
        public bool Validate(StringBuilder errorMessageBuilder)
        {
            var result = OptionTasks.ValidateWebDavUrl(CalenderUrl, errorMessageBuilder, true);

            result &= OptionTasks.ValidateEmailAddress(errorMessageBuilder, EmailAddress);
            return(result);
        }
        public Options[] ShowWpfOptions(Guid?initialSelectedProfileId, GeneralOptions generalOptions, Options[] options)
        {
            string[] categories;
            using (var categoriesWrapper = GenericComObjectWrapper.Create(_session.Categories))
            {
                categories = categoriesWrapper.Inner.ToSafeEnumerable <Category>().Select(c => c.Name).ToArray();
            }

            var faultFinder = generalOptions.FixInvalidSettings ? new SettingsFaultFinder(EnumDisplayNameProvider.Instance) : NullSettingsFaultFinder.Instance;

            var optionTasks = new OptionTasks(_session, EnumDisplayNameProvider.Instance, faultFinder);

            var viewOptions = new ViewOptions(generalOptions.EnableAdvancedView);
            var viewModel   = new OptionsCollectionViewModel(
                generalOptions.ExpandAllSyncProfiles,
                GetProfileDataDirectory,
                _uiService,
                optionTasks,
                p => ProfileTypeRegistry.Create(p, _outlookAccountPasswordProvider, categories, optionTasks, faultFinder, generalOptions, viewOptions),
                viewOptions);

            _currentVisibleOptionsFormOrNull = viewModel;

            viewModel.SetOptionsCollection(options, initialSelectedProfileId);

            if (_uiService.ShowOptions(viewModel))
            {
                _optionsDataAccess.EnsureBackupExists("SimplifiedUi");
                return(viewModel.GetOptionsCollection());
            }
            else
            {
                return(null);
            }
        }
示例#5
0
        private async void TestConnectionAsync(string testUrl)
        {
            _testConnectionCommand.SetCanExecute(false);
            _doAutoDiscoveryCommand.SetCanExecute(false);
            try
            {
                var newUrl = await OptionTasks.TestGoogleConnection(_currentOptions, _settingsFaultFinder, testUrl);

                if (newUrl != testUrl)
                {
                    CalenderUrl = newUrl;
                }
            }
            catch (Exception x)
            {
                s_logger.Error("Exception while testing the connection.", x);
                string message = null;
                for (var ex = x; ex != null; ex = ex.InnerException)
                {
                    message += ex.Message + Environment.NewLine;
                }
                MessageBox.Show(message, OptionTasks.ConnectionTestCaption);
            }
            finally
            {
                _testConnectionCommand.SetCanExecute(true);
                _doAutoDiscoveryCommand.SetCanExecute(true);
            }
        }
示例#6
0
        public async Task <ServerResources> GetServerResources()
        {
            string caldavUrlString;
            string carddavUrlString;

            if (string.IsNullOrEmpty(CalenderUrl) && !string.IsNullOrEmpty(EmailAddress))
            {
                bool success;
                caldavUrlString  = OptionTasks.DoSrvLookup(EmailAddress, OlItemType.olAppointmentItem, out success);
                carddavUrlString = OptionTasks.DoSrvLookup(EmailAddress, OlItemType.olContactItem, out success);
            }
            else
            {
                caldavUrlString  = CalenderUrl;
                carddavUrlString = CalenderUrl;
            }

            var trimmedCaldavUrl = caldavUrlString.Trim();
            var caldavUrl        = new Uri(trimmedCaldavUrl.EndsWith("/") ? trimmedCaldavUrl : trimmedCaldavUrl + "/");

            var trimmedCarddavUrl = carddavUrlString.Trim();
            var carddavUrl        = new Uri(trimmedCarddavUrl.EndsWith("/") ? trimmedCarddavUrl : trimmedCarddavUrl + "/");

            var webDavClientCaldav  = _prototypeModel.CreateWebDavClient(new Uri(trimmedCaldavUrl));
            var webDavClientCarddav = _prototypeModel.CreateWebDavClient(new Uri(trimmedCarddavUrl));
            var calDavDataAccess    = new CalDavDataAccess(caldavUrl, webDavClientCaldav);
            var cardDavDataAccess   = new CardDavDataAccess(carddavUrl, webDavClientCarddav, string.Empty, contentType => true);

            return(await GetUserResources(calDavDataAccess, cardDavDataAccess));
        }
示例#7
0
 private void CoerceMappingConfiguration()
 {
     MappingConfigurationViewModel = OptionTasks.CoerceMappingConfiguration(
         MappingConfigurationViewModel,
         _outlookFolderViewModel.OutlookFolderType,
         _serverSettingsViewModel.IsGoogle,
         _mappingConfigurationViewModelFactory);
 }
        public bool Validate(StringBuilder errorMessageBuilder)
        {
            bool result = true;

            if (_serverAdapterType != ServerAdapterType.GoogleTaskApi)
            {
                result &= OptionTasks.ValidateWebDavUrl(CalenderUrl, errorMessageBuilder, true);
            }

            result &= OptionTasks.ValidateGoogleEmailAddress(errorMessageBuilder, EmailAddress);

            return(result);
        }
        public void AutoFillServerSettings(OptionsModel optionsModel)
        {
            var serverAccountSettings = _outlookAccountPasswordProvider.GetAccountServerSettings(optionsModel.FolderAccountName);

            optionsModel.EmailAddress = serverAccountSettings.EmailAddress;
            string path = !string.IsNullOrEmpty(optionsModel.CalenderUrl) ? new Uri(optionsModel.CalenderUrl).AbsolutePath : string.Empty;
            bool   success;
            var    dnsDiscoveredUrl = OptionTasks.DoSrvLookup(optionsModel.EmailAddress, OlItemType.olAppointmentItem, out success);

            optionsModel.CalenderUrl        = success ? dnsDiscoveredUrl : "https://" + serverAccountSettings.ServerString + path;
            optionsModel.UserName           = serverAccountSettings.UserName;
            optionsModel.UseAccountPassword = true;
        }
        private void _okButton_Click(object sender, EventArgs e)
        {
            StringBuilder errorMessageBuilder = new StringBuilder();

            if (OptionTasks.ValidateCategoryName(_categoryNameComboBox.Text, errorMessageBuilder))
            {
                DialogResult = DialogResult.OK;
            }
            else
            {
                MessageBox.Show(errorMessageBuilder.ToString(), "The category name is invalid", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void AddMultiple()
        {
            ProfileType?profileType;
            var         options = OptionTasks.CreateNewSynchronizationProfileOrNull(out profileType);

            if (options != null)
            {
                // ReSharper disable once PossibleInvalidOperationException
                var optionsViewModel = _optionsViewModelFactory.CreateTemplate(options, _generalOptions, profileType.Value);
                _options.Add(optionsViewModel);
                ShowProfile(options.Id);
            }
        }
        private void Add()
        {
            var options = OptionTasks.CreateNewSynchronizationProfileOrNull();

            if (options != null)
            {
                foreach (var vm in _optionsViewModelFactory.Create(new[] { options }, _generalOptions))
                {
                    _options.Add(vm);
                }
                ShowProfile(options.Id);
            }
        }
        public bool Validate(StringBuilder errorMessageBuilder)
        {
            bool result = true;

            if (_selectedFolderOrNull == null)
            {
                errorMessageBuilder.AppendLine(Strings.Get($"- There is no Outlook folder selected."));
                result = false;
            }

            if (_useWebDavCollectionSync && _selectedFolderOrNull?.DefaultItemType != OlItemType.olAppointmentItem && _selectedFolderOrNull?.DefaultItemType != OlItemType.olContactItem)
            {
                errorMessageBuilder.AppendLine(Strings.Get($"- WebDav collection sync is currently just supported for appointments and contacts."));
                result = false;
            }

            if (_isGoogle)
            {
                var serverAdapterType = ServerAdapterType;
                if (serverAdapterType != ServerAdapterType.GoogleTaskApi && serverAdapterType != ServerAdapterType.GoogleContactApi)
                {
                    result &= OptionTasks.ValidateWebDavUrl(CalenderUrl, errorMessageBuilder, true);
                }

                result &= OptionTasks.ValidateEmailAddress(errorMessageBuilder, EmailAddress, false);
            }
            else
            {
                result &= OptionTasks.ValidateWebDavUrl(CalenderUrl, errorMessageBuilder, true);
                result &= OptionTasks.ValidateEmailAddress(errorMessageBuilder, EmailAddress, true);
            }
            if (!string.IsNullOrEmpty(_profileTypeOrNull) && String.Equals(_profileTypeOrNull, "Swisscom", StringComparison.OrdinalIgnoreCase) && _selectedFolderOrNull?.DefaultItemType != OlItemType.olContactItem)
            {
                result = false;
                errorMessageBuilder.AppendLine(Strings.Get($"- The Swisscom profile is currently just supported for contacts, please choose a Contacts folder"));
            }

            if (IsChunkedSynchronizationEnabled && ChunkSize < 1)
            {
                result = false;
                errorMessageBuilder.AppendLine(Strings.Get($"- The chunk size has to be 1 or greater."));
            }

            if (MappingConfigurationModelOrNull != null)
            {
                result &= MappingConfigurationModelOrNull.Validate(errorMessageBuilder);
            }

            return(result);
        }
        public bool Validate(StringBuilder errorMessageBuilder)
        {
            bool result = true;

            if (_selectedFolderOrNull == null)
            {
                errorMessageBuilder.AppendLine(Strings.Get($"- There is no Outlook folder selected."));
                result = false;
            }

            if (_useWebDavCollectionSync && _selectedFolderOrNull?.DefaultItemType != OlItemType.olAppointmentItem && _selectedFolderOrNull?.DefaultItemType != OlItemType.olContactItem)
            {
                errorMessageBuilder.AppendLine(Strings.Get($"- WebDav collection sync ist currently just supported for appointments and contacts."));
                result = false;
            }

            if (_isGoogle)
            {
                var serverAdapterType = ServerAdapterType;
                if (serverAdapterType != ServerAdapterType.GoogleTaskApi && serverAdapterType != ServerAdapterType.GoogleContactApi)
                {
                    result &= OptionTasks.ValidateWebDavUrl(CalenderUrl, errorMessageBuilder, true);
                }

                result &= OptionTasks.ValidateGoogleEmailAddress(errorMessageBuilder, EmailAddress);
            }
            else
            {
                result &= OptionTasks.ValidateWebDavUrl(CalenderUrl, errorMessageBuilder, true);
                result &= OptionTasks.ValidateEmailAddress(errorMessageBuilder, EmailAddress);
            }

            if (IsChunkedSynchronizationEnabled && ChunkSize < 1)
            {
                result = false;
                errorMessageBuilder.AppendLine(Strings.Get($"- The chunk size hast to be 1 or greater."));
            }

            if (MappingConfigurationModelOrNull != null)
            {
                result &= MappingConfigurationModelOrNull.Validate(errorMessageBuilder);
            }

            return(result);
        }
 private async void TestConnectionAsync()
 {
     _testConnectionCommand.SetCanExecute(false);
     try
     {
         CalenderUrl = await OptionTasks.TestWebDavConnection(_currentOptions, _settingsFaultFinder, CalenderUrl, EmailAddress);
     }
     catch (Exception x)
     {
         s_logger.Error("Exception while testing the connection.", x);
         string message = null;
         for (Exception ex = x; ex != null; ex = ex.InnerException)
         {
             message += ex.Message + Environment.NewLine;
         }
         MessageBox.Show(message, OptionTasks.ConnectionTestCaption);
     }
     finally
     {
         _testConnectionCommand.SetCanExecute(true);
     }
 }
示例#16
0
        public bool Validate(StringBuilder errorMessageBuilder)
        {
            bool result = true;

            if (_selectedFolderOrNull == null)
            {
                errorMessageBuilder.AppendLine("- There is no Outlook Folder selected.");
                result = false;
            }

            if (_isGoogle)
            {
                var serverAdapterType = ServerAdapterType;
                if (serverAdapterType != ServerAdapterType.GoogleTaskApi && serverAdapterType != ServerAdapterType.GoogleContactApi)
                {
                    result &= OptionTasks.ValidateWebDavUrl(CalenderUrl, errorMessageBuilder, true);
                }

                result &= OptionTasks.ValidateGoogleEmailAddress(errorMessageBuilder, EmailAddress);
            }
            else
            {
                result &= OptionTasks.ValidateWebDavUrl(CalenderUrl, errorMessageBuilder, true);
                result &= OptionTasks.ValidateEmailAddress(errorMessageBuilder, EmailAddress);
            }

            if (IsChunkedSynchronizationEnabled && ChunkSize < 1)
            {
                result = false;
                errorMessageBuilder.AppendLine("- The chunk size hast to be 1 or greater.");
            }

            if (MappingConfigurationModelOrNull != null)
            {
                result &= MappingConfigurationModelOrNull.Validate(errorMessageBuilder);
            }

            return(result);
        }
示例#17
0
        public Options[] ShowWpfOptions(Guid?initialSelectedProfileId, GeneralOptions generalOptions, Options[] options, out OneTimeChangeCategoryTask[] oneTimeTasks)
        {
            string[] categories;
            using (var categoriesWrapper = GenericComObjectWrapper.Create(_session.Categories))
            {
                categories = categoriesWrapper.Inner.ToSafeEnumerable <Category>().Select(c => c.Name).ToArray();
            }

            var faultFinder = generalOptions.FixInvalidSettings ? new SettingsFaultFinder(EnumDisplayNameProvider.Instance) : NullSettingsFaultFinder.Instance;

            var optionTasks = new OptionTasks(_session, EnumDisplayNameProvider.Instance, faultFinder, _outlookSession);

            var viewOptions = new ViewOptions(generalOptions.EnableAdvancedView);
            OptionModelSessionData sessionData = new OptionModelSessionData(_outlookSession.GetCategories().ToDictionary(c => c.Name, _outlookSession.CategoryNameComparer));
            var viewModel = new OptionsCollectionViewModel(
                generalOptions.ExpandAllSyncProfiles,
                GetProfileDataDirectory,
                _uiService,
                optionTasks,
                _profileTypeRegistry,
                (parent, type) => type.CreateModelFactory(parent, _outlookAccountPasswordProvider, categories, optionTasks, faultFinder, generalOptions, viewOptions, sessionData),
                viewOptions);

            _currentVisibleOptionsFormOrNull = viewModel;

            viewModel.SetOptionsCollection(options, initialSelectedProfileId);

            if (_uiService.ShowOptions(viewModel))
            {
                oneTimeTasks = viewModel.GetOneTimeTasks();
                return(viewModel.GetOptionsCollection());
            }
            else
            {
                oneTimeTasks = null;
                return(null);
            }
        }
        public Options[] ShowWpfOptions(Guid?initialSelectedProfileId, GeneralOptions generalOptions, Options[] options, out OneTimeChangeCategoryTask[] oneTimeTasks)
        {
            var optionTasks = new OptionTasks(_session, EnumDisplayNameProvider.Instance, _outlookSession);

            var viewOptions = new ViewOptions(generalOptions.EnableAdvancedView);
            var categories  = _outlookSession
                              .GetCategories()
                              .GroupBy(c => c.Name, _outlookSession.CategoryNameComparer)
                              .Select(g => g.First())
                              .ToArray();
            var categoryNames = categories.Select(c => c.Name).ToArray();
            OptionModelSessionData sessionData = new OptionModelSessionData(categories.ToDictionary(c => c.Name, _outlookSession.CategoryNameComparer));
            var viewModel = new OptionsCollectionViewModel(
                generalOptions.ExpandAllSyncProfiles,
                GetProfileDataDirectory,
                _uiService,
                optionTasks,
                _profileTypeRegistry,
                (parent, type) => type.CreateModelFactory(parent, _outlookAccountPasswordProvider, categoryNames, optionTasks, generalOptions, viewOptions, sessionData),
                viewOptions);

            _currentVisibleOptionsFormOrNull = viewModel;

            viewModel.SetOptionsCollection(options, initialSelectedProfileId);

            if (_uiService.ShowOptions(viewModel))
            {
                oneTimeTasks = viewModel.GetOneTimeTasks();
                return(viewModel.GetOptionsCollection());
            }
            else
            {
                oneTimeTasks = null;
                return(null);
            }
        }
示例#19
0
 private async void CreateDavResource()
 {
     _testConnectionCommand.SetCanExecute(false);
     _createDavResourceCommand.SetCanExecute(false);
     try
     {
         CalenderUrl = await OptionTasks.CreateDavResource(_model, CalenderUrl);
     }
     catch (Exception x)
     {
         s_logger.Error("Exception while adding a DAV resource.", x);
         string message = null;
         for (Exception ex = x; ex != null; ex = ex.InnerException)
         {
             message += ex.Message + Environment.NewLine;
         }
         MessageBox.Show(message, OptionTasks.CreateDavResourceCaption);
     }
     finally
     {
         _testConnectionCommand.SetCanExecute(true);
         _createDavResourceCommand.SetCanExecute(true);
     }
 }
 public void UpdateFolderAccountName()
 {
     FolderAccountName = _selectedFolder != null
   ? OptionTasks.GetFolderAccountNameOrNull(_session, _selectedFolder.StoreId)
   : null;
 }