コード例 #1
0
        private void EnqueueMatches(SearchRecipient recipient, Dictionary <SearchSource, bool> matchMap, List <SearchSource> publicFolders)
        {
            bool flag = false;

            Recorder.Trace(4L, TraceType.InfoTrace, "DirectoryLookup.EnqueueMatches Recipient:", recipient);
            if (recipient.Parent == null)
            {
                foreach (SearchSource searchSource in this.Match(recipient.ADEntry, matchMap, false))
                {
                    flag = true;
                    searchSource.Recipient = recipient;
                    this.EnqueueSource(searchSource, publicFolders);
                }
            }
            if (!flag)
            {
                Recorder.Trace(4L, TraceType.InfoTrace, "DirectoryLookup.EnqueueMatches Match to Parent Recipient:", recipient);
                foreach (SearchSource originalSource in this.Match(recipient.Parent, matchMap, true))
                {
                    flag = true;
                    SearchSource source = this.CreateDefaultSource(originalSource, recipient);
                    this.EnqueueSource(source, publicFolders);
                    if (flag)
                    {
                        break;
                    }
                }
            }
            if (!flag)
            {
                Recorder.Trace(4L, TraceType.WarningTrace, "DirectoryLookup.EnqueueMatches Orphaned AD Entry Entry:", recipient);
            }
        }
コード例 #2
0
        public override void Process(GetSearchableMailboxesInputs item)
        {
            Recorder.Trace(4L, TraceType.InfoTrace, new object[]
            {
                "InitializeGetSearchablebleMailbox.Process Item:",
                item,
                "Filter:",
                item.Filter,
                "ExpandGroups:",
                item.ExpandGroups
            });
            SearchSource[] source = new SearchSource[]
            {
                new SearchSource
                {
                    ReferenceId = item.Filter,
                    SourceType  = SourceType.AllMailboxes
                }
            };
            DirectoryQueryParameters item2 = new DirectoryQueryParameters
            {
                ExpandPublicFolders      = false,
                ExpandGroups             = item.ExpandGroups,
                MatchRecipientsToSources = false,
                PageSize      = (int)base.Policy.ExecutionSettings.DiscoveryDisplaySearchPageSize,
                Properties    = SearchRecipient.DisplayProperties,
                RequestGroups = true,
                Sources       = source.ToList <SearchSource>()
            };

            base.Executor.EnqueueNext(item2);
        }
コード例 #3
0
		public override void ViewDidLoad ()
		{
			base.ViewDidLoad ();

			//UI setup from code
			cancel.SetTitleTextAttributes (new UITextAttributes() { TextColor = UIColor.White }, UIControlState.Normal);
			cancel.SetBackgroundImage (Theme.BlueBarButtonItem, UIControlState.Normal, UIBarMetrics.Default);

			var label = new UILabel (new CGRect(0, 0, 80, 36)) {
				Text = "Items",
				TextColor = UIColor.White,
				BackgroundColor = UIColor.Clear,
				Font = Theme.BoldFontOfSize (18),
			};
			var items = new UIBarButtonItem(label);

			toolbar.Items = new UIBarButtonItem[] {
				cancel,
				new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace),
				items,
				new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace),
			};

			tableView.Source = new TableSource(this);
			var searchDataSource = new SearchSource (this);
			SearchDisplayController.SearchResultsSource = searchDataSource;
			SearchDisplayController.Delegate = new SearchDisplay (tableView, searchDataSource);
		}
コード例 #4
0
        public async Task <ActionResult> UpdateSearch(int id, [FromBody] ViewSearchModel updated)
        {
            var search = await db.Searches.Include(s => s.Sources).FirstOrDefaultAsync(s => s.Id == id);

            search.Name   = updated.Search.Name;
            search.Phrase = updated.Search.Phrase;

            foreach (ViewSearchSource searchSource in updated.Sources)
            {
                SearchSource sourceAlreadySelected = search.Sources.FirstOrDefault(ss => ss.SourceId == searchSource.Source.Id);

                if (searchSource.Selected)
                {
                    if (sourceAlreadySelected == null)
                    {
                        await db.SearchSources.AddAsync(new SearchSource { SearchId = search.Id, SourceId = searchSource.Source.Id });
                    }
                }
                else
                {
                    if (sourceAlreadySelected != null)
                    {
                        db.SearchSources.Remove(sourceAlreadySelected);
                    }
                }
            }

            await db.SaveChangesAsync();

            return(await GetSearch(id));
        }
コード例 #5
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            //UI setup from code
            cancel.SetTitleTextAttributes(new UITextAttributes()
            {
                TextColor = UIColor.White
            }, UIControlState.Normal);
            cancel.SetBackgroundImage(Theme.BlueBarButtonItem, UIControlState.Normal, UIBarMetrics.Default);

            var label = new UILabel(new RectangleF(0, 0, 80, 36))
            {
                Text            = "Items",
                TextColor       = UIColor.White,
                BackgroundColor = UIColor.Clear,
                Font            = Theme.BoldFontOfSize(18),
            };
            var items = new UIBarButtonItem(label);

            toolbar.Items = new UIBarButtonItem[] {
                cancel,
                new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace),
                items,
                new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace),
            };

            tableView.Source = new TableSource(this);
            var searchDataSource = new SearchSource(this);

            SearchDisplayController.SearchResultsSource = searchDataSource;
            SearchDisplayController.Delegate            = new SearchDisplay(tableView, searchDataSource);
        }
コード例 #6
0
        void BindTable(List <Schemas.Search.SearchProductModel> locallistSearch)
        {
            SearchSource TableSource = new SearchSource(locallistSearch, this);

            SearchTableView.Source = TableSource;
            SearchTableView.ReloadData();
            SearchTableView.TableFooterView = new UIView();
        }
コード例 #7
0
 /// <summary>
 /// Constructor.
 /// </summary>
 public SearchEventArgs(string searchText, List <ModelElement> source, SearchCriteria criteria)
     : base(null)
 {
     this.searchText                   = searchText;
     this.selectedSearchSource         = new SearchSource(SearchSourceEnum.Custom, "Custom");
     this.selectedSearchSourceElements = source;
     this.selectedSearchCriteria       = criteria;
 }
コード例 #8
0
 /// <summary>
 /// Constructor.
 /// </summary>
 public SearchEventArgs(string searchText, SearchSource source, SearchCriteria criteria)
     : base(null)
 {
     this.searchText                   = searchText;
     this.selectedSearchSource         = source;
     this.selectedSearchSourceElements = null;
     this.selectedSearchCriteria       = criteria;
 }
コード例 #9
0
        private SearchSource CreateDefaultSource(SearchSource originalSource, SearchRecipient recipient)
        {
            SearchSource searchSource = (originalSource != null) ? originalSource.Clone() : new SearchSource();

            searchSource.ReferenceId = (string)recipient.ADEntry[ADRecipientSchema.LegacyExchangeDN];
            searchSource.SourceType  = SourceType.LegacyExchangeDN;
            searchSource.Recipient   = recipient;
            return(searchSource);
        }
