r8430 - software/gofind

Miriam Ruiz miriam at alioth.debian.org
Tue Nov 18 01:25:04 UTC 2008


Author: miriam
Date: 2008-11-18 01:25:04 +0000 (Tue, 18 Nov 2008)
New Revision: 8430

Modified:
   software/gofind/gofind.cpp
   software/gofind/gui_cli.cpp
   software/gofind/guiplugin.h
Log:
Moved all CLI to plugin



Modified: software/gofind/gofind.cpp
===================================================================
--- software/gofind/gofind.cpp	2008-11-18 00:56:10 UTC (rev 8429)
+++ software/gofind/gofind.cpp	2008-11-18 01:25:04 UTC (rev 8430)
@@ -20,8 +20,6 @@
  */
 
 #include "common.h"
-#include "filter.h"
-#include "slre.h"
 #include "guiplugin.h"
 
 #include "Environment.h"
@@ -339,7 +337,6 @@
 
 	GUIPlugIn *gui=gui_factory.factory->CreatePlugIn();
 
-	std::ostream &out = std::cout;
 	gui->Comment(_("Starting system"));
 
 	wibble::commandline::GamesOptions opts;
@@ -447,185 +444,7 @@
 		*/
 
 		gui->Comment(_("System running"));
-
-		bool run = true;
-
-		struct slre_pattern pattern[5];
-		const char *pattern_text[5];
-		const char pattern_type[] = { 'h', 'l', 'g', 's', '\0' };
-		pattern_text[0] = "^\\s*(HELP|H)\\s*$";
-		pattern_text[1] = "^\\s*(LIST|L)\\s+(T|TYPES|I|INTERFACES|R|RESULTS)\\s*$";
-		pattern_text[2] = "^\\s*(GET|G)\\s+(\\S+)\\s*$";
-		pattern_text[3] = "^\\s*(SET|S)\\s+(\\S+)\\s*=\\s*(\\S+)\\s*$";
-		pattern_text[4] = NULL;
-
-		int j = 0;
-		while (pattern_text[j] != NULL)
-		{
-			if (!slre_compile(&pattern[j], pattern_text[j]))
-				std::cerr << _("Error compiling RE: ") << pattern[j].err_str << std::endl;
-			j++;
-		}
-
-		while (run && !feof(stdin))
-		{
-			char buffer[128];
-			struct slre_capture captures[16];
-			fgets(buffer, sizeof(buffer), stdin);
-			if (*buffer == '#') continue;
-			for (char *pnt = buffer; *pnt; pnt++)
-			{
-				if (*pnt=='\0' || *pnt=='\r' || *pnt=='\n')
-				{
-					*pnt = '\0';
-					break;
-				}
-			}
-
-			int match = -1;
-			int j = 0;
-			while (match == -1 && pattern_text[j] != NULL)
-			{
-				if (slre_match(pattern+j, buffer, strlen(buffer), captures))
-				{
-					match = j;
-					out << "#match pattern " << match << std::endl;
-				}
-				j++;
-			}
-			if (match == -1)
-				out << "#no pattern match " << match << std::endl;
-			else switch (pattern_type[match])
-			{
-				case 'h':
-				{
-					out << "# Commands:" << std::endl
-						<< "# HELP" << std::endl
-						<< "# LIST TYPES|INTERFACES|RESULTS" << std::endl
-						<< "# GET <param>" << std::endl
-						<< "# SET <param>=<value>" << std::endl;
-				}
-				break;
-				case 'l':
-				{
-					out << "#list: \"" << captures[2].ptr <<  "\"" << std::endl;
-					switch (captures[2].ptr[0])
-					{
-						case 'T': case 't':
-						{
-							const set<Tag> types = engine.types();
-							for (set<Tag>::const_iterator i = types.begin(); i != types.end(); ++i)
-							{
-								out << " " << i->shortDescription().c_str() << std::endl;
-							}
-							out << std::endl ;
-							break;
-						}
-						case 'I': case 'i':
-						{
-							const set<Tag> ifaces = engine.interfaces();
-							for (set<Tag>::const_iterator i = ifaces.begin();
-									i != ifaces.end(); ++i)
-							{
-								out << " " << i->shortDescription().c_str() << std::endl;
-							}
-							out << std::endl ;
-							break;
-						}
-						case 'R': case 'r':
-						{
-							const std::vector<Result> res = engine.results();
-							for (vector<Result>::const_iterator i = res.begin();
-									i != res.end(); ++i)
-							{
-								PackageRecord rec(engine.apt().rawRecord(i->name));
-	//							char* userData = pkgString(rec.package());
-
-								set<Tag> tags = engine.debtags().getTagsOfItem((const char *)rec.package().c_str());
-								switch (pkgfilter.TagsValue(tags))
-								{
-									case PackageFilter::Green:
-										break;
-									case PackageFilter::Yellow:
-										break;
-									case PackageFilter::Red:
-										break;
-									case PackageFilter::Black:
-										break;
-									default:
-										break;
-								}
-
-								out << " "<<  rec.package() + "\t" + rec.shortDescription();
-
-								// Relevance is 0 to 100
-								// Popcon is a weird floating point number (to be improved)
-								//FIXMEaddToResults(rec.package() + " - " + rec.shortDescription(), i->relevance, i->popcon);
-								if (engine.popcon().hasData() && i->popcon)
-								{
-									out << "\tPOPCON=" << (int)rintf(log(i->popcon) * 100 / log(engine.popconLocalMax()));
-								}
-
-								if (engine.popcon().hasData() && i->relevance)
-								{
-									out << "\tRELEVANCE=" << i->relevance;
-								}
-
-								out << std::endl ;
-							}
-							out << std::endl ;
-							break;
-						}
-					}
-				}
-				break;
-				case 'g':
-				{
-					char name[sizeof(buffer)];
-					strncpy(name, captures[2].ptr, captures[2].len);
-					name[captures[2].len] = '\0';
-					out << "#get " << name << std::endl ;
-					if (memcmp(captures[2].ptr, "INSTALLED", 9) == 0)
-					{
-						switch (engine.getInstalledFilter())
-						{
-							case Engine::INSTALLED:
-								out << "installed=yes" << std::endl ;
-								break;
-							case Engine::NOTINSTALLED:
-								out << "installed=no" << std::endl ;
-								break;
-							case Engine::ANY:
-								out << "installed=any" << std::endl ;
-								break;
-							default:
-								out << "#unknown installed value" << std::endl ;
-								break;
-						}
-					}
-					if (memcmp(captures[2].ptr, "KEYWORD", 7) == 0)
-					{
-						out << "keyword=\"" << engine.getKeywordFilter() << "\"" << std::endl ;
-					}
-					if (memcmp(captures[2].ptr, "TYPE", 4) == 0)
-					{
-						out << "type=?" << std::endl ;
-					}
-					if (memcmp(captures[2].ptr, "INTERFACE", 9) == 0)
-					{
-						out << "interface=?" << std::endl ;
-					}
-				}
-				break;
-				case 'p':
-				{
-				}
-				break;
-				default:
-				break;
-			}
-		}
-
+		gui->Go(engine);
 		gui->Comment(_("Stopping system"));
 		delete gui;
 		return 0;
