indexing: allow setting a maxseconds parameter on mimeconf lines. Allows setting a specific 30S value for text/man which should be fast but sometimes goes looping
This commit is contained in:
parent
cf3b218a35
commit
9b24501f57
@ -63,9 +63,7 @@ void MEAdv::newData(int n)
|
|||||||
|
|
||||||
|
|
||||||
MimeHandlerExec::MimeHandlerExec(RclConfig *cnf, const std::string& id)
|
MimeHandlerExec::MimeHandlerExec(RclConfig *cnf, const std::string& id)
|
||||||
: RecollFilter(cnf, id), missingHelper(false), m_filtermaxseconds(900),
|
: RecollFilter(cnf, id)
|
||||||
m_filtermaxmbytes(0), m_handlernomd5(false), m_hnomd5init(false),
|
|
||||||
m_nomd5(false)
|
|
||||||
{
|
{
|
||||||
m_config->getConfParam("filtermaxseconds", &m_filtermaxseconds);
|
m_config->getConfParam("filtermaxseconds", &m_filtermaxseconds);
|
||||||
m_config->getConfParam("filtermaxmbytes", &m_filtermaxmbytes);
|
m_config->getConfParam("filtermaxmbytes", &m_filtermaxmbytes);
|
||||||
|
|||||||
@ -44,7 +44,7 @@ class HandlerTimeout {};
|
|||||||
* (cmd, params etc.)
|
* (cmd, params etc.)
|
||||||
*/
|
*/
|
||||||
class MimeHandlerExec : public RecollFilter {
|
class MimeHandlerExec : public RecollFilter {
|
||||||
public:
|
public:
|
||||||
///////////////////////
|
///////////////////////
|
||||||
// Members not reset by clear(). params, cfgFilterOutputMtype and
|
// Members not reset by clear(). params, cfgFilterOutputMtype and
|
||||||
// cfgFilterOutputCharset
|
// cfgFilterOutputCharset
|
||||||
@ -62,33 +62,42 @@ class MimeHandlerExec : public RecollFilter {
|
|||||||
// those filters, the output charset has to be known: ie set by a command
|
// those filters, the output charset has to be known: ie set by a command
|
||||||
// line option.
|
// line option.
|
||||||
std::string cfgFilterOutputCharset;
|
std::string cfgFilterOutputCharset;
|
||||||
bool missingHelper;
|
bool missingHelper{false};
|
||||||
// Resource management values
|
// Resource management values
|
||||||
int m_filtermaxseconds;
|
|
||||||
int m_filtermaxmbytes;
|
// The filtermaxseconds default is set in the constructor by
|
||||||
|
// querying the recoll.conf configuration variable. It can be
|
||||||
|
// changed by the filter creation code in mimehandler.cpp if a
|
||||||
|
// maxseconds parameter is set on the mimeconf line.
|
||||||
|
int m_filtermaxseconds{900};
|
||||||
|
int m_filtermaxmbytes{0};
|
||||||
////////////////
|
////////////////
|
||||||
|
|
||||||
MimeHandlerExec(RclConfig *cnf, const std::string& id);
|
MimeHandlerExec(RclConfig *cnf, const std::string& id);
|
||||||
|
|
||||||
|
virtual void setmaxseconds(int seconds) {
|
||||||
|
m_filtermaxseconds = seconds;
|
||||||
|
}
|
||||||
|
|
||||||
virtual bool next_document() override;
|
virtual bool next_document() override;
|
||||||
virtual bool skip_to_document(const std::string& ipath) override;
|
virtual bool skip_to_document(const std::string& ipath) override;
|
||||||
|
|
||||||
virtual void clear_impl() override {
|
virtual void clear_impl() override {
|
||||||
m_fn.erase();
|
m_fn.erase();
|
||||||
m_ipath.erase();
|
m_ipath.erase();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool set_document_file_impl(const std::string& mt,
|
virtual bool set_document_file_impl(
|
||||||
const std::string& file_path) override;
|
const std::string& mt, const std::string& file_path) override;
|
||||||
|
|
||||||
std::string m_fn;
|
std::string m_fn;
|
||||||
std::string m_ipath;
|
std::string m_ipath;
|
||||||
// md5 computation excluded by handler name: can't change after init
|
// md5 computation excluded by handler name: can't change after init
|
||||||
bool m_handlernomd5;
|
bool m_handlernomd5{false};
|
||||||
bool m_hnomd5init;
|
bool m_hnomd5init{false};
|
||||||
// If md5 not excluded by handler name, allow/forbid depending on mime
|
// If md5 not excluded by handler name, allow/forbid depending on mime
|
||||||
bool m_nomd5;
|
bool m_nomd5{false};
|
||||||
|
|
||||||
// Set the character set field and possibly transcode text/plain
|
// Set the character set field and possibly transcode text/plain
|
||||||
// output.
|
// output.
|
||||||
|
|||||||
@ -202,6 +202,7 @@ static RecollFilter *mhFactory(RclConfig *config, const string &mimeOrParams,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const string cstr_mh_charset("charset");
|
static const string cstr_mh_charset("charset");
|
||||||
|
static const string cstr_mh_maxseconds("maxseconds");
|
||||||
/**
|
/**
|
||||||
* Create a filter that executes an external program or script
|
* Create a filter that executes an external program or script
|
||||||
* A filter def can look like:
|
* A filter def can look like:
|
||||||
@ -245,7 +246,9 @@ MimeHandlerExec *mhExecFactory(RclConfig *cfg, const string& mtype, string& hs,
|
|||||||
h->cfgFilterOutputCharset = stringtolower((const string&)value);
|
h->cfgFilterOutputCharset = stringtolower((const string&)value);
|
||||||
if (attrs.get(cstr_dj_keymt, value))
|
if (attrs.get(cstr_dj_keymt, value))
|
||||||
h->cfgFilterOutputMtype = stringtolower((const string&)value);
|
h->cfgFilterOutputMtype = stringtolower((const string&)value);
|
||||||
|
if (attrs.get(cstr_mh_maxseconds, value)) {
|
||||||
|
h->setmaxseconds(atoi(value.c_str()));
|
||||||
|
}
|
||||||
LOGDEB2("mhExecFactory:mt [" << mtype << "] cfgmt [" <<
|
LOGDEB2("mhExecFactory:mt [" << mtype << "] cfgmt [" <<
|
||||||
h->cfgFilterOutputMtype << "] cfgcs ["<<h->cfgFilterOutputCharset <<
|
h->cfgFilterOutputMtype << "] cfgcs ["<<h->cfgFilterOutputCharset <<
|
||||||
"] cmd: [" << stringsToString(h->params) << "]\n");
|
"] cmd: [" << stringsToString(h->params) << "]\n");
|
||||||
|
|||||||
@ -222,7 +222,7 @@ text/x-ini = internal text/plain
|
|||||||
text/x-java = internal text/plain
|
text/x-java = internal text/plain
|
||||||
text/x-lua = internal
|
text/x-lua = internal
|
||||||
text/x-mail = internal
|
text/x-mail = internal
|
||||||
text/x-man = exec rclman
|
text/x-man = exec rclman;maxseconds=30
|
||||||
text/x-orgmode = execm rclorgmode.py
|
text/x-orgmode = execm rclorgmode.py
|
||||||
text/x-perl = internal text/plain
|
text/x-perl = internal text/plain
|
||||||
text/x-purple-html-log = internal text/html
|
text/x-purple-html-log = internal text/html
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user