r5811 - in software/ui: . src

Enrico Zini enrico at alioth.debian.org
Mon Feb 18 00:06:02 UTC 2008


Author: enrico
Date: 2008-02-18 00:06:02 +0000 (Mon, 18 Feb 2008)
New Revision: 5811

Added:
   software/ui/.gitignore
Modified:
   software/ui/src/Engine.cpp
   software/ui/src/Engine.h
   software/ui/src/GamesOptions.h
   software/ui/src/goplay.cpp
Log:
Implemented --ftags and --secondary


Added: software/ui/.gitignore
===================================================================
--- software/ui/.gitignore	                        (rev 0)
+++ software/ui/.gitignore	2008-02-18 00:06:02 UTC (rev 5811)
@@ -0,0 +1,26 @@
+Makefile
+Makefile.in
+.deps
+.libs
+aclocal.m4
+autom4te.cache
+config.guess
+config.h
+config.h.in
+config.log
+config.status
+config.sub
+configure
+depcomp
+goplay.1
+install-sh
+libtool
+ltmain.sh
+missing
+stamp-h1
+src/goplay
+src/manpage
+src/ui.h
+src/ui.cpp
+*.o
+*.swp

Modified: software/ui/src/Engine.cpp
===================================================================
--- software/ui/src/Engine.cpp	2008-02-17 23:19:09 UTC (rev 5810)
+++ software/ui/src/Engine.cpp	2008-02-18 00:06:02 UTC (rev 5811)
@@ -26,6 +26,12 @@
 using namespace ept::apt;
 using namespace ept::debtags;
 
+Engine::Engine(const std::string& mainFacet, const std::string& secondaryFacet)
+	: mainFacet(mainFacet), secondaryFacet(secondaryFacet), m_filter_state(ANY), m_dirty(true), m_max(0)
+{
+	setGlobalFilter(Xapian::Query("XTrole::program"));
+}
+
 struct EngineMatchDecider : public Xapian::MatchDecider
 {
 	Engine& e;
@@ -107,9 +113,7 @@
 							Xapian::Query(Xapian::Query::OP_AND, typequery, ifacequery));
 
 	// We always want programs, so always AND it here
-	return Xapian::Query(Xapian::Query::OP_AND,
-						Xapian::Query("XTrole::program"),
-						query);
+	return Xapian::Query(Xapian::Query::OP_AND, globalFilter, query);
 }
 
 void Engine::recompute()
@@ -177,7 +181,7 @@
 				set<Tag> tags = m_debtags.getTagsOfItem(i.get_document().get_data());
 				for (set<Tag>::const_iterator j = tags.begin();
 						j != tags.end(); ++j)
-					if (j->facet().name() == "interface")
+					if (j->facet().name() == secondaryFacet)
 						m_interfaces.insert(*j);
 			}
 		}
@@ -187,7 +191,6 @@
 	}
 
 	Xapian::Enquire enquire(m_textsearch.db());
-	// We always want programs, so always AND it here
 	enquire.set_query(makeQuery());
 
 	//cerr << "  filter query: " << enquire.get_query().get_description() << endl;
@@ -228,7 +231,7 @@
 						j != tags.end(); ++j)
 					if (!m_filter_type.valid() && j->facet().name() == mainFacet)
 						m_types.insert(*j);
-					else if (!m_filter_iface.valid() && j->facet().name() == "interface")
+					else if (!m_filter_iface.valid() && j->facet().name() == secondaryFacet)
 						m_interfaces.insert(*j);
 			}
 		}

Modified: software/ui/src/Engine.h
===================================================================
--- software/ui/src/Engine.h	2008-02-17 23:19:09 UTC (rev 5810)
+++ software/ui/src/Engine.h	2008-02-18 00:06:02 UTC (rev 5811)
@@ -67,6 +67,9 @@
 	/// Facet to use as the main package type
 	std::string mainFacet;
 