コード例 #10
0
        private async void ScrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
        {
            if (!e.IsIntermediate)
            {
                var Sender = sender as ScrollViewer;
                if (Sender.ScrollableHeight - Sender.VerticalOffset == 0)
                {
                    var CurrentAnswer = this.DefaultViewModel["item"] as SearchAnswer;

                    if (CurrentAnswer.Next == null)
                    {
                        this.Scroll.ViewChanged -= ScrollViewer_ViewChanged;
                    }
                    else
                    {
                        lock (IncrementalLoadingHelper)
                        {
                            if (isIncrementalLoadingWorking)
                            {
                                return;
                            }
                            else
                            {
                                isIncrementalLoadingWorking = true;
                            }
                        }

                        var statusBar = StatusBar.GetForCurrentView();
                        statusBar.ProgressIndicator.Text          = ResourceLoader.GetForCurrentView("Resources").GetString("DownloadingMessage");
                        statusBar.ProgressIndicator.ProgressValue = null;
                        await statusBar.ProgressIndicator.ShowAsync();

                        bool isSuccess = await SearchSource.LoadMoreItemsAsync(CurrentAnswer.Next);

                        await statusBar.ProgressIndicator.HideAsync();

                        if (isSuccess)
                        {
                            if ((this.DefaultViewModel["item"] as SearchAnswer).Next == null)
                            {
                                this.Scroll.ViewChanged -= ScrollViewer_ViewChanged;
                            }
                        }
                        else
                        {
                            ShowMessageAsync(ResourceLoader.GetForCurrentView("Resources").GetString("ErrorMessage"));
                        }

                        lock (IncrementalLoadingHelper)
                        {
                            isIncrementalLoadingWorking = false;
                        }
                    }
                }
            }
        }
コード例 #11
0
        private void Paginate(int page)
        {
            var size  = ItemPerPage;
            var start = page * size;

            var nextPage = SearchSource.Skip(start).Take(size).ToArray();

            DisplaySource = nextPage;
            CurrentPage   = page;
        }
コード例 #12
0
        public CustomerSearchViewController()
        {
            this.Title = "Customer Search";
            this.EdgesForExtendedLayout            = UIRectEdge.None;
            this.NavigationItem.RightBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Add, (s, e) => {
                this.NavigationController.PushViewController(new CustomerInformationViewController {
                    Customer = new Customer(),
                    Popover  = Popover,
                    Created  = (c) => {
                        CustomerPicked(c);
                    }
                }, true);
            });
            this.NavigationItem.LeftBarButtonItem = new UIBarButtonItem("Cash Customer", UIBarButtonItemStyle.Plain, async(s, e) => {
                var cust = await Database.Main.GetCashCustomer();
                CustomerPicked(cust);
            });
            PreferredContentSize = new System.Drawing.SizeF(700, 400);
            View.Add(searchBar   = new UISearchBar {
                //SearchBarStyle = UISearchBarStyle.Minimal,
                BarStyle    = UIBarStyle.Black,
                Translucent = true,
            });
            searchBar.SearchButtonClicked += async(object sender, EventArgs e) => {
                source.State = SearchSource.SearchState.Searching;
                tableView.ReloadData();

                var results = await WebService.Main.SearchCustomer(searchBar.Text);

                if (results == null)
                {
                    source.State = SearchSource.SearchState.Error;
                }
                else
                {
                    source.Customers = results;
                    source.State     = SearchSource.SearchState.Completed;
                }
                tableView.ReloadData();
            };
            var tv = getTextField(searchBar);

            searchBar.Subviews.ForEach(x => {
                Console.WriteLine(x.GetType());
            });
            searchBar.Subviews.OfType <UITextField> ().ForEach(x => {
                x.TextColor = UIColor.White;
            });
            searchBar.SizeToFit();
            View.Add(tableView = new UITableView {
                Source    = (source = new SearchSource()),
                RowHeight = 75,
            });
        }
コード例 #13
0
        private SearchSource GetSource(SearchSource source, PublicFolder publicFolder)
        {
            SearchSource searchSource = source.Clone();

            searchSource.OriginalReferenceId = publicFolder.FolderPath.ToString();
            searchSource.ReferenceId         = publicFolder.ContentMailboxGuid.ToString();
            searchSource.FolderSpec          = this.GetFolderSpec(publicFolder);
            searchSource.SourceLocation      = SourceLocation.PrimaryOnly;
            searchSource.SourceType          = SourceType.MailboxGuid;
            return(searchSource);
        }
コード例 #14
0
        public CustomerSearchViewController()
        {
            this.Title = "Customer Search";
            this.EdgesForExtendedLayout = UIRectEdge.None;
            this.NavigationItem.RightBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Add,(s,e)=>{
                this.NavigationController.PushViewController(new CustomerInformationViewController{
                    Customer = new Customer(),
                    Popover = Popover,
                    Created = (c) =>{
                        CustomerPicked (c);
                    }
                },true);
            });
            this.NavigationItem.LeftBarButtonItem = new UIBarButtonItem ("Cash Customer", UIBarButtonItemStyle.Plain ,async (s, e) => {
                var cust = await  Database.Main.GetCashCustomer();
                CustomerPicked(cust);
            });
            PreferredContentSize = new System.Drawing.SizeF (700, 400);
            View.Add (searchBar = new UISearchBar{
                //SearchBarStyle = UISearchBarStyle.Minimal,
                BarStyle = UIBarStyle.Black,
                Translucent = true,
            });
            searchBar.SearchButtonClicked += async (object sender, EventArgs e) => {
                source.State = SearchSource.SearchState.Searching;
                tableView.ReloadData();

                var results = await WebService.Main.SearchCustomer(searchBar.Text);
                if(results == null)
                    source.State = SearchSource.SearchState.Error;
                else{
                    source.Customers = results;
                    source.State = SearchSource.SearchState.Completed;
                }
                tableView.ReloadData();

            };
            var tv = getTextField (searchBar);
            searchBar.Subviews.ForEach (x => {
                Console.WriteLine(x.GetType());
            });
            searchBar.Subviews.OfType<UITextField> ().ForEach (x => {
                x.TextColor = UIColor.White;
            });
            searchBar.SizeToFit ();
            View.Add (tableView = new UITableView{
                Source = (source = new SearchSource()),
                RowHeight = 75,
            });
        }
コード例 #15
0
 private void EnqueueSource(SearchSource source, List <SearchSource> publicFolders)
 {
     if (source != null)
     {
         Recorder.Trace(4L, TraceType.InfoTrace, "DirectoryLookup.EnqueueSource Source:", source);
         if (SearchRecipient.IsPublicFolder(source.Recipient.ADEntry))
         {
             Recorder.Trace(4L, TraceType.InfoTrace, "DirectoryLookup.EnqueueSource PublicFolder:", source);
             if (publicFolders != null)
             {
                 publicFolders.Add(source);
             }
             return;
         }
         base.Executor.EnqueueNext(source);
     }
 }
コード例 #16
0
        public static async Task Search(string query, SearchSource source, string excludedFilesInput, bool usingScript, CancellationToken token, Action <IEnumerable <SearchResult> > partialResultHandler)
        {
            IEnumerable <string> excludedFiles = excludedFilesInput.Split(',').Select(n => n.Trim());

            switch (source)
            {
            case SearchSource.EntireSolution:
                if (usingScript)
                {
                    await Search(query, WorkspaceHelpers.GetCurrentSolution().Projects.SelectMany(n => n.Documents), token, partialResultHandler, excludedFiles);
                }
                else
                {
                    await SearchInStrings(query, WorkspaceHelpers.GetCurrentSolution().Projects.SelectMany(n => n.Documents), token, partialResultHandler, excludedFiles);
                }
                return;

            case SearchSource.CurrentProject:
                if (usingScript)
                {
                    await Search(query, WorkspaceHelpers.GetCurrentProject().Documents, token, partialResultHandler, excludedFiles);
                }
                else
                {
                    await SearchInStrings(query, WorkspaceHelpers.GetCurrentProject().Documents, token, partialResultHandler, excludedFiles);
                }
                return;

            case SearchSource.CurrentDocument:
                if (usingScript)
                {
                    await Search(query, new Document[] { WorkspaceHelpers.GetCurrentDocument() }, token, partialResultHandler, excludedFiles);
                }
                else
                {
                    await SearchInStrings(query, new Document[] { WorkspaceHelpers.GetCurrentDocument() }, token, partialResultHandler, excludedFiles);
                }
                return;

            default:
                throw new ArgumentOutOfRangeException(nameof(source));
            }
        }
