[Debtags-commits] [svn] r1976 - central-database/trunk/c-tdb
Erich Schubert
erich at costa.debian.org
Mon Oct 2 16:35:37 UTC 2006
Author: erich
Date: Mon Oct 2 16:35:36 2006
New Revision: 1976
Modified:
central-database/trunk/c-tdb/tagcloud-json.cc
Log:
Make the json app also include selected tags and matching packages
Modified: central-database/trunk/c-tdb/tagcloud-json.cc
==============================================================================
--- central-database/trunk/c-tdb/tagcloud-json.cc (original)
+++ central-database/trunk/c-tdb/tagcloud-json.cc Mon Oct 2 16:35:36 2006
@@ -14,6 +14,8 @@
typedef pair< dbid, unsigned int > id_count;
+#define MIN_RESULTS 25
+
int main(int argc, char* argv[]) {
/* open databases */
PkgDB dbpkg(O_RDONLY);
@@ -21,6 +23,9 @@
MapDB mappt(MAP_ID_PKG_TAG_DB, O_RDONLY);
MapDB maptp(MAP_ID_TAG_PKG_DB, O_RDONLY);
+ set<dbid> sel_tags;
+ set<dbid> remaining_pkgs;
+
/* find matching packages... */
IdList* result = NULL;
if (argc <= 1)
@@ -34,8 +39,8 @@
} else {
IdList temp = maptp.get(entry);
result->join(temp);
- //temp.free_data();
}
+ sel_tags.insert(entry);
} catch (etdb<dbstr,dbid>::KeyNotFoundError) {
cerr << "Unknown tag specified: '" << argv[i] << "'" << endl;
exit(1);
@@ -49,14 +54,25 @@
/* for all packages, find tags assigned to them */
map<dbid, unsigned int> tags;
- for (size_t i=0; i < result->size(); i++) {
- IdList t = mappt.get((*result)[i]);
- for (size_t j=0; j < t.size(); j++)
- if (tags.find(t[j]) == tags.end()) {
- tags[t[j]] = 1;
- } else {
- tags[t[j]] = 1 + tags[t[j]];
- }
+ if (result->size() >= MIN_RESULTS) {
+ for (size_t i=0; i < result->size(); i++) {
+ IdList t = mappt.get((*result)[i]);
+ bool remaining = true;
+ for (size_t j=0; j < t.size(); j++)
+ if (sel_tags.find(t[j]) == sel_tags.end()) {
+ remaining = false;
+ if (tags.find(t[j]) == tags.end()) {
+ tags[t[j]] = 1;
+ } else {
+ tags[t[j]] = 1 + tags[t[j]];
+ }
+ }
+ if (remaining)
+ remaining_pkgs.insert((*result)[i]);
+ }
+ } else {
+ for (size_t i=0; i < result->size(); i++)
+ remaining_pkgs.insert((*result)[i]);
}
// we don't need the packages anymore.
@@ -71,10 +87,12 @@
cerr << "Unknown voc id: " << i->first.id << endl;
}
bool first = true;
- cout << "{\"tags\":[";
+ cout << "{";
+ cout << "\"tags\":[";
for (vector< id_count >::iterator i = tags_heap.begin(); i != tags_heap.end(); i++) {
try {
VocInfo ti = dbvoc.get(i->first);
+
if (first) {
first = false;
} else {
@@ -86,7 +104,42 @@
cerr << "Unknown voc id: " << i->first.id << endl;
}
}
- cout << "]}";
+ cout << "]" << ",";
+ cout << "\"selected\":[";
+ first = true;
+ for (set< dbid >::iterator i = sel_tags.begin(); i != sel_tags.end(); i++) {
+ try {
+ VocInfo ti = dbvoc.get(i->id);
+
+ if (first) {
+ first = false;
+ } else {
+ cout << ",";
+ }
+ cout << "\"" << ti.name() << "\"";
+ } catch (etdb<dbid,VocInfo>::KeyNotFoundError er) {
+ cerr << "Unknown voc id: " << i->id << endl;
+ }
+ }
+ cout << "]" << ",";
+ cout << "\"packages\":[";
+ first = true;
+ for (set< dbid >::iterator i = remaining_pkgs.begin(); i != remaining_pkgs.end(); i++) {
+ try {
+ PkgInfo pi = dbpkg.get(i->id);
+
+ if (first) {
+ first = false;
+ } else {
+ cout << ",";
+ }
+ cout << "\"" << pi.name() << "\"";
+ } catch (etdb<dbid,PkgInfo>::KeyNotFoundError er) {
+ cerr << "Unknown pkg id: " << i->id << endl;
+ }
+ }
+ cout << "]";
+ cout << "}";
return(0);
}
More information about the Debtags-commits
mailing list