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