コード例 #17
0
        private async Task Search()
        {
            SearchSource source = default(SearchSource);

            if (SearchSolution.IsChecked == true)
            {
                source = SearchSource.EntireSolution;
            }
            else if (SearchProject.IsChecked == true)
            {
                source = SearchSource.CurrentProject;
            }
            else if (SearchDocument.IsChecked == true)
            {
                source = SearchSource.CurrentDocument;
            }

            BeginSearch();

            tokenSource?.Cancel();
            tokenSource = new CancellationTokenSource();
            var token = tokenSource.Token;

            try
            {
                await SearchEngine.Search(Query.Text, source, ExcludedFiles.Text, SearchQuery.IsChecked == true, token, handleResults);

                OutputWindow.WriteLine("---");
                OutputWindow.WriteLine($"Search finished. Processed {SearchEngine.Progress} files.");
            }
            catch (Exception ex)
            {
                OutputWindow.WriteLine("---");
                OutputWindow.WriteLine(ex.ToString());
            }

            EndSearch();
        }
コード例 #18
0
        public override Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary <string, object> state)
        {
            if ((parameter as string) != _query)
            {
                _query = parameter as string;
                var loading = Window.Current.Content as LoadingView;

                _searchSource = new SearchSource(_query, () =>
                {
                    loading.IsLoading = true;
                },
                                                 () =>
                {
                    loading.IsLoading = false;
                });
                SearchList = new IncrementalLoadingCollection <SearchSource, SearchResult>(_searchSource,
                                                                                           onError: (ex) =>
                {
                    loading.IsLoading = false;
                });
            }
            return(Task.CompletedTask);
        }
コード例 #19
0
ファイル: HomeModel.cs プロジェクト: medvekoma/portfotolio
 public HomeModel(string searchText, SearchSource searchSource)
 {
     SearchText = searchText;
     SearchSource = searchSource;
 }
コード例 #20
0
 public HomeModel(string searchText, SearchSource searchSource)
 {
     SearchText   = searchText;
     SearchSource = searchSource;
 }
コード例 #21
0
        public SearchMailboxesResults Search(ISearchPolicy policy, SearchMailboxesInputs input)
        {
            Guid databaseGuid = Guid.Empty;
            List <SearchSource>          list       = new List <SearchSource>(input.Sources);
            ResultAggregator             aggregator = new ResultAggregator();
            IEnumerable <List <string> > enumerable = null;

            Recorder.Record record = policy.Recorder.Start("SearchResultProvider", TraceType.InfoTrace, true);
            Recorder.Trace(5L, TraceType.InfoTrace, new object[]
            {
                "LocalSearchResultsProvider.Search Input:",
                input,
                "Type:",
                input.SearchType
            });
            try
            {
                if (input.SearchType == SearchType.Statistics)
                {
                    enumerable = this.GenerateKeywordStatsQueryBatches(policy, aggregator, input.Criteria);
                }
                SearchCompletedCallback searchCallback = delegate(ISearchMailboxTask task, ISearchTaskResult result)
                {
                    aggregator.MergeSearchResult(result);
                };
                record.Attributes["MBXCNT"] = list.Count;
                while (list.Count > 0)
                {
                    Recorder.Trace(5L, TraceType.InfoTrace, "LocalSearchResultsProvider.Search UnsearchedSources:", list.Count);
                    HashSet <Guid>  hashSet         = new HashSet <Guid>();
                    MailboxInfoList mailboxInfoList = new MailboxInfoList();
                    int             i = 0;
                    while (i < list.Count)
                    {
                        SearchSource searchSource = list[i];
                        Guid         item         = searchSource.MailboxInfo.IsArchive ? searchSource.MailboxInfo.ArchiveGuid : searchSource.MailboxInfo.MailboxGuid;
                        if (!hashSet.Contains(item))
                        {
                            mailboxInfoList.Add(searchSource.MailboxInfo);
                            list.RemoveAt(i);
                            hashSet.Add(item);
                            databaseGuid = (searchSource.MailboxInfo.IsArchive ? searchSource.MailboxInfo.ArchiveDatabase : searchSource.MailboxInfo.MdbGuid);
                        }
                        else
                        {
                            i++;
                        }
                    }
                    Recorder.Trace(5L, TraceType.InfoTrace, "LocalSearchResultsProvider.Search NonDuplicateSourcesToSearch:", mailboxInfoList.Count);
                    AggregatedMailboxSearchTask aggregatedMailboxSearchTask;
                    if (input.SearchType == SearchType.Statistics)
                    {
                        Recorder.Trace(5L, TraceType.InfoTrace, "LocalSearchResultsProvider.Search Statistics:", enumerable);
                        using (IEnumerator <List <string> > enumerator = enumerable.GetEnumerator())
                        {
                            while (enumerator.MoveNext())
                            {
                                List <string> keywordList = enumerator.Current;
                                AggregatedMailboxSearchTask aggregatedMailboxSearchTask2;
                                aggregatedMailboxSearchTask = (aggregatedMailboxSearchTask2 = new AggregatedMailboxSearchTask(databaseGuid, mailboxInfoList, input.Criteria, input.PagingInfo, keywordList, input.CallerInfo));
                                try
                                {
                                    aggregatedMailboxSearchTask.Execute(searchCallback);
                                    this.UpdateSearchStatistics(policy, record, aggregatedMailboxSearchTask);
                                }
                                finally
                                {
                                    if (aggregatedMailboxSearchTask2 != null)
                                    {
                                        ((IDisposable)aggregatedMailboxSearchTask2).Dispose();
                                    }
                                }
                            }
                            continue;
                        }
                    }
                    Recorder.Trace(5L, TraceType.InfoTrace, "LocalSearchResultsProvider.Search Regular");
                    AggregatedMailboxSearchTask aggregatedMailboxSearchTask3;
                    aggregatedMailboxSearchTask = (aggregatedMailboxSearchTask3 = new AggregatedMailboxSearchTask(databaseGuid, mailboxInfoList, input.SearchType, input.Criteria, input.PagingInfo, input.CallerInfo));
                    try
                    {
                        aggregatedMailboxSearchTask.Execute(searchCallback);
                        this.UpdateSearchStatistics(policy, record, aggregatedMailboxSearchTask);
                    }
                    finally
                    {
                        if (aggregatedMailboxSearchTask3 != null)
                        {
                            ((IDisposable)aggregatedMailboxSearchTask3).Dispose();
                        }
                    }
                }
            }
            finally
            {
                policy.Recorder.End(record);
            }
            return(new SearchMailboxesResults(input.Sources)
            {
                SearchResult = aggregator
            });
        }
