Author: enrico
Date: 2007-06-20 11:51:33 +0000 (Wed, 20 Jun 2007)
New Revision: 3010

Added:
   software/ui/src/Engine.cc
   software/ui/src/Engine.h
Removed:
   software/ui/src/Environment.tcc
Modified:
   software/ui/src/Environment.cc
   software/ui/src/Environment.h
   software/ui/src/Makefile.am
Log:
Added prototype interface

Added: software/ui/src/Engine.cc
===================================================================
--- software/ui/src/Engine.cc                           (rev 0)
+++ software/ui/src/Engine.cc   2007-06-20 11:51:33 UTC (rev 3010)
@@ -0,0 +1,116 @@
+/*
+ * Backend engine for game installer UI
+ *
+ * Copyright (C) 2003--2007  Enrico Zini <[EMAIL PROTECTED]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "Engine.h"
+
+using namespace std;
+
+void Engine::recompute()
+{
+       Xapian::Query query;
+       Xapian::Query kwquery;
+       Xapian::Query typequery;
+       Xapian::Query ifacequery;
+
+       if (!m_filter_keywords.empty())
+               kwquery = m_textsearch.makeORQuery(m_filter_keywords);
+       if (m_filter_type.valid())
+               typequery = Xapian::Query("T"+m_filter_type.fullname());
+       if (m_filter_iface.valid())
+               ifacequery = Xapian::Query("T"+m_filter_iface.fullname());
+               
+       if (kwquery.empty())
+               if (typequery.empty())
+                       if (ifacequery.empty())
+                               ;
+                       else
+                               query = ifacequery;
+               else
+                       if (ifacequery.empty())
+                               query = tagquery;
+                       else
+                               query = Xapian::Query(Xapian::Query::OP_AND, 
ifacequery, tagquery);
+       else
+               if (typequery.empty())
+                       if (ifacequery.empty())
+                               query = kwquery;
+                       else
+                               query = Xapian::Query(Xapian::Query::OP_AND, 
kwquery, ifacequery);
+               else
+                       if (ifacequery.empty())
+                               query = Xapian::Query(Xapian::Query::OP_AND, 
kwquery, typequery);
+                       else
+                               query = Xapian::Query(Xapian::Query::OP_AND, 
kwquery,
+                                                       
Xapian::Query(Xapian::Query::OP_AND(typequery, ifacequery)));
+
+       if (query.empty())
+       {
+               // Query 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());
+       }
+
+       Xapian::Enquire enquire(m_textsearch.db());
+       enquire.set_query(Xapian::Query(Xapian::Query::OP_AND,
+                                               Xapian::Query("Trole::program"),
+                                               query));
+
+       m_dirty = false;
+}
+
+std::vector<ept::debtags::Tag> Engine::types() const
+{
+       if (m_dirty) recompute();
+}
+
+std::vector<ept::debtags::Tag> Engine::interfaces() const
+{
+       if (m_dirty) recompute();
+}
+
+void Engine::setKeywordFilter(const std::string& keywords)
+{
+       m_filter_keywords = keywords;
+       m_dirty = true;
+}
+
+void Engine::setTypeFilter(const ept::debtags::Tag& tag)
+{
+       m_filter_type = tag;
+       m_dirty = true;
+}
+
+void Engine::setInterfaceFilter(const ept::debtags::Tag& tag)
+{
+       m_filter_interface = tag;
+       m_dirty = true;
+}
+
+void Engine::setInstalledFilter(State state)
+{
+       m_filter_state = state;
+       m_dirty = true;
+}
+
+// vim:set ts=4 sw=4:

Added: software/ui/src/Engine.h
===================================================================
--- software/ui/src/Engine.h                            (rev 0)
+++ software/ui/src/Engine.h    2007-06-20 11:51:33 UTC (rev 3010)
@@ -0,0 +1,121 @@
+#ifndef GAMEUI_ENGINE_H
+#define GAMEUI_ENGINE_H
+
+/*
+ * Backend engine for game installer UI
+ *
+ * Copyright (C) 2003--2007  Enrico Zini <[EMAIL PROTECTED]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include <ept/apt/apt.h>
+#include <ept/debtags/debtags.h>
+#include <ept/textsearch/textsearch.h>
+#include <ept/popcon/popcon.h>
+#include <string>
+
+namespace ept {
+namespace apt {
+class Apt;
+}
+}
+
+struct Result
+{
+       std::string name;
+       float popcon;
+       int relevance;
+};
+
+class Engine
+{
+public:
+       enum { ANY, INSTALLED, NOTINSTALLED } State;
+
+protected:
+       /// Apt data provider
+       ept::apt::Apt m_apt;
+
+       /// Debtags data provider
+       ept::debtags::Debtags m_debtags;
+
+       /// Xapian data provider
+       ept::textsearch::TextSearch m_textsearch;
+
+       /// Popcon scores
+       ept::popcon::Popcon m_popcon;
+
+       std::string m_filter_keywords;
+       Tag m_filter_type;
+       Tag m_filter_iface;
+       State m_filter_state;
+
+       bool m_dirty;
+
+       std::vector<Result> m_results;
+
+       void recompute();
+
+public:
+       Engine() : m_filter_state(ANY), m_dirty(false) {}
+               
+       /// Access the apt data provider
+       ept::apt::Apt& apt() { return m_apt; }
+
+       /// Access the debtags data provider
+       ept::debtags::Debtags& debtags() { return m_debtags; }
+
+       /// Access the tag vocabulary
+       ept::debtags::Vocabulary& voc() { return m_debtags->vocabulary(); }
+
+       /// Get the list of available game types
+       std::vector<ept::debtags::Tag> types();
+
+       /// Get the list of available interfaces
+       std::vector<ept::debtags::Tag> interfaces();
+
+       /// Get the resulting list of packages
+       const std::vector<Result>& results()
+       {
+               if (m_dirty)
+                       recompute();
+               return m_results;
+       }
+
+       /**
+        * Set the keyword filter from the given string (which will be tokenized
+        * and stemmed properly)
+        */
+       void setKeywordFilter(const std::string& keywords);
+
+       /**
+        * Set the game type filter
+        */
+       void setTypeFilter(const ept::debtags::Tag& tag);
+
+       /**
+        * Set the interface type filter
+        */
+       void setInterfaceFilter(const ept::debtags::Tag& tag);
+
+       /**
+        * Set the installed state filter
+        */
+       void setInstalledFilter(State state);
+};
+
+// vim:set ts=4 sw=4:
+#endif

