[SCM] Development fot GoFind! branch, makelib, updated. b7270c1cf6f518750b1cefcfdba416ee42bd7e10

Miriam Ruiz miriam at debian.org
Mon Apr 27 15:46:36 UTC 2009


The following commit has been merged in the makelib branch:
commit b7270c1cf6f518750b1cefcfdba416ee42bd7e10
Author: Miriam Ruiz <miriam at debian.org>
Date:   Mon Apr 27 17:52:06 2009 +0200

    Get tags of the proper package in FLTK GUI plugin
    Restructured CLI GUI plugin command input

diff --git a/fltk/pkgbrowser.cpp b/fltk/pkgbrowser.cpp
index cf53685..a31138f 100644
--- a/fltk/pkgbrowser.cpp
+++ b/fltk/pkgbrowser.cpp
@@ -231,7 +231,7 @@ void PackageBrowser::item_select(void *p, int s)
 
 			ept::debtags::Debtags debtags;
 
-			set<ept::debtags::Tag> tags = debtags.getTagsOfItem("libc6");
+			set<ept::debtags::Tag> tags = debtags.getTagsOfItem((const char *)data);
 			char *tag_txt = new char[512];
 			for (set<ept::debtags::Tag>::const_iterator i = tags.begin(); i != tags.end(); ++i)
 			{
diff --git a/gui_cli.cpp b/gui_cli.cpp
index d6c30f5..b0dd3da 100644
--- a/gui_cli.cpp
+++ b/gui_cli.cpp
@@ -36,6 +36,9 @@
 #include <iostream>
 #include <cmath>
 
+#include <limits.h>
+#include <sys/stat.h>
+
 #ifdef USE_GETTEXT
 #include <libintl.h>
 #include <locale.h>
@@ -58,14 +61,22 @@ static bool Go(PackageData &pkgdata)
 
 	out << "# System running" << std::endl;
 
-	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)*\\S)\\s*$";
-	pattern_text[4] = NULL;
+	struct slre_pattern pattern[16];
+	const char *pattern_text[16];
+	char pattern_type[16];
+	int i=0;
+	pattern_type[i]='H'; pattern_text[i++] = "^\\s*(HELP|H)\\s*$";
+	pattern_type[i]='T'; pattern_text[i++] = "^\\s*(TY|TYPES)\\s*$";
+	pattern_type[i]='I'; pattern_text[i++] = "^\\s*(I|INTERFACES)\\s*$";
+	pattern_type[i]='R'; pattern_text[i++] = "^\\s*(R|RESULTS)\\s*$";
+	pattern_type[i]='P'; pattern_text[i++] = "^\\s*(P|PACKAGE)\\s+(\\S+)\\s*$";
+	pattern_type[i]='S'; pattern_text[i++] = "^\\s*(S|SCREENSHOT)\\s+(\\S+)\\s*$";
+	pattern_type[i]='X'; pattern_text[i++] = "^\\s*(TA|TAGS)\\s+(\\S+)\\s*$";
+
+	pattern_type[i]='g'; pattern_text[i++] = "^\\s*(GET|G)\\s+(\\S+)\\s*$";
+	pattern_type[i]='s'; pattern_text[i++] = "^\\s*(SET|S)\\s+(\\S+)\\s*=\\s*((\\S|\\s)*\\S)\\s*$";
+
+	pattern_type[i]='\0'; pattern_text[i++] = NULL;
 
 	int j = 0;
 	while (pattern_text[j] != NULL)
@@ -90,11 +101,20 @@ static bool Go(PackageData &pkgdata)
 			}
 		}
 
-		static const char *pattern_name[16] = { "Show help", "Show list", "Get parameter", "Set parameter", NULL};
+		static const char *pattern_name[16] = {
+			"Show help",
+			"List types",
+			"List interfaces",
+			"List results",
+			"Show package",
+			"Show screenshot",
+			"Show tags",
+			NULL
+		};
 
 		int match = -1;
 		int j = 0;