@@ -657,7 +476,6 @@
 		cerr << endl;
 		return 1;
 	}
-
 }
 #endif
 

Modified: software/gofind/gui_cli.cpp
===================================================================
--- software/gofind/gui_cli.cpp	2008-11-18 00:56:10 UTC (rev 8429)
+++ software/gofind/gui_cli.cpp	2008-11-18 01:25:04 UTC (rev 8430)
@@ -19,17 +19,41 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+#include "common.h"
 #include "guiplugin.h"
 
+#include "filter.h"
 #include "slre.h"
 
 #include <typeinfo>
 #include <iostream>
 #include <string>
 
+#include <ept/apt/packagerecord.h>
+#include <wibble/regexp.h>
+#include <wibble/string.h>
+#include <xapian.h>
+
+#include <iostream>
+#include <cmath>
+
+#ifdef USE_GETTEXT
+#include <libintl.h>
+#include <locale.h>
+#else
+// Work-around until goplay is actually gettextised
+#define gettext(a) (a)
+#endif
+
 #include <stdarg.h>
 #include <string.h>
 
+using namespace std;
+using namespace ept;
+using namespace ept::debtags;
+using namespace ept::apt;
+using namespace ept::textsearch;
+
 class GUIPlugInCLI : public GUIPlugIn
 {
  public:
@@ -44,7 +68,7 @@
 	}
 
 	virtual void Comment(const char *szFormat, ...);
