#pragma once #include #include #include #include #include using json = nlohmann::json; struct Message { std::string text; uint64_t chatid; uint64_t messageid; }; enum class Searchflags { NONE = 0, IGNORECASE = 1, REGEX = 2, }; Searchflags operator|=(Searchflags& lhs, const Searchflags sf); bool operator&(Searchflags& lhs, const Searchflags sf); class Search { public: Search(); ~Search(); static Searchflags fromString(const std::string&); void addFile(const std::string& file); std::list search(std::string text, Searchflags flags = Searchflags::NONE) const; const std::string& getChatname(uint64_t id) const; std::string getShortChatname(uint64_t id) const; private: void searchRegex(const std::string& text, bool ignoreCase, std::list& out) const; void runsearch(const std::string& st, bool (Search::*checker)(const std::string& msg, const std::string& text) const, std::list& out) const; bool matches(const std::string& msg, const std::string& text) const; bool matchesIC(const std::string& msg, const std::string& text) const; void loadMessages(const json& j, uint64_t chatid); std::list msgs; std::map chatnames; };