-		while (match == -1 && pattern_text[j] != NULL)
+		while (match == -1 && pattern_text[j] != NULL && pattern_name[j] != NULL)
 		{
 			if (slre_match(pattern+j, buffer, strlen(buffer), captures))
 			{
@@ -103,91 +123,172 @@ static bool Go(PackageData &pkgdata)
 			}
 			j++;
 		}
+
 		if (match == -1)
 			out << "# Syntax Error: Command pattern not recognized" << std::endl;
 		else switch (pattern_type[match])
 		{
-			case 'h':
+			case 'H':
 			{
 				out << "# Commands:" << std::endl
 					<< "# HELP" << std::endl
+					<< "# TYPES" << std::endl
+					<< "# INTERFACES" << std::endl
+					<< "# RESULTS" << std::endl
 					<< "# LIST TYPES|INTERFACES|RESULTS" << std::endl
 					<< "# GET <param>" << std::endl
 					<< "# SET <param>=<value>" << std::endl;
 			}
 			break;
-			case 'l':
+
+			case 'T': case 't':
+			{
+				const PackageData::TagSet types = pkgdata.types();
+				for (PackageData::TagSet::const_iterator i = types.begin(); i != types.end(); ++i)
+				{
+					out << " " << i->fullname() << "\t" << i->shortDescription().c_str() << std::endl;
+				}
+				out << std::endl ;
+			}
+			break;
+
+			case 'I': case 'i':
 			{
-				out << "# List: \"" << captures[2].ptr <<  "\"" << std::endl;
-				switch (captures[2].ptr[0])
+				const PackageData::TagSet ifaces = pkgdata.interfaces();
+				for (PackageData::TagSet::const_iterator i = ifaces.begin();
+						i != ifaces.end(); ++i)
 				{
-					case 'T': case 't':
+					out << " " << i->fullname() << "\t" << i->shortDescription().c_str() << std::endl;
+				}
+				out << std::endl ;
+			}
+			break;
+
+			case 'R': case 'r':
+			{
+				const std::vector<Result> res = pkgdata.results();
+				for (vector<Result>::const_iterator i = res.begin();
+						i != res.end(); ++i)
+				{
+					PackageRecord rec(pkgdata.apt().rawRecord(i->name));
+//					char* userData = pkgString(rec.package());
+						set<Tag> tags = pkgdata.debtags().getTagsOfItem((const char *)rec.package().c_str());
+					switch (pkgdata.GetPackageFilter().TagsValue(tags))
 					{
-						const PackageData::TagSet types = pkgdata.types();
-						for (PackageData::TagSet::const_iterator i = types.begin(); i != types.end(); ++i)
-						{
-							out << " " << i->fullname() << "\t" << i->shortDescription().c_str() << std::endl;
-						}
-						out << std::endl ;
-						break;
+						case PackageFilter::Green:
+							break;
+						case PackageFilter::Yellow:
+							break;
+						case PackageFilter::Red:
+							break;
+						case PackageFilter::Black:
+							break;
+						default:
+							break;
 					}
-					case 'I': case 'i':
+
+					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 (pkgdata.popcon().hasData() && i->popcon)
 					{
-						const PackageData::TagSet ifaces = pkgdata.interfaces();
-						for (PackageData::TagSet::const_iterator i = ifaces.begin();
-								i != ifaces.end(); ++i)
-						{
-							out << " " << i->fullname() << "\t" << i->shortDescription().c_str() << std::endl;
-						}
-						out << std::endl ;
-						break;
+						out << "\tPOPCON=" << (int)rintf(log(i->popcon) * 100 / log(pkgdata.popconLocalMax()));
 					}
-					case 'R': case 'r':
+
+					if (pkgdata.popcon().hasData() && i->relevance)
 					{
-						const std::vector<Result> res = pkgdata.results();
-						for (vector<Result>::const_iterator i = res.begin();
-								i != res.end(); ++i)
-						{
-							PackageRecord rec(pkgdata.apt().rawRecord(i->name));
-//							char* userData = pkgString(rec.package());
-								set<Tag> tags = pkgdata.debtags().getTagsOfItem((const char *)rec.package().c_str());
-							switch (pkgdata.GetPackageFilter().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 (pkgdata.popcon().hasData() && i->popcon)
-							{
-								out << "\tPOPCON=" << (int)rintf(log(i->popcon) * 100 / log(pkgdata.popconLocalMax()));
-							}
-
-							if (pkgdata.popcon().hasData() && i->relevance)
-							{
-								out << "\tRELEVANCE=" << i->relevance;
-							}
-
-							out << std::endl ;
-						}
-						out << std::endl ;
-						break;
+						out << "\tRELEVANCE=" << i->relevance;
 					}
+
+					out << std::endl ;
 				}
+
+				out << std::endl ;
 			}
 			break;
+
+			case 'P':
+			{
+				char name[sizeof(buffer)];
+				strncpy(name, captures[2].ptr, captures[2].len);
+				name[captures[2].len] = '\0';
+				out << "# Package " << name << std::endl ;
+
+				std::string pkg_desc;
+
+				PackageRecord rec(pkgdata.apt().rawRecord(name));
+				out << "NAME=" << rec.package() << std::endl ;
+				out << "DESC=" << rec.shortDescription() << std::endl ;
+				out << "LONG=" << rec.longDescription() << std::endl ;
+
+				out << std::endl ;
+			}
+			break;
+
+			case 'S':
+			{
+				char name[sizeof(buffer)];
+				strncpy(name, captures[2].ptr, captures[2].len);
+				name[captures[2].len] = '\0';
+				out << "# Package " << name << std::endl ;
+
+				char filename[PATH_MAX];
+				struct stat fileinfo;
+
+				if (snprintf(filename, PATH_MAX, "%s/%s.png", THUMBNAILSDIR, name) &&
+					stat(filename, &fileinfo) == 0)
+				{ // Portable Network Graphics (PNG) image files
+					// We were able to get the file attributes so the file obviously exists.
+					out << "PNG=" << filename << std::endl ;
+				}
+				else if (snprintf(filename, PATH_MAX, "%s/%s.jpg", THUMBNAILSDIR, name) &&
+					stat(filename, &fileinfo) == 0)
+				{ // Joint Photographic Experts Group (JPEG) File Interchange Format (JFIF) images.
+					out << "JPEG=" << filename << std::endl ;
+				}
+				else if (snprintf(filename, PATH_MAX, "%s/%s.jpeg", THUMBNAILSDIR, name) &&
+					stat(filename, &fileinfo) == 0)
+				{
+					out << "JPEG=" << filename << std::endl ;
+				}
+				else if (snprintf(filename, PATH_MAX, "%s/%s.bmp", THUMBNAILSDIR, name) &&
+					stat(filename, &fileinfo) == 0)
+				{ // Windows Bitmap (BMP) image files
+					out << "BMP=" << filename << std::endl ;
+				}
+				else
+				{ // TODO: Portable Anymap (PNM, PBM, PGM, PPM) image files
+					out << "NULL" << std::endl ;
+				}
+
+				out << std::endl ;
+			}
+			break;
+
+			case 'X':
+			{
+				char name[sizeof(buffer)];
+				strncpy(name, captures[2].ptr, captures[2].len);
+				name[captures[2].len] = '\0';
+				out << "# Package " << name << std::endl ;
+
+				ept::debtags::Debtags debtags;
+				set<ept::debtags::Tag> tags = debtags.getTagsOfItem(name);
+				for (set<ept::debtags::Tag>::const_iterator i = tags.begin(); i != tags.end(); ++i)
+				{
+					out
+						<< i->facet().name() << "::" << i->name() << " \""
+						<< gettext(i->facet().shortDescription().c_str())
+						<< "\"::\"" << gettext(i->shortDescription().c_str()) << "\""
+						<< std::endl ;
+				}
+
+				out << std::endl ;
+			}
+			break;
+
 			case 'g':
 			{
 				char name[sizeof(buffer)];
@@ -230,6 +331,7 @@ static bool Go(PackageData &pkgdata)
 				}
 			}
 			break;
+
 			case 's':
 			{
 				char name[sizeof(buffer)];
@@ -279,6 +381,7 @@ static bool Go(PackageData &pkgdata)
 
 			}
 			break;
+
 			default:
 			break;
 		}

-- 
Development fot GoFind!



More information about the Pkg-games-commits mailing list