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 
<[EMAIL PROTECTED]> and Miriam Ruiz <[EMAIL PROTECTED]>")
@@ -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);


_______________________________________________
Pkg-games-commits mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/pkg-games-commits

Reply via email to