private static async Task <ServerResources> GetUserResources(CalDavDataAccess calDavDataAccess, CardDavDataAccess cardDavDataAccess) { var calDavResources = await calDavDataAccess.GetUserResourcesNoThrow(true); if (calDavResources.CalendarResources.Count == 0 && calDavResources.TaskListResources.Count == 0) { calDavResources = await calDavDataAccess.GetUserResourcesNoThrow(false); } var foundAddressBooks = await cardDavDataAccess.GetUserAddressBooksNoThrow(true); if (foundAddressBooks.Count == 0) { foundAddressBooks = await cardDavDataAccess.GetUserAddressBooksNoThrow(false); } return(new ServerResources(calDavResources.CalendarResources, foundAddressBooks, calDavResources.TaskListResources)); }
public static async Task <AutoDiscoveryResult> DoAutoDiscovery(Uri autoDiscoveryUri, IWebDavClient webDavClient, bool useWellKnownCalDav, bool useWellKnownCardDav, OlItemType selectedOutlookFolderType) { switch (selectedOutlookFolderType) { case OlItemType.olAppointmentItem: var calDavDataAccess = new CalDavDataAccess(autoDiscoveryUri, webDavClient); var foundCalendars = (await calDavDataAccess.GetUserResourcesIncludingCalendarProxies(useWellKnownCalDav)).CalendarResources; if (foundCalendars.Count == 0) { return(new AutoDiscoveryResult(null, AutoDiscoverResultStatus.NoResourcesFound)); } var selectedCalendar = SelectCalendar(foundCalendars); if (selectedCalendar != null) { return(new AutoDiscoveryResult(selectedCalendar.Uri, AutoDiscoverResultStatus.ResourceSelected)); } else { return(new AutoDiscoveryResult(null, AutoDiscoverResultStatus.UserCancelled)); } case OlItemType.olTaskItem: var calDavDataAccessTasks = new CalDavDataAccess(autoDiscoveryUri, webDavClient); var foundTasks = (await calDavDataAccessTasks.GetUserResourcesIncludingCalendarProxies(useWellKnownCalDav)).TaskListResources; if (foundTasks.Count == 0) { return(new AutoDiscoveryResult(null, AutoDiscoverResultStatus.NoResourcesFound)); } var selectedTask = SelectTaskList(foundTasks); if (selectedTask != null) { return(new AutoDiscoveryResult(new Uri(selectedTask.Id), AutoDiscoverResultStatus.ResourceSelected)); } else { return(new AutoDiscoveryResult(null, AutoDiscoverResultStatus.UserCancelled)); } case OlItemType.olContactItem: var cardDavDataAccess = new CardDavDataAccess(autoDiscoveryUri, webDavClient, string.Empty, contentType => true); var foundAddressBooks = await cardDavDataAccess.GetUserAddressBooksNoThrow(useWellKnownCardDav); if (foundAddressBooks.Count == 0) { return(new AutoDiscoveryResult(null, AutoDiscoverResultStatus.NoResourcesFound)); } var selectedAddressBook = SelectAddressBook(foundAddressBooks); if (selectedAddressBook != null) { return(new AutoDiscoveryResult(selectedAddressBook.Uri, AutoDiscoverResultStatus.ResourceSelected)); } else { return(new AutoDiscoveryResult(null, AutoDiscoverResultStatus.UserCancelled)); } default: throw new NotImplementedException($"'{selectedOutlookFolderType}' not implemented."); } }
public static async Task <AutoDiscoveryResult> DoAutoDiscovery(Uri autoDiscoveryUri, IWebDavClient webDavClient, bool useWellKnownCalDav, bool useWellKnownCardDav, OlItemType?selectedOutlookFolderType) { var calDavDataAccess = new CalDavDataAccess(autoDiscoveryUri, webDavClient); IReadOnlyList <Tuple <Uri, string, string> > foundCaldendars = await calDavDataAccess.GetUserCalendarsNoThrow(useWellKnownCalDav); var cardDavDataAccess = new CardDavDataAccess(autoDiscoveryUri, webDavClient); IReadOnlyList <Tuple <Uri, string> > foundAddressBooks = await cardDavDataAccess.GetUserAddressBooksNoThrow(useWellKnownCardDav); if (foundCaldendars.Count > 0 || foundAddressBooks.Count > 0) { using (SelectResourceForm listCalendarsForm = new SelectResourceForm(foundCaldendars, foundAddressBooks, selectedOutlookFolderType == OlItemType.olContactItem)) { if (listCalendarsForm.ShowDialog() == DialogResult.OK) { return(new AutoDiscoveryResult(new Uri(autoDiscoveryUri.GetLeftPart(UriPartial.Authority) + listCalendarsForm.SelectedUrl), false, listCalendarsForm.ResourceType)); } else { return(new AutoDiscoveryResult(null, true, ResourceType.None)); } } } else { MessageBox.Show(useWellKnownCalDav ? "No resources were found via well-known URLs!" : "No resources were found via autodiscovery!", OptionTasks.ConnectionTestCaption); return(new AutoDiscoveryResult(null, false, ResourceType.None)); } }
private static async Task <ServerResources> GetUserResources(CalDavDataAccess calDavDataAccess, CardDavDataAccess cardDavDataAccess, bool useWellKNownUrl) { var calDavResources = await calDavDataAccess.GetUserResourcesNoThrow(useWellKNownUrl); var foundAddressBooks = await cardDavDataAccess.GetUserAddressBooksNoThrow(useWellKNownUrl); return(new ServerResources(calDavResources.CalendarResources, foundAddressBooks, calDavResources.TaskListResources)); }
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)); }
public static async Task TestGoogleConnection(ICurrentOptions currentOptions, ISettingsFaultFinder settingsFaultFinder) { if (currentOptions.OutlookFolderType == null) { MessageBox.Show("Please select an Outlook folder to specify the item type for this profile", ConnectionTestCaption); return; } var outlookFolderType = currentOptions.OutlookFolderType.Value; StringBuilder errorMessageBuilder = new StringBuilder(); if (!ValidateGoogleEmailAddress(errorMessageBuilder, currentOptions.EmailAddress)) { MessageBox.Show(errorMessageBuilder.ToString(), "The Email Address is invalid", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (outlookFolderType == OlItemType.olTaskItem) { await TestGoogleTaskConnection(currentOptions, errorMessageBuilder, outlookFolderType); return; } if (!ValidateWebDavUrl(currentOptions.ServerUrl, errorMessageBuilder, false)) { MessageBox.Show(errorMessageBuilder.ToString(), "The CalDav/CardDav Url is invalid", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var enteredUri = new Uri(currentOptions.ServerUrl); var webDavClient = currentOptions.CreateWebDavClient(); Uri autoDiscoveredUrl; ResourceType autoDiscoveredResourceType; if (ConnectionTester.RequiresAutoDiscovery(enteredUri)) { var calDavDataAccess = new CalDavDataAccess(enteredUri, webDavClient); var foundCaldendars = await calDavDataAccess.GetUserCalendarsNoThrow(false); var cardDavDataAccess = new CardDavDataAccess(enteredUri, webDavClient); IReadOnlyList <Tuple <Uri, string> > foundAddressBooks = await cardDavDataAccess.GetUserAddressBooksNoThrow(true); if (foundCaldendars.Count > 0 || foundAddressBooks.Count > 0) { ResourceType initalResourceType; if (currentOptions.OutlookFolderType == OlItemType.olContactItem) { initalResourceType = ResourceType.AddressBook; } else if (currentOptions.OutlookFolderType == OlItemType.olTaskItem) { initalResourceType = ResourceType.TaskList; } else { initalResourceType = ResourceType.Calendar; } using (SelectResourceForm listCalendarsForm = new SelectResourceForm( foundCaldendars, foundAddressBooks, new Tuple <string, string>[] {}, initalResourceType)) { if (listCalendarsForm.ShowDialog() == DialogResult.OK) { if (listCalendarsForm.ResourceType == ResourceType.TaskList) { autoDiscoveredUrl = null; currentOptions.ServerUrl = listCalendarsForm.SelectedUrl; } else { autoDiscoveredUrl = new Uri(enteredUri.GetLeftPart(UriPartial.Authority) + listCalendarsForm.SelectedUrl); } autoDiscoveredResourceType = listCalendarsForm.ResourceType; } else { autoDiscoveredUrl = null; autoDiscoveredResourceType = ResourceType.None; } } } else { MessageBox.Show("No resources were found via autodiscovery!", ConnectionTestCaption); autoDiscoveredUrl = null; autoDiscoveredResourceType = ResourceType.None; } } else { var result = await ConnectionTester.TestConnection(enteredUri, webDavClient, ResourceType.None); if (result.ResourceType != ResourceType.None) { settingsFaultFinder.FixSynchronizationMode(result); } DisplayTestReport( result, currentOptions.SynchronizationMode, currentOptions.SynchronizationModeDisplayName, outlookFolderType); return; } if (autoDiscoveredUrl != null) { currentOptions.ServerUrl = autoDiscoveredUrl.ToString(); var finalResult = await ConnectionTester.TestConnection(autoDiscoveredUrl, webDavClient, autoDiscoveredResourceType); settingsFaultFinder.FixSynchronizationMode(finalResult); DisplayTestReport( finalResult, currentOptions.SynchronizationMode, currentOptions.SynchronizationModeDisplayName, outlookFolderType); } else if (outlookFolderType == OlItemType.olTaskItem) { TestResult result = new TestResult(ResourceType.TaskList, CalendarProperties.None, AddressBookProperties.None); DisplayTestReport( result, currentOptions.SynchronizationMode, currentOptions.SynchronizationModeDisplayName, outlookFolderType); } }