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