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