コード例 #22
0
        public override void Process(DirectoryQueryParameters item)
        {
            Recorder.Trace(4L, TraceType.InfoTrace, new object[]
            {
                "DirectoryLookup.Process Query:",
                item.Query,
                "ExpandPublicFolders:",
                item.ExpandPublicFolders,
                "ExpandGroups:",
                item.ExpandGroups,
                "MatchRecipientsToSources:",
                item.MatchRecipientsToSources
            });
            List <SearchSource> list = null;

            if (item.ExpandPublicFolders)
            {
                Recorder.Trace(4L, TraceType.InfoTrace, "DirectoryLookup.Process ExpandPublicFolders");
                list = new List <SearchSource>();
            }
            Dictionary <SearchSource, bool> matchMap = null;

            if (item.MatchRecipientsToSources)
            {
                Recorder.Trace(4L, TraceType.InfoTrace, "DirectoryLookup.Process MatchRecipients");
                matchMap = new Dictionary <SearchSource, bool>();
                item.Sources.ForEach(delegate(SearchSource t)
                {
                    matchMap[t] = false;
                });
            }
            IDirectoryProvider directoryProvider = SearchFactory.Current.GetDirectoryProvider(base.Executor.Policy);

            foreach (SearchRecipient recipient in directoryProvider.Query(base.Executor.Policy, item))
            {
                if (item.MatchRecipientsToSources)
                {
                    this.EnqueueMatches(recipient, matchMap, list);
                }
                else
                {
                    SearchSource source = this.CreateDefaultSource(null, recipient);
                    this.EnqueueSource(source, list);
                }
            }
            if (item.MatchRecipientsToSources)
            {
                foreach (SearchSource searchSource in from t in matchMap
                         where !t.Value
                         select t.Key)
                {
                    Recorder.Trace(4L, TraceType.WarningTrace, new object[]
                    {
                        "DirectoryLookup.Process FailedSource:",
                        searchSource.ReferenceId,
                        "FailedSourceType:",
                        searchSource.SourceType
                    });
                    base.Executor.Fail(new SearchException(KnownError.ErrorSearchableObjectNotFound)
                    {
                        ErrorSource = searchSource
                    });
                }
            }
            if (item.ExpandPublicFolders && list.Count > 0)
            {
                Recorder.Trace(4L, TraceType.WarningTrace, "DirectoryLookup.Process ExapndPublicFolders Count:", list.Count);
                ISourceConverter sourceConverter = SearchFactory.Current.GetSourceConverter(base.Policy, SourceType.PublicFolder);
                foreach (SearchSource searchSource2 in sourceConverter.Convert(base.Policy, this.GetPublicFolderSources(list)))
                {
                    QueryFilter sourceFilter = SearchRecipient.GetSourceFilter(searchSource2);
                    item.Query    = sourceFilter;
                    item.PageSize = 1;
                    using (IEnumerator <SearchRecipient> enumerator4 = directoryProvider.Query(base.Policy, item).GetEnumerator())
                    {
                        if (enumerator4.MoveNext())
                        {
                            SearchRecipient searchRecipient = enumerator4.Current;
                            searchSource2.Recipient.ADEntry = searchRecipient.ADEntry;
                            this.EnqueueSource(searchSource2, null);
                        }
                    }
                }
            }
        }
