diff --git a/geostat.cpp b/geostat.cpp
index 612e5d3..b0157c4 100644
--- a/geostat.cpp
+++ b/geostat.cpp
@@ -242,6 +242,8 @@ int main(int argc, char** argv) {
region_count = db.get_region_stats();
} else if (get_owned) {
Caches tmp = db.get_user_caches_owned(ocpl_user_uuid);
+ Okapi OCpl(ocpl_url, ocpl_key);
+ OCpl.update_caches(tmp);
std::copy(tmp.begin(), tmp.end(), std::back_inserter(cc));
} else {
Caches tmp = db.get_user_caches(ocpl_user_uuid, 0);
@@ -766,31 +768,32 @@ int main(int argc, char** argv) {
std::cout << "Number of caches that are archived: " << std::count_if(cc.begin(), cc.end(), [&](auto& a) { return a.status == archived; }) << "
\n";
std::cout << "\n";
-// std::cout << "
Cache creation timeline
\n";
-// std::cout << "\n";
-// std::cout << " | ";
-// for (int j = 1; j <= 12; j++) { // print table month headers
-// std::cout << "" << j << " | ";
-// }
-// std::cout << "
\n";
-//
-// short y_min = std::min_element(cc.begin(), cc.end(), [&](const Cache& a, const Cache& b) { return a.date_tm.tm_year < b.date_tm.tm_year; })->date_tm.tm_year;
-// short y_max = std::max_element(cc.begin(), cc.end(), [&](const Cache& a, const Cache& b) { return a.date_tm.tm_year < b.date_tm.tm_year; })->date_tm.tm_year;
-//
-// long max = 0; // maximal value for histogram
-// for (int i = y_min; i <= y_max; i++)
-// for (int j = 1; j <= 12; j++)
-// max = std::max(max, std::count_if(cc.begin(), cc.end(), [i, j](Cache c) { return (c.date_tm.tm_year == i && c.date_tm.tm_mon == j - 1); }));
-//
-// for (int i = y_min; i <= y_max; i++) { // i -> years in rows
-// std::cout << "" << i + 1900 << " | ";
-// for (int j = 1; j <= 12; j++) { // j -> months in cols
-// count = std::count_if(cc.begin(), cc.end(), [i, j](Cache c) { return (c.date_tm.tm_year == i && c.date_tm.tm_mon == j - 1); });
-// std::cout << "" << count << " | ";
-// }
-// std::cout << "
\n";
-// }
-// std::cout << "
\n";
+ short y_min = std::min_element(cc.begin(), cc.end(), [&](const Cache& a, const Cache& b) { return a.date_hidden_tm.tm_year < b.date_hidden_tm.tm_year; })->date_hidden_tm.tm_year;
+ short y_max = std::max_element(cc.begin(), cc.end(), [&](const Cache& a, const Cache& b) { return a.date_hidden_tm.tm_year < b.date_hidden_tm.tm_year; })->date_hidden_tm.tm_year;
+
+ long max = 0; // maximal value for histogram
+ for (int i = y_min; i <= y_max; i++)
+ for (int j = 1; j <= 12; j++)
+ max = std::max(max, std::count_if(cc.begin(), cc.end(), [i, j](Cache c) { return (c.date_hidden_tm.tm_year == i && c.date_hidden_tm.tm_mon == j - 1); }));
+
+ if (max > 0) {
+ std::cout << "Cache creation timeline
\n";
+ std::cout << "\n";
+ std::cout << " | ";
+ for (int j = 1; j <= 12; j++) { // print table month headers
+ std::cout << "" << j << " | ";
+ }
+ std::cout << "
\n";
+ for (int i = y_min; i <= y_max; i++) { // i -> years in rows
+ std::cout << "" << i + 1900 << " | ";
+ for (int j = 1; j <= 12; j++) { // j -> months in cols
+ count = std::count_if(cc.begin(), cc.end(), [i, j](Cache c) { return (c.date_hidden_tm.tm_year == i && c.date_hidden_tm.tm_mon == j - 1); });
+ std::cout << "" << count << " | ";
+ }
+ std::cout << "
\n";
+ }
+ std::cout << "
\n";
+ }
// auto far = std::max_element(fcc.begin(), fcc.end(), [&](const Cache& a, const Cache& b) { return a.distance() < b.distance(); });
// auto near = std::min_element(fcc.begin(), fcc.end(), [&](const Cache& a, const Cache& b) { return a.distance() < b.distance(); });
@@ -822,106 +825,106 @@ int main(int argc, char** argv) {
std::cout << "\n";
std::cout << "\n";
-// const int LIST_MAX = 15;
-// n = 1;
+ const int LIST_MAX = 15;
+ n = 1;
-// std::cout << "Caches with most recommendations
\n";
-// std::cout << "\n";
-// std::cout << " | ";
-// std::cout << "Cache | ";
-// std::cout << "Type | ";
-// std::cout << "Rec. | ";
-// std::cout << "Finds | ";
-// std::cout << "% | ";
-// std::cout << "
\n";
-//
-// for (auto i : caches_by_fav) {
-// std::cout << "" << n << " | ";
-// std::cout << "" << i->link_name() << " | ";
-// std::cout << "" << i->type << " | ";
-// std::cout << "" << i->fav << " | ";
-// std::cout << "" << i->founds << " | ";
-// std::cout << "" << std::setprecision(3) << 100.0 * i->fav / i->founds << "% | ";
-// std::cout << "
\n";
-// n++;
-// if (n > LIST_MAX) break;
-// }
-// std::cout << "
\n";
-//
-// average_html(cc, &Cache::fav, "number of recommendations");
-//
-// n = 1;
-//
-// std::cout << "Caches with most recommendations (percentage)
\n";
-// std::cout << "\n";
-// std::cout << " | ";
-// std::cout << "Cache | ";
-// std::cout << "Type | ";
-// std::cout << "Rec. | ";
-// std::cout << "Finds | ";
-// std::cout << "% | ";
-// std::cout << "
\n";
-//
-// for (auto i : caches_by_fav_perc) {
-// std::cout << "" << n << " | ";
-// std::cout << "" << i->link_name() << " | ";
-// std::cout << "" << i->type << " | ";
-// std::cout << "" << i->fav << " | ";
-// std::cout << "" << i->founds << " | ";
-// std::cout << "" << std::setprecision(3) << 100.0 * i->fav / i->founds << "% | ";
-// std::cout << "
\n";
-// n++;
-// if (n > LIST_MAX) break;
-// }
-// std::cout << "
\n";
-//
-// n = 1;
-//
-// std::cout << "Caches with most finds
\n";
-// std::cout << "\n";
-// std::cout << " | ";
-// std::cout << "Cache | ";
-// std::cout << "Type | ";
-// std::cout << "Date hidden | ";
-// std::cout << "Finds | ";
-// std::cout << "
\n";
-//
-// for (auto i : caches_by_finds) {
-// std::cout << "" << n << " | ";
-// std::cout << "" << i->link_name() << " | ";
-// std::cout << "" << i->type << " | ";
-// std::cout << "" << i->date_hidden << " | ";
-// std::cout << "" << i->founds << " | ";
-// std::cout << "
\n";
-// n++;
-// if (n > LIST_MAX) break;
-// }
-// std::cout << "
\n";
-//
-// average_html(cc, &Cache::founds, "number of finds");
-//
-// n = 1;
-//
-// std::cout << "Caches with least finds
\n";
-// std::cout << "\n";
-// std::cout << " | ";
-// std::cout << "Cache | ";
-// std::cout << "Type | ";
-// std::cout << "Date hidden | ";
-// std::cout << "Finds | ";
-// std::cout << "
\n";
-//
-// for (auto i = caches_by_finds.rbegin(); i != caches_by_finds.rend(); i++) {
-// std::cout << "" << n << " | ";
-// std::cout << "" << (*i)->link_name() << " | ";
-// std::cout << "" << (*i)->type << " | ";
-// std::cout << "" << (*i)->date_hidden << " | ";
-// std::cout << "" << (*i)->founds << " | ";
-// std::cout << "
\n";
-// n++;
-// if (n > LIST_MAX) break;
-// }
-// std::cout << "
\n";
+ std::cout << "Caches with most recommendations
\n";
+ std::cout << "\n";
+ std::cout << " | ";
+ std::cout << "Cache | ";
+ std::cout << "Type | ";
+ std::cout << "Rec. | ";
+ std::cout << "Finds | ";
+ std::cout << "% | ";
+ std::cout << "
\n";
+
+ for (auto i : caches_by_fav) {
+ std::cout << "" << n << " | ";
+ std::cout << "" << i->link_name() << " | ";
+ std::cout << "" << i->type << " | ";
+ std::cout << "" << i->fav << " | ";
+ std::cout << "" << i->founds << " | ";
+ std::cout << "" << std::setprecision(3) << 100.0 * i->fav / i->founds << "% | ";
+ std::cout << "
\n";
+ n++;
+ if (n > LIST_MAX) break;
+ }
+ std::cout << "
\n";
+
+ average_html(cc, &Cache::fav, "number of recommendations");
+
+ n = 1;
+
+ std::cout << "Caches with most recommendations (percentage)
\n";
+ std::cout << "\n";
+ std::cout << " | ";
+ std::cout << "Cache | ";
+ std::cout << "Type | ";
+ std::cout << "Rec. | ";
+ std::cout << "Finds | ";
+ std::cout << "% | ";
+ std::cout << "
\n";
+
+ for (auto i : caches_by_fav_perc) {
+ std::cout << "" << n << " | ";
+ std::cout << "" << i->link_name() << " | ";
+ std::cout << "" << i->type << " | ";
+ std::cout << "" << i->fav << " | ";
+ std::cout << "" << i->founds << " | ";
+ std::cout << "" << std::setprecision(3) << 100.0 * i->fav / i->founds << "% | ";
+ std::cout << "
\n";
+ n++;
+ if (n > LIST_MAX) break;
+ }
+ std::cout << "
\n";
+
+ n = 1;
+
+ std::cout << "Caches with most finds
\n";
+ std::cout << "\n";
+ std::cout << " | ";
+ std::cout << "Cache | ";
+ std::cout << "Type | ";
+ std::cout << "Date hidden | ";
+ std::cout << "Finds | ";
+ std::cout << "
\n";
+
+ for (auto i : caches_by_finds) {
+ std::cout << "" << n << " | ";
+ std::cout << "" << i->link_name() << " | ";
+ std::cout << "" << i->type << " | ";
+ std::cout << "" << i->date_hidden << " | ";
+ std::cout << "" << i->founds << " | ";
+ std::cout << "
\n";
+ n++;
+ if (n > LIST_MAX) break;
+ }
+ std::cout << "
\n";
+
+ average_html(cc, &Cache::founds, "number of finds");
+
+ n = 1;
+
+ std::cout << "Caches with least finds
\n";
+ std::cout << "\n";
+ std::cout << " | ";
+ std::cout << "Cache | ";
+ std::cout << "Type | ";
+ std::cout << "Date hidden | ";
+ std::cout << "Finds | ";
+ std::cout << "
\n";
+
+ for (auto i = caches_by_finds.rbegin(); i != caches_by_finds.rend(); i++) {
+ std::cout << "" << n << " | ";
+ std::cout << "" << (*i)->link_name() << " | ";
+ std::cout << "" << (*i)->type << " | ";
+ std::cout << "" << (*i)->date_hidden << " | ";
+ std::cout << "" << (*i)->founds << " | ";
+ std::cout << "
\n";
+ n++;
+ if (n > LIST_MAX) break;
+ }
+ std::cout << "
\n";
// D/T matrix
n = 0;