r3255 - software/ui/src

Miriam Ruiz baby-guest at alioth.debian.org
Fri Jul 6 16:17:49 UTC 2007


Author: baby-guest
Date: 2007-07-06 16:17:48 +0000 (Fri, 06 Jul 2007)
New Revision: 3255

Modified:
   software/ui/src/filter.cpp
   software/ui/src/filter.h
Log:
Added support for kids rating tags



Modified: software/ui/src/filter.cpp
===================================================================
--- software/ui/src/filter.cpp	2007-07-06 15:28:00 UTC (rev 3254)
+++ software/ui/src/filter.cpp	2007-07-06 16:17:48 UTC (rev 3255)
@@ -18,24 +18,115 @@
 
 #include "filter.h"
 
+#include <string>
+#include <ept/debtags/tag.h>
+
+#define FACET_VIOLENCE "rating:violence"
+#define FACET_SEX "rating:sex"
+#define FACET_LANGUAGE "rating:language"
+#define FACET_DISCRIMINATION "rating:discrimination"
+#define FACET_CONTROL "rating:control"
+
+#define GREEN_MINIMUM 2
+
 int PackageFilter::TagValue(const Tag &tag)
 {
-	//const char *facet_name = tag.facet().name().c_str();
-	//const char *tag_name = tag.name().c_str();
+	// The order is important to minimize calculation costs
+	if (GreenTag(tag)) return PackageFilter::Green;
 	if (BlackTag(tag)) return PackageFilter::Black;
+	if (YellowTag(tag)) return PackageFilter::Yellow;
 	if (RedTag(tag)) return PackageFilter::Red;
-	if (YellowTag(tag)) return PackageFilter::Yellow;
-	if (GreenTag(tag)) return PackageFilter::Green;
 	return PackageFilter::Unknown;
 }
 
+bool PackageFilter::GreenTag(const Tag &tag)
+{
+	const char *name = tag.fullname().c_str();
+	if (strcmp(name, FACET_VIOLENCE "::none") == 0) return true;
+	if (strcmp(name, FACET_SEX "::none") == 0) return true;
+	if (strcmp(name, FACET_LANGUAGE "::benign") == 0) return true;
+	if (strcmp(name, FACET_DISCRIMINATION "::none") == 0) return true;
+	return false;
+}
+
+bool PackageFilter::YellowTag(const Tag &tag)
+{
+	const char *name = tag.fullname().c_str();
+	if (strcmp(name, FACET_VIOLENCE "::brief") == 0) return true;
+	if (strcmp(name, FACET_SEX "::minor") == 0) return true;
+	if (strcmp(name, FACET_SEX "::nudity") == 0) return true;
+	return false;
+}
+
+bool PackageFilter::RedTag(const Tag &tag)
+{
+	const char *facet_name = tag.facet().name().c_str();
+	const char *tag_name = tag.name().c_str();
+	if (strcmp(facet_name, FACET_VIOLENCE) == 0)
+	{
+		if (strcmp(tag_name, "none") == 0) return false;
+		if (strcmp(tag_name, "brief") == 0) return false;
+		if (strcmp(tag_name, "minor") == 0) return false;
+		return true;
+	}
+	else if (strcmp(facet_name, FACET_SEX) == 0)
+	{
+		if (strcmp(tag_name, "none") == 0) return false;
+		if (strcmp(tag_name, "nudity") == 0) return false;
+		return true;
+	}
+	else if (strcmp(facet_name, FACET_LANGUAGE) == 0)
+	{
+		if (strcmp(tag_name, "benign") == 0) return false;
+		return true;
+	}
+	else if (strcmp(facet_name, FACET_DISCRIMINATION) == 0)
+	{
+		if (strcmp(tag_name, "none") == 0) return false;
+		return true;
+	}
+	return false;
+}
+
+bool PackageFilter::BlackTag(const Tag &tag)
+{
+	const char *name = tag.fullname().c_str();
+	if (strcmp(name, FACET_VIOLENCE "::hard") == 0) return true;
+	if (strcmp(name, FACET_SEX "::hard") == 0) return true;
+	if (strcmp(name, FACET_SEX "::violence") == 0) return true;
+	return false;
+}
+
 int PackageFilter::TagsValue(const TagSet &tags)
 {
+	int black = 0, red = 0, yellow = 0, green = 1 - GREEN_MINIMUM, control = 0;
 	for (TagSet::const_iterator i = tags.begin(); i != tags.end(); ++i)
 	{
-		//const char *facet_name = i->facet().name().c_str();
-		//const char *tag_name = i->name().c_str();
+		const char *facet_name = i->facet().name().c_str();
+		if (strcmp(facet_name, FACET_CONTROL) == 0)
+		{
+			const char *tag_name = i->name().c_str();
+			if (strcmp(tag_name, "all") == 0) control = 2;
+			if (strcmp(tag_name, "some") == 0) control = 1;
+		}
+		else switch (TagValue(*i))
+		{
+			case PackageFilter::Black: black++; break;
+			case PackageFilter::Red: red++; break;
+			case PackageFilter::Yellow: yellow++; break;
+			case PackageFilter::Green: green++; break;
+			default: break;
+		}
 	}
 
+	if (black > 0) return PackageFilter::Black;
+	if (control == 2) return PackageFilter::Green;
+	if (red > 0)
+	{
+		if (control == 1) return PackageFilter::Yellow;
+		return PackageFilter::Red;
+	}
+	if (yellow > 0) return PackageFilter::Yellow;
+	if (green > 0) return PackageFilter::Green;
 	return PackageFilter::Unknown;
 }

Modified: software/ui/src/filter.h
===================================================================
--- software/ui/src/filter.h	2007-07-06 15:28:00 UTC (rev 3254)
+++ software/ui/src/filter.h	2007-07-06 16:17:48 UTC (rev 3255)
@@ -36,10 +36,10 @@
 	typedef ept::debtags::Tag Tag;
 	typedef std::set<Tag> TagSet;
 
-	bool GreenTag(const Tag &tag) { return false; } 
-	bool YellowTag(const Tag &tag) { return false; } 
-	bool RedTag(const Tag &tag) { return false; } 
-	bool BlackTag(const Tag &tag) { return false; } 
+	bool GreenTag(const Tag &tag);
+	bool YellowTag(const Tag &tag);
+	bool RedTag(const Tag &tag);
+	bool BlackTag(const Tag &tag);
 	int TagValue(const Tag &tag);
 	int TagsValue(const TagSet &tags);
 };




More information about the Pkg-games-commits mailing list