コード例 #23
0
        public SearchMailboxesResults Search(ISearchPolicy policy, SearchMailboxesInputs input)
        {
            long                     num        = 0L;
            long                     num2       = 0L;
            long                     num3       = 0L;
            long                     num4       = 0L;
            long                     num5       = 0L;
            long                     num6       = 0L;
            ulong                    num7       = 0UL;
            SortedResultPage         resultPage = null;
            MultiMailboxSearchClient multiMailboxSearchClient = null;
            ResultAggregator         resultAggregator         = new ResultAggregator();
            ByteQuantifiedSize       byteQuantifiedSize       = new ByteQuantifiedSize(0UL);
            List <MailboxStatistics> list = new List <MailboxStatistics>();
            Dictionary <Guid, List <KeyValuePair <int, long> > > dictionary = new Dictionary <Guid, List <KeyValuePair <int, long> > >();
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            Recorder.Record record = policy.Recorder.Start("SearchResultProvider", TraceType.InfoTrace, true);
            Recorder.Trace(5L, TraceType.InfoTrace, new object[]
            {
                "FastLocalSearchResultsProvider.Search Input:",
                input,
                "Type:",
                input.SearchType
            });
            SearchMailboxesResults result;

            try
            {
                Recorder.Trace(5L, TraceType.InfoTrace, "FastLocalSearchResultsProvider.Search Initializing");
                num3 = stopwatch.ElapsedMilliseconds;
                string str  = (input.PagingInfo != null && input.PagingInfo.SortBy != null && input.PagingInfo.SortBy.SortOrder == SortOrder.Ascending) ? "+" : "-";
                string str2 = (input.PagingInfo != null && input.PagingInfo.SortValue != null && input.PagingInfo.SortValue.SortColumn == ItemSchema.DocumentId) ? "[docid]" : FastIndexSystemSchema.Received.Name;
                AdditionalParameters additionalParameters = new AdditionalParameters
                {
                    Sort     = str + str2,
                    Refiners = new string[]
                    {
                        FastIndexSystemSchema.Size.Name
                    }
                };
                long referenceDocId = 0L;
                PaginationQueryFilter pagingFilter = null;
                QueryFilter           queryFilter  = input.Criteria.Query;
                if (input.PagingInfo != null && input.PagingInfo.SortValue != null)
                {
                    referenceDocId = input.PagingInfo.SortValue.SecondarySortValue;
                    if (input.PagingInfo.SortValue.SortColumnValue != null && input.PagingInfo.SortValue.SortColumn != ItemSchema.DocumentId)
                    {
                        pagingFilter = new PaginationQueryFilter(input.PagingInfo);
                    }
                }
                SearchSource searchSource = input.Sources.FirstOrDefault <SearchSource>();
                if (searchSource != null)
                {
                    Guid   guid        = searchSource.MailboxInfo.IsArchive ? searchSource.MailboxInfo.ArchiveDatabase : searchSource.MailboxInfo.MdbGuid;
                    string displayName = FlowDescriptor.GetImsFlowDescriptor(FastLocalSearchResultsProvider.SearchConfig, FastIndexVersion.GetIndexSystemName(guid)).DisplayName;
                    num4 += stopwatch.ElapsedMilliseconds - num3;
                    num3  = stopwatch.ElapsedMilliseconds;
                    Recorder.Trace(5L, TraceType.InfoTrace, new object[]
                    {
                        "FastLocalSearchResultsProvider.Search Initialized DB:",
                        guid,
                        "Flow:",
                        displayName
                    });
                    List <SearchSource> list2 = new List <SearchSource>(input.Sources);
                    while (list2.Count > 0)
                    {
                        HashSet <Guid>      hashSet = new HashSet <Guid>();
                        List <SearchSource> list3   = new List <SearchSource>();
                        int i = 0;
                        while (i < list2.Count)
                        {
                            SearchSource searchSource2 = list2[i];
                            Guid         item          = searchSource2.MailboxInfo.IsArchive ? searchSource2.MailboxInfo.ArchiveGuid : searchSource2.MailboxInfo.MailboxGuid;
                            if (!hashSet.Contains(item))
                            {
                                list3.Add(searchSource2);
                                list2.RemoveAt(i);
                                hashSet.Add(item);
                            }
                            else
                            {
                                i++;
                            }
                        }
                        multiMailboxSearchClient = new MultiMailboxSearchClient(guid, (from s in list3
                                                                                       select s.MailboxInfo).ToArray <MailboxInfo>(), input.Criteria, input.CallerInfo, input.PagingInfo);
                        foreach (SearchSource searchSource3 in list3)
                        {
                            Recorder.Trace(5L, TraceType.InfoTrace, "FastLocalSearchResultsProvider.Search Searching Source", searchSource3);
                            ulong              num8 = 0UL;
                            bool               flag = false;
                            MailboxStatistics  mailboxStatistics   = null;
                            ByteQuantifiedSize byteQuantifiedSize2 = new ByteQuantifiedSize(0UL);
                            List <KeyValuePair <int, long> > list4 = new List <KeyValuePair <int, long> >();
                            Guid guid2 = searchSource3.MailboxInfo.IsArchive ? searchSource3.MailboxInfo.ArchiveGuid : searchSource3.MailboxInfo.MailboxGuid;
                            queryFilter = this.ApplyFolderFilter(queryFilter, searchSource3.MailboxInfo, multiMailboxSearchClient);
                            string text = FqlQueryBuilder.ToFqlString(queryFilter, input.Criteria.QueryCulture);
                            text = this.ApplyPagingFilter(text, referenceDocId, pagingFilter, input.PagingInfo, input.Criteria.QueryCulture);
                            Recorder.Trace(5L, TraceType.InfoTrace, new object[]
                            {
                                "FastLocalSearchResultsProvider.Search Searching Source Guid:",
                                guid2,
                                "Filter:",
                                queryFilter,
                                "Query:",
                                text
                            });
                            num6 += stopwatch.ElapsedMilliseconds - num3;
                            num3  = stopwatch.ElapsedMilliseconds;
                            IEnumerable <KeyValuePair <PagingImsFlowExecutor.QueryExecutionContext, SearchResultItem[]> > enumerable = FastLocalSearchResultsProvider.FlowExecutor.Execute(displayName, guid2, policy.CallerInfo.QueryCorrelationId, text, 0L, input.Criteria.QueryCulture, additionalParameters, Math.Min(FastLocalSearchResultsProvider.SearchConfig.FastQueryResultTrimHits, input.PagingInfo.PageSize), null);
                            foreach (KeyValuePair <PagingImsFlowExecutor.QueryExecutionContext, SearchResultItem[]> keyValuePair in enumerable)
                            {
                                Recorder.Trace(5L, TraceType.InfoTrace, "FastLocalSearchResultsProvider.Search found pages");
                                PagingImsFlowExecutor.QueryExecutionContext key = keyValuePair.Key;
                                ISearchResultItem[] value = keyValuePair.Value;
                                if (!flag)
                                {
                                    Recorder.Trace(5L, TraceType.InfoTrace, "FastLocalSearchResultsProvider.Search found statistics");
                                    num8 += (ulong)FastLocalSearchResultsProvider.FlowExecutor.ReadHitCount(key);
                                    IEnumerable <RefinerResult> source = FastLocalSearchResultsProvider.FlowExecutor.ReadRefiners(key);
                                    RefinerResult refinerResult        = source.FirstOrDefault((RefinerResult t) => t.Name == FastIndexSystemSchema.Size.Name);
                                    if (refinerResult != null)
                                    {
                                        byteQuantifiedSize2 += new ByteQuantifiedSize((ulong)refinerResult.Sum);
                                    }
                                    mailboxStatistics = new MailboxStatistics(searchSource3.MailboxInfo, num8, byteQuantifiedSize2);
                                    flag = true;
                                }
                                foreach (ISearchResultItem searchResultItem in value)
                                {
                                    Recorder.Trace(5L, TraceType.InfoTrace, "FastLocalSearchResultsProvider.Search found items");
                                    IFieldHolder fieldHolder = searchResultItem.Fields.FirstOrDefault((IFieldHolder f) => string.Equals(f.Name, "DocId", StringComparison.InvariantCultureIgnoreCase));
                                    if (fieldHolder != null)
                                    {
                                        long num9       = (long)fieldHolder.Value;
                                        int  documentId = IndexId.GetDocumentId(num9);
                                        IndexId.GetMailboxNumber(num9);
                                        list4.Add(new KeyValuePair <int, long>(documentId, num9));
                                    }
                                }
                                if (list4.Count >= input.PagingInfo.PageSize)
                                {
                                    Recorder.Trace(5L, TraceType.InfoTrace, "FastLocalSearchResultsProvider.Search completed FAST");
                                    break;
                                }
                            }
                            num7 += num8;
                            byteQuantifiedSize += byteQuantifiedSize2;
                            if (list4.Count > 0)
                            {
                                dictionary[guid2] = list4;
                            }
                            if (mailboxStatistics != null)
                            {
                                list.Add(mailboxStatistics);
                            }
                            num += stopwatch.ElapsedMilliseconds - num3;
                            num3 = stopwatch.ElapsedMilliseconds;
                        }
                        if (dictionary.Count > 0)
                        {
                            Recorder.Trace(5L, TraceType.InfoTrace, "FastLocalSearchResultsProvider.Search loading preview items");
                            resultPage = multiMailboxSearchClient.FetchPreviewProperties(dictionary);
                            num2      += stopwatch.ElapsedMilliseconds - num3;
                            num3       = stopwatch.ElapsedMilliseconds;
                        }
                        Recorder.Trace(5L, TraceType.InfoTrace, "FastLocalSearchResultsProvider.Search aggregating");
                        ISearchResult aggregator = new AggregatedSearchTaskResult(new MailboxInfoList(multiMailboxSearchClient.Mailboxes), resultPage, null, num7, byteQuantifiedSize, null, list, null);
                        resultAggregator.MergeSearchResult(aggregator);
                        num5 += stopwatch.ElapsedMilliseconds - num3;
                        num3  = stopwatch.ElapsedMilliseconds;
                    }
                }
                result = new SearchMailboxesResults(input.Sources)
                {
                    SearchResult = resultAggregator
                };
            }
            finally
            {
                record.Attributes["FAST"]      = num;
                record.Attributes["STORE"]     = num2;
                record.Attributes["REST"]      = num6;
                record.Attributes["INIT"]      = num4;
                record.Attributes["AGGR"]      = num5;
                record.Attributes["TOTALSIZE"] = byteQuantifiedSize;
                record.Attributes["TOTALCNT"]  = num7;
                policy.Recorder.End(record);
            }
            return(result);
        }
