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 << ""; -// } -// 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 << " "; -// 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 << ""; -// } -// std::cout << "\n"; -// } -// std::cout << "
" << j << "
" << i + 1900 << "" << count << "
\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 << ""; + } + std::cout << "\n"; + for (int i = y_min; i <= y_max; i++) { // i -> years in rows + std::cout << " "; + 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 << ""; + } + std::cout << "\n"; + } + std::cout << "
" << j << "
" << i + 1900 << "" << count << "
\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 << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << "\n"; -// -// for (auto i : caches_by_fav) { -// std::cout << " "; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << "\n"; -// n++; -// if (n > LIST_MAX) break; -// } -// std::cout << "
CacheTypeRec.Finds%
" << n << "" << i->link_name() << "" << i->type << "" << i->fav << "" << i->founds << "" << std::setprecision(3) << 100.0 * i->fav / i->founds << "%
\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 << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << "\n"; -// -// for (auto i : caches_by_fav_perc) { -// std::cout << " "; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << "\n"; -// n++; -// if (n > LIST_MAX) break; -// } -// std::cout << "
CacheTypeRec.Finds%
" << n << "" << i->link_name() << "" << i->type << "" << i->fav << "" << i->founds << "" << std::setprecision(3) << 100.0 * i->fav / i->founds << "%
\n"; -// -// n = 1; -// -// std::cout << "

Caches with most finds

\n"; -// std::cout << "\n"; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << "\n"; -// -// for (auto i : caches_by_finds) { -// std::cout << " "; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << "\n"; -// n++; -// if (n > LIST_MAX) break; -// } -// std::cout << "
CacheTypeDate hiddenFinds
" << n << "" << i->link_name() << "" << i->type << "" << i->date_hidden << "" << i->founds << "
\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 << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << "\n"; -// -// for (auto i = caches_by_finds.rbegin(); i != caches_by_finds.rend(); i++) { -// std::cout << " "; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << ""; -// std::cout << "\n"; -// n++; -// if (n > LIST_MAX) break; -// } -// std::cout << "
CacheTypeDate hiddenFinds
" << n << "" << (*i)->link_name() << "" << (*i)->type << "" << (*i)->date_hidden << "" << (*i)->founds << "
\n"; + std::cout << "

Caches with most recommendations

\n"; + std::cout << "\n"; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << "\n"; + + for (auto i : caches_by_fav) { + std::cout << " "; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << "\n"; + n++; + if (n > LIST_MAX) break; + } + std::cout << "
CacheTypeRec.Finds%
" << n << "" << i->link_name() << "" << i->type << "" << i->fav << "" << i->founds << "" << std::setprecision(3) << 100.0 * i->fav / i->founds << "%
\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 << ""; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << "\n"; + + for (auto i : caches_by_fav_perc) { + std::cout << " "; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << "\n"; + n++; + if (n > LIST_MAX) break; + } + std::cout << "
CacheTypeRec.Finds%
" << n << "" << i->link_name() << "" << i->type << "" << i->fav << "" << i->founds << "" << std::setprecision(3) << 100.0 * i->fav / i->founds << "%
\n"; + + n = 1; + + std::cout << "

Caches with most finds

\n"; + std::cout << "\n"; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << "\n"; + + for (auto i : caches_by_finds) { + std::cout << " "; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << "\n"; + n++; + if (n > LIST_MAX) break; + } + std::cout << "
CacheTypeDate hiddenFinds
" << n << "" << i->link_name() << "" << i->type << "" << i->date_hidden << "" << i->founds << "
\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 << ""; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << "\n"; + + for (auto i = caches_by_finds.rbegin(); i != caches_by_finds.rend(); i++) { + std::cout << " "; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << ""; + std::cout << "\n"; + n++; + if (n > LIST_MAX) break; + } + std::cout << "
CacheTypeDate hiddenFinds
" << n << "" << (*i)->link_name() << "" << (*i)->type << "" << (*i)->date_hidden << "" << (*i)->founds << "
\n"; // D/T matrix n = 0;