Modified: software/ui/src/Environment.cc
===================================================================
--- software/ui/src/Environment.cc      2007-06-20 11:48:27 UTC (rev 3009)
+++ software/ui/src/Environment.cc      2007-06-20 11:51:33 UTC (rev 3010)
@@ -20,8 +20,6 @@
 
 #include "Environment.h"
 
-#include <ept/apt/apt.h>
-
 #include <stdio.h>
 #include <stdarg.h>
 #include <unistd.h>    // isatty
@@ -42,14 +40,8 @@
 
 // Initialize the environment with default values
 Environment::Environment() throw ()
-       : m_apt(0), m_debtags(0), _verbose(false), _debug(false) {}
+       : _verbose(false), _debug(false) {}
 
-void Environment::init(bool editable)
-{
-       m_apt = new ept::apt::Apt;
-       m_debtags = new ept::debtags::Debtags(editable);
-}
-
 void fatal_error(const char* fmt, ...) throw() ATTR_PRINTF(1, 2)
 {
        fprintf(stderr, "debtags: ");

Modified: software/ui/src/Environment.h
===================================================================
--- software/ui/src/Environment.h       2007-06-20 11:48:27 UTC (rev 3009)
+++ software/ui/src/Environment.h       2007-06-20 11:51:33 UTC (rev 3010)
@@ -21,24 +21,11 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-#include <ept/debtags/debtags.h>
 #include <string>
 
-namespace ept {
-namespace apt {
-class Apt;
-}
-}
-
 class Environment
 {
 protected:
-       /// Apt data provider
-       ept::apt::Apt* m_apt;
-
-       /// Debtags data provider
-       ept::debtags::Debtags* m_debtags;
-
        // True when operations should be verbose
        bool _verbose;
 
@@ -50,22 +37,6 @@
 public:
        static Environment& get() throw ();
 
-       /**
-        * Initialise the data providers.
-        *
-        * This method must be called before they can be accessed.
-        */
-       void init(bool editable = false);
-
-       /// Access the apt data provider
-       ept::apt::Apt& apt() { return *m_apt; }
-
-       /// Access the debtags data provider
-       ept::debtags::Debtags& debtags() { return *m_debtags; }
-
-       /// Access the tag vocabulary
-       ept::debtags::Vocabulary& voc() { return m_debtags->vocabulary(); }
-
        // Accessor methods
 
        bool verbose() const throw () { return _verbose; }

Deleted: software/ui/src/Environment.tcc
===================================================================
--- software/ui/src/Environment.tcc     2007-06-20 11:48:27 UTC (rev 3009)
+++ software/ui/src/Environment.tcc     2007-06-20 11:51:33 UTC (rev 3010)
@@ -1,67 +0,0 @@
-/*
- * debtags - Implement package tags support for Debian
- *
- * Copyright (C) 2003--2007  Enrico Zini <[EMAIL PROTECTED]>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef DEBTAGS_ENVIRONMENT_TCC
-#define DEBTAGS_ENVIRONMENT_TCC
-
-#include "Environment.h"
-
-#include <pkg/debtags/maint/serializer.h>
-
-#include <tagcoll/input/stdio.h>
-#include <tagcoll/TextFormat.h>
-
-
-template<typename OUT>
-void Environment::readCollection(const string& file, const OUT& out)
-{
-       if (file == "-")
-       {
-               input::Stdio input(stdin, "<stdin>");
-               textformat::parse(input,
-                               pkg::debtags::stringToInt(pkgid, voc(),
-                                       pkg::debtags::intToPkg(pkgid, voc(), 
out)));
-       }
-       else
-       {
-               input::Stdio input(file);
-               textformat::parse(input,
-                               pkg::debtags::stringToInt(pkgid, voc(),
-                                       pkg::debtags::intToPkg(pkgid, voc(), 
out)));
-       }
-}
-
-template<typename OUT>
-void Environment::readCollectionRaw(const string& file, const OUT& out)
-{
-       if (file == "-")
-       {
-               input::Stdio input(stdin, "<stdin>");
-               textformat::parse(input, out);
-       }
-       else
-       {
-               input::Stdio input(file);
-               textformat::parse(input, out);
-       }
-}
-
-#endif
-// vim:set ts=4 sw=4:

Modified: software/ui/src/Makefile.am
===================================================================
--- software/ui/src/Makefile.am 2007-06-20 11:48:27 UTC (rev 3009)
+++ software/ui/src/Makefile.am 2007-06-20 11:51:33 UTC (rev 3010)
@@ -5,6 +5,7 @@
 
 games_SOURCES = \
        Environment.cc \
+       Engine.cc \
        games.cc
 games_LDADD = $(LIBEPT_LIBS)
 
@@ -13,4 +14,4 @@
 
 INCLUDES = -I.. $(LIBEPT_CFLAGS)
 
-EXTRA_DIST = GamesOptions.h Environment.h
+EXTRA_DIST = GamesOptions.h Environment.h Engine.h


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

Reply via email to