public BeaglePlugin() { server = Daemon.Server; db = Daemon.DefaultDatabase; log = Daemon.Log; query = new Query (); query.AddDomain (QueryDomain.Neighborhood); query.MaxHits = 10000; QueryPart_Property filePart = new QueryPart_Property (); filePart.Type = PropertyType.Keyword; filePart.Key = "beagle:HitType"; filePart.Value = "File"; query.AddPart (filePart); QueryPart_Or queryUnion = new QueryPart_Or (); foreach (string mt in supportedMimeTypes) { QueryPart_Property part = new QueryPart_Property (); part.Type = PropertyType.Keyword; part.Key = "beagle:MimeType"; part.Value = mt; queryUnion.Add (part); } query.AddPart (queryUnion); query.HitsAddedEvent += OnHitsAdded; query.HitsSubtractedEvent += OnHitsSubtracted; query.FinishedEvent += OnFinished; int attempts = 0; while (true) { try { query.SendAsync (); break; } catch (Exception e) { if (attempts++ >= 5) { log.Warn ("Failed to initialize beagle plugin"); query = null; break; } // something bad happened, wait a sec and try again log.Debug ("Sending query failed: " + e.Message); log.Debug ("Waiting 3 seconds..."); Thread.Sleep (3000); } } }
static private Query NewRandomQuery (int length, bool allow_inexpensive, bool inside_an_or) { Query query; query = new Query (); // One in four queries will contain some OR terms. if (! inside_an_or && random.Next (4) == 0) { int N = random.Next (3) + 1; for (int i = 0; i < N; ++i) { QueryPart_Or part; part = new QueryPart_Or (); int sub_length; sub_length = random.Next (length) + 1; if (sub_length < 2) sub_length = 2; // We generate a new query at random, and stuff its QueryParts // into our Or QueryPart. Query or_query; or_query = NewRandomQuery (sub_length, allow_inexpensive, true); foreach (QueryPart sub_part in or_query.Parts) part.Add (sub_part); query.AddPart (part); } } if (allow_inexpensive && ! inside_an_or) { int mime_type; mime_type = random.Next (3); QueryPart_Or mime_type_part = new QueryPart_Or (); QueryPart_Property part; part = new QueryPart_Property (); part.Type = PropertyType.Keyword; part.Key = "beagle:MimeType"; if (mime_type == 0) { part.Value = "inode/directory"; mime_type_part.Add (part); query.AddPart (mime_type_part); } else if (mime_type == 1) { part.Value = "text/plain"; mime_type_part.Add (part); query.AddPart (mime_type_part); } } // Every query must contain at least // one required part. bool contains_required; contains_required = false; for (int i = 0; i < length; ++i) { QueryPart_Text part; part = new QueryPart_Text (); part.Text = Token.GetRandom (); // Prohibited parts are not allowed inside an or if (contains_required && ! inside_an_or) { if (random.Next (2) == 0) part.Logic = QueryPartLogic.Prohibited; } else { // This part will be required. contains_required = true; } if (random.Next (2) == 0) part.SearchTextProperties = false; else if (allow_inexpensive && random.Next (2) == 0) part.SearchFullText = false; query.AddPart (part); } // Note the ! inside_an_or; date range queries don't // work right inside OR queries when being searched // within the resolution of one day. See the FIXME // about hit filters in LuceneCommon.cs if (allow_inexpensive && ! inside_an_or && random.Next (3) == 0) { DateTime a, b; FileSystemObject.PickTimestampRange (out a, out b); QueryPart_DateRange part; part = new QueryPart_DateRange (); part.StartDate = a; part.EndDate = b; query.AddPart (part); } return query; }
private void Query (bool grab_focus) { if (timeout_id != 0) { GLib.Source.Remove (timeout_id); timeout_id = 0; } string query = query_text = entry.Text; if (String.IsNullOrEmpty (query)) return; SetWindowTitle (query); ShowInformation (null); if (QueryEvent != null) QueryEvent (query); view.Clear (); view.Scope = ScopeType.Everything; view.SortType = sort; pages.CurrentPage = pages.PageNum (panes); this.grab_focus = grab_focus; try { // Clean up our previous query, if any exists. DetachQuery (); TotalMatches = 0; current_query = new Query (); current_query.QueryDomain = domain; current_query.AddText (query); current_query.HitsAddedEvent += OnHitsAdded; current_query.HitsSubtractedEvent += OnHitsSubtracted; current_query.FinishedEvent += OnFinished; // Don't search documentation by default if (!search.DocsEnabled) { QueryPart_Property part = new QueryPart_Property (); part.Logic = QueryPartLogic.Prohibited; part.Type = PropertyType.Keyword; part.Key = "beagle:Source"; part.Value = "documentation"; current_query.AddPart (part); } // set scope from scope list ScopeMapping mapping = scope_mappings [scope_list.Active]; if (! String.IsNullOrEmpty (mapping.query_mapping)) current_query.AddText (mapping.query_mapping); current_query.SendAsync (); spinner.Start (); } catch (Beagle.ResponseMessageException) { pages.CurrentPage = pages.PageNum (startdaemon); } catch (Exception e) { Console.WriteLine ("Querying the Beagle daemon failed: {0}", e.Message); } }