示例#1
0
        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));
        }
示例#2
0
        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.");
            }
        }
示例#3
0
        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));
        }
示例#6
0
        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);
            }
        }