コード例 #24
0
        public override void Process(SearchMailboxesInputs item)
        {
            Recorder.Trace(4L, TraceType.InfoTrace, "InitializeSearchMailbox.Process Item:", item);
            if (!item.IsLocalCall)
            {
                Recorder.Trace(4L, TraceType.InfoTrace, "InitializeSearchMailbox.Process ApplyConfiguration");
                ISearchConfigurationProvider searchConfigurationProvider = SearchFactory.Current.GetSearchConfigurationProvider(base.Policy);
                searchConfigurationProvider.ApplyConfiguration(base.Policy, ref item);
            }
            CultureInfo culture = CultureInfo.InvariantCulture;

            if (!string.IsNullOrEmpty(item.Language))
            {
                Recorder.Trace(4L, TraceType.InfoTrace, "InitializeSearchMailbox.Process Set Language:", item.Language);
                try
                {
                    culture = new CultureInfo(item.Language);
                }
                catch (CultureNotFoundException)
                {
                    Recorder.Trace(4L, TraceType.ErrorTrace, "InitializeSearchMailbox.Process Failed Language:", item.Language);
                    throw new SearchException(KnownError.ErrorQueryLanguageNotValid);
                }
            }
            if (!string.IsNullOrWhiteSpace(item.SearchQuery))
            {
                Recorder.Trace(4L, TraceType.InfoTrace, "InitializeSearchMailbox.Process Set Query:", item.SearchQuery);
                try
                {
                    IConfigurationSession configurationSession = SearchFactory.Current.GetConfigurationSession(base.Policy);
                    item.Criteria = new SearchCriteria(item.SearchQuery, null, culture, item.SearchType, base.Policy.RecipientSession, configurationSession, item.RequestId, base.Policy.ExecutionSettings.ExcludedFolders);
                    goto IL_195;
                }
                catch (ParserException ex)
                {
                    Recorder.Trace(4L, TraceType.ErrorTrace, new object[]
                    {
                        "InitializeSearchMailbox.Process Failed Query:",
                        item.SearchQuery,
                        "Error:",
                        ex
                    });
                    throw new SearchException(KnownError.ErrorInvalidSearchQuerySyntax, ex);
                }
                catch (TooManyKeywordsException ex2)
                {
                    Recorder.Trace(4L, TraceType.ErrorTrace, new object[]
                    {
                        "InitializeSearchMailbox.Process Failed Query:",
                        item.SearchQuery,
                        "Error:",
                        ex2
                    });
                    throw new SearchException(KnownError.TooManyKeywordsException, ex2);
                }
                goto IL_181;
IL_195:
                if (item.Sources != null && item.Sources.Count > 0)
                {
                    Recorder.Trace(4L, TraceType.ErrorTrace, "InitializeSearchMailbox.Process Source Count:", item.Sources.Count);
                    if (item.Sources.Count > base.Policy.ExecutionSettings.DiscoveryMaxMailboxes && item.SearchType == SearchType.Preview)
                    {
                        Recorder.Trace(4L, TraceType.ErrorTrace, new object[]
                        {
                            "InitializeSearchMailbox.Process Source Failed Count:",
                            item.Sources.Count,
                            "Limit:",
                            base.Policy.ThrottlingSettings.DiscoveryMaxMailboxes,
                            "SearchType:",
                            item.SearchType
                        });
                        throw new SearchException(KnownError.TooManyMailboxesException, new object[]
                        {
                            item.Sources.Count,
                            base.Policy.ExecutionSettings.DiscoveryMaxMailboxes
                        });
                    }
                    if ((long)item.Sources.Count > (long)((ulong)base.Policy.ThrottlingSettings.DiscoveryMaxStatsSearchMailboxes) && item.SearchType == SearchType.Statistics)
                    {
                        Recorder.Trace(4L, TraceType.ErrorTrace, new object[]
                        {
                            "InitializeSearchMailbox.Process Source Failed Count:",
                            item.Sources.Count,
                            "Limit:",
                            base.Policy.ThrottlingSettings.DiscoveryMaxStatsSearchMailboxes,
                            "SearchType:",
                            item.SearchType
                        });
                        throw new SearchException(KnownError.TooManyMailboxesException, new object[]
                        {
                            item.Sources.Count,
                            (int)base.Policy.ThrottlingSettings.DiscoveryMaxStatsSearchMailboxes
                        });
                    }
                    if (!item.IsLocalCall)
                    {
                        Recorder.Trace(4L, TraceType.InfoTrace, "InitializeSearchMailbox.Process Format Query");
                        DirectoryQueryParameters item2 = new DirectoryQueryParameters
                        {
                            ExpandPublicFolders      = true,
                            ExpandGroups             = true,
                            MatchRecipientsToSources = true,
                            Properties = SearchRecipient.SearchProperties,
                            Sources    = item.Sources,
                            PageSize   = (int)base.Policy.ExecutionSettings.DiscoveryADPageSize
                        };
                        base.Executor.EnqueueNext(item2);
                        return;
                    }
                    Recorder.Trace(4L, TraceType.InfoTrace, "InitializeSearchMailbox.Process Search Database");
                    using (List <SearchSource> .Enumerator enumerator = item.Sources.GetEnumerator())
                    {
                        while (enumerator.MoveNext())
                        {
                            SearchSource item3 = enumerator.Current;
                            base.Executor.EnqueueNext(item3);
                        }
                        return;
                    }
                }
                Recorder.Trace(4L, TraceType.ErrorTrace, "InitializeSearchMailbox.Process No Sources");
                throw new SearchException(KnownError.ErrorNoMailboxSpecifiedForSearchOperation);
            }
IL_181:
            Recorder.Trace(4L, TraceType.ErrorTrace, "InitializeSearchMailbox.Process Failed Query Empty");
            throw new SearchException(KnownError.ErrorSearchQueryCannotBeEmpty);
        }
コード例 #25
0
        public SearchMailboxesResults Search(ISearchPolicy policy, SearchMailboxesInputs input)
        {
            ulong            num        = 0UL;
            SortedResultPage resultPage = null;

            new List <SearchSource>(input.Sources);
            List <MailboxStatistics> list = new List <MailboxStatistics>();
            Dictionary <Guid, List <KeyValuePair <int, long> > > dictionary = new Dictionary <Guid, List <KeyValuePair <int, long> > >();

            Recorder.Record record = policy.Recorder.Start("NonIndexableItemProvider", TraceType.InfoTrace, true);
            Recorder.Trace(5L, TraceType.InfoTrace, new object[]
            {
                "NonIndexableItemProvider.Search Input:",
                input,
                "Type:",
                input.SearchType
            });
            try
            {
                SearchSource searchSource = input.Sources.FirstOrDefault <SearchSource>();
                if (searchSource != null)
                {
                    Guid guid = searchSource.MailboxInfo.IsArchive ? searchSource.MailboxInfo.ArchiveDatabase : searchSource.MailboxInfo.MdbGuid;
                    long num2 = 0L;
                    if (input.PagingInfo.SortValue != null && input.PagingInfo.SortValue.SortColumnValue != null)
                    {
                        num2  = input.PagingInfo.SortValue.SecondarySortValue;
                        num2 += 1L;
                    }
                    string indexSystemName = FastIndexVersion.GetIndexSystemName(guid);
                    using (IFailedItemStorage failedItemStorage = Factory.Current.CreateFailedItemStorage(Factory.Current.CreateSearchServiceConfig(), indexSystemName))
                    {
                        foreach (SearchSource searchSource2 in input.Sources)
                        {
                            FailedItemParameters failedItemParameters = new FailedItemParameters(FailureMode.All, FieldSet.Default);
                            failedItemParameters.MailboxGuid = new Guid?(searchSource2.MailboxInfo.IsArchive ? searchSource2.MailboxInfo.ArchiveGuid : searchSource2.MailboxInfo.MailboxGuid);
                            long failedItemsCount = failedItemStorage.GetFailedItemsCount(failedItemParameters);
                            num += (ulong)failedItemsCount;
                            list.Add(new MailboxStatistics(searchSource2.MailboxInfo, (ulong)failedItemsCount, ByteQuantifiedSize.Zero));
                            if (input.SearchType == SearchType.NonIndexedItemPreview)
                            {
                                failedItemParameters.StartingIndexId = num2;
                                failedItemParameters.ResultLimit     = input.PagingInfo.PageSize;
                                ICollection <IFailureEntry> failedItems = failedItemStorage.GetFailedItems(failedItemParameters);
                                dictionary[failedItemParameters.MailboxGuid.Value] = (from t in failedItems
                                                                                      select new KeyValuePair <int, long>(t.DocumentId, t.IndexId)).ToList <KeyValuePair <int, long> >();
                            }
                        }
                    }
                    if (input.SearchType == SearchType.NonIndexedItemPreview)
                    {
                        MultiMailboxSearchClient multiMailboxSearchClient = new MultiMailboxSearchClient(guid, (from t in input.Sources
                                                                                                                select t.MailboxInfo).ToArray <MailboxInfo>(), input.Criteria, input.CallerInfo, input.PagingInfo);
                        resultPage = multiMailboxSearchClient.FetchPreviewProperties(dictionary);
                    }
                }
            }
            finally
            {
                policy.Recorder.End(record);
            }
            return(new SearchMailboxesResults(input.Sources)
            {
                SearchResult = new ResultAggregator(resultPage, null, num, ByteQuantifiedSize.Zero, null, null, list)
            });
        }