+	/// Facet to use as the secondary package type
+	std::string secondaryFacet;
+
 	std::string m_filter_keywords;
 	ept::debtags::Tag m_filter_type;
 	ept::debtags::Tag m_filter_iface;
@@ -81,12 +84,19 @@
 	float m_max;
 	float m_res_max;
 
+	Xapian::Query globalFilter;
+
 	Xapian::Query makeQuery();
 	void recompute();
 
 public:
-	Engine(const std::string& mainFacet="game")
-		: mainFacet(mainFacet), m_filter_state(ANY), m_dirty(true), m_max(0) {}
+	Engine(const std::string& mainFacet="game", const std::string& secondaryFacet="interface");
+
+	/**
+	 * Set a tag filter that is ANDed to all searches.  By default this is the
+	 * role::program tag only.
+	 */
+	void setGlobalFilter(const Xapian::Query& filter) { globalFilter = filter; }
 		
 	/// Access the apt data provider
 	ept::apt::Apt& apt() { return m_apt; }

Modified: software/ui/src/GamesOptions.h
===================================================================
--- software/ui/src/GamesOptions.h	2008-02-17 23:19:09 UTC (rev 5810)
+++ software/ui/src/GamesOptions.h	2008-02-18 00:06:02 UTC (rev 5811)
@@ -32,6 +32,8 @@
 	BoolOption* out_debug;
 	BoolOption* out_verbose;
 	StringOption* mainFacet;
+	StringOption* secondaryFacet;
+	StringOption* ftags;
 
 	GamesOptions() 
 		: StandardParserWithManpage("goplay", VERSION, 1, "Enrico Zini <enrico at enricozini.org> and Miriam Ruiz <little_miry at yahoo.es>")
@@ -48,6 +50,11 @@
 						"enable debugging output (including verbose output)");
 		mainFacet = add<StringOption>("go", 0, "go", "facet",
 						"use the given facet instead of 'games'");
+		secondaryFacet = add<StringOption>("secondary", 0, "secondary", "facet",
+						"use the given facet instead of 'interface'");
+		ftags = add<StringOption>("ftags", 0, "ftags", "tags",
+						"comma-separated list of tags that are always "
+						"required in search results (default: role::program)");
 	}
 };
 

Modified: software/ui/src/goplay.cpp
===================================================================
--- software/ui/src/goplay.cpp	2008-02-17 23:19:09 UTC (rev 5810)
+++ software/ui/src/goplay.cpp	2008-02-18 00:06:02 UTC (rev 5811)
@@ -37,6 +37,8 @@
 #include "Engine.h"
 
 #include <ept/apt/packagerecord.h>
+#include <wibble/regexp.h>
+#include <xapian.h>
 
 #include <iostream>
 #include <cmath>
@@ -356,8 +358,29 @@
 		string mainFacet = "game";
 		if (opts.mainFacet->isSet())
 			mainFacet = opts.mainFacet->stringValue();
-		Engine engine(mainFacet);
 
+		string secondaryFacet = "game";
+		if (opts.secondaryFacet->isSet())
+			secondaryFacet = opts.secondaryFacet->stringValue();
+
+		Engine engine(mainFacet, secondaryFacet);
+
+		if (opts.ftags->isSet())
+		{
+			Xapian::Query fquery;
+			wibble::Splitter tags(", *", REG_EXTENDED);
+			bool first = true;
+			for (wibble::Splitter::const_iterator i = tags.begin(opts.ftags->stringValue());
+					i != tags.end(); ++i)
+			{
+				if (first)
+					fquery = Xapian::Query("XT"+*i);
+				else
+					fquery = Xapian::Query(Xapian::Query::OP_AND, fquery, Xapian::Query("XT"+*i));
+			}
+			engine.setGlobalFilter(fquery);
+		}
+
 		/*
 		cerr << " *** Initial:" << endl;
 		printResults(engine);




More information about the Pkg-games-commits mailing list