r3179 - software/ui/src

Enrico Zini enrico at alioth.debian.org
Mon Jul 2 09:11:18 UTC 2007


Author: enrico
Date: 2007-07-02 09:11:18 +0000 (Mon, 02 Jul 2007)
New Revision: 3179

Modified:
   software/ui/src/Engine.cpp
Log:
Engine now does the right thing with tags

Modified: software/ui/src/Engine.cpp
===================================================================
--- software/ui/src/Engine.cpp	2007-07-02 08:46:34 UTC (rev 3178)
+++ software/ui/src/Engine.cpp	2007-07-02 09:11:18 UTC (rev 3179)
@@ -26,6 +26,16 @@
 using namespace ept::apt;
 using namespace ept::debtags;
 
+static Xapian::Query allGames(Vocabulary& voc)
+{
+	set<Tag> games = voc.tags("game");
+	vector<string> terms;
+	for (set<Tag>::const_iterator i = games.begin();
+			i != games.end(); ++i)
+		terms.push_back("T" + i->fullname());
+	return Xapian::Query(Xapian::Query::OP_OR, terms.begin(), terms.end());
+}
+
 Xapian::Query Engine::makeQuery()
 {
 	Xapian::Query query;
@@ -45,15 +55,13 @@
 			if (ifacequery.empty())
 			{
 				// If there is no query, default to querying all games
-				set<Tag> games = voc().tags("game");
-				vector<string> terms;
-				for (set<Tag>::const_iterator i = games.begin();
-						i != games.end(); ++i)
-					terms.push_back("T" + i->fullname());
-				query = Xapian::Query(Xapian::Query::OP_OR, terms.begin(), terms.end());
+				query = allGames(voc());
 			}
 			else
-				query = ifacequery;
+			{
+				// Otherwise, all games with given interface
+				query = Xapian::Query(Xapian::Query::OP_AND, ifacequery, allGames(voc()));
+			}
 		else
 			if (ifacequery.empty())
 				query = typequery;
@@ -62,9 +70,10 @@
 	else
 		if (typequery.empty())
 			if (ifacequery.empty())
-				query = kwquery;
+				query = Xapian::Query(Xapian::Query::OP_AND, kwquery, allGames(voc()));
 			else
-				query = Xapian::Query(Xapian::Query::OP_AND, kwquery, ifacequery);
+				query = Xapian::Query(Xapian::Query::OP_AND, kwquery,
+							Xapian::Query(Xapian::Query::OP_AND, ifacequery, allGames(voc())));
 		else
 			if (ifacequery.empty())
 				query = Xapian::Query(Xapian::Query::OP_AND, kwquery, typequery);
@@ -86,9 +95,12 @@
 	m_interfaces.clear();
 	m_res_max = 0;
 
+	cerr << "Engine recompute:" << endl;
+
 	// Compute the types
 	if (m_filter_type.valid())
 	{
+		cerr << "  filter type: " << m_filter_type.fullname() << endl;
 		Tag tmp = m_filter_type;
 		m_filter_type = Tag();
 		Xapian::Enquire enquire(m_textsearch.db());
@@ -106,11 +118,14 @@
 					m_types.insert(*j);
 		}
 		m_filter_type = tmp;
+	} else {
+		cerr << "  no filter type" << endl;
 	}
 
 	// Compute the interfaces
 	if (m_filter_iface.valid())
 	{
+		cerr << "  filter iface: " << m_filter_iface.fullname() << endl;
 		Tag tmp = m_filter_iface;
 		m_filter_iface = Tag();
 		Xapian::Enquire enquire(m_textsearch.db());
@@ -128,13 +143,15 @@
 					m_interfaces.insert(*j);
 		}
 		m_filter_iface = tmp;
+	} else {
+		cerr << "  no filter iface" << endl;
 	}
 
 	Xapian::Enquire enquire(m_textsearch.db());
 	// We always want programs, so always AND it here
 	enquire.set_query(makeQuery());
 
-	//cerr << "QUERY: " << enquire.get_query().get_description() << endl;
+	cerr << "  filter query: " << enquire.get_query().get_description() << endl;
 
 	// Get the 100 top matches
 	Xapian::MSet matches = enquire.get_mset(0, 100);




More information about the Pkg-games-commits mailing list