Author: enrico
Date: 2007-06-20 18:36:09 +0000 (Wed, 20 Jun 2007)
New Revision: 3028

Modified:
   software/ui/src/Engine.cpp
   software/ui/src/Engine.h
   software/ui/src/games.cpp
Log:
Added stars

Modified: software/ui/src/Engine.cpp
===================================================================
--- software/ui/src/Engine.cpp  2007-06-20 18:27:13 UTC (rev 3027)
+++ software/ui/src/Engine.cpp  2007-06-20 18:36:09 UTC (rev 3028)
@@ -190,6 +190,35 @@
        m_dirty = false;
 }
 
+std::vector<Result> Engine::related(const std::string& name, int count) const
+{
+       Xapian::Enquire enquire(m_textsearch.db());
+       
+       // Retrieve the document for the given package
+       enquire.set_query(Xapian::Query("pkg:"+name));
+       Xapian::MSet matches = enquire.get_mset(0, 1);
+       Xapian::MSetIterator mi = matches.begin();
+       if (mi == matches.end()) return std::vector<Result>();
+       Xapian::Document doc = mi.get_document();
+
+       // Retrieve the list of similar documents
+       enquire.set_query(Xapian::Query(Xapian::Query::OP_OR, 
doc.termlist_begin(), doc.termlist_end()));
+       matches = enquire.get_mset(0, count);
+       mi = matches.begin();
+       if (mi == matches.end()) return std::vector<Result>();
+       // Skip the first element, which is the package itself
+       vector<Result> results;
+       for (++mi; mi != matches.end(); ++mi)
+       {
+               Result res;
+               res.name = mi.get_document().get_data();
+               res.popcon = m_popcon[res.name];
+               res.relevance = mi.get_percent();
+               results.push_back(res);
+       }
+       return results;
+}
+
 void Engine::setKeywordFilter(const std::string& keywords)
 {
        m_filter_keywords = keywords;

Modified: software/ui/src/Engine.h
===================================================================
--- software/ui/src/Engine.h    2007-06-20 18:27:13 UTC (rev 3027)
+++ software/ui/src/Engine.h    2007-06-20 18:36:09 UTC (rev 3028)
@@ -110,6 +110,9 @@
                return m_results;
        }
 
+       /// Get a list of packages similar to the given one
+       std::vector<Result> related(const std::string& name, int count = 10) 
const;
+
        /// Get the maximum popcon score in the result set
        float popconLocalMax() const { return m_res_max; }
 

Modified: software/ui/src/games.cpp
===================================================================
--- software/ui/src/games.cpp   2007-06-20 18:27:13 UTC (rev 3027)
+++ software/ui/src/games.cpp   2007-06-20 18:36:09 UTC (rev 3028)
@@ -38,6 +38,7 @@
 #include <ept/apt/packagerecord.h>
 
 #include <iostream>
+#include <cmath>
 
 #ifdef USE_GETTEXT
 #include <libintl.h>
@@ -183,7 +184,11 @@
        {
                PackageRecord rec(engine.apt().rawRecord(i->name));
                char* userData = pkgString(rec.package());
-               ui.ResultsBrowser->add((rec.package() + " - " + 
rec.shortDescription()).c_str(), userData);
+               string desc = rec.package() + " - " + rec.shortDescription() + 
" *";
+               int stars = (int)rintf(i->popcon * 4 / engine.popconLocalMax());
+               for (int j = 0; j < stars; ++j)
+                       desc += '*';
+               ui.ResultsBrowser->add(desc.c_str(), userData);
 
                // Relevance is 0 to 100
                // Popcon is a weird floating point number (to be improved)


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

Reply via email to