r15226 - in software/ui: . debian src

Petter Reinholdtsen pere at moszumanska.debian.org
Mon Sep 29 08:43:55 UTC 2014


Author: pere
Date: 2014-09-29 08:43:54 +0000 (Mon, 29 Sep 2014)
New Revision: 15226

Modified:
   software/ui/README
   software/ui/debian/changelog
   software/ui/src/Engine.cpp
   software/ui/src/Engine.h
   software/ui/src/goplay.cpp
Log:
Reduce the dependency on libept and use xapian index directly to
avoid downloading popcon data ourself (Closes: 727626).  Patch
from Enrico Zini.

Modified: software/ui/README
===================================================================
--- software/ui/README	2014-09-29 01:13:27 UTC (rev 15225)
+++ software/ui/README	2014-09-29 08:43:54 UTC (rev 15226)
@@ -41,23 +41,15 @@
   ./configure
   make
 
-Running instructions
---------------------
+Troubleshooting
+---------------
 
-Before running the first time, you need to setup ept:
+ * Missing /var/lib/apt-xapian-index/index
 
-  apt-get install ept-cache
+If goplay complains that /var/lib/apt-xapian-index/index does not exist, it
+could be that you just installed apt-xapian-index and the index is still being
+built. Just run `update-apt-xapian-index' as root to rebuild the index or see
+the progress of a running indexer.
 
-Then run "ept-cache info" and follow the instructions.  It is usually something
-like this:
 
-  apt-get install debtags
-  debtags update
-  mkdir /var/lib/popcon/
-  cd /var/lib/popcon
-  wget http://popcon.debian.org/all-popcon-results.txt.gz
-  ept-cache reindex
-
-Then you can finally run ./goplay
-
 Enjoy!

Modified: software/ui/debian/changelog
===================================================================
--- software/ui/debian/changelog	2014-09-29 01:13:27 UTC (rev 15225)
+++ software/ui/debian/changelog	2014-09-29 08:43:54 UTC (rev 15226)
@@ -6,6 +6,9 @@
     to get HTTP download support.
   * Restructure code, move code to find screen shots to its own
     function.
+  * Reduce the dependency on libept and use xapian index directly to
+    avoid downloading popcon data ourself (Closes: 727626).  Patch
+    from Enrico Zini.
 
   [ Miriam Ruiz ]
   * Added dh-autoreconf to Build-Depends and using it in debian/rules

Modified: software/ui/src/Engine.cpp
===================================================================
--- software/ui/src/Engine.cpp	2014-09-29 01:13:27 UTC (rev 15225)
+++ software/ui/src/Engine.cpp	2014-09-29 08:43:54 UTC (rev 15226)
@@ -1,7 +1,7 @@
 /*
  * Backend engine for game installer UI
  *
- * Copyright (C) 2003--2007  Enrico Zini <enrico at debian.org>
+ * Copyright (C) 2003--2013  Enrico Zini <enrico at debian.org>
  *
  * 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
@@ -23,6 +23,7 @@
 #include <wibble/string.h>
 #include <wibble/regexp.h>
 #include <iostream>
+#include <fstream>
 
 using namespace std;
 using namespace wibble;
@@ -30,7 +31,7 @@
 using namespace ept::debtags;
 
 Engine::Engine()
-	: m_db(ept::axi::path_db()), m_stem("en"), m_filter_state(ANY), m_dirty(true), m_max(0)
+	: m_db("/var/lib/apt-xapian-index/index"), m_stem("en"), m_filter_state(ANY), m_dirty(true), m_max(0), m_popcon_validx(-1)
 {
 	m_qp.set_default_op(Xapian::Query::OP_AND);
         m_qp.set_database(m_db);
@@ -39,6 +40,25 @@
         m_qp.add_prefix("pkg", "XP");
         m_qp.add_boolean_prefix("tag", "XT");
         m_qp.add_boolean_prefix("sec", "XS");
+
+        // Read the Xapian value index used for popcon data
+        std::ifstream in;
+        in.open("/var/lib/apt-xapian-index/values", ios::in);
+        if (!in.is_open() || in.fail())
+            m_popcon_validx = -1;
+        ERegexp match_line("^app-popcon[ \t]+([0-9]+)", 2);
+        string line;
+        while (true)
+        {
+            getline(in, line);
+            if (in.fail()) break;
+            if (in.eof()) break;
+            if (match_line.match(line))
+            {
+                m_popcon_validx = strtoul(match_line[1].c_str(), 0, 10);
+                break;
+            }
+        }
 }
 
 struct EngineMatchDecider : public Xapian::MatchDecider
@@ -147,6 +167,14 @@
 	return Xapian::Query(Xapian::Query::OP_AND, globalFilter, query);
 }
 
+float Engine::read_popcon(const Xapian::Document& doc) const
+{
+    if (m_popcon_validx == -1) return 0;
+    string val = doc.get_value(m_popcon_validx);
+    if (val.empty()) return 0;
+    return Xapian::sortable_unserialise(val);
+}
+
 void Engine::recompute()
 {
 	EngineMatchDecider md(*this);
@@ -244,8 +272,9 @@
 				//break;
 
 			Result res;
-			res.name = i.get_document().get_data();
-			res.popcon = m_popcon[res.name];
+			Xapian::Document doc = i.get_document();
+			res.name = doc.get_data();
+			res.popcon = read_popcon(doc);
 			res.relevance = i.get_percent();
 
 			if (res.popcon > m_res_max)
@@ -304,8 +333,9 @@
 	for (++mi; mi != matches.end(); ++mi)
 	{
 		Result res;
-		res.name = mi.get_document().get_data();
-		res.popcon = m_popcon[res.name];
+		Xapian::Document doc = mi.get_document();
+		res.name = doc.get_data();
+		res.popcon = read_popcon(doc);
 		res.relevance = mi.get_percent();
 		results.push_back(res);
 	}

Modified: software/ui/src/Engine.h
===================================================================
--- software/ui/src/Engine.h	2014-09-29 01:13:27 UTC (rev 15225)
+++ software/ui/src/Engine.h	2014-09-29 08:43:54 UTC (rev 15226)
@@ -24,8 +24,7 @@
 #include <ept/apt/apt.h>
 #include <ept/debtags/debtags.h>
 #include <ept/debtags/vocabulary.h>
-#include <ept/axi/axi.h>
-#include <ept/popcon/popcon.h>
+#include <xapian.h>
 #include <string>
 #include <set>
 #include <vector>
@@ -71,9 +70,6 @@
 	/// Xapian query parser
 	Xapian::QueryParser m_qp;
 
-	/// Popcon scores
-	ept::popcon::Popcon m_popcon;
-
 	std::string m_filter_keywords;
 	std::string m_filter_type;
 	std::string m_filter_iface;
@@ -88,9 +84,13 @@
 	float m_max;
 	float m_res_max;
 
+	int m_popcon_validx;
+
 	Xapian::Query makeQuery();
 	void recompute();
 
+	float read_popcon(const Xapian::Document& doc) const;
+
 public:
 	/// Facet to use as the main package type
 	std::string mainFacet;
@@ -112,8 +112,8 @@
 	/// Access the tag vocabulary
 	ept::debtags::Vocabulary& voc() { return m_vocabulary; }
 
-	/// Access the popcon data source
-	ept::popcon::Popcon& popcon() { return m_popcon; }
+	/// Check if popcon data is available
+	bool hasPopcon() const { return m_popcon_validx != -1; }
 
 	/// Get the list of available game types
 	const std::set<std::string>& types()

Modified: software/ui/src/goplay.cpp
===================================================================
--- software/ui/src/goplay.cpp	2014-09-29 01:13:27 UTC (rev 15225)
+++ software/ui/src/goplay.cpp	2014-09-29 08:43:54 UTC (rev 15226)
@@ -173,7 +173,7 @@
 	static int widths_with_popcon[] = { 100, 300, 0 }; // widths for each column
 	static int widths_without_popcon[] = { 100, 0 };
 	ui.ResultsBrowser->clear();
-	if (engine.popcon().hasData())
+	if (engine.hasPopcon())
 	{
 		char empty_string[1] = "";
 		ui.ResultsBrowser->column_widths(widths_with_popcon);
@@ -251,7 +251,7 @@
 
 		string desc = string(fmtstr) + rec.package() + "\t" + 
 			string(fmtstr) + rec.shortDescription();
-		if (engine.popcon().hasData() && i->popcon)
+		if (engine.hasPopcon() && i->popcon)
 		{
 			desc += "\t" + string(fmtstr);
 			char stars[16];




More information about the Pkg-games-commits mailing list