From 4d0e860a049060e8da458261fa95119d7703a583 Mon Sep 17 00:00:00 2001 From: dockes Date: Fri, 30 Oct 2009 10:16:37 +0000 Subject: [PATCH] Allow setting fields in fs subtree. Use for an application tag used for starting a specialized viewer --- src/common/rclconfig.cpp | 12 ++++++++---- src/common/rclconfig.h | 2 +- src/qtgui/rclmain_w.cpp | 8 ++++++-- src/query/reslistpager.cpp | 8 +++++++- src/sampleconf/fields | 5 +++-- 5 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/common/rclconfig.cpp b/src/common/rclconfig.cpp index 9c942112..b1540e31 100644 --- a/src/common/rclconfig.cpp +++ b/src/common/rclconfig.cpp @@ -386,7 +386,7 @@ bool RclConfig::inStopSuffixes(const string& fni) } } -string RclConfig::getMimeTypeFromSuffix(const string &suff) +string RclConfig::getMimeTypeFromSuffix(const string& suff) { string mtype; mimemap->get(suff, mtype, m_keydir); @@ -611,10 +611,14 @@ string RclConfig::fieldCanon(const string& f) return fld; } -string RclConfig::getMimeViewerDef(const string &mtype) +string RclConfig::getMimeViewerDef(const string &mtype, const string& apptag) { + LOGDEB(("RclConfig::getMimeViewerDef: mtype %s apptag %s\n", + mtype.c_str(), apptag.c_str())); string hs; - mimeview->get(mtype, hs, "view"); + if (apptag.empty() || !mimeview->get(mtype + string("|") + apptag, + hs, "view")) + mimeview->get(mtype, hs, "view"); return hs; } @@ -624,7 +628,7 @@ bool RclConfig::getMimeViewerDefs(vector >& defs) return false; listtps = mimeview->getNames("view"); for (list::const_iterator it = tps.begin(); it != tps.end();it++) { - defs.push_back(pair(*it, getMimeViewerDef(*it))); + defs.push_back(pair(*it, getMimeViewerDef(*it, ""))); } return true; } diff --git a/src/common/rclconfig.h b/src/common/rclconfig.h index 88cf9980..8f5c1acb 100644 --- a/src/common/rclconfig.h +++ b/src/common/rclconfig.h @@ -176,7 +176,7 @@ class RclConfig { const map& getXattrToField() {return m_xattrtofld;} /** mimeview: get/set external viewer exec string(s) for mimetype(s) */ - string getMimeViewerDef(const string &mimetype); + string getMimeViewerDef(const string &mimetype, const string& apptag); bool getMimeViewerDefs(vector >&); bool setMimeViewerDef(const string& mimetype, const string& cmd); diff --git a/src/qtgui/rclmain_w.cpp b/src/qtgui/rclmain_w.cpp index 85f55fc2..e45977ac 100644 --- a/src/qtgui/rclmain_w.cpp +++ b/src/qtgui/rclmain_w.cpp @@ -918,9 +918,13 @@ void RclMain::startNativeViewer(Rcl::Doc doc) // Look for appropriate viewer string cmd; if (prefs.useDesktopOpen) { - cmd = rclconfig->getMimeViewerDef("application/x-all"); + cmd = rclconfig->getMimeViewerDef("application/x-all", ""); } else { - cmd = rclconfig->getMimeViewerDef(doc.mimetype); + string apptag; + map::const_iterator it; + if ((it = doc.meta.find("apptag")) != doc.meta.end()) + apptag = it->second; + cmd = rclconfig->getMimeViewerDef(doc.mimetype, apptag); } if (cmd.length() == 0) { diff --git a/src/query/reslistpager.cpp b/src/query/reslistpager.cpp index 537a7c69..b7763525 100644 --- a/src/query/reslistpager.cpp +++ b/src/query/reslistpager.cpp @@ -217,7 +217,13 @@ void ResListPager::displayPage() linksbuf += string("" + trans("Preview") + "  "; } - if (!RclConfig::getMainConfig()->getMimeViewerDef(doc.mimetype).empty()) { + + string apptag; + map::const_iterator it; + if ((it = doc.meta.find("apptag")) != doc.meta.end()) + apptag = it->second; + + if (!RclConfig::getMainConfig()->getMimeViewerDef(doc.mimetype, apptag).empty()) { sprintf(vlbuf, "E%d", docnumforlinks); linksbuf += string("" + trans("Open") + ""; diff --git a/src/sampleconf/fields b/src/sampleconf/fields index 7c372613..9eaafe07 100644 --- a/src/sampleconf/fields +++ b/src/sampleconf/fields @@ -35,10 +35,11 @@ recipient = XTO # # Some fields are stored by default, don't add them here, else they will be # stored twice: caption, keywords, abstract, filename, mimetype, url -# "author" used to be stored by default, now set here as optional # Only canonical names should be used here, not aliases. +# "author" used to be stored by default, now set here as optional +# "apptag" is used for viewer specialization (depending on local config) [stored] -stored = author +stored = author apptag ########################## # This section defines field names aliases or synonyms. Any right hand side