public OutlookFolder (string entryId, string storeId, OlItemType defaultItemType, string name)
 {
   EntryId = entryId;
   StoreId = storeId;
   DefaultItemType = defaultItemType;
   Name = name;
 }
 public OutlookFolder(string entryId, string storeId, OlItemType defaultItemType, string name)
 {
     EntryId         = entryId;
     StoreId         = storeId;
     DefaultItemType = defaultItemType;
     Name            = name;
 }
示例#3
0
 public OutlookFolderDescriptor(string entryId, string storeId, OlItemType defaultItemType, string name, int itemCount)
 {
     EntryId         = entryId;
     StoreId         = storeId;
     DefaultItemType = defaultItemType;
     Name            = name;
     ItemCount       = itemCount;
 }
示例#4
0
        private void findCalendars(Folders folders, Dictionary <string, MAPIFolder> calendarFolders, String excludeDeletedFolder, MAPIFolder defaultCalendar = null)
        {
            //Initiate progress bar (red line underneath "Getting calendars" text)
            System.Drawing.Graphics g          = MainForm.Instance.tabOutlook.CreateGraphics();
            System.Drawing.Pen      p          = new System.Drawing.Pen(System.Drawing.Color.Red, 3);
            System.Drawing.Point    startPoint = new System.Drawing.Point(MainForm.Instance.lOutlookCalendar.Location.X,
                                                                          MainForm.Instance.lOutlookCalendar.Location.Y + MainForm.Instance.lOutlookCalendar.Size.Height + 3);
            double stepSize = MainForm.Instance.lOutlookCalendar.Size.Width / folders.Count;

            int fldCnt = 0;

            foreach (MAPIFolder folder in folders)
            {
                fldCnt++;
                System.Drawing.Point endPoint = new System.Drawing.Point(MainForm.Instance.lOutlookCalendar.Location.X + Convert.ToInt16(fldCnt * stepSize),
                                                                         MainForm.Instance.lOutlookCalendar.Location.Y + MainForm.Instance.lOutlookCalendar.Size.Height + 3);
                try { g.DrawLine(p, startPoint, endPoint); } catch { /*May get GDI+ error if g has been repainted*/ }
                System.Windows.Forms.Application.DoEvents();
                try {
                    OlItemType defaultItemType = folder.DefaultItemType;
                    if (defaultItemType == OlItemType.olAppointmentItem)
                    {
                        if (defaultCalendar == null ||
                            (folder.EntryID != defaultCalendar.EntryID))
                        {
                            calendarFolders.Add(folder.Name, folder);
                        }
                    }
                    if (folder.EntryID != excludeDeletedFolder && folder.Folders.Count > 0)
                    {
                        findCalendars(folder.Folders, calendarFolders, excludeDeletedFolder, defaultCalendar);
                    }
                } catch (System.Exception ex) {
                    OGCSexception.Analyse(ex);
                    if (oApp.Session.ExchangeConnectionMode.ToString().Contains("Disconnected") ||
                        ex.Message.StartsWith("Network problems are preventing connection to Microsoft Exchange.") ||
                        OGCSexception.GetErrorCode(ex, 0x000FFFFF) == "0x00040115")
                    {
                        log.Info("Currently disconnected from Exchange - unable to retrieve MAPI folders.");
                        MainForm.Instance.ToolTips.SetToolTip(MainForm.Instance.cbOutlookCalendars,
                                                              "The Outlook calendar to synchonize with.\nSome may not be listed as you are currently disconnected.");
                    }
                    else
                    {
                        log.Error("Failed to recurse MAPI folders.");
                        log.Error(ex.Message);
                        MessageBox.Show("A problem was encountered when searching for Outlook calendar folders.",
                                        "Calendar Folders", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
            p.Dispose();
            try { g.Clear(System.Drawing.Color.White); } catch { }
            g.Dispose();
            System.Windows.Forms.Application.DoEvents();
        }
 private static string NameProperty(OlItemType type)
 {
     if (type == OlItemType.olContactItem)
     {
         return("FileAs");
     }
     else
     {
         return(null);
     }
 }
    public static MappingConfigurationBase CoreceMappingConfiguration (OlItemType? outlookFolderType, MappingConfigurationBase mappingConfiguration)
    {
      switch (outlookFolderType)
      {
        case OlItemType.olAppointmentItem:
          if (mappingConfiguration == null || mappingConfiguration.GetType() != typeof (EventMappingConfiguration))
            return new EventMappingConfiguration();
          break;
        case OlItemType.olContactItem:
          if (mappingConfiguration == null || mappingConfiguration.GetType() != typeof (ContactMappingConfiguration))
            return new ContactMappingConfiguration();
          break;
      }

      return mappingConfiguration;
    }
示例#7
0
        public void OpenOutlookItem(OlItemType type, string EntryID)
        {
            try
            {
                //Open existing Task Item by EntryId
                if (type is OlItemType.olTaskItem)
                {
                    (GetOutlookNameSpace().GetItemFromID(EntryID) as TaskItem).Display();
                }

                //Open existing Appointment Item by EntryId
                if (type is OlItemType.olAppointmentItem)
                {
                    (GetOutlookNameSpace().GetItemFromID(EntryID) as AppointmentItem).Display();
                }
            }
            catch { /*Might happen if outlook is closed or item not exists, bad luck*/ }
        }
示例#8
0
        public void NewOutlookItem(OlItemType type)
        {
            try
            {
                //Create new Outlook Task and display UI to user
                if (type is OlItemType.olTaskItem)
                {
                    (GetOutlookApplication().CreateItem(type) as TaskItem).Display();
                }

                //Create new Outlook Appointment and display UI to user
                if (type is OlItemType.olAppointmentItem)
                {
                    (GetOutlookApplication().CreateItem(type) as AppointmentItem).Display();
                }
            }
            catch { /*Might happen if outlook is closed or item not exists, bad luck*/ }
        }
示例#9
0
        public static string DoSrvLookup(string serverEmail, OlItemType selectedOutlookFolderType, out bool success)
        {
            string emailDomain = serverEmail.Substring(serverEmail.IndexOf('@') + 1);
            string lookupUrl   = "https://" + emailDomain;

            success = false;
            string srvBase      = selectedOutlookFolderType == OlItemType.olContactItem ? "_carddav" : "_caldav";
            string lookupString = srvBase + "s._tcp." + emailDomain;

            var srvRecordsCaldavs = DnsQueryHelper.GetSRVRecordList(lookupString);

            if (srvRecordsCaldavs.Count > 0)
            {
                lookupUrl = "https://" + srvRecordsCaldavs[0];
                success   = true;
                var txtRecords = DnsQueryHelper.GetTxtRecord(lookupString);
                if (txtRecords != null && txtRecords.StartsWith("path="))
                {
                    lookupUrl += txtRecords.Substring(txtRecords.IndexOf('=') + 1);
                }
            }
            else
            {
                lookupString = srvBase + "._tcp." + emailDomain;
                var srvRecordsCaldav = DnsQueryHelper.GetSRVRecordList(lookupString);
                if (srvRecordsCaldav.Count > 0)
                {
                    lookupUrl = "http://" + srvRecordsCaldav[0];
                    success   = true;
                    var txtRecords = DnsQueryHelper.GetTxtRecord(lookupString);
                    if (txtRecords != null && txtRecords.StartsWith("path="))
                    {
                        lookupUrl += txtRecords.Substring(txtRecords.IndexOf('=') + 1);
                    }
                }
            }

            return(lookupUrl);
        }
示例#10
0
        public static Type GetItemType(this OlItemType olItemType)
        {
            switch (olItemType)
            {
            case OlItemType.olMailItem:
                return(typeof(MailItem));

            case OlItemType.olAppointmentItem:
                return(typeof(AppointmentItem));

            case OlItemType.olContactItem:
                return(typeof(ContactItem));

            case OlItemType.olTaskItem:
                return(typeof(TaskItem));

            case OlItemType.olJournalItem:
                return(typeof(JournalItem));

            case OlItemType.olNoteItem:
                return(typeof(NoteItem));

            case OlItemType.olPostItem:
                return(typeof(PostItem));

            case OlItemType.olDistributionListItem:
                return(typeof(DistListItem));

            case OlItemType.olMobileItemSMS:
                return(typeof(MobileItem));

            case OlItemType.olMobileItemMMS:
                return(typeof(MobileItem));

            default:
                return(null);
            }
        }
示例#11
0
        private void findCalendars(Folders folders, Dictionary <string, MAPIFolder> calendarFolders, MAPIFolder defaultCalendar)
        {
            string excludeDeletedFolder = folders.Application.Session.GetDefaultFolder(OlDefaultFolders.olFolderDeletedItems).EntryID;

            foreach (MAPIFolder folder in folders)
            {
                try {
                    OlItemType defaultItemType = folder.DefaultItemType;
                    if (defaultItemType == OlItemType.olAppointmentItem)
                    {
                        if (defaultCalendar == null ||
                            (folder.EntryID != defaultCalendar.EntryID))
                        {
                            calendarFolders.Add(folder.Name, folder);
                        }
                    }
                    if (folder.EntryID != excludeDeletedFolder && folder.Folders.Count > 0)
                    {
                        findCalendars(folder.Folders, calendarFolders, defaultCalendar);
                    }
                } catch (System.Exception ex) {
                    if (oApp.Session.ExchangeConnectionMode.ToString().Contains("Disconnected") ||
                        ex.Message.StartsWith("Network problems are preventing connection to Microsoft Exchange."))
                    {
                        log.Info("Currently disconnected from Exchange - unable to retrieve MAPI folders.");
                        MainForm.Instance.ToolTips.SetToolTip(MainForm.Instance.cbOutlookCalendars,
                                                              "The Outlook calendar to synchonize with.\nSome may not be listed as you are currently disconnected.");
                    }
                    else
                    {
                        log.Error("Failed to recurse MAPI folders.");
                        log.Error(ex.Message);
                        MessageBox.Show("A problem was encountered when searching for Outlook calendar folders.",
                                        "Calendar Folders", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
        }
示例#12
0
        public bool SendEmail(OlItemType olMailItem, string to, string cc, string sub, string documentText, OlImportance olImportanceNormal)
        {
            if (_application == null)
            {
                GetApplicationObject();
            }

            try
            {
                MailItem mailItem = _application.CreateItem(olMailItem);
                mailItem.To         = to;
                mailItem.CC         = cc;
                mailItem.Subject    = sub;
                mailItem.HTMLBody   = documentText;
                mailItem.Importance = olImportanceNormal;
                mailItem.Send();
            }
            catch (System.Exception e)
            {
                throw e;
            }

            return(true);
        }
示例#13
0
        public static void DisplayTestReport(
            TestResult result,
            SynchronizationMode synchronizationMode,
            string selectedSynchronizationModeDisplayName,
            OlItemType outlookFolderType)
        {
            bool hasError            = false;
            bool hasWarning          = false;
            var  errorMessageBuilder = new StringBuilder();

            var isCalendar    = result.ResourceType.HasFlag(ResourceType.Calendar);
            var isAddressBook = result.ResourceType.HasFlag(ResourceType.AddressBook);
            var isTaskList    = result.ResourceType.HasFlag(ResourceType.TaskList);

            if (isCalendar && isAddressBook)
            {
                errorMessageBuilder.AppendLine(Strings.Get($"- Resources which are a calendar and an addressbook are not valid!"));
                hasError = true;
            }

            switch (outlookFolderType)
            {
            case OlItemType.olAppointmentItem:
                if (isCalendar)
                {
                    if (!result.CalendarProperties.HasFlag(CalendarProperties.CalendarAccessSupported))
                    {
                        errorMessageBuilder.AppendLine(Strings.Get($"- The specified URL does not support calendar access."));
                        hasError = true;
                    }

                    if (!result.CalendarProperties.HasFlag(CalendarProperties.SupportsCalendarQuery))
                    {
                        errorMessageBuilder.AppendLine(Strings.Get($"- The specified URL does not support calendar queries. Some features like time range filter may not work!"));
                        hasWarning = true;
                    }

                    if (DoesModeRequireWriteableServerResource(synchronizationMode))
                    {
                        if (!result.AccessPrivileges.HasFlag(AccessPrivileges.Modify))
                        {
                            errorMessageBuilder.AppendFormat(
                                Strings.Get($"- The specified calendar is not writeable. Therefore it is not possible to use the synchronization mode '{selectedSynchronizationModeDisplayName}'."));
                            errorMessageBuilder.AppendLine();
                            hasError = true;
                        }

                        if (!result.AccessPrivileges.HasFlag(AccessPrivileges.Create))
                        {
                            errorMessageBuilder.AppendLine(Strings.Get($"- The specified calendar doesn't allow creation of appointments!"));
                            hasWarning = true;
                        }

                        if (!result.AccessPrivileges.HasFlag(AccessPrivileges.Delete))
                        {
                            errorMessageBuilder.AppendLine(Strings.Get($"- The specified calendar doesn't allow deletion of appointments!"));
                            hasWarning = true;
                        }
                    }
                }
                else
                {
                    errorMessageBuilder.AppendLine(Strings.Get($"- The specified URL is not a calendar!"));
                    hasError = true;
                }

                break;

            case OlItemType.olContactItem:
                if (isAddressBook)
                {
                    if (!result.AddressBookProperties.HasFlag(AddressBookProperties.AddressBookAccessSupported))
                    {
                        errorMessageBuilder.AppendLine(Strings.Get($"- The specified URL does not support address books."));
                        hasError = true;
                    }

                    if (DoesModeRequireWriteableServerResource(synchronizationMode))
                    {
                        if (!result.AccessPrivileges.HasFlag(AccessPrivileges.Modify))
                        {
                            errorMessageBuilder.AppendFormat(
                                Strings.Get(
                                    $"- The specified address book is not writeable. Therefore it is not possible to use the synchronization mode '{selectedSynchronizationModeDisplayName}'."));
                            errorMessageBuilder.AppendLine();
                            hasError = true;
                        }

                        if (!result.AccessPrivileges.HasFlag(AccessPrivileges.Create))
                        {
                            errorMessageBuilder.AppendLine(Strings.Get($"- The specified address book doesn't allow creation of contacts!"));
                            hasWarning = true;
                        }

                        if (!result.AccessPrivileges.HasFlag(AccessPrivileges.Delete))
                        {
                            errorMessageBuilder.AppendLine(Strings.Get($"- The specified address book doesn't allow deletion of contacts!"));
                            hasWarning = true;
                        }
                    }
                }
                else
                {
                    errorMessageBuilder.AppendLine(Strings.Get($"- The specified URL is not an addressbook!"));
                    hasError = true;
                }

                break;

            case OlItemType.olTaskItem:
                if (!isTaskList)
                {
                    errorMessageBuilder.AppendLine(Strings.Get($"- The specified URL is not an task list!"));
                    hasError = true;
                }

                break;
            }

            if (hasError)
            {
                MessageBox.Show(Strings.Get($"Connection test NOT successful:") + Environment.NewLine + errorMessageBuilder, ConnectionTestCaption);
            }
            else if (hasWarning)
            {
                MessageBox.Show(Strings.Get($"Connection test successful BUT:") + Environment.NewLine + errorMessageBuilder, ConnectionTestCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                MessageBox.Show(Strings.Get($"Connection test successful."), ConnectionTestCaption);
            }
        }
 public void FixTimeRangeUsage (OlItemType? folderType)
 {
   _syncSettingsControl.UseSynchronizationTimeRange = folderType != OlItemType.olContactItem;
 }
示例#15
0
        private async Task <string> TestGoogleContactsConnection(OptionsModel options, OlItemType outlookFolderType, string url)
        {
            var service = await GoogleHttpClientFactory.LoginToContactsService(options.EmailAddress, options.GetProxyIfConfigured());

            try
            {
                await Task.Run(() => service.GetGroups());
            }
            catch (Exception x)
            {
                s_logger.Error(null, x);
                MessageBox.Show(x.Message, ConnectionTestCaption, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(url);
            }

            TestResult result = new TestResult(
                ResourceType.AddressBook,
                CalendarProperties.None,
                AddressBookProperties.AddressBookAccessSupported,
                AccessPrivileges.All,
                false,
                null);

            DisplayTestReport(
                result,
                options.SynchronizationMode,
                _enumDisplayNameProvider.Get(options.SynchronizationMode),
                outlookFolderType);
            return(string.Empty);
        }
		public dynamic CreateItem(OlItemType ItemType)
		{
			throw new NotImplementedException();
		}
 public void FixTimeRangeUsage (OlItemType? folderType)
 {
   if (folderType == OlItemType.olContactItem)
   {
     _enableTimeRangeFilteringCheckBox.Checked = false;
     UpdateTimeRangeFilteringGroupBoxEnabled();
   }
   else
   {
     _enableTimeRangeFilteringCheckBox.Checked = true;
     UpdateTimeRangeFilteringGroupBoxEnabled();
   }
 }
示例#18
0
 /// <summary>
 /// テスト対象のクラス(e.g. Office365Contact)が実行するクラス
 /// </summary>
 /// <param name="ItemType">生成するアイテムのタイプ</param>
 /// <returns></returns>
 public dynamic CreateItem(OlItemType ItemType)
 {
     return(CreateItemHon(ItemType));
 }
示例#19
0
 /// <summary>
 /// dynamicを返さないために作ったメソッド
 /// virtualをつけることで、Substituteに制御を渡す
 /// </summary>
 /// <param name="ItemType">生成するアイテムのタイプ</param>
 /// <returns></returns>
 public virtual ContactItem CreateItemHon(OlItemType ItemType)
 {
     return(null);
 }
 public HeaderEventArgs (string name, bool isInactive, OlItemType? folderItemType)
 {
   FolderItemType = folderItemType;
   IsInactive = isInactive;
   Name = name;
 }
 public void FixTimeRangeUsage (OlItemType? folderType)
   {
     _syncSettingsControl.FixTimeRangeUsage (folderType);
   }
示例#22
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.");
            }
        }
示例#23
0
        public static async Task <Uri> AddResource(Uri davUri, IWebDavClient webDavClient, OlItemType selectedOutlookFolderType)
        {
            switch (selectedOutlookFolderType)
            {
            case OlItemType.olAppointmentItem:
            case OlItemType.olTaskItem:
                var calDavDataAccess = new CalDavDataAccess(davUri, webDavClient);
                using (var addResourceForm = new AddResourceForm(true))
                {
                    addResourceForm.Text = Strings.Get($"Add calendar resource on server");
                    if (addResourceForm.ShowDialog() == DialogResult.OK)
                    {
                        try
                        {
                            var newUri = await calDavDataAccess.AddResource(addResourceForm.ResourceName, addResourceForm.UseRandomUri);

                            MessageBox.Show(Strings.Get($"Added calendar resource '{addResourceForm.ResourceName}' successfully!"), CreateDavResourceCaption, MessageBoxButtons.OK, MessageBoxIcon.Information);
                            if (!await new CalDavDataAccess(newUri, webDavClient).SetCalendarColorNoThrow(new ArgbColor(addResourceForm.CalendarColor.ToArgb())))
                            {
                                MessageBox.Show(Strings.Get($"Can't set the calendar color!'"), CreateDavResourceCaption, MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                            return(newUri);
                        }
                        catch (Exception ex)
                        {
                            s_logger.Error($"Can't add calendar resource '{addResourceForm.ResourceName}'", ex);
                            MessageBox.Show(Strings.Get($"Can't add calendar resource '{addResourceForm.ResourceName}'"), CreateDavResourceCaption, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }

                break;

            case OlItemType.olContactItem:
                var cardDavDataAccess = new CardDavDataAccess(davUri, webDavClient, string.Empty, contentType => true);
                using (var addResourceForm = new AddResourceForm(false))
                {
                    addResourceForm.Text = Strings.Get($"Add addressbook resource on server");
                    if (addResourceForm.ShowDialog() == DialogResult.OK)
                    {
                        try
                        {
                            var newUri = await cardDavDataAccess.AddResource(addResourceForm.ResourceName, addResourceForm.UseRandomUri);

                            MessageBox.Show(Strings.Get($"Added addressbook resource '{addResourceForm.ResourceName}' successfully!"), CreateDavResourceCaption, MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return(newUri);
                        }
                        catch (Exception ex)
                        {
                            s_logger.Error($"Can't add addressbook resource '{addResourceForm.ResourceName}'", ex);
                            MessageBox.Show(Strings.Get($"Can't add addressbook resource '{addResourceForm.ResourceName}'"), CreateDavResourceCaption, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }

                break;
            }

            return(davUri);
        }
示例#24
0
 public dynamic CreateItem(OlItemType ItemType)
 {
     if (OlItemType.olMailItem == ItemType)
     {
         return new WsMailItem(_application.CreateItem(ItemType));
     }
     return new WsDynamicItem(_application.CreateItem(ItemType));
 }
示例#25
0
        private async Task <string> TestGoogleTaskConnection(OptionsModel options, StringBuilder errorMessageBuilder, OlItemType outlookFolderType, string url)
        {
            var service = await GoogleHttpClientFactory.LoginToGoogleTasksService(options.EmailAddress, options.GetProxyIfConfigured());

            string connectionTestUrl;

            if (string.IsNullOrEmpty(url))
            {
                TaskLists taskLists = await service.Tasklists.List().ExecuteAsync();

                if (taskLists.Items.Any())
                {
                    var selectedTaskList = SelectTaskList(taskLists.Items.Select(i => new TaskListData(i.Id, i.Title, AccessPrivileges.All)).ToArray());
                    if (selectedTaskList != null)
                    {
                        connectionTestUrl = selectedTaskList.Id;
                    }
                    else
                    {
                        return(url);
                    }
                }
                else
                {
                    connectionTestUrl = url;
                }
            }
            else
            {
                connectionTestUrl = url;
            }

            try
            {
                await service.Tasklists.Get(connectionTestUrl).ExecuteAsync();
            }
            catch (Exception x)
            {
                s_logger.Error(null, x);
                errorMessageBuilder.AppendFormat(Strings.Get($"The tasklist with id '{connectionTestUrl}' is invalid."));
                MessageBox.Show(errorMessageBuilder.ToString(), Strings.Get($"The tasklist is invalid"), MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(url);
            }

            TestResult result = new TestResult(ResourceType.TaskList, CalendarProperties.None, AddressBookProperties.None, AccessPrivileges.None, false, null);

            DisplayTestReport(
                result,
                options.SynchronizationMode,
                _enumDisplayNameProvider.Get(options.SynchronizationMode),
                outlookFolderType);
            return(connectionTestUrl);
        }
    public static void DisplayTestReport (
        TestResult result,
        bool selectedSynchronizationModeRequiresWriteableServerResource,
        string selectedSynchronizationModeDisplayName,
        OlItemType? outlookFolderType,
        ServerAdapterType serverAdapterType)
    {
      bool hasError = false;
      bool hasWarning = false;
      var errorMessageBuilder = new StringBuilder ();

      var isCalendar = result.ResourceType.HasFlag (ResourceType.Calendar);
      var isAddressBook = result.ResourceType.HasFlag (ResourceType.AddressBook);
      var isGoogleTask = result.ResourceType.HasFlag (ResourceType.TaskList);

      if (isGoogleTask)
      {
        if (outlookFolderType != OlItemType.olTaskItem)
        {
          errorMessageBuilder.AppendLine ("- The outlook folder is not a task folder, or there is no folder selected.");
          hasError = true;
        }
      }
      else if (!isCalendar && !isAddressBook)
      {
        errorMessageBuilder.AppendLine ("- The specified Url is neither a calendar nor an addressbook!");
        hasError = true;
      }

      if (isCalendar && isAddressBook)
      {
        errorMessageBuilder.AppendLine ("- Ressources which are a calendar and an addressbook are not valid!");
        hasError = true;
      }

      if (isCalendar)
      {
        if (!result.CalendarProperties.HasFlag (CalendarProperties.CalendarAccessSupported))
        {
          errorMessageBuilder.AppendLine ("- The specified Url does not support calendar access.");
          hasError = true;
        }

        if (!result.CalendarProperties.HasFlag (CalendarProperties.SupportsCalendarQuery))
        {
          errorMessageBuilder.AppendLine ("- The specified Url does not support calendar queries. Some features like time range filter may not work!");
          hasWarning = true;
        }

        if (!result.CalendarProperties.HasFlag (CalendarProperties.IsWriteable))
        {
          if (selectedSynchronizationModeRequiresWriteableServerResource)
          {
            errorMessageBuilder.AppendFormat (
                "- The specified calendar is not writeable. Therefore it is not possible to use the synchronization mode '{0}'.",
                selectedSynchronizationModeDisplayName);
            errorMessageBuilder.AppendLine ();
            hasError = true;
          }
        }

        if (serverAdapterType == ServerAdapterType.WebDavHttpClientBasedWithGoogleOAuth)
        {
          if (outlookFolderType != OlItemType.olAppointmentItem)
          {
            errorMessageBuilder.AppendLine ("- The outlook folder is not a calendar folder, or there is no folder selected.");
            hasError = true;
          }
        }
        else if (outlookFolderType != OlItemType.olAppointmentItem && outlookFolderType != OlItemType.olTaskItem)
        {
          errorMessageBuilder.AppendLine ("- The outlook folder is not a calendar or task folder, or there is no folder selected.");
          hasError = true;
        }
      }

      if (isAddressBook)
      {
        if (!result.AddressBookProperties.HasFlag (AddressBookProperties.AddressBookAccessSupported))
        {
          errorMessageBuilder.AppendLine ("- The specified Url does not support address books.");
          hasError = true;
        }

        if (!result.AddressBookProperties.HasFlag (AddressBookProperties.IsWriteable))
        {
          if (selectedSynchronizationModeRequiresWriteableServerResource)
          {
            errorMessageBuilder.AppendFormat (
                "- The specified address book is not writeable. Therefore it is not possible to use the synchronization mode '{0}'.",
                selectedSynchronizationModeDisplayName);
            errorMessageBuilder.AppendLine ();
            hasError = true;
          }
        }

        if (outlookFolderType != OlItemType.olContactItem)
        {
          errorMessageBuilder.AppendLine ("- The outlook folder is not an address book, or there is no folder selected.");
          hasError = true;
        }
      }

      if (hasError)
        MessageBox.Show ("Connection test NOT successful:" + Environment.NewLine + errorMessageBuilder, OptionTasks.ConnectionTestCaption);
      else if (hasWarning)
        MessageBox.Show ("Connection test successful BUT:" + Environment.NewLine + errorMessageBuilder, OptionTasks.ConnectionTestCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning);
      else
        MessageBox.Show ("Connection test successful.", OptionTasks.ConnectionTestCaption);
    }
 public ItemPropertyHandler(OlItemType type, string index)
 {
     this.type  = type;
     this.index = index;
 }
    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,
                new Tuple<string, string>[0],
                selectedOutlookFolderType == OlItemType.olContactItem ? ResourceType.AddressBook : ResourceType.Calendar))
        {
          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);
      }
    }
 public void FixTimeRangeUsage (OlItemType? folderType)
 {
   
 }
示例#30
0
        private static async Task TestGoogleTaskConnection(ICurrentOptions currentOptions, StringBuilder errorMessageBuilder, OlItemType outlookFolderType)
        {
            var service = await GoogleHttpClientFactory.LoginToGoogleTasksService(currentOptions.EmailAddress, currentOptions.GetProxyIfConfigured());

            if (string.IsNullOrEmpty(currentOptions.ServerUrl))
            {
                TaskLists taskLists = await service.Tasklists.List().ExecuteAsync();

                if (taskLists.Items.Any())
                {
                    using (SelectResourceForm listCalendarsForm =
                               new SelectResourceForm(
                                   new Tuple <Uri, string, ArgbColor?>[] { },
                                   new Tuple <Uri, string>[] { },
                                   taskLists.Items.Select(i => Tuple.Create(i.Id, i.Title)).ToArray(),
                                   ResourceType.TaskList))
                    {
                        if (listCalendarsForm.ShowDialog() == DialogResult.OK)
                        {
                            currentOptions.ServerUrl = listCalendarsForm.SelectedUrl;
                        }
                        else
                        {
                            return;
                        }
                    }
                }
            }

            try
            {
                await service.Tasklists.Get(currentOptions.ServerUrl).ExecuteAsync();
            }
            catch (Exception)
            {
                errorMessageBuilder.AppendFormat("The tasklist with id '{0}' is invalid.", currentOptions.ServerUrl);
                MessageBox.Show(errorMessageBuilder.ToString(), "The tasklist is invalid", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            TestResult result = new TestResult(ResourceType.TaskList, CalendarProperties.None, AddressBookProperties.None);

            DisplayTestReport(
                result,
                currentOptions.SynchronizationMode,
                currentOptions.SynchronizationModeDisplayName,
                outlookFolderType);
        }