コード例 #26
0
        private async void SearchButton_Click(object sender, RoutedEventArgs e)
        {
            this.SearchButton.IsEnabled          = false;
            this.SearchPageCommandBar.IsEnabled  = false;
            this.SearchErrorTextBlock.Visibility = Visibility.Collapsed;

            this.DefaultViewModel["item"] = new SearchAnswer();

            string RequestUri = null;

            if (SearchParametrOne == MainPage.RestaurantsPivotItemName)
            {
                RequestUri = "https://www.foodlook.az/api/restaurants/search/";
            }
            else if (SearchParametrOne == MainPage.CoursesPivotItemName)
            {
                RequestUri = "https://www.foodlook.az/api/courses/search/";
            }
            else if (SearchParametrOne == MainPage.CategoriesPivotItemName)
            {
                RequestUri = "https://www.foodlook.az/api/categories/search/";
            }

            if (SearchParametrTwo == ByName)
            {
                if (this.SearchByNameTextBox.Text == String.Empty)
                {
                    ShowMessageAsync(ResourceLoader.GetForCurrentView("Resources").GetString("EmptyErrorMessage"));
                }
                else
                {
                    RequestUri += "?q=" + this.SearchByNameTextBox.Text;

                    this.progressRing.IsActive = true;

                    var Result = await SearchSource.GetSearchAnswer(new Uri(RequestUri));

                    this.progressRing.IsActive = false;

                    if (Result == null)
                    {
                        this.SearchErrorTextBlock.Text       = ResourceLoader.GetForCurrentView("Resources").GetString("ErrorMessage");
                        this.SearchErrorTextBlock.Visibility = Visibility.Visible;
                    }
                    else if (Result.SearchResults.Count.Equals(0))
                    {
                        this.SearchErrorTextBlock.Text       = ResourceLoader.GetForCurrentView("Resources").GetString("EmptyResultErrorMessage");
                        this.SearchErrorTextBlock.Visibility = Visibility.Visible;
                    }
                    else
                    {
                        this.DefaultViewModel["item"] = Result;
                    }
                }
            }
            else if (SearchParametrTwo == ByPrice)
            {
                if (this.LeftPrice.Text.Equals(String.Empty) || this.RightPrice.Text.Equals(String.Empty))
                {
                    ShowMessageAsync(ResourceLoader.GetForCurrentView("Resources").GetString("EmptyErrorMessage"));
                }
                else
                {
                    RequestUri += "price/from/" + this.LeftPrice.Text.ToString().Replace(',', '.') + "/to/" + this.RightPrice.Text.ToString().Replace(',', '.') + "/";

                    this.progressRing.IsActive = true;

                    var Result = await SearchSource.GetSearchAnswer(new Uri(RequestUri));

                    this.progressRing.IsActive = false;

                    if (Result == null)
                    {
                        this.SearchErrorTextBlock.Text       = ResourceLoader.GetForCurrentView("Resources").GetString("ErrorMessage");
                        this.SearchErrorTextBlock.Visibility = Visibility.Visible;
                    }
                    else if (Result.SearchResults.Count.Equals(0))
                    {
                        this.SearchErrorTextBlock.Text       = ResourceLoader.GetForCurrentView("Resources").GetString("EmptyResultErrorMessage");
                        this.SearchErrorTextBlock.Visibility = Visibility.Visible;
                    }
                    else
                    {
                        this.DefaultViewModel["item"] = Result;
                    }
                }
            }
            else if (SearchParametrTwo == ByPlace)
            {
                if (this.SearchByPlaceTextBox.Text.Equals(string.Empty))
                {
                    ShowMessageAsync(ResourceLoader.GetForCurrentView("Resources").GetString("EmptyErrorMessage"));
                }
                else
                {
                    Geolocator geoLocator = new Geolocator();

                    if (geoLocator.LocationStatus.Equals(PositionStatus.Disabled))
                    {
                        ShowMessageAsync(ResourceLoader.GetForCurrentView("Resources").GetString("LocationErrorMessage"));
                    }
                    else
                    {
                        this.progressRing.IsActive = true;

                        Geoposition geoPosition = await geoLocator.GetGeopositionAsync();

                        string Latitude  = Math.Round(geoPosition.Coordinate.Point.Position.Latitude, 5).ToString(CultureInfo.InvariantCulture);
                        string Longitude = Math.Round(geoPosition.Coordinate.Point.Position.Longitude, 6).ToString(CultureInfo.InvariantCulture);
                        string Radius    = this.SearchByPlaceTextBox.Text.Replace(',', '.');

                        RequestUri = "https://www.foodlook.az/api/restaurants/search/location/latitude/" + Latitude + "/longitude/" + Longitude + "/radius/" + Radius + "/";

                        //RequestUri = "https://www.foodlook.az/api/restaurants/search/location/latitude/40.39236/longitude/49.821542/radius/5/";

                        var Result = await SearchSource.GetSearchAnswer(new Uri(RequestUri));

                        this.progressRing.IsActive = false;

                        if (Result == null)
                        {
                            this.SearchErrorTextBlock.Text       = ResourceLoader.GetForCurrentView("Resources").GetString("ErrorMessage");
                            this.SearchErrorTextBlock.Visibility = Visibility.Visible;
                        }
                        else if (Result.SearchResults.Count.Equals(0))
                        {
                            this.SearchErrorTextBlock.Text       = ResourceLoader.GetForCurrentView("Resources").GetString("EmptyResultErrorMessage");
                            this.SearchErrorTextBlock.Visibility = Visibility.Visible;
                        }
                        else
                        {
                            this.DefaultViewModel["item"] = Result;
                        }
                    }
                }
            }
            else
            {
                ShowMessageAsync(ResourceLoader.GetForCurrentView("Resources").GetString("SomeError"));
            }

            this.SearchButton.IsEnabled         = true;
            this.SearchPageCommandBar.IsEnabled = true;
        }
