diff --git a/src/internfile/internfile.cpp b/src/internfile/internfile.cpp index f931e9b6..602c4092 100644 --- a/src/internfile/internfile.cpp +++ b/src/internfile/internfile.cpp @@ -44,6 +44,8 @@ using namespace std; #include "wipedir.h" #include "rclconfig.h" #include "mh_html.h" +#include "fileudi.h" + #ifdef RCL_USE_XATTR #include "pxattr.h" #endif // RCL_USE_XATTR @@ -85,7 +87,7 @@ void FileInterner::reapXAttrs(const string& path) // This is used when the user wants to retrieve a search result doc's parent // (ie message having a given attachment) bool FileInterner::getEnclosing(const string &url, const string &ipath, - string &eurl, string &eipath) + string &eurl, string &eipath, string& udi) { eurl = url; eipath = ipath; @@ -98,6 +100,8 @@ bool FileInterner::getEnclosing(const string &url, const string &ipath, } else { eipath.erase(); } + make_udi(url_gpath(eurl), eipath, udi); + LOGDEB(("FileInterner::getEnclosing() after: [%s]\n", eipath.c_str())); return true; } diff --git a/src/internfile/internfile.h b/src/internfile/internfile.h index e09c9d68..98e3a912 100644 --- a/src/internfile/internfile.h +++ b/src/internfile/internfile.h @@ -53,7 +53,7 @@ class FileInterner { * with Rcl::Db::addOrUpdate(). The latter is generally the enclosing file. */ static bool getEnclosing(const string &url, const string &ipath, - string &eurl, string &eipath); + string &eurl, string &eipath, string& udi); /** * Identify and possibly decompress file, create adequate * handler. The mtype parameter is only set when the object is diff --git a/src/qtgui/rclmain_w.cpp b/src/qtgui/rclmain_w.cpp index 52966c1c..2b8b50ed 100644 --- a/src/qtgui/rclmain_w.cpp +++ b/src/qtgui/rclmain_w.cpp @@ -929,8 +929,8 @@ void RclMain::startNativeViewer(Rcl::Doc doc) if (cmd.length() == 0) { QMessageBox::warning(0, "Recoll", - tr("No external viewer configured for mime type ") - + doc.mimetype.c_str()); + tr("No external viewer configured for mime type [") + + doc.mimetype.c_str() + "]"); return; } diff --git a/src/qtgui/reslist.cpp b/src/qtgui/reslist.cpp index cf01b66a..fa9deeb8 100644 --- a/src/qtgui/reslist.cpp +++ b/src/qtgui/reslist.cpp @@ -91,6 +91,22 @@ ResList::ResList(QWidget* parent, const char* name) ResList::~ResList() { + // These have to exist somewhere for translations to work +#ifdef __GNUC__ + __attribute__((unused)) +#endif + static const char* strings[] = { + QT_TR_NOOP("
No results found
"),
+ QT_TR_NOOP("Documents %d-%d out of at least %d for "),
+ QT_TR_NOOP("Documents %d-%d for "),
+ QT_TR_NOOP("Previous"),
+ QT_TR_NOOP("Next"),
+ QT_TR_NOOP("Unavailable document"),
+ QT_TR_NOOP("Preview"),
+ QT_TR_NOOP("Open"),
+ QT_TR_NOOP("(show query)"),
+ };
+
}
int ResList::newListId()
@@ -346,18 +362,6 @@ void ResList::resultPageFirst()
void ResList::append(const QString &text)
{
- // These has to go somewhere for translations to work
- static const char* strings[] = {
- QT_TR_NOOP("
No results found
"),
- QT_TR_NOOP("Documents %d-%d out of at least %d for "),
- QT_TR_NOOP("Documents %d-%d for "),
- QT_TR_NOOP("Previous"),
- QT_TR_NOOP("Next"),
- QT_TR_NOOP("Unavailable document"),
- QT_TR_NOOP("Preview"),
- QT_TR_NOOP("Open"),
- QT_TR_NOOP("(show query)"),
- };
QTEXTBROWSER::append(text);
#if 0
{
@@ -565,12 +569,14 @@ RCLPOPUP *ResList::createPopupMenu(const QPoint& pos)
popup->insertItem(tr("Copy &URL"), this, SLOT(menuCopyURL()));
Rcl::Doc doc;
if (getDoc(m_popDoc, doc) && !doc.ipath.empty()) {
- popup->insertItem(tr("Save to File"), this, SLOT(menuSaveToFile()));
+ popup->insertItem(tr("&Write to File"), this, SLOT(menuSaveToFile()));
}
popup->insertItem(tr("Find &similar documents"), this, SLOT(menuExpand()));
- popup->insertItem(tr("P&arent document/folder"),
- this, SLOT(menuSeeParent()));
+ popup->insertItem(tr("Preview P&arent document/folder"),
+ this, SLOT(menuPreviewParent()));
+ popup->insertItem(tr("&Open Parent document/folder"),
+ this, SLOT(menuOpenParent()));
return popup;
}
@@ -583,20 +589,37 @@ void ResList::menuSaveToFile()
emit docSaveToFileClicked(m_popDoc);
}
-void ResList::menuSeeParent()
+void ResList::menuPreviewParent()
{
Rcl::Doc doc;
- if (!getDoc(m_popDoc, doc))
+ if (!getDoc(m_popDoc, doc) || m_baseDocSource.isNull())
return;
- Rcl::Doc doc1;
- if (FileInterner::getEnclosing(doc.url, doc.ipath, doc1.url, doc1.ipath)) {
- emit previewRequested(doc1);
+ Rcl::Doc pdoc;
+ if (m_baseDocSource->getEnclosing(doc, pdoc)) {
+ emit previewRequested(pdoc);
} else {
// No parent doc: show enclosing folder with app configured for
// directories
- doc1.url = path_getfather(doc.url);
- doc1.mimetype = "application/x-fsdirectory";
- emit editRequested(doc1);
+ pdoc.url = path_getfather(doc.url);
+ pdoc.mimetype = "application/x-fsdirectory";
+ emit editRequested(pdoc);
+ }
+}
+
+void ResList::menuOpenParent()
+{
+ Rcl::Doc doc;
+ if (!getDoc(m_popDoc, doc) || m_baseDocSource.isNull())
+ return;
+ Rcl::Doc pdoc;
+ if (m_baseDocSource->getEnclosing(doc, pdoc)) {
+ emit editRequested(pdoc);
+ } else {
+ // No parent doc: show enclosing folder with app configured for
+ // directories
+ pdoc.url = path_getfather(doc.url);
+ pdoc.mimetype = "application/x-fsdirectory";
+ emit editRequested(pdoc);
}
}
diff --git a/src/qtgui/reslist.h b/src/qtgui/reslist.h
index 941ba001..63bbce6c 100644
--- a/src/qtgui/reslist.h
+++ b/src/qtgui/reslist.h
@@ -95,7 +95,8 @@ class ResList : public QTEXTBROWSER
virtual void menuCopyFN();
virtual void menuCopyURL();
virtual void menuExpand();
- virtual void menuSeeParent();
+ virtual void menuPreviewParent();
+ virtual void menuOpenParent();
virtual void previewExposed(int);
virtual void append(const QString &text);
// Only used for qt ver >=4 but seems we cant undef it
diff --git a/src/query/docseq.h b/src/query/docseq.h
index 167c70b3..3d2ed475 100644
--- a/src/query/docseq.h
+++ b/src/query/docseq.h
@@ -104,6 +104,8 @@ class DocSequence {
return doc.meta[Rcl::Doc::keyabs];
}
+ virtual bool getEnclosing(Rcl::Doc&, Rcl::Doc&) {return false;}
+
/** Get estimated total count in results */
virtual int getResCnt() = 0;
diff --git a/src/query/docseqdb.cpp b/src/query/docseqdb.cpp
index 2512fa82..e36dd385 100644
--- a/src/query/docseqdb.cpp
+++ b/src/query/docseqdb.cpp
@@ -23,6 +23,7 @@ static char rcsid[] = "@(#$Id: docseqdb.cpp,v 1.9 2008-11-13 10:57:46 dockes Exp
#include "docseqdb.h"
#include "rcldb.h"
#include "debuglog.h"
+#include "internfile.h"
DocSequenceDb::DocSequenceDb(RefCntr