aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kusatz <max@trialserver.de>2020-10-27 19:04:22 +0100
committerMax Kusatz <max@trialserver.de>2020-10-27 19:04:22 +0100
commit3b0ce635b1a4d63ae97d5ae93254634ecbff6abf (patch)
treef73d20b903a1d9190b2fb870a5eb582b859f4c5f
parent56ac806aae1a0fbc034faa92d5bca694b58a4863 (diff)
downloadn_core-3b0ce635b1a4d63ae97d5ae93254634ecbff6abf.tar.gz
n_core-3b0ce635b1a4d63ae97d5ae93254634ecbff6abf.zip
'fixed' mensa function for real this time
-rw-r--r--include/GetEssen.hpp14
-rw-r--r--src/GetEssen.cpp253
2 files changed, 114 insertions, 153 deletions
diff --git a/include/GetEssen.hpp b/include/GetEssen.hpp
index 06aafe2..adbd003 100644
--- a/include/GetEssen.hpp
+++ b/include/GetEssen.hpp
@@ -12,6 +12,8 @@
#include "Handler.hpp"
#include "Response.hpp"
+#include "sqdb.hpp"
+#include "Utilities.hpp"
namespace Handler {
namespace MensaHandler {
@@ -20,7 +22,7 @@ namespace Handler {
struct MensaEssen {
int ID{191};
- std::queue<crow::json::wvalue> Message;
+ std::string Message;
ptime Datum;
ptime LastModified;
};
@@ -30,19 +32,19 @@ namespace Handler {
};
- bool db_update_mensa_message(const int &mensaID, const ptime &mensaDatum, const std::vector<crow::json::wvalue> &message);
+ bool db_update_mensa_message(const int &mensaID, const ptime &mensaDatum, const std::string &message);
bool db_insert_mensa_message(const int &mensaID, const ptime &mensaDatum, const string &message);
MensaEssen db_get_mensa_message(const int &mensaID, const ptime &mensaDatum);
- std::vector<crow::json::wvalue> getEssenOnline(int mensa_ID, boost::posix_time::ptime datumEssen);
+ //std::vector<crow::json::wvalue> getEssenOnline(int mensa_ID, boost::posix_time::ptime datumEssen);
- std::vector<crow::json::wvalue> getEssen(int mensa_ID, int offset);
+ std::string getEssen(int mensa_ID, int offset);
- std::vector<crow::json::wvalue> parseEssen(MensaEssen Essen);
+ //std::vector<crow::json::wvalue> parseEssen(MensaEssen Essen);
- std::vector<crow::json::wvalue> read_mensa_message_from_file(const int &mensa_id_file);
+ std::string 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 e0208f6..0cda77c 100644
--- a/src/GetEssen.cpp
+++ b/src/GetEssen.cpp
@@ -1,125 +1,143 @@
-#include "GetEssen.hpp"
-
-#include "sqdb.hpp"
-#include "Utilities.hpp"
-
-using std::string;
+//
+// Created by max on 18.12.18.
+//
-bool Handler::MensaHandler::db_update_mensa_message(const int &mensaID, const ptime &mensaDatum, const std::vector<crow::json::wvalue> &message) {
- sqdb::Db db("../main.sqlite");
+#include "GetEssen.hpp"
- std::string messageFromJSON;
- for (auto &mes : message){
- messageFromJSON.append(mes.keys().at(0));
- }
+using namespace boost::posix_time;
+using namespace std;
+#define SQLITEPATH "../../main.sqlite"
- string newTime = to_simple_string(ptime(boost::posix_time::second_clock::local_time()));
- string mensaDatumString =
- std::to_string(mensaDatum.date().year()) + "-" + mensaDatum.date().month().as_short_string() + "-" +
- std::to_string(mensaDatum.date().day().as_number());
+bool Handler::MensaHandler::db_update_mensa_message(const int& mensaID, const ptime& mensaDatum, const string& message){
+ sqdb::Db db(SQLITEPATH);
+ string newTime = to_simple_string(ptime(second_clock::local_time()));
+ string mensaDatumString = to_string(mensaDatum.date().year()) + "-" + mensaDatum.date().month().as_short_string() + "-" + to_string(mensaDatum.date().day().as_number());
sqdb::QueryStr str;
- db.Query(str.Format(
- SQDB_MAKE_TEXT("update mensa set Message = '%s', LastModified = '%s' where ID = %i and Datum = '%s';"),
- messageFromJSON.c_str(), newTime.c_str(), mensaID, mensaDatumString.c_str())).Next();
+ db.Query(str.Format(SQDB_MAKE_TEXT("update mensa set Message = '%s', LastModified = '%s' where ID = %i and Datum = '%s';"), message.c_str(), newTime.c_str(), mensaID, mensaDatumString.c_str())).Next();
return true;
}
-bool Handler::MensaHandler::db_insert_mensa_message(const int &mensaID, const ptime &mensaDatum, const string &message) {
- sqdb::Db db("../main.sqlite");
- string newTime = to_simple_string(ptime(boost::posix_time::second_clock::local_time()));
- string mensaDatumString =
- std::to_string(mensaDatum.date().year()) + "-" + mensaDatum.date().month().as_short_string() + "-" +
- std::to_string(mensaDatum.date().day().as_number());
+bool Handler::MensaHandler::db_insert_mensa_message(const int& mensaID, const ptime& mensaDatum, const string& message){
+ sqdb::Db db(SQLITEPATH);
+ string newTime = to_simple_string(ptime(second_clock::local_time()));
+ string mensaDatumString = to_string(mensaDatum.date().year()) + "-" + mensaDatum.date().month().as_short_string() + "-" + to_string(mensaDatum.date().day().as_number());
sqdb::QueryStr str;
- db.Query(str.Format(SQDB_MAKE_TEXT("insert into mensa values(%i, '%s', '%s', '%s');"), mensaID, message.c_str(),
- mensaDatumString.c_str(), newTime.c_str())).Next();
+ db.Query(str.Format(SQDB_MAKE_TEXT("insert into mensa values(%i, '%s', '%s', '%s');"), mensaID, message.c_str(), mensaDatumString.c_str(), newTime.c_str())).Next();
return true;
}
-Handler::MensaHandler::MensaEssen Handler::MensaHandler::db_get_mensa_message(const int &mensaID, const ptime &mensaDatum) {
- MensaEssen out;
- sqdb::Db db("../main.sqlite");
+Handler::MensaHandler::MensaEssen Handler::MensaHandler::db_get_mensa_message(const int& mensaID, const ptime& mensaDatum) {
+ Handler::MensaHandler::MensaEssen out;
+ sqdb::Db db(SQLITEPATH);
sqdb::QueryStr str;
- string mensaDatumString =
- std::to_string(mensaDatum.date().year()) + "-" + mensaDatum.date().month().as_short_string() + "-" +
- std::to_string(mensaDatum.date().day().as_number());
- sqdb::Statement s = db.Query(
- str.Format(SQDB_MAKE_TEXT("SELECT * from mensa WHERE Datum = '%s' AND ID = %i;"), mensaDatumString.c_str(),
- mensaID));
+ string mensaDatumString = to_string(mensaDatum.date().year()) + "-" + mensaDatum.date().month().as_short_string() + "-" + to_string(mensaDatum.date().day().as_number());
try {
- if (s.Next()) {
+ sqdb::Statement s = db.Query(str.Format(SQDB_MAKE_TEXT("SELECT * from mensa WHERE Datum = '%s' AND ID = %i;"), mensaDatumString.c_str(), mensaID ));
+ //sqdb::Statement s = db.Query(str.Format(SQDB_MAKE_TEXT("SELECT * from mensa"))); // WHERE Datum = '%s' AND ID = %i;"), mensaDatumString.c_str(), mensaID ));
+ if(s.Next()) {
int ID = s.GetField(0);
- auto tmpData = crow::json::load(s.GetField(1).GetString());
- auto Message = tmpData;
+ string Message = s.GetField(1);
string Datum = s.GetField(2);
string LastModified = s.GetField(3);
- ptime LMDate(boost::posix_time::time_from_string(LastModified));
+ ptime LMDate(time_from_string(LastModified));
out.ID = ID;
- out.Message.push(Message);
+ out.Message = Message;
out.Datum = mensaDatum;
out.LastModified = LMDate;
return out;
}
- } catch (sqdb::Exception &exception) {
- std::cerr << "Error code: " << exception.GetErrorCode() << " Error Message: " << exception.GetErrorMsg()
- << std::endl;
+ } catch (sqdb::Exception &exception){
+ std::cerr << "Error code: " << exception.GetErrorCode() << " Error Message: " << exception.GetErrorMsg() << "\n";
}
+
out.ID = -2;
return out;
-}
-
-std::vector<crow::json::wvalue> Handler::MensaHandler::getEssen(const int mensa_ID, const int offset) {
- std::vector<crow::json::wvalue> reply_vec;
- std::string reply;
+}
+string Handler::MensaHandler::getEssen(const int mensa_ID, const int offset) {
+ Handler::MensaHandler::MensaEssen Essen;
if (offset >= 0) {
+
if (offset > 28) {
- 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;
- //return "Ich fühle mich geschmeichelt, dass du denkst, dass ich so weit in die Zukunft gucken kann (0 bis 28 Tage)";
+ return "Ich fühle mich geschmeichelt, dass du denkst, dass ich so weit in die Zukunft gucken kann (0 bis 28 Tage)";
}
- ptime datumNow = boost::posix_time::second_clock::local_time();
+ ptime datumNow = second_clock::local_time();
ptime datumEssen = datumNow + (boost::gregorian::days(offset));
- MensaEssen Essen = db_get_mensa_message(mensa_ID, datumEssen);
-
+ Essen = db_get_mensa_message(mensa_ID, datumEssen);
if (Essen.ID == -2) { // SQL got nothing back :/
//log("sql got nothing back!");
- return getEssenOnline(mensa_ID, datumEssen);
- }
+ if (downloadMensaFile(mensa_ID, datumEssen) != CURLE_OK){
+ std::cerr << "Error downloading file\n";
+ 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 " + to_string(Essen.Datum.date().day().as_number()) + "." + to_string(Essen.Datum.date().month().as_number()) + "." + to_string(Essen.Datum.date().year()) + ":";
+ break;
+ case mensa ::Nord:
+ out = "<b>Mensa Nord</b> am " + to_string(Essen.Datum.date().day().as_number()) + "." + to_string(Essen.Datum.date().month().as_number()) + "." + to_string(Essen.Datum.date().year()) + ":";
+ break;
+ case mensa::Sued :
+ out = "<b>Mensa Sued</b> am " + to_string(Essen.Datum.date().day().as_number()) + "." + to_string(Essen.Datum.date().month().as_number()) + "." + to_string(Essen.Datum.date().year()) + ":";
+ break;
+ default:
+ out = "Mensa Unbekannt am " + to_string(Essen.Datum.date().day().as_number()) + "." + to_string(Essen.Datum.date().month().as_number()) + "." + to_string(Essen.Datum.date().year()) + ":";
+ break;
+ }
+ out += Essen.Message;
+ out += "\n (Stand: " + to_simple_string(Essen.LastModified) + ")\n";
+ return out;
+ }
- if (Essen.LastModified + boost::posix_time::hours(2) < datumNow) { // LastModified is more than 2 hours old
+ if (Essen.LastModified + hours(2) < datumNow) { //LastModified is more than 2 hours old
if (downloadMensaFile(mensa_ID, datumEssen) != CURLE_OK) {
- std::cerr << "Error downloading file" << std::endl;
- reply_vec.emplace_back(Response::create_text("Error downloading file!"));
- return reply_vec;
+ return "Error downloading file!";
}
db_update_mensa_message(mensa_ID, datumEssen, read_mensa_message_from_file(mensa_ID));
+ Essen = db_get_mensa_message(mensa_ID, datumEssen);
}
- return parseEssen(db_get_mensa_message(mensa_ID, datumEssen));
- }
+ string out;
+ switch (Essen.ID) {
+ case mensa::Adlershof :
+ out = "<b>Mensa Adlershof</b> am " + to_string(Essen.Datum.date().day().as_number()) + "." + to_string(Essen.Datum.date().month().as_number()) + "." + to_string(Essen.Datum.date().year()) + ":";
+ break;
+ case mensa::Nord :
+ out = "<b>Mensa Nord</b> am " + to_string(Essen.Datum.date().day().as_number()) + "." + to_string(Essen.Datum.date().month().as_number()) + "." + to_string(Essen.Datum.date().year()) + ":";
+ break;
+ case mensa::Sued :
+ out = "<b>Mensa Sued</b> am " + to_string(Essen.Datum.date().day().as_number()) + "." + to_string(Essen.Datum.date().month().as_number()) + "." + to_string(Essen.Datum.date().year()) + ":";
+ break;
+ default:
+ out = "Mensa Unbekannt am " + to_string(Essen.Datum.date().day().as_number()) + "." + to_string(Essen.Datum.date().month().as_number()) + "." + to_string(Essen.Datum.date().year()) + ":";
+ break;
- 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;
-}
+ }
+ out += Essen.Message;
+ out += "\n (Stand: " + to_simple_string(Essen.LastModified) + ")\n";
+ std::cerr << out;
+ return out;
+ } else return "Wer denkst du bin ich? Ein Zeitreisender?\nIch kann zwar in die Zukunft gucken, aber nur 28 Tage";
-std::vector<crow::json::wvalue> Handler::MensaHandler::read_mensa_message_from_file(const int &mensa_id_file) {
- std::vector<crow::json::wvalue> reply_vec;
- crow::json::wvalue test;
+}
+string Handler::MensaHandler::read_mensa_message_from_file(const int& mensa_id_file) {
string s;
+ string out;
bool serious = false;
std::ifstream inFile(std::to_string(mensa_id_file));
@@ -133,7 +151,7 @@ std::vector<crow::json::wvalue> Handler::MensaHandler::read_mensa_message_from_f
vegan += (char) i;
}
- reply_vec.emplace_back(Response::create_text(vegan));
+ out += vegan;
}
if (s.find("1.png") != string::npos && serious) {
@@ -144,7 +162,7 @@ std::vector<crow::json::wvalue> Handler::MensaHandler::read_mensa_message_from_f
vegetarian += (char) i;
}
- reply_vec.emplace_back(Response::create_text(vegetarian));
+ out += vegetarian;
}
if (s.find("splIcon") != string::npos && serious && s.find("1.png") == string::npos &&
s.find("15.png") == string::npos) {
@@ -154,7 +172,7 @@ std::vector<crow::json::wvalue> Handler::MensaHandler::read_mensa_message_from_f
emptyEmoji += (char) i;
}
- reply_vec.emplace_back(Response::create_text(emptyEmoji));
+ out += emptyEmoji;
}
if (s.find("splGroup\"") != string::npos) { //Getting the Category of the Meal
@@ -170,28 +188,26 @@ std::vector<crow::json::wvalue> Handler::MensaHandler::read_mensa_message_from_f
}
serious = (s == "Aktionen" || s == "Essen" || s == "Beilagen");
if (serious) {
- 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)));
+ out += "\n<b>" + s + "</b>\n";
}
}
-
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) == '>') {
j = i + 1;
- //logStatus("Zeichen > gefunden in Position" + std::std::to_string(i));
+ //logStatus("Zeichen > gefunden in Position" + std::to_string(i));
}
if (s.at(i) == '<' && j != 0) {
s = s.substr(j, i - j);
j = 0;
}
+
}
- reply_vec.emplace_back(Response::create_text("\t" + s));
+
+ out += "\t" + s;
}
- if (s.find("euro;") != string::npos && serious) { // getting the price of each Meal
+ if (s.find("euro;") != string::npos && serious) { //geting the price of each Meal
for (int i = 0, j = 0; (unsigned) i < s.length(); ++i) {
if (s.at(i) == ';') {
j = i + 1;
@@ -201,81 +217,24 @@ std::vector<crow::json::wvalue> Handler::MensaHandler::read_mensa_message_from_f
j = 0;
}
}
- 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"));
+ out += "\t<b>" + s + "</b>€\n";
}
}
- if (reply_vec.empty()) {
- reply_vec.emplace_back(Response::create_text("Heute kein Essen"));
- }
-
- 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();
+ if (out.empty()) {
+ return "Heute kein Essen";
}
+ return out;
- 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;
- }
-
- std::string jsonMessage;
- for (auto &mes : read_mensa_message_from_file(mensa_ID)){
- jsonMessage.append(crow::json::dump(mes));
- }
-
- db_insert_mensa_message(mensa_ID, datumEssen, jsonMessage);
-
- 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;
- return Response::simple_response("Mensafunktion gerade nicht verfügbar. Bitte versuchen Sie es Später erneut.");
-/*
+ //return Response::simple_response("Mensafunktion gerade nicht verfügbar. Bitte versuchen Sie es Später erneut.");
+
auto args = tokenizeArguments(arguments);
std::string mensa_name = (!args.empty() ? args.at(0) : "adlershof");
@@ -293,6 +252,6 @@ Handler::json Handler::mensaHandler(const std::string &arguments, const std::str
int offset = std::stoi(offset_request);
- return Response::create_response(getEssen(Mensa_ID, offset));
- */
+ return Response::simple_response(getEssen(Mensa_ID, offset), session, true);
+
}