From e1a20aa810f09f82eda3f1f2075dfa44f7754a91 Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Wed, 2 Mar 2011 13:47:07 +0100 Subject: [PATCH] got rid of accesses to global config through getMainConfig() --- src/common/rclconfig.cpp | 10 ++++++++-- src/common/rclconfig.h | 6 ------ src/index/recollindex.cpp | 4 ---- src/internfile/internfile.cpp | 4 ---- src/internfile/mh_exec.cpp | 5 +---- src/internfile/mh_exec.h | 3 ++- src/internfile/mh_execm.cpp | 2 +- src/internfile/mh_execm.h | 4 ++-- src/internfile/mh_html.h | 3 ++- src/internfile/mh_mail.cpp | 15 +++++++-------- src/internfile/mh_mail.h | 2 +- src/internfile/mh_mbox.cpp | 24 ++++++++---------------- src/internfile/mh_mbox.h | 5 +++-- src/internfile/mh_text.cpp | 4 ++-- src/internfile/mh_text.h | 4 ++-- src/internfile/mh_unknown.h | 3 ++- src/internfile/mimehandler.cpp | 24 ++++++++++++------------ src/internfile/mimehandler.h | 6 ++++-- src/kde/kioslave/recoll/htmlif.cpp | 2 +- src/kde/kioslave/recoll/kio_recoll.cpp | 5 ----- src/python/recoll/pyrecoll.cpp | 5 ----- src/qtgui/confgui/main.cpp | 4 ---- src/qtgui/reslist.cpp | 4 ++-- src/qtgui/restable.cpp | 10 +++++----- src/qtgui/ssearch_w.cpp | 4 ++-- src/qtgui/uiprefs_w.cpp | 2 +- src/query/recollq.cpp | 7 +------ src/query/reslistpager.cpp | 19 ++++++++++--------- src/query/reslistpager.h | 9 +++++---- src/query/wasatorcl.cpp | 14 ++++++++------ src/query/wasatorcl.h | 9 ++++++--- 31 files changed, 98 insertions(+), 124 deletions(-) diff --git a/src/common/rclconfig.cpp b/src/common/rclconfig.cpp index 5025b66d..9f46b2e1 100644 --- a/src/common/rclconfig.cpp +++ b/src/common/rclconfig.cpp @@ -183,8 +183,12 @@ RclConfig::RclConfig(const string *argcnf) bool RclConfig::updateMainConfig() { - m_conf = new ConfStack("recoll.conf", m_cdirs, true); - if (m_conf == 0 || !m_conf->ok()) { + LOGDEB(("RclConfig::updateMainConfig\n")); + ConfStack *newconf = + new ConfStack("recoll.conf", m_cdirs, true); + if (newconf == 0 || !newconf->ok()) { + if (m_conf) + return false; string where; stringsToString(m_cdirs, where); m_reason = string("No/bad main configuration file in: ") + where; @@ -211,6 +215,8 @@ bool RclConfig::updateMainConfig() TextSplit::noNumbers(); } + delete m_conf; + m_conf = newconf; m_skpnstate.init(this, m_conf, "skippedNames"); m_rmtstate.init(this, m_conf, "indexedmimetypes"); return true; diff --git a/src/common/rclconfig.h b/src/common/rclconfig.h index 52054164..225fd416 100644 --- a/src/common/rclconfig.h +++ b/src/common/rclconfig.h @@ -64,12 +64,6 @@ class RclConfig { // argcnf RclConfig(const string *argcnf = 0); - // Main programs must implement this, it avoids having to carry - // the configuration parameter everywhere. Places where several - // RclConfig instances might be needed will take care of - // themselves. - static RclConfig* getMainConfig(); - // Return a writable clone of the main config. This belongs to the // caller (must delete it when done) ConfNull *cloneMainConfig(); diff --git a/src/index/recollindex.cpp b/src/index/recollindex.cpp index e802a93c..7236e08c 100644 --- a/src/index/recollindex.cpp +++ b/src/index/recollindex.cpp @@ -201,10 +201,6 @@ Usage(FILE *where = stderr) } static RclConfig *config; -RclConfig *RclConfig::getMainConfig() -{ - return config; -} void lockorexit(Pidfile *pidfile) { diff --git a/src/internfile/internfile.cpp b/src/internfile/internfile.cpp index 073947e8..e9b8d153 100644 --- a/src/internfile/internfile.cpp +++ b/src/internfile/internfile.cpp @@ -1053,10 +1053,6 @@ static int op_flags; #define OPT_q 0x1 RclConfig *config; -RclConfig *RclConfig::getMainConfig() -{ - return config; -} int main(int argc, char **argv) { thisprog = argv[0]; diff --git a/src/internfile/mh_exec.cpp b/src/internfile/mh_exec.cpp index 6c4ac942..529602fa 100644 --- a/src/internfile/mh_exec.cpp +++ b/src/internfile/mh_exec.cpp @@ -78,10 +78,7 @@ bool MimeHandlerExec::next_document() } int filtermaxseconds = 900; - RclConfig *conf = RclConfig::getMainConfig(); - if (conf) { - conf->getConfParam("filtermaxseconds", &filtermaxseconds); - } + m_config->getConfParam("filtermaxseconds", &filtermaxseconds); // Command name string cmd = params.front(); diff --git a/src/internfile/mh_exec.h b/src/internfile/mh_exec.h index cc166029..1a6b9bf0 100644 --- a/src/internfile/mh_exec.h +++ b/src/internfile/mh_exec.h @@ -57,7 +57,8 @@ class MimeHandlerExec : public RecollFilter { bool missingHelper; //////////////// - MimeHandlerExec(const string& mt) : RecollFilter(mt), missingHelper(false) + MimeHandlerExec(RclConfig *cnf, const string& mt) + : RecollFilter(cnf, mt), missingHelper(false) {} virtual ~MimeHandlerExec() {} virtual bool set_document_file(const string &file_path) { diff --git a/src/internfile/mh_execm.cpp b/src/internfile/mh_execm.cpp index 6ecf3543..5a477632 100644 --- a/src/internfile/mh_execm.cpp +++ b/src/internfile/mh_execm.cpp @@ -251,7 +251,7 @@ bool MimeHandlerExecMultiple::next_document() if (!ipath.empty()) { m_metaData["ipath"] = ipath; if (mtype.empty()) { - mtype = mimetype(ipath, 0, RclConfig::getMainConfig(), false); + mtype = mimetype(ipath, 0, m_config, false); if (mtype.empty()) { // mimetype() won't call idFile when there is no file. Do it mtype = idFileMem(m_metaData["content"]); diff --git a/src/internfile/mh_execm.h b/src/internfile/mh_execm.h index 89ec2d3c..494eb387 100644 --- a/src/internfile/mh_execm.h +++ b/src/internfile/mh_execm.h @@ -91,8 +91,8 @@ class MimeHandlerExecMultiple : public MimeHandlerExec { /////// End un-cleared stuff. public: - MimeHandlerExecMultiple(const string& mt) - : MimeHandlerExec(mt) + MimeHandlerExecMultiple(RclConfig *cnf, const string& mt) + : MimeHandlerExec(cnf, mt) {} // No resources to clean up, the ExecCmd destructor does it. virtual ~MimeHandlerExecMultiple() {} diff --git a/src/internfile/mh_html.h b/src/internfile/mh_html.h index 3182a8ec..08304016 100644 --- a/src/internfile/mh_html.h +++ b/src/internfile/mh_html.h @@ -27,7 +27,8 @@ */ class MimeHandlerHtml : public RecollFilter { public: - MimeHandlerHtml(const string& mt) : RecollFilter(mt) {} + MimeHandlerHtml(RclConfig *cnf, const string& mt) + : RecollFilter(cnf, mt) {} virtual ~MimeHandlerHtml() {} virtual bool set_document_file(const string &file_path); virtual bool set_document_string(const string &data); diff --git a/src/internfile/mh_mail.cpp b/src/internfile/mh_mail.cpp index 8866a5f6..2a15e1f8 100644 --- a/src/internfile/mh_mail.cpp +++ b/src/internfile/mh_mail.cpp @@ -55,19 +55,18 @@ static const string cstr_title = "title"; static const string cstr_msgid = "msgid"; static const string cstr_abstract = "abstract"; -MimeHandlerMail::MimeHandlerMail(const string &mt) - : RecollFilter(mt), m_bincdoc(0), m_fd(-1), m_stream(0), m_idx(-1) +MimeHandlerMail::MimeHandlerMail(RclConfig *cnf, const string &mt) + : RecollFilter(cnf, mt), m_bincdoc(0), m_fd(-1), m_stream(0), m_idx(-1) { // Look for additional headers to be processed as per config: list hdrnames = - RclConfig::getMainConfig()->getFieldSectNames("mail"); + m_config->getFieldSectNames("mail"); if (hdrnames.empty()) return; for (list::const_iterator it = hdrnames.begin(); it != hdrnames.end(); it++) { - (void)RclConfig::getMainConfig()-> - getFieldConfParam(*it, "mail", m_addProcdHdrs[*it]); + (void)m_config->getFieldConfParam(*it, "mail", m_addProcdHdrs[*it]); } } @@ -282,7 +281,7 @@ bool MimeHandlerMail::processAttach() if (m_metaData[cstr_mimetype] == "application/octet-stream" && !m_metaData["filename"].empty()) { string mt = mimetype(m_metaData["filename"], 0, - RclConfig::getMainConfig(), false); + m_config, false); if (!mt.empty()) m_metaData[cstr_mimetype] = mt; } @@ -532,7 +531,7 @@ void MimeHandlerMail::walkmime(Binc::MimePart* doc, int depth) !stringlowercmp("x-user-defined", charset) || !stringlowercmp("x-unknown", charset) || !stringlowercmp("unknown", charset) ) { - RclConfig::getMainConfig()->getConfParam("maildefcharset", charset); + m_config->getConfParam("maildefcharset", charset); if (charset.empty()) charset = "iso-8859-1"; } @@ -598,7 +597,7 @@ void MimeHandlerMail::walkmime(Binc::MimePart* doc, int depth) string utf8; const string *putf8 = 0; if (!stringlowercmp("text/html", content_type.value)) { - MimeHandlerHtml mh("text/html"); + MimeHandlerHtml mh(m_config, "text/html"); mh.set_property(Dijon::Filter::OPERATING_MODE, m_forPreview ? "view" : "index"); mh.set_property(Dijon::Filter::DEFAULT_CHARSET, charset); diff --git a/src/internfile/mh_mail.h b/src/internfile/mh_mail.h index 2405ee7a..d26ed700 100644 --- a/src/internfile/mh_mail.h +++ b/src/internfile/mh_mail.h @@ -40,7 +40,7 @@ class MHMailAttach; */ class MimeHandlerMail : public RecollFilter { public: - MimeHandlerMail(const string &mt); + MimeHandlerMail(RclConfig *cnf, const string &mt); virtual ~MimeHandlerMail(); virtual bool set_document_file(const string& file_path); virtual bool set_document_string(const string& data); diff --git a/src/internfile/mh_mbox.cpp b/src/internfile/mh_mbox.cpp index aeccf023..dd7d8182 100644 --- a/src/internfile/mh_mbox.cpp +++ b/src/internfile/mh_mbox.cpp @@ -79,11 +79,11 @@ public: } ~MboxCache() {} - mbhoff_type get_offset(const string& udi, int msgnum) + mbhoff_type get_offset(RclConfig *config, const string& udi, int msgnum) { LOGDEB0(("MboxCache::get_offsets: udi [%s] msgnum %d\n", udi.c_str(), msgnum)); - if (!ok()) { + if (!ok(config)) { LOGDEB0(("MboxCache::get_offsets: init failed\n")); return -1; } @@ -125,11 +125,11 @@ public: } // Save array of offsets for a given file, designated by Udi - void put_offsets(const string& udi, mbhoff_type fsize, + void put_offsets(RclConfig *config, const string& udi, mbhoff_type fsize, vector& offs) { LOGDEB0(("MboxCache::put_offsets: %u offsets\n", offs.size())); - if (!ok() || !maybemakedir()) + if (!ok(config) || !maybemakedir()) return; if (fsize < m_minfsize) return; @@ -161,13 +161,10 @@ public: } // Check state, possibly initialize - bool ok() { + bool ok(RclConfig *config) { if (m_minfsize == -1) return false; if (!m_ok) { - RclConfig *config = RclConfig::getMainConfig(); - if (config == 0) - return false; int minmbs = 5; config->getConfParam("mboxcacheminmbs", &minmbs); if (minmbs < 0) { @@ -269,9 +266,8 @@ bool MimeHandlerMbox::set_document_file(const string &fn) m_quirks = 0; // Check for location-based quirks: - RclConfig *config = RclConfig::getMainConfig(); string quirks; - if (config && config->getConfParam(keyquirks, quirks)) { + if (m_config && m_config->getConfParam(keyquirks, quirks)) { if (quirks == "tbird") { LOGDEB(("MimeHandlerMbox: setting quirks TBIRD\n")); m_quirks |= MBOXQUIRK_TBIRD; @@ -402,7 +398,7 @@ bool MimeHandlerMbox::next_document() LOGDEB0(("MimeHandlerMbox::next_doc: mtarg %d m_udi[%s]\n", mtarg, m_udi.c_str())); if (!m_udi.empty() && - (off = mcache.get_offset(m_udi, mtarg)) >= 0 && + (off = mcache.get_offset(m_config, m_udi, mtarg)) >= 0 && fseeko(fp, (off_t)off, SEEK_SET) >= 0 && fgets(line, LL, fp) && (!regexec(&fromregex, line, 0, 0, 0) || @@ -485,7 +481,7 @@ bool MimeHandlerMbox::next_document() LOGDEB2(("MimeHandlerMbox::next: eof hit\n")); m_havedoc = false; if (!m_udi.empty()) { - mcache.put_offsets(m_udi, m_fsize, m_offsets); + mcache.put_offsets(m_config, m_udi, m_fsize, m_offsets); } } return msgtxt.empty() ? false : true; @@ -521,10 +517,6 @@ Usage(void) exit(1); } static RclConfig *config; -RclConfig *RclConfig::getMainConfig() -{ - return config; -} static int op_flags; #define OPT_MOINS 0x1 #define OPT_m 0x2 diff --git a/src/internfile/mh_mbox.h b/src/internfile/mh_mbox.h index 71c3b22a..5a68b52c 100644 --- a/src/internfile/mh_mbox.h +++ b/src/internfile/mh_mbox.h @@ -32,8 +32,9 @@ using std::vector; */ class MimeHandlerMbox : public RecollFilter { public: - MimeHandlerMbox(const string& mime) - : RecollFilter(mime), m_vfp(0), m_msgnum(0), m_lineno(0), m_fsize(0) + MimeHandlerMbox(RclConfig *cnf, const string& mime) + : RecollFilter(cnf, mime), m_vfp(0), m_msgnum(0), + m_lineno(0), m_fsize(0) {} virtual ~MimeHandlerMbox(); virtual bool set_document_file(const string &file_path); diff --git a/src/internfile/mh_text.cpp b/src/internfile/mh_text.cpp index d717c285..1d574d40 100644 --- a/src/internfile/mh_text.cpp +++ b/src/internfile/mh_text.cpp @@ -59,13 +59,13 @@ bool MimeHandlerText::set_document_file(const string &fn) // Max file size parameter: texts over this size are not indexed int maxmbs = 20; - RclConfig::getMainConfig()->getConfParam("textfilemaxmbs", &maxmbs); + m_config->getConfParam("textfilemaxmbs", &maxmbs); if (maxmbs == -1 || st.st_size / MB <= maxmbs) { // Text file page size: if set, we split text files into // multiple documents int ps = 1000; - RclConfig::getMainConfig()->getConfParam("textfilepagekbs", &ps); + m_config->getConfParam("textfilepagekbs", &ps); if (ps != -1) { ps *= KB; m_paging = true; diff --git a/src/internfile/mh_text.h b/src/internfile/mh_text.h index 2ce7d101..e8f1b2b2 100644 --- a/src/internfile/mh_text.h +++ b/src/internfile/mh_text.h @@ -31,8 +31,8 @@ using std::string; */ class MimeHandlerText : public RecollFilter { public: - MimeHandlerText(const string& mt) - : RecollFilter(mt), m_paging(false), m_offs(0) {} + MimeHandlerText(RclConfig *cnf, const string& mt) + : RecollFilter(cnf, mt), m_paging(false), m_offs(0) {} virtual ~MimeHandlerText() {} virtual bool set_document_file(const string &file_path); virtual bool set_document_string(const string&); diff --git a/src/internfile/mh_unknown.h b/src/internfile/mh_unknown.h index 5e068952..b5292399 100644 --- a/src/internfile/mh_unknown.h +++ b/src/internfile/mh_unknown.h @@ -28,7 +28,8 @@ */ class MimeHandlerUnknown : public RecollFilter { public: - MimeHandlerUnknown(const string& mt) : RecollFilter(mt) {} + MimeHandlerUnknown(RclConfig *cnf, const string& mt) + : RecollFilter(cnf, mt) {} virtual ~MimeHandlerUnknown() {} virtual bool set_document_string(const string& fn) { RecollFilter::set_document_file(fn); diff --git a/src/internfile/mimehandler.cpp b/src/internfile/mimehandler.cpp index 1e1f5fa6..56e0c2af 100644 --- a/src/internfile/mimehandler.cpp +++ b/src/internfile/mimehandler.cpp @@ -51,33 +51,33 @@ static multimap o_handlers; /** For mime types set as "internal" in mimeconf: * create appropriate handler object. */ -static Dijon::Filter *mhFactory(const string &mime) +static Dijon::Filter *mhFactory(RclConfig *config, const string &mime) { LOGDEB2(("mhFactory(%s)\n", mime.c_str())); string lmime(mime); stringtolower(lmime); if ("text/plain" == lmime) { - return new MimeHandlerText(lmime); + return new MimeHandlerText(config, lmime); } else if ("text/html" == lmime) { - return new MimeHandlerHtml(lmime); + return new MimeHandlerHtml(config, lmime); } else if ("text/x-mail" == lmime) { - return new MimeHandlerMbox(lmime); + return new MimeHandlerMbox(config, lmime); } else if ("message/rfc822" == lmime) { - return new MimeHandlerMail(lmime); + return new MimeHandlerMail(config, lmime); } else if (lmime.find("text/") == 0) { // Try to handle unknown text/xx as text/plain. This // only happen if the text/xx was defined as "internal" in // mimeconf, not at random. For programs, for example this // allows indexing and previewing as text/plain (no filter // exec) but still opening with a specific editor. - return new MimeHandlerText(lmime); + return new MimeHandlerText(config, lmime); } else { // We should not get there. It means that "internal" was set // as a handler in mimeconf for a mime type we actually can't // handle. LOGERR(("mhFactory: mime type [%s] set as internal but unknown\n", lmime.c_str())); - return new MimeHandlerUnknown(lmime); + return new MimeHandlerUnknown(config, lmime); } } @@ -110,8 +110,8 @@ MimeHandlerExec *mhExecFactory(RclConfig *cfg, const string& mtype, string& hs, return 0; } MimeHandlerExec *h = multiple ? - new MimeHandlerExecMultiple(mtype.c_str()) : - new MimeHandlerExec(mtype.c_str()); + new MimeHandlerExecMultiple(cfg, mtype.c_str()) : + new MimeHandlerExec(cfg, mtype.c_str()); list::iterator it = cmdtoks.begin(); h->params.push_back(cfg->findFilter(*it++)); h->params.insert(h->params.end(), it, cmdtoks.end()); @@ -205,9 +205,9 @@ Dijon::Filter *getMimeHandler(const string &mtype, RclConfig *cfg, // point in the future LOGDEB2(("handlertype internal, cmdstr [%s]\n", cmdstr.c_str())); if (!cmdstr.empty()) - h = mhFactory(cmdstr); + h = mhFactory(cfg, cmdstr); else - h = mhFactory(mtype); + h = mhFactory(cfg, mtype); goto out; } else if (!stringlowercmp("dll", handlertype)) { } else { @@ -247,7 +247,7 @@ Dijon::Filter *getMimeHandler(const string &mtype, RclConfig *cfg, {bool indexunknown = false; cfg->getConfParam("indexallfilenames", &indexunknown); if (indexunknown) { - h = new MimeHandlerUnknown("application/octet-stream"); + h = new MimeHandlerUnknown(cfg, "application/octet-stream"); goto out; } else { goto out; diff --git a/src/internfile/mimehandler.h b/src/internfile/mimehandler.h index 5c7fa388..581d6062 100644 --- a/src/internfile/mimehandler.h +++ b/src/internfile/mimehandler.h @@ -30,8 +30,9 @@ class RclConfig; class RecollFilter : public Dijon::Filter { public: - RecollFilter(const string& mtype) - : Dijon::Filter(mtype), m_forPreview(false), m_havedoc(false) + RecollFilter(RclConfig *config, const string& mtype) + : Dijon::Filter(mtype), m_config(config), + m_forPreview(false), m_havedoc(false) {} virtual ~RecollFilter() {} virtual bool set_property(Properties p, const string &v) { @@ -93,6 +94,7 @@ public: } protected: + RclConfig *m_config; bool m_forPreview; string m_dfltInputCharset; string m_reason; diff --git a/src/kde/kioslave/recoll/htmlif.cpp b/src/kde/kioslave/recoll/htmlif.cpp index 7db377c0..2fac88d9 100644 --- a/src/kde/kioslave/recoll/htmlif.cpp +++ b/src/kde/kioslave/recoll/htmlif.cpp @@ -302,5 +302,5 @@ void RecollProtocol::htmlDoSearch(const QueryDesc& qd) m_pager.resultPageBack(); } // Display - m_pager.displayPage(); + m_pager.displayPage(o_rclconfig); } diff --git a/src/kde/kioslave/recoll/kio_recoll.cpp b/src/kde/kioslave/recoll/kio_recoll.cpp index fbb8fe73..e5193d99 100644 --- a/src/kde/kioslave/recoll/kio_recoll.cpp +++ b/src/kde/kioslave/recoll/kio_recoll.cpp @@ -53,11 +53,6 @@ using namespace KIO; RclConfig *RecollProtocol::o_rclconfig; -RclConfig *RclConfig::getMainConfig() -{ - return RecollProtocol::o_rclconfig; -} - RecollProtocol::RecollProtocol(const QByteArray &pool, const QByteArray &app) : SlaveBase("recoll", pool, app), m_initok(false), m_rcldb(0), m_alwaysdir(false) diff --git a/src/python/recoll/pyrecoll.cpp b/src/python/recoll/pyrecoll.cpp index b453cc62..307c0c06 100644 --- a/src/python/recoll/pyrecoll.cpp +++ b/src/python/recoll/pyrecoll.cpp @@ -1204,11 +1204,6 @@ static PyMethodDef recollMethods[] = { }; -RclConfig *RclConfig::getMainConfig() -{ - return rclconfig; -} - PyDoc_STRVAR(pyrecoll_doc_string, "This is an interface to the Recoll full text indexer."); diff --git a/src/qtgui/confgui/main.cpp b/src/qtgui/confgui/main.cpp index 606f75c4..a57125c5 100644 --- a/src/qtgui/confgui/main.cpp +++ b/src/qtgui/confgui/main.cpp @@ -106,10 +106,6 @@ Usage(void) static RclConfig *config; -RclConfig *RclConfig::getMainConfig() -{ - return config; -} int main(int argc, char **argv) { diff --git a/src/qtgui/reslist.cpp b/src/qtgui/reslist.cpp index 58b5ba5a..10b9a5f3 100644 --- a/src/qtgui/reslist.cpp +++ b/src/qtgui/reslist.cpp @@ -145,7 +145,7 @@ string QtGuiResListPager::pageTop() string QtGuiResListPager::iconPath(const string& mtype) { string iconpath; - RclConfig::getMainConfig()->getMimeIconName(mtype, &iconpath); + rclconfig->getMimeIconName(mtype, &iconpath); return iconpath; } @@ -511,7 +511,7 @@ void ResList::displayPage() { m_pageParaToReldocnums.clear(); clear(); - m_pager->displayPage(); + m_pager->displayPage(rclconfig); LOGDEB0(("ResList::resultPageNext: hasNext %d hasPrev %d\n", m_pager->hasPrev(), m_pager->hasNext())); emit prevPageAvailable(m_pager->hasPrev()); diff --git a/src/qtgui/restable.cpp b/src/qtgui/restable.cpp index 9aeec3f4..21be72e2 100644 --- a/src/qtgui/restable.cpp +++ b/src/qtgui/restable.cpp @@ -19,6 +19,7 @@ static char rcsid[] = "@(#$Id: reslist.cpp,v 1.52 2008-12-17 15:12:08 dockes Exp #include #include +#include "recoll.h" #include "refcntr.h" #include "docseq.h" #include "debuglog.h" @@ -84,7 +85,7 @@ const string& ResTablePager::parFormat() string ResTablePager::iconPath(const string& mtype) { string iconpath; - RclConfig::getMainConfig()->getMimeIconName(mtype, &iconpath); + rclconfig->getMimeIconName(mtype, &iconpath); return iconpath; } @@ -179,9 +180,8 @@ RecollModel::RecollModel(const QStringList fields, QObject *parent) // Add dynamic "stored" fields to the full column list. This // could be protected to be done only once, but it's no real // problem - RclConfig *config = RclConfig::getMainConfig(); - if (config) { - const set& stored = config->getStoredFields(); + if (rclconfig) { + const set& stored = rclconfig->getStoredFields(); for (set::const_iterator it = stored.begin(); it != stored.end(); it++) { if (o_displayableFields.find(*it) == o_displayableFields.end()) { @@ -488,7 +488,7 @@ void ResTable::onTableView_currentChanged(const QModelIndex& index) if (m_model->getDocSource()->getDoc(index.row(), doc)) { textBrowser->clear(); m_detaildocnum = index.row(); - m_pager->displayDoc(index.row(), doc, m_model->m_hdata); + m_pager->displayDoc(rclconfig, index.row(), doc, m_model->m_hdata); } } diff --git a/src/qtgui/ssearch_w.cpp b/src/qtgui/ssearch_w.cpp index 1e12c7ea..31c3c599 100644 --- a/src/qtgui/ssearch_w.cpp +++ b/src/qtgui/ssearch_w.cpp @@ -135,9 +135,9 @@ void SSearch::startSimpleSearch() if (tp == SST_LANG) { string reason; if (prefs.autoSuffsEnable) - sdata = wasaStringToRcl(u8, reason, (const char *)prefs.autoSuffs.toUtf8()); + sdata = wasaStringToRcl(rclconfig, u8, reason, (const char *)prefs.autoSuffs.toUtf8()); else - sdata = wasaStringToRcl(u8, reason); + sdata = wasaStringToRcl(rclconfig, u8, reason); if (sdata == 0) { QMessageBox::warning(0, "Recoll", tr("Bad query string") + QString::fromAscii(reason.c_str())); diff --git a/src/qtgui/uiprefs_w.cpp b/src/qtgui/uiprefs_w.cpp index 6fa09ace..022f41b1 100644 --- a/src/qtgui/uiprefs_w.cpp +++ b/src/qtgui/uiprefs_w.cpp @@ -375,7 +375,7 @@ void UIPrefsDialog::addExtraDbPB_clicked() } struct stat st1, st2; stat(dbdir.c_str(), &st1); - string rcldbdir = RclConfig::getMainConfig()->getDbDir(); + string rcldbdir = rclconfig->getDbDir(); stat(rcldbdir.c_str(), &st2); path_catslash(rcldbdir); diff --git a/src/query/recollq.cpp b/src/query/recollq.cpp index f74e46c5..aecd53d3 100644 --- a/src/query/recollq.cpp +++ b/src/query/recollq.cpp @@ -248,7 +248,7 @@ int recollq(RclConfig **cfp, int argc, char **argv) if (sd) sd->addClause(clp); } else { - sd = wasaStringToRcl(qs, reason); + sd = wasaStringToRcl(rclconfig, qs, reason); } if (!sd) { @@ -325,11 +325,6 @@ int recollq(RclConfig **cfp, int argc, char **argv) static RclConfig *rclconfig; -RclConfig *RclConfig::getMainConfig() -{ - return rclconfig; -} - int main(int argc, char **argv) { exit(recollq(&rclconfig, argc, argv)); diff --git a/src/query/reslistpager.cpp b/src/query/reslistpager.cpp index 66e40cde..b2b56653 100644 --- a/src/query/reslistpager.cpp +++ b/src/query/reslistpager.cpp @@ -78,7 +78,8 @@ void ResListPager::resultPageNext() m_respage = npage; } -void ResListPager::displayDoc(int i, Rcl::Doc& doc, const HiliteData& hdata, +void ResListPager::displayDoc(RclConfig *config, + int i, Rcl::Doc& doc, const HiliteData& hdata, const string& sh) { ostringstream chunk; @@ -92,11 +93,11 @@ void ResListPager::displayDoc(int i, Rcl::Doc& doc, const HiliteData& hdata, } // Determine icon to display if any - string iconpath = iconPath(doc.mimetype); + string iconpath = iconPath(config, doc.mimetype); // Printable url: either utf-8 if transcoding succeeds, or url-encoded string url; - printableUrl(RclConfig::getMainConfig()->getDefCharset(), doc.url, url); + printableUrl(config->getDefCharset(), doc.url, url); // Make title out of file name if none yet if (doc.meta[Rcl::Doc::keytt].empty()) { @@ -149,7 +150,7 @@ void ResListPager::displayDoc(int i, Rcl::Doc& doc, const HiliteData& hdata, // Links; ostringstream linksbuf; - if (canIntern(doc.mimetype, RclConfig::getMainConfig())) { + if (canIntern(doc.mimetype, config)) { linksbuf << "" << trans("Preview") << "  "; } @@ -159,7 +160,7 @@ void ResListPager::displayDoc(int i, Rcl::Doc& doc, const HiliteData& hdata, if ((it = doc.meta.find(Rcl::Doc::keyapptg)) != doc.meta.end()) apptag = it->second; - if (!RclConfig::getMainConfig()->getMimeViewerDef(doc.mimetype, apptag).empty()) { + if (!config->getMimeViewerDef(doc.mimetype, apptag).empty()) { linksbuf << "" << trans("Open") << ""; } @@ -205,7 +206,7 @@ void ResListPager::displayDoc(int i, Rcl::Doc& doc, const HiliteData& hdata, append(chunk.rdbuf()->str(), i, doc); } -void ResListPager::displayPage() +void ResListPager::displayPage(RclConfig *config) { LOGDEB(("ResListPager::displayPage\n")); if (m_docSource.isNull()) { @@ -296,7 +297,7 @@ void ResListPager::displayPage() for (int i = 0; i < (int)m_respage.size(); i++) { Rcl::Doc &doc(m_respage[i].doc); string& sh(m_respage[i].subHeader); - displayDoc(i, doc, hdata, sh); + displayDoc(config, i, doc, hdata, sh); } // Footer @@ -330,10 +331,10 @@ string ResListPager::prevUrl() return "p-1"; } -string ResListPager::iconPath(const string& mtype) +string ResListPager::iconPath(RclConfig *config, const string& mtype) { string iconpath; - RclConfig::getMainConfig()->getMimeIconName(mtype, &iconpath); + config->getMimeIconName(mtype, &iconpath); iconpath = string("file://") + iconpath; return iconpath; } diff --git a/src/query/reslistpager.h b/src/query/reslistpager.h index 92493c3c..de7279f3 100644 --- a/src/query/reslistpager.h +++ b/src/query/reslistpager.h @@ -8,6 +8,7 @@ using std::vector; #include "refcntr.h" #include "docseq.h" +class RclConfig; class PlainToRich; class HiliteData; @@ -65,9 +66,9 @@ public: resultPageNext(); } void resultPageNext(); - void displayPage(); - void displayDoc(int idx, Rcl::Doc& doc, const HiliteData& hdata, - const string& sh = ""); + void displayPage(RclConfig *); + void displayDoc(RclConfig *, int idx, Rcl::Doc& doc, + const HiliteData& hdata, const string& sh = ""); bool pageEmpty() {return m_respage.size() == 0;} string queryDescription() {return m_docSource.isNull() ? "" : @@ -91,7 +92,7 @@ public: virtual string nextUrl(); virtual string prevUrl(); virtual string pageTop() {return string();} - virtual string iconPath(const string& mtype); + virtual string iconPath(RclConfig *, const string& mtype); virtual void suggest(const vector, vector&sugg) { sugg.clear(); } diff --git a/src/query/wasatorcl.cpp b/src/query/wasatorcl.cpp index a49d1d58..755b7aff 100644 --- a/src/query/wasatorcl.cpp +++ b/src/query/wasatorcl.cpp @@ -24,6 +24,7 @@ static char rcsid[] = "@(#$Id: wasatorcl.cpp,v 1.18 2008-12-05 11:09:31 dockes E using std::string; using std::list; +#include "rclconfig.h" #include "wasastringtoquery.h" #include "rcldb.h" #include "searchdata.h" @@ -34,14 +35,15 @@ using std::list; #include "refcntr.h" #include "textsplit.h" -Rcl::SearchData *wasaStringToRcl(const string &qs, string &reason, +Rcl::SearchData *wasaStringToRcl(RclConfig *config, + const string &qs, string &reason, const string& autosuffs) { StringToWasaQuery parser; WasaQuery *wq = parser.stringToQuery(qs, reason); if (wq == 0) return 0; - Rcl::SearchData *rq = wasaQueryToRcl(wq, autosuffs); + Rcl::SearchData *rq = wasaQueryToRcl(config, wq, autosuffs); if (rq == 0) { reason = "Failed translating xesam query structure to recoll"; return 0; @@ -49,7 +51,8 @@ Rcl::SearchData *wasaStringToRcl(const string &qs, string &reason, return rq; } -Rcl::SearchData *wasaQueryToRcl(WasaQuery *wasa, const string& autosuffs) +Rcl::SearchData *wasaQueryToRcl(RclConfig *config, + WasaQuery *wasa, const string& autosuffs) { if (wasa == 0) return 0; @@ -91,9 +94,8 @@ Rcl::SearchData *wasaQueryToRcl(WasaQuery *wasa, const string& autosuffs) // categories like "audio", "presentation", etc. if (!stringicmp("rclcat", (*it)->m_fieldspec) || !stringicmp("type", (*it)->m_fieldspec)) { - RclConfig *conf = RclConfig::getMainConfig(); list mtypes; - if (conf && conf->getMimeCatTypes((*it)->m_value, mtypes)) { + if (config && config->getMimeCatTypes((*it)->m_value, mtypes)) { for (list::iterator mit = mtypes.begin(); mit != mtypes.end(); mit++) { sdata->addFiletype(*mit); @@ -192,7 +194,7 @@ Rcl::SearchData *wasaQueryToRcl(WasaQuery *wasa, const string& autosuffs) LOGDEB2(("wasaQueryToRcl: OR clause [%s]:[%s]\n", (*it)->m_fieldspec.c_str(), (*it)->m_value.c_str())); // Create a subquery. - Rcl::SearchData *sub = wasaQueryToRcl(*it); + Rcl::SearchData *sub = wasaQueryToRcl(config, *it); if (sub == 0) { continue; } diff --git a/src/query/wasatorcl.h b/src/query/wasatorcl.h index 48a98afe..0e4568f4 100644 --- a/src/query/wasatorcl.h +++ b/src/query/wasatorcl.h @@ -24,10 +24,13 @@ using std::string; #include "rcldb.h" #include "searchdata.h" -extern Rcl::SearchData *wasaStringToRcl(const string& query, string &reason, - const string& autosuffs = string()); +class RclConfig; + +extern Rcl::SearchData *wasaStringToRcl(RclConfig *, + const string& query, string &reason, + const string& autosuffs = string()); class WasaQuery; -extern Rcl::SearchData *wasaQueryToRcl(WasaQuery *wasa, +extern Rcl::SearchData *wasaQueryToRcl(RclConfig *, WasaQuery *wasa, const string& autosuffs = string()); #endif /* _WASATORCL_H_INCLUDED_ */