diff options
author | louiz’ <louiz@louiz.org> | 2016-09-04 21:04:21 +0200 |
---|---|---|
committer | louiz’ <louiz@louiz.org> | 2016-09-04 22:58:38 +0200 |
commit | 3047bd41b212390da8e3a4dbcf351e79879042dd (patch) | |
tree | 3efbf79b20133bed649195e43625d3129ae164d0 /src/database | |
parent | 1140db3b88bb70cbcab044efa729707bd5a442f6 (diff) | |
download | biboumi-3047bd41b212390da8e3a4dbcf351e79879042dd.tar.gz biboumi-3047bd41b212390da8e3a4dbcf351e79879042dd.tar.bz2 biboumi-3047bd41b212390da8e3a4dbcf351e79879042dd.tar.xz biboumi-3047bd41b212390da8e3a4dbcf351e79879042dd.zip |
MAM results can be filtered by start and end dates
Diffstat (limited to 'src/database')
-rw-r--r-- | src/database/database.cpp | 32 | ||||
-rw-r--r-- | src/database/database.hpp | 2 |
2 files changed, 25 insertions, 9 deletions
diff --git a/src/database/database.cpp b/src/database/database.cpp index be0da8e..e995d95 100644 --- a/src/database/database.cpp +++ b/src/database/database.cpp @@ -6,6 +6,7 @@ #include <irc/iid.hpp> #include <uuid.h> #include <utils/get_first_non_empty.hpp> +#include <utils/time.hpp> using namespace std::string_literals; @@ -136,14 +137,30 @@ void Database::store_muc_message(const std::string& owner, const Iid& iid, line.update(); } -std::vector<db::MucLogLine> Database::get_muc_logs(const std::string& owner, const std::string& chan_name, const std::string& server, int limit) +std::vector<db::MucLogLine> Database::get_muc_logs(const std::string& owner, const std::string& chan_name, const std::string& server, + int limit, const std::string& start, const std::string& end) { - if (limit == -1) - limit = 1024; - const auto& res = litesql::select<db::MucLogLine>(*Database::db, - db::MucLogLine::Owner == owner && - db::MucLogLine::IrcChanName == chan_name && - db::MucLogLine::IrcServerName == server).orderBy(db::MucLogLine::Id, false).limit(limit).all(); + auto request = litesql::select<db::MucLogLine>(*Database::db, + db::MucLogLine::Owner == owner && + db::MucLogLine::IrcChanName == chan_name && + db::MucLogLine::IrcServerName == server); + request.orderBy(db::MucLogLine::Id, false); + + if (limit >= 0) + request.limit(limit); + if (!start.empty()) + { + const auto start_time = utils::parse_datetime(start); + if (start_time != -1) + request.where(db::MucLogLine::Date >= start_time); + } + if (!end.empty()) + { + const auto end_time = utils::parse_datetime(end); + if (end_time != -1) + request.where(db::MucLogLine::Date <= end_time); + } + const auto& res = request.all(); return {res.crbegin(), res.crend()}; } @@ -152,7 +169,6 @@ void Database::close() Database::db.reset(nullptr); } - std::string Database::gen_uuid() { char uuid_str[37]; diff --git a/src/database/database.hpp b/src/database/database.hpp index e7fdd5f..6823574 100644 --- a/src/database/database.hpp +++ b/src/database/database.hpp @@ -49,7 +49,7 @@ public: const std::string& server, const std::string& channel); static std::vector<db::MucLogLine> get_muc_logs(const std::string& owner, const std::string& chan_name, const std::string& server, - int limit); + int limit=-1, const std::string& before="", const std::string& after=""); static void store_muc_message(const std::string& owner, const Iid& iid, time_point date, const std::string& body, const std::string& nick); |