-	virtual void Go();
+	virtual bool Go(Engine &engine);
 };
 
 void GUIPlugInCLI::Comment(const char *szFormat, ...)
@@ -61,8 +85,187 @@
 	std::cout << "##" << str << std::endl;
 }
 
-void GUIPlugInCLI::Go()
+bool GUIPlugInCLI::Go(Engine &engine)
 {
+	std::ostream &out = std::cout;
+
+	bool run = true;
+
+	struct slre_pattern pattern[5];
+	const char *pattern_text[5];
+	const char pattern_type[] = { 'h', 'l', 'g', 's', '\0' };
+	pattern_text[0] = "^\\s*(HELP|H)\\s*$";
+	pattern_text[1] = "^\\s*(LIST|L)\\s+(T|TYPES|I|INTERFACES|R|RESULTS)\\s*$";
+	pattern_text[2] = "^\\s*(GET|G)\\s+(\\S+)\\s*$";
+	pattern_text[3] = "^\\s*(SET|S)\\s+(\\S+)\\s*=\\s*(\\S+)\\s*$";
+	pattern_text[4] = NULL;
+
+	int j = 0;
+	while (pattern_text[j] != NULL)
+	{
+		if (!slre_compile(&pattern[j], pattern_text[j]))
+			std::cerr << _("Error compiling RE: ") << pattern[j].err_str << std::endl;
+		j++;
+	}
+
+	while (run && !feof(stdin))
+	{
+		char buffer[128];
+		struct slre_capture captures[16];
+		fgets(buffer, sizeof(buffer), stdin);
+		if (*buffer == '#') continue;
+		for (char *pnt = buffer; *pnt; pnt++)
+		{
+			if (*pnt=='\0' || *pnt=='\r' || *pnt=='\n')
+			{
+				*pnt = '\0';
+				break;
+			}
+		}
+
+		int match = -1;
+		int j = 0;
+		while (match == -1 && pattern_text[j] != NULL)
+		{
+			if (slre_match(pattern+j, buffer, strlen(buffer), captures))
+			{
+				match = j;
+				out << "#match pattern " << match << std::endl;
+			}
+			j++;
+		}
+		if (match == -1)
+			out << "#no pattern match " << match << std::endl;
+		else switch (pattern_type[match])
+		{
+			case 'h':
+			{
+				out << "# Commands:" << std::endl
+					<< "# HELP" << std::endl
+					<< "# LIST TYPES|INTERFACES|RESULTS" << std::endl
+					<< "# GET <param>" << std::endl
+					<< "# SET <param>=<value>" << std::endl;
+			}
+			break;
+			case 'l':
+			{
+				out << "#list: \"" << captures[2].ptr <<  "\"" << std::endl;
+				switch (captures[2].ptr[0])
+				{
+					case 'T': case 't':
+					{
+						const set<Tag> types = engine.types();
+						for (set<Tag>::const_iterator i = types.begin(); i != types.end(); ++i)
+						{
+							out << " " << i->shortDescription().c_str() << std::endl;
+						}
+						out << std::endl ;
+						break;
+					}
+					case 'I': case 'i':
+					{
+						const set<Tag> ifaces = engine.interfaces();
+						for (set<Tag>::const_iterator i = ifaces.begin();
+								i != ifaces.end(); ++i)
+						{
+							out << " " << i->shortDescription().c_str() << std::endl;
+						}
+						out << std::endl ;
+						break;
+					}
+					case 'R': case 'r':
+					{
+						const std::vector<Result> res = engine.results();
+						for (vector<Result>::const_iterator i = res.begin();
+								i != res.end(); ++i)
+						{
+							PackageRecord rec(engine.apt().rawRecord(i->name));
+//							char* userData = pkgString(rec.package());
+								set<Tag> tags = engine.debtags().getTagsOfItem((const char *)rec.package().c_str());
+							switch (pkgfilter.TagsValue(tags))
+							{
+								case PackageFilter::Green:
+									break;
+								case PackageFilter::Yellow:
+									break;
+								case PackageFilter::Red:
+									break;
+								case PackageFilter::Black:
+									break;
+								default:
+									break;
+							}
+
+							out << " "<<  rec.package() + "\t" + rec.shortDescription();
+
+							// Relevance is 0 to 100
+							// Popcon is a weird floating point number (to be improved)
+							//FIXMEaddToResults(rec.package() + " - " + rec.shortDescription(), i->relevance, i->popcon);
+							if (engine.popcon().hasData() && i->popcon)
+							{
+								out << "\tPOPCON=" << (int)rintf(log(i->popcon) * 100 / log(engine.popconLocalMax()));
+							}
+
+							if (engine.popcon().hasData() && i->relevance)
+							{
+								out << "\tRELEVANCE=" << i->relevance;
+							}
+
+							out << std::endl ;
+						}
+						out << std::endl ;
+						break;
+					}
+				}
+			}
+			break;
+			case 'g':
+			{
+				char name[sizeof(buffer)];
+				strncpy(name, captures[2].ptr, captures[2].len);
+				name[captures[2].len] = '\0';
+				out << "#get " << name << std::endl ;
+				if (memcmp(captures[2].ptr, "INSTALLED", 9) == 0)
+				{
+					switch (engine.getInstalledFilter())
+					{
+						case Engine::INSTALLED:
+							out << "installed=yes" << std::endl ;
+							break;
+						case Engine::NOTINSTALLED:
+							out << "installed=no" << std::endl ;
+							break;
+						case Engine::ANY:
+							out << "installed=any" << std::endl ;
+							break;
+						default:
+							out << "#unknown installed value" << std::endl ;
+							break;
+					}
+				}
+				if (memcmp(captures[2].ptr, "KEYWORD", 7) == 0)
+				{
+					out << "keyword=\"" << engine.getKeywordFilter() << "\"" << std::endl ;
+				}
+				if (memcmp(captures[2].ptr, "TYPE", 4) == 0)
+				{
+					out << "type=?" << std::endl ;
+				}
+				if (memcmp(captures[2].ptr, "INTERFACE", 9) == 0)
+				{
+					out << "interface=?" << std::endl ;
+				}
+			}
+			break;
+			case 'p':
+			{
+			}
+			break;
+			default:
+			break;
+		}
+	}
+	return true;
 }
 
 class GUIPlugInCLIFactory : public GUIPlugInFactory

Modified: software/gofind/guiplugin.h
===================================================================
--- software/gofind/guiplugin.h	2008-11-18 00:56:10 UTC (rev 8429)
+++ software/gofind/guiplugin.h	2008-11-18 01:25:04 UTC (rev 8430)
@@ -23,6 +23,7 @@
 #define __PLUGIN_H
 
 #include "dll.h"
+#include "Engine.h"
 
 #include <iostream>
 
@@ -34,6 +35,8 @@
 //
 //
 
+using namespace ept;
+
 class GUIPlugIn
 {
  public:
@@ -42,7 +45,7 @@
 	virtual ~GUIPlugIn();
 
 	virtual void Comment(const char *szFormat, ...) = 0;
-	virtual void Go() = 0;
+	virtual bool Go(Engine &engine) = 0;
 };
 
 




More information about the Pkg-games-commits mailing list