TelegramSearch/src/textfilter.cpp

72 lines
1.5 KiB
C++

#include "textfilter.h"
#include <util.h> // mrbesen/util.h
static bool matches(const std::string& msg, const std::string& text) {
//simpler contains check
return (msg.find(text) != std::string::npos);
}
static bool matchesIC(const std::string& msg, const std::string& text) {
//turn compare string to lower
std::string lower;
mrbesen::util::toLower(msg, lower);
return (lower.find(text) != std::string::npos);
}
void TextFilter::setup(std::ostream& o, std::istream& str) {
o << "Such text:";
std::getline(str, text);
Filter::setup(o, str);
if(ignoreCase) {
mrbesen::util::toLower(text);
}
}
bool TextFilter::filter(const Message& m) const {
return match(m.text);
}
bool TextFilter::match(const std::string& input) const {
if(ignoreCase)
return matchesIC(input, text);
else
return matches(input, text);
}
void RegexFilter::setup(std::ostream& o, std::istream& str) {
//build regex pattern
o << "Regexpattern: " << std::endl;
std::string text;
getline(str, text);
pattern = std::regex(text, (ignoreCase ? std::regex::icase : (std::regex::flag_type) 0));
Filter::setup(o, str);
}
bool RegexFilter::filter(const Message& m) const {
return match(m.text);
}
bool RegexFilter::match(const std::string& input) const {
return std::regex_search(input, pattern);
}
bool FilenameFilter::filter(const Message& m) const {
if(m.hasFile()) {
return match(m.filename);
}
return false;
}
bool RegexFilenameFilter::filter(const Message& m) const {
if(m.hasFile()) {
return match(m.filename);
}
return false;
}