aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiklas Halle <niklas@niklashalle.net>2020-09-07 16:22:42 +0200
committerNiklas Halle <niklas@niklashalle.net>2020-09-07 16:22:42 +0200
commit37724b791e4fe4966106d20f7f17b553573ec59c (patch)
treed818444b51c48c0d095d4865cbcae918d9dedb27
parentc24fa23e21091a1afb89418c03692cca63e39123 (diff)
downloadn_core-37724b791e4fe4966106d20f7f17b553573ec59c.tar.gz
n_core-37724b791e4fe4966106d20f7f17b553573ec59c.zip
started work
-rw-r--r--include/GetEssen.hpp11
-rw-r--r--src/GetEssen.cpp183
2 files changed, 98 insertions, 96 deletions
diff --git a/include/GetEssen.hpp b/include/GetEssen.hpp
index ff75029..b53c028 100644
--- a/include/GetEssen.hpp
+++ b/include/GetEssen.hpp
@@ -1,5 +1,6 @@
#pragma once
+#include <queue>
#include <iostream>
#include <sys/stat.h>
@@ -19,7 +20,7 @@ namespace Handler {
struct MensaEssen {
int ID{191};
- string Message{"nothing got back! There was an error!!"};
+ std::queue<crow::json::wvalue> Message;
ptime Datum;
ptime LastModified;
};
@@ -35,9 +36,13 @@ namespace Handler {
MensaEssen db_get_mensa_message(const int &mensaID, const ptime &mensaDatum);
- string getEssen(const int mensa_ID, const int offset);
+ std::vector<crow::json::wvalue> getEssenOnline(int mensa_ID, boost::posix_time::ptime datumEssen);
- string read_mensa_message_from_file(const int &mensa_id_file);
+ std::vector<crow::json::wvalue> getEssen(int mensa_ID, int offset);
+
+ std::vector<crow::json::wvalue> parseEssen(MensaEssen Essen);
+
+ std::vector<crow::json::wvalue> read_mensa_message_from_file(const int &mensa_id_file);
}
json mensaHandler(std::string const &arguments, std::string const &session, void *payload);
diff --git a/src/GetEssen.cpp b/src/GetEssen.cpp
index 3825c5c..69a8e5e 100644
--- a/src/GetEssen.cpp
+++ b/src/GetEssen.cpp
@@ -48,7 +48,8 @@ Handler::MensaHandler::db_get_mensa_message(const int &mensaID, const ptime &men
try {
if (s.Next()) {
int ID = s.GetField(0);
- string Message = s.GetField(1);
+ auto tmpData = crow::json::load(s.GetField(1).GetString());
+ string Message = tmpData.;
string Datum = s.GetField(2);
string LastModified = s.GetField(3);
@@ -67,107 +68,47 @@ Handler::MensaHandler::db_get_mensa_message(const int &mensaID, const ptime &men
}
out.ID = -2;
return out;
-
}
-string Handler::MensaHandler::getEssen(const int mensa_ID, const int offset) {
- MensaEssen Essen;
- if (offset >= 0) {
+std::vector<crow::json::wvalue> Handler::MensaHandler::getEssen(const int mensa_ID, const int offset) {
+ std::vector<crow::json::wvalue> reply_vec;
+ if (offset >= 0) {
if (offset > 28) {
- return "Ich fühle mich geschmeichelt, dass du denkst, dass ich so weit in die Zukunft gucken kann (0 bis 28 Tage)";
+ reply_vec.emplace_back(Response::create_text(
+ "Ich fühle mich geschmeichelt, dass du denkst, dass ich so weit in die Zukunft gucken kann (0 bis 28 Tage)"));
+ return reply_vec;
}
ptime datumNow = boost::posix_time::second_clock::local_time();
ptime datumEssen = datumNow + (boost::gregorian::days(offset));
- Essen = db_get_mensa_message(mensa_ID, datumEssen);
+ MensaEssen Essen = db_get_mensa_message(mensa_ID, datumEssen);
if (Essen.ID == -2) { // SQL got nothing back :/
//log("sql got nothing back!");
- if (downloadMensaFile(mensa_ID, datumEssen) != CURLE_OK) {
- std::cerr << "Error downloading file" << std::endl;
- return "Error downloading file!";
- }
- db_insert_mensa_message(mensa_ID, datumEssen, read_mensa_message_from_file(mensa_ID));
- Essen = db_get_mensa_message(mensa_ID, datumEssen);
-
- string out;
- switch (Essen.ID) {
- case mensa::Adlershof :
- out = "<b>Mensa Adlershof</b> am " + std::to_string(Essen.Datum.date().day().as_number()) + "." +
- std::to_string(Essen.Datum.date().month().as_number()) + "." +
- std::to_string(Essen.Datum.date().year()) + ":";
- break;
- case mensa::Nord:
- out = "<b>Mensa Nord</b> am " + std::to_string(Essen.Datum.date().day().as_number()) + "." +
- std::to_string(Essen.Datum.date().month().as_number()) + "." +
- std::to_string(Essen.Datum.date().year()) + ":";
- break;
- case mensa::Sued :
- out = "<b>Mensa Sued</b> am " + std::to_string(Essen.Datum.date().day().as_number()) + "." +
- std::to_string(Essen.Datum.date().month().as_number()) + "." +
- std::to_string(Essen.Datum.date().year()) + ":";
- break;
- default:
- out = "Mensa Unbekannt am " + std::to_string(Essen.Datum.date().day().as_number()) + "." +
- std::to_string(Essen.Datum.date().month().as_number()) + "." +
- std::to_string(Essen.Datum.date().year()) + ":";
- break;
-
- }
- out += Essen.Message;
- out += "\n (Stand: " + to_simple_string(Essen.LastModified) + ")\n";
-
- return out;
+ return getEssenOnline(mensa_ID, datumEssen);
}
- if (Essen.LastModified + boost::posix_time::hours(2) < datumNow) { //LastModified is more than 2 hours old
+ if (Essen.LastModified + boost::posix_time::hours(2) < datumNow) { // LastModified is more than 2 hours old
if (downloadMensaFile(mensa_ID, datumEssen) != CURLE_OK) {
- return "Error downloading file!";
+ std::cerr << "Error downloading file" << std::endl;
+ reply_vec.emplace_back(Response::create_text("Error downloading file!"));
+ return reply_vec;
}
db_update_mensa_message(mensa_ID, datumEssen, read_mensa_message_from_file(mensa_ID));
- Essen = db_get_mensa_message(mensa_ID, datumEssen);
}
- string out;
- switch (Essen.ID) {
- case mensa::Adlershof :
- out = "<b>Mensa Adlershof</b> am " + std::to_string(Essen.Datum.date().day().as_number()) + "." +
- std::to_string(Essen.Datum.date().month().as_number()) + "." +
- std::to_string(Essen.Datum.date().year()) +
- ":";
- break;
- case mensa::Nord :
- out = "<b>Mensa Nord</b> am " + std::to_string(Essen.Datum.date().day().as_number()) + "." +
- std::to_string(Essen.Datum.date().month().as_number()) + "." +
- std::to_string(Essen.Datum.date().year()) +
- ":";
- break;
- case mensa::Sued :
- out = "<b>Mensa Sued</b> am " + std::to_string(Essen.Datum.date().day().as_number()) + "." +
- std::to_string(Essen.Datum.date().month().as_number()) + "." +
- std::to_string(Essen.Datum.date().year()) +
- ":";
- break;
- default:
- out = "Mensa Unbekannt am " + std::to_string(Essen.Datum.date().day().as_number()) + "." +
- std::to_string(Essen.Datum.date().month().as_number()) + "." +
- std::to_string(Essen.Datum.date().year()) +
- ":";
- break;
-
- }
- out += Essen.Message;
- out += "\n (Stand: " + to_simple_string(Essen.LastModified) + ")\n";
- return out;
+ return parseEssen(db_get_mensa_message(mensa_ID, datumEssen));
}
- return "Wer denkst du bin ich? Ein Zeitreisender?\nIch kann zwar in die Zukunft gucken, aber nur 28 Tage";
+ reply_vec.emplace_back(Response::create_text(
+ "Wer denkst du bin ich? Ein Zeitreisender?\nIch kann zwar in die Zukunft gucken, aber nur 28 Tage"));
+ return reply_vec;
}
-string Handler::MensaHandler::read_mensa_message_from_file(const int &mensa_id_file) {
+std::vector<crow::json::wvalue> Handler::MensaHandler::read_mensa_message_from_file(const int &mensa_id_file) {
+ std::vector<crow::json::wvalue> reply_vec;
string s;
- string out;
bool serious = false;
std::ifstream inFile(std::to_string(mensa_id_file));
@@ -181,7 +122,7 @@ string Handler::MensaHandler::read_mensa_message_from_file(const int &mensa_id_f
vegan += (char) i;
}
- out += vegan;
+ reply_vec.emplace_back(Response::create_text(vegan));
}
if (s.find("1.png") != string::npos && serious) {
@@ -192,7 +133,7 @@ string Handler::MensaHandler::read_mensa_message_from_file(const int &mensa_id_f
vegetarian += (char) i;
}
- out += vegetarian;
+ reply_vec.emplace_back(Response::create_text(vegetarian));
}
if (s.find("splIcon") != string::npos && serious && s.find("1.png") == string::npos &&
s.find("15.png") == string::npos) {
@@ -202,7 +143,7 @@ string Handler::MensaHandler::read_mensa_message_from_file(const int &mensa_id_f
emptyEmoji += (char) i;
}
- out += emptyEmoji;
+ reply_vec.emplace_back(Response::create_text(emptyEmoji));
}
if (s.find("splGroup\"") != string::npos) { //Getting the Category of the Meal
@@ -218,9 +159,13 @@ string Handler::MensaHandler::read_mensa_message_from_file(const int &mensa_id_f
}
serious = (s == "Aktionen" || s == "Essen" || s == "Beilagen");
if (serious) {
- out += "\n<b>" + s + "</b>\n";
+ std::vector<crow::json::wvalue> bold;
+ bold.emplace_back(Response::create_annotation(Response::AnnotationType::bold));
+ reply_vec.emplace_back(Response::create_text("\n"));
+ reply_vec.emplace_back(Response::create_text(s, std::move(bold)));
}
}
+
if (s.find("class=\"bold\"") != string::npos && serious) { //Getting the Meal
for (int i = 0, j = 0; (unsigned) i < s.length(); ++i) {
if (s.at(i) == '>') {
@@ -231,13 +176,11 @@ string Handler::MensaHandler::read_mensa_message_from_file(const int &mensa_id_f
s = s.substr(j, i - j);
j = 0;
}
-
}
-
- out += "\t" + s;
+ reply_vec.emplace_back(Response::create_text("\t" + s));
}
- if (s.find("euro;") != string::npos && serious) { //geting the price of each Meal
+ if (s.find("euro;") != string::npos && serious) { // getting the price of each Meal
for (int i = 0, j = 0; (unsigned) i < s.length(); ++i) {
if (s.at(i) == ';') {
j = i + 1;
@@ -247,23 +190,77 @@ string Handler::MensaHandler::read_mensa_message_from_file(const int &mensa_id_f
j = 0;
}
}
- out += "\t<b>" + s + "</b>€\n";
+ std::vector<crow::json::wvalue> bold;
+ bold.emplace_back(Response::create_annotation(Response::AnnotationType::bold));
+ reply_vec.emplace_back(Response::create_text("\t"));
+ reply_vec.emplace_back(Response::create_text(s, std::move(bold)));
+ reply_vec.emplace_back(Response::create_text("€\n"));
}
}
- if (out.empty()) {
- return "Heute kein Essen";
+ if (reply_vec.empty()) {
+ reply_vec.emplace_back(Response::create_text("Heute kein Essen"));
}
- return out;
+ return reply_vec;
+}
+
+std::vector<crow::json::wvalue> Handler::MensaHandler::parseEssen(MensaEssen Essen) {
+ std::vector<crow::json::wvalue> reply_vec;
+ std::vector<crow::json::wvalue> bold;
+ bold.emplace_back(Response::create_annotation(Response::AnnotationType::bold));
+
+ switch (Essen.ID) {
+ case mensa::Adlershof:
+ reply_vec.emplace_back(std::move(Response::create_text("Mensa Adlershof", std::move(bold))));
+ break;
+ case mensa::Nord:
+ reply_vec.emplace_back(std::move(Response::create_text("Mensa Nord", std::move(bold))));
+ break;
+ case mensa::Sued :
+ reply_vec.emplace_back(std::move(Response::create_text("Mensa Süd", std::move(bold))));
+ break;
+ default:
+ reply_vec.emplace_back(std::move(Response::create_text("unbekannte Mensa", std::move(bold))));
+ break;
+ }
+
+ reply_vec.emplace_back(Response::create_text(
+ std::to_string(Essen.Datum.date().day().as_number()) + "." +
+ std::to_string(Essen.Datum.date().month().as_number()) + "." +
+ std::to_string(Essen.Datum.date().year()) + ":\n"));
+
+ while (!Essen.Message.empty()) {
+ reply_vec.emplace_back(std::move(Essen.Message.front()));
+ Essen.Message.pop();
+ }
+
+ reply_vec.emplace_back(Response::create_text("\n(Stand: " + to_simple_string(Essen.LastModified) + ")\n"));
+
+ return reply_vec;
+}
+
+std::vector<crow::json::wvalue>
+Handler::MensaHandler::getEssenOnline(int mensa_ID, boost::posix_time::ptime datumEssen) {
+ if (downloadMensaFile(mensa_ID, datumEssen) != CURLE_OK) {
+ std::cerr << "Error downloading file" << std::endl;
+ std::vector<crow::json::wvalue> reply_vec;
+ reply_vec.emplace_back(Response::create_text("Error downloading file!"));
+ return reply_vec;
+ }
+
+ db_insert_mensa_message(mensa_ID, datumEssen, crow::json::dump(read_mensa_message_from_file(mensa_ID)));
+
+ return parseEssen(db_get_mensa_message(mensa_ID, datumEssen));
}
Handler::json Handler::mensaHandler(const std::string &arguments, const std::string &session, void *payload) {
+ (void) payload;
Handler::MensaHandler::mensa Mensa_ID;
auto args = tokenizeArguments(arguments);
- std::string mensa_name = (args.size() > 0 ? args.at(0) : "adlershof");
+ std::string mensa_name = (!args.empty() ? args.at(0) : "adlershof");
std::string offset_request = (args.size() > 1 ? args.at(1) : "0");
if (mensa_name == "adlershof") {
@@ -278,5 +275,5 @@ Handler::json Handler::mensaHandler(const std::string &arguments, const std::str
int offset = std::stoi(offset_request);
- return Response::simple_response(getEssen(Mensa_ID, offset));
+ return Response::create_response(getEssen(Mensa_ID, offset));
}