Esempio n. 1
0
        protected override List <string> DB_SearchContacts(string searchText)
        {
            ContactEqualityComparer equality = new ContactEqualityComparer();
            List <string>           contacts = new List <string>();

            //contacts = mailBoxManager.SearchCRMContacts(TenantId, Username, searchText);
            contacts = contacts.Concat(mailBoxManager.SearchTeamLabContacts(TenantId, searchText)).Distinct(equality).ToList();
            //contacts = contacts.Concat(mailBoxManager.SearchMailContacts(TenantId, Username, searchText)).Distinct(equality).ToList();
            return(contacts);
        }
Esempio n. 2
0
        public IEnumerable<string> GetContacts(string term)
        {
            if (string.IsNullOrEmpty(term))
                throw new ArgumentException(@"term parameter empty.", "term");

            var equality = new ContactEqualityComparer();
            var contacts = MailBoxManager.SearchMailContacts(TenantId, Username, term).Distinct(equality).ToList();
            if (WebItemSecurity.IsAvailableForUser(WebItemManager.CRMProductID.ToString(), SecurityContext.CurrentAccount.ID))
                contacts = contacts.Concat(MailBoxManager.SearchCrmContacts(TenantId, Username, term)).Distinct(equality).ToList();
            if (WebItemSecurity.IsAvailableForUser(WebItemManager.PeopleProductID.ToString(), SecurityContext.CurrentAccount.ID))
                contacts = contacts.Concat(MailBoxManager.SearchTeamLabContacts(TenantId, term)).Distinct(equality).ToList();
            return contacts;
        }
        public IEnumerable <string> GetContacts(string term)
        {
            if (string.IsNullOrEmpty(term))
            {
                throw new ArgumentException("term parameter empty.", "term");
            }

            var equality = new ContactEqualityComparer();
            var contacts = MailBoxManager.SearchMailContacts(TenantId, Username, term).Distinct(equality).ToList();

            if (WebItemSecurity.IsAvailableForUser(WebItemManager.CRMProductID.ToString(), SecurityContext.CurrentAccount.ID))
            {
                contacts = contacts.Concat(MailBoxManager.SearchCRMContacts(TenantId, Username, term)).Distinct(equality).ToList();
            }
            if (WebItemSecurity.IsAvailableForUser(WebItemManager.PeopleProductID.ToString(), SecurityContext.CurrentAccount.ID))
            {
                contacts = contacts.Concat(MailBoxManager.SearchTeamLabContacts(TenantId, term)).Distinct(equality).ToList();
            }
            return(contacts);
        }
Esempio n. 4
0
        /// <summary>
        /// Search emails in Accounts, Mail, CRM, Peaople Contact System
        /// </summary>
        /// <param name="tenant">Tenant id</param>
        /// <param name="userName">User id</param>
        /// <param name="term">Search word</param>
        /// <param name="maxCountPerSystem">limit result per Contact System</param>
        /// <param name="timeout">Timeout in milliseconds</param>
        /// <param name="httpContextScheme"></param>
        /// <returns></returns>
        public List <string> SearchEmails(int tenant, string userName, string term, int maxCountPerSystem, string httpContextScheme, int timeout = -1)
        {
            var equality = new ContactEqualityComparer();
            var contacts = new List <string>();
            var userGuid = new Guid(userName);

            var watch = new Stopwatch();

            watch.Start();

            var apiHelper = new ApiHelper(httpContextScheme);

            var taskList = new List <Task <List <string> > >()
            {
                Task.Run(() =>
                {
                    CoreContext.TenantManager.SetCurrentTenant(tenant);
                    SecurityContext.AuthenticateMe(userGuid);

                    var engine = new EngineFactory(tenant, userName);

                    var exp = new FullFilterContactsExp(tenant, userName, term, infoType: ContactInfoType.Email, orderAsc: true, limit: maxCountPerSystem);

                    var contactCards = engine.ContactEngine.GetContactCards(exp);

                    return((from contactCard in contactCards
                            from contactItem in contactCard.ContactItems
                            select
                            string.IsNullOrEmpty(contactCard.ContactInfo.ContactName)
                                ? contactItem.Data
                                : MailUtil.CreateFullEmail(contactCard.ContactInfo.ContactName, contactItem.Data))
                           .ToList());
                }),

                Task.Run(() =>
                {
                    CoreContext.TenantManager.SetCurrentTenant(tenant);
                    SecurityContext.AuthenticateMe(userGuid);

                    var engine = new EngineFactory(tenant, userGuid.ToString());
                    return(engine.AccountEngine.SearchAccountEmails(term));
                }),

                Task.Run(() =>
                {
                    CoreContext.TenantManager.SetCurrentTenant(tenant);
                    SecurityContext.AuthenticateMe(userGuid);

                    return(WebItemSecurity.IsAvailableForMe(WebItemManager.CRMProductID)
                        ? apiHelper.SearchCrmEmails(term, maxCountPerSystem)
                        : new List <string>());
                }),

                Task.Run(() =>
                {
                    CoreContext.TenantManager.SetCurrentTenant(tenant);
                    SecurityContext.AuthenticateMe(userGuid);

                    return(WebItemSecurity.IsAvailableForMe(WebItemManager.PeopleProductID)
                        ? apiHelper.SearchPeopleEmails(term, 0, maxCountPerSystem)
                        : new List <string>());
                })
            };

            try
            {
                var taskArray = taskList.ToArray <Task>();

                Task.WaitAll(taskArray, timeout);

                watch.Stop();
            }
            catch (AggregateException e)
            {
                watch.Stop();

                var errorText =
                    new StringBuilder("SearchEmails: \nThe following exceptions have been thrown by WaitAll():");

                foreach (var t in e.InnerExceptions)
                {
                    errorText
                    .AppendFormat("\n-------------------------------------------------\n{0}", t);
                }

                Log.Error(errorText.ToString());
            }

            contacts =
                taskList.Aggregate(contacts,
                                   (current, task) => !task.IsFaulted &&
                                   task.IsCompleted &&
                                   !task.IsCanceled
                        ? current.Concat(task.Result).ToList()
                        : current)
                .Distinct(equality)
                .ToList();

            Log.DebugFormat("SearchEmails (term = '{0}'): {1} sec / {2} items", term, watch.Elapsed.TotalSeconds, contacts.Count);

            return(contacts);
        }
Esempio n. 5
0
 protected override List<string> DB_SearchContacts(string searchText)
 {
     ContactEqualityComparer equality = new ContactEqualityComparer();
     List<string> contacts = new List<string>();
     //contacts = mailBoxManager.SearchCRMContacts(TenantId, Username, searchText);
     contacts = contacts.Concat(mailBoxManager.SearchTeamLabContacts(TenantId, searchText)).Distinct(equality).ToList();
     //contacts = contacts.Concat(mailBoxManager.SearchMailContacts(TenantId, Username, searchText)).Distinct(equality).ToList();
     return contacts;
 }