コード例 #27
0
        private void ProcessPublicFolders(DirectoryQueryParameters item, SearchSource allPublicFolders, List <SearchSource> publicFolders)
        {
            Recorder.Trace(4L, TraceType.InfoTrace, new object[]
            {
                "DirectoryQueryFormatting.ProcessPublicFolders AllPublicFolders:",
                allPublicFolders,
                "MailboxFilterPairs:",
                publicFolders
            });
            List <QueryFilter> list            = new List <QueryFilter>();
            List <string>      list2           = new List <string>();
            ISourceConverter   sourceConverter = SearchFactory.Current.GetSourceConverter(base.Policy, SourceType.PublicFolder);

            if (allPublicFolders != null || publicFolders.Count > 0)
            {
                List <SearchSource>        list3      = new List <SearchSource>();
                IEnumerable <SearchSource> enumerable = (allPublicFolders == null) ? publicFolders : ((IEnumerable <SearchSource>) new SearchSource[]
                {
                    allPublicFolders
                });
                Recorder.Trace(4L, TraceType.InfoTrace, "DirectoryQueryFormatting.ProcessPublicFolders PublicFolderList:", enumerable);
                foreach (SearchSource searchSource in sourceConverter.Convert(base.Policy, enumerable))
                {
                    Recorder.Trace(4L, TraceType.InfoTrace, new object[]
                    {
                        "DirectoryQueryFormatting.ProcessPublicFolders Source:",
                        searchSource.ReferenceId,
                        "SourceType:",
                        searchSource.SourceType
                    });
                    if (searchSource.SourceType != SourceType.PublicFolder)
                    {
                        QueryFilter sourceFilter = SearchRecipient.GetSourceFilter(searchSource);
                        if (sourceFilter != null)
                        {
                            Recorder.Trace(4L, TraceType.InfoTrace, new object[]
                            {
                                "DirectoryQueryFormatting.ProcessPublicFolders Source:",
                                searchSource.ReferenceId,
                                "SourceType:",
                                searchSource.SourceType,
                                "Filter:",
                                sourceFilter
                            });
                            list3.Add(searchSource);
                            if (list2.Contains(searchSource.ReferenceId))
                            {
                                continue;
                            }
                            list.Add(sourceFilter);
                            list2.Add(searchSource.ReferenceId);
                            if (list.Count >= item.PageSize)
                            {
                                this.Enqueue(item, list3, list);
                                list3.Clear();
                                list2.Clear();
                                list.Clear();
                                continue;
                            }
                            continue;
                        }
                    }
                    Recorder.Trace(4L, TraceType.ErrorTrace, "DirectoryQueryFormatting.ProcessPublicFolders FailedSource:", searchSource.ReferenceId);
                    base.Executor.Fail(new SearchException(KnownError.ErrorSearchableObjectNotFound)
                    {
                        ErrorSource = searchSource
                    });
                }
                this.Enqueue(item, list3, list);
            }
        }
コード例 #28
0
        public override void Process(DirectoryQueryParameters item)
        {
            Recorder.Trace(4L, TraceType.InfoTrace, "DirectoryQueryFormatting.Process Item:", item);
            SearchSource        searchSource  = null;
            SearchSource        searchSource2 = null;
            List <SearchSource> list          = new List <SearchSource>();
            List <DirectoryQueryFormatting.SourceFilterPair> list2 = new List <DirectoryQueryFormatting.SourceFilterPair>();

            foreach (SearchSource searchSource3 in item.Sources)
            {
                bool flag = true;
                if (searchSource3.SourceType == SourceType.AutoDetect)
                {
                    searchSource3.SourceType = SearchSource.GetSourceType(searchSource3);
                }
                Recorder.Trace(4L, TraceType.InfoTrace, new object[]
                {
                    "DirectoryQueryFormatting.Process Source:",
                    searchSource3.ReferenceId,
                    "Type:",
                    searchSource3.SourceType
                });
                switch (searchSource3.SourceType)
                {
                case SourceType.LegacyExchangeDN:
                case SourceType.Recipient:
                case SourceType.MailboxGuid:
                    if (searchSource == null)
                    {
                        if (!string.IsNullOrEmpty(searchSource3.ReferenceId))
                        {
                            QueryFilter sourceFilter = SearchRecipient.GetSourceFilter(searchSource3);
                            if (sourceFilter != null)
                            {
                                list2.Add(new DirectoryQueryFormatting.SourceFilterPair
                                {
                                    Source = searchSource3,
                                    Filter = sourceFilter
                                });
                                flag = false;
                            }
                        }
                    }
                    else
                    {
                        flag = false;
                    }
                    break;

                case SourceType.PublicFolder:
                    if (searchSource2 == null)
                    {
                        if (!string.IsNullOrEmpty(searchSource3.ReferenceId))
                        {
                            list.Add(searchSource3);
                            flag = false;
                        }
                    }
                    else
                    {
                        flag = false;
                    }
                    break;

                case SourceType.AllPublicFolders:
                    searchSource2 = searchSource3;
                    flag          = false;
                    break;

                case SourceType.AllMailboxes:
                    searchSource = searchSource3;
                    flag         = false;
                    break;
                }
                if (flag)
                {
                    Recorder.Trace(4L, TraceType.ErrorTrace, new object[]
                    {
                        "DirectoryQueryFormatting.Process FailedSource:",
                        searchSource3.ReferenceId,
                        "FailedType:",
                        searchSource3.SourceType
                    });
                    base.Executor.Fail(new SearchException(KnownError.ErrorSearchableObjectNotFound)
                    {
                        ErrorSource = searchSource3
                    });
                }
                if (searchSource != null && searchSource2 != null)
                {
                    break;
                }
            }
            this.ProcessMailboxes(item, searchSource, list2);
            this.ProcessPublicFolders(item, searchSource2, list);
        }
コード例 #29
0
 private void ProcessMailboxes(DirectoryQueryParameters item, SearchSource allMailboxes, List <DirectoryQueryFormatting.SourceFilterPair> mailboxFilterPairs)
 {
     Recorder.Trace(4L, TraceType.InfoTrace, new object[]
     {
         "DirectoryQueryFormatting.ProcessMailboxes AllMailboxes:",
         allMailboxes,
         "MailboxFilterPairs:",
         mailboxFilterPairs
     });
     if (allMailboxes == null)
     {
         if (mailboxFilterPairs.Count > 0)
         {
             Recorder.Trace(4L, TraceType.InfoTrace, "DirectoryQueryFormatting.ProcessMailboxes Mailboxes Count:", mailboxFilterPairs.Count);
             int num;
             for (int i = 0; i < mailboxFilterPairs.Count; i += num)
             {
                 num = Math.Min(mailboxFilterPairs.Count - i, item.PageSize);
                 IEnumerable <DirectoryQueryFormatting.SourceFilterPair> source = mailboxFilterPairs.Skip(i).Take(num);
                 this.Enqueue(item, from t in source
                              select t.Source, source.Select((DirectoryQueryFormatting.SourceFilterPair t) => t.Filter));
             }
         }
         return;
     }
     Recorder.Trace(4L, TraceType.InfoTrace, "DirectoryQueryFormatting.ProcessMailboxes AllMailboxes");
     if (string.IsNullOrWhiteSpace(allMailboxes.ReferenceId))
     {
         this.Enqueue(item, new SearchSource[]
         {
             allMailboxes
         }, SearchRecipient.GetRecipientTypeFilter(item.RequestGroups));
         return;
     }
     Recorder.Trace(4L, TraceType.InfoTrace, "DirectoryQueryFormatting.ProcessMailboxes AllMailboxes Filter:", allMailboxes.ReferenceId);
     if (SearchRecipient.IsWildcard(allMailboxes.ReferenceId) && item.ExpandGroups)
     {
         Recorder.Trace(4L, TraceType.ErrorTrace, new object[]
         {
             "DirectoryQueryFormatting.ProcessMailboxes Failed AllMailboxes Filter:",
             allMailboxes.ReferenceId,
             "ExpandGroups:",
             item.ExpandGroups,
             "Wildcard with Group Expansion not Allowed"
         });
         throw new SearchException(KnownError.ErrorWildcardAndGroupExpansionNotAllowed);
     }
     if (SearchRecipient.IsSuffixSearchWildcard(allMailboxes.ReferenceId))
     {
         Recorder.Trace(4L, TraceType.ErrorTrace, new object[]
         {
             "DirectoryQueryFormatting.ProcessMailboxes Failed AllMailboxes Filter:",
             allMailboxes.ReferenceId,
             "ExpandGroups:",
             item.ExpandGroups,
             "Wildcard with Suffix not Allowed"
         });
         throw new SearchException(KnownError.ErrorSuffixSearchNotAllowed);
     }
     this.Enqueue(item, new SearchSource[]
     {
         allMailboxes
     }, SearchRecipient.GetRecipientTypeSearchFilter(allMailboxes.ReferenceId, item.RequestGroups));
 }