public List<ENSessionFindNotesResult> FindNotes(ENNoteSearch noteSearch, ENNotebook notebook, SearchScope scope, SortOrder order, int maxResults) { if (!IsAuthenticated) { throw new ENAuthExpiredException(); } // App notebook scope is internally just an "all" search, because we don't a priori know where the app // notebook is. There's some room for a fast path in this flow if we have a saved linked record to a // linked app notebook, but that case is likely rare enough to prevent complexifying this code for. if (scope.HasFlag(SearchScope.AppNotebook)) { scope = SearchScope.All; } // Validate the scope and sort arguments. if (notebook != null && scope != SearchScope.None) { ENSDKLogger.ENSDKLogError("No search scope necessary if notebook provided."); scope = SearchScope.None; } else if (notebook == null && scope == SearchScope.None) { ENSDKLogger.ENSDKLogError("Search scope or notebook must be specified. Defaulting to personal scope."); scope = SearchScope.DefaultScope; } bool requiresLocalMerge = false; if (scope != SearchScope.None) { // Check for multiple scopes. Because linked scope can subsume multiple linked notebooks, that *always* triggers // the multiple scopes. If not, then both personal and business must be set together. if ((scope.HasFlag(SearchScope.Personal) && scope.HasFlag(SearchScope.Business)) || scope.HasFlag(SearchScope.PersonalLinked)) { // If we're asked for multiple scopes, relevance is not longer supportable (since we // don't know how to combine relevance on the client), so default to updated date, // which is probably the closest proxy to relevance. if (order.HasFlag(SortOrder.Relevance)) { ENSDKLogger.ENSDKLogError("Cannot sort by relevance across multiple search scopes. Using update date."); order = (EvernoteSDK.ENSession.SortOrder)EN_FLAG_CLEAR(order, SortOrder.Relevance); order = (EvernoteSDK.ENSession.SortOrder)EN_FLAG_SET(order, SortOrder.RecentlyUpdated); } requiresLocalMerge = true; } } NotesMetadataResultSpec resultSpec = new NotesMetadataResultSpec(); resultSpec.IncludeNotebookGuid = true; resultSpec.IncludeTitle = true; resultSpec.IncludeCreated = true; resultSpec.IncludeUpdated = true; resultSpec.IncludeUpdateSequenceNum = true; NoteFilter noteFilter = new NoteFilter(); noteFilter.Words = noteSearch.SearchString; if (order.HasFlag(SortOrder.Title)) { noteFilter.Order = (System.Int32)NoteSortOrder.TITLE; } else if (order.HasFlag(SortOrder.RecentlyCreated)) { noteFilter.Order = (System.Int32)NoteSortOrder.CREATED; } else if (order.HasFlag(SortOrder.RecentlyUpdated)) { noteFilter.Order = (System.Int32)NoteSortOrder.UPDATED; } else if (order.HasFlag(SortOrder.Relevance)) { noteFilter.Order = (System.Int32)NoteSortOrder.RELEVANCE; } // "Normal" sort is ascending for titles, and descending for dates and relevance. bool sortAscending = order.HasFlag(SortOrder.Title) ? true : false; if (order.HasFlag(SortOrder.Reverse)) { sortAscending = !sortAscending; } noteFilter.Ascending = sortAscending; if (notebook != null) { noteFilter.NotebookGuid = notebook.Guid; } // Set up context ENSessionFindNotesContext context = new ENSessionFindNotesContext(); context.scopeNotebook = notebook; context.scope = scope; context.order = order; context.noteFilter = noteFilter; context.resultSpec = resultSpec; context.maxResults = maxResults; context.findMetadataResults = new List<NoteMetadata>(); context.requiresLocalMerge = requiresLocalMerge; context.sortAscending = sortAscending; // If we have a scope notebook, we already know what notebook the results will appear in. // If we don't have a scope notebook, then we need to query for all the notebooks to determine // where to search. if (context.scopeNotebook == null) { context = FindNotes_ListNotebooks(context); return context.results; } context = FindNotes_FindInPersonalScope(context); return context.results; }
public ENCollection FindNotesForCOM(ENNoteSearch noteSearch, ENNotebook notebook, SearchScope scope, SortOrder order, int maxResults) { System.Windows.Forms.MessageBox.Show("Finding...", "Debug", System.Windows.Forms.MessageBoxButtons.OK); List<ENSessionFindNotesResult> results = ENSession.SharedSession.FindNotes(noteSearch, notebook, scope, order, maxResults); System.Windows.Forms.MessageBox.Show(results.Count.ToString(),"Debug",System.Windows.Forms.MessageBoxButtons.OK); ENCollection comResults = new ENCollection(); foreach (ENSessionFindNotesResult result in results) { object tempvar = result; comResults.Add(ref tempvar); } return comResults; }