factored out the doc up to date check, plus use recollindex -e -i for updating
This commit is contained in:
parent
064d919f97
commit
285d422076
2 changed files with 84 additions and 65 deletions
|
@ -1192,6 +1192,85 @@ void RclMain::previewClosed(Preview *w)
|
||||||
delete w;
|
delete w;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Document up to date check. The main problem we try to solve is
|
||||||
|
// displaying the wrong message from a compacted mail folder.
|
||||||
|
//
|
||||||
|
// Also we should re-run the query after updating the index because
|
||||||
|
// the ipaths may be wrong in the current result list. For now, the
|
||||||
|
// user does this by clicking search again once the indexing is done
|
||||||
|
//
|
||||||
|
// We only do this for the main index, else jump and prey (cant update
|
||||||
|
// anyway, even the makesig() call might not make sense for our base
|
||||||
|
// config)
|
||||||
|
bool RclMain::containerUpToDate(Rcl::Doc& doc)
|
||||||
|
{
|
||||||
|
// If ipath is empty, we decide we don't care. Also, we need an index,
|
||||||
|
if (doc.ipath.empty() || rcldb == 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
string udi;
|
||||||
|
doc.getmeta(Rcl::Doc::keyudi, &udi);
|
||||||
|
if (udi.empty()) {
|
||||||
|
// Whatever...
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
string sig;
|
||||||
|
if (!FileInterner::makesig(theconfig, doc, sig)) {
|
||||||
|
QMessageBox::warning(0, "Recoll", tr("Can't access file: ") +
|
||||||
|
QString::fromLocal8Bit(doc.url.c_str()));
|
||||||
|
// Let's try the preview anyway...
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!rcldb->needUpdate(udi, sig)) {
|
||||||
|
// Alles ist in ordnung
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We can only run indexing on the main index (dbidx 0)
|
||||||
|
bool ismainidx = rcldb->whatDbIdx(doc) == 0;
|
||||||
|
// Indexer already running?
|
||||||
|
bool ixnotact = (m_indexerState == IXST_NOTRUNNING);
|
||||||
|
|
||||||
|
QString msg = tr("Index not up to date for this file. "
|
||||||
|
"Refusing to risk showing the wrong entry. ");
|
||||||
|
if (ixnotact && ismainidx) {
|
||||||
|
msg += tr("Click Ok to update the "
|
||||||
|
"index for this file, then you will need to "
|
||||||
|
"re-run the query when indexing is done. ");
|
||||||
|
} else if (ismainidx) {
|
||||||
|
msg += tr("The indexer is running so things should "
|
||||||
|
"improve when it's done. ");
|
||||||
|
} else if (ixnotact) {
|
||||||
|
// Not main index
|
||||||
|
msg += tr("The document belongs to an external index"
|
||||||
|
"which I can't update. ");
|
||||||
|
}
|
||||||
|
msg += tr("Click Cancel to return to the list. "
|
||||||
|
"Click Ignore to show the preview anyway. ");
|
||||||
|
|
||||||
|
QMessageBox::StandardButtons bts =
|
||||||
|
QMessageBox::Ignore | QMessageBox::Cancel;
|
||||||
|
|
||||||
|
if (ixnotact &&ismainidx)
|
||||||
|
bts |= QMessageBox::Ok;
|
||||||
|
|
||||||
|
int rep =
|
||||||
|
QMessageBox::warning(0, tr("Warning"), msg, bts,
|
||||||
|
(ixnotact && ismainidx) ?
|
||||||
|
QMessageBox::Cancel : QMessageBox::NoButton);
|
||||||
|
|
||||||
|
if (m_indexerState == IXST_NOTRUNNING && rep == QMessageBox::Ok) {
|
||||||
|
LOGDEB(("Requesting index update for %s\n", doc.url.c_str()));
|
||||||
|
vector<Rcl::Doc> docs(1, doc);
|
||||||
|
updateIdxForDocs(docs);
|
||||||
|
}
|
||||||
|
if (rep != QMessageBox::Ignore)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open a preview window for a given document, or load it into new tab of
|
* Open a preview window for a given document, or load it into new tab of
|
||||||
* existing window.
|
* existing window.
|
||||||
|
@ -1203,71 +1282,9 @@ void RclMain::startPreview(int docnum, Rcl::Doc doc, int mod)
|
||||||
{
|
{
|
||||||
LOGDEB(("startPreview(%d, doc, %d)\n", docnum, mod));
|
LOGDEB(("startPreview(%d, doc, %d)\n", docnum, mod));
|
||||||
|
|
||||||
// Document up to date check. We do this only if ipath is not
|
if (!containerUpToDate(doc))
|
||||||
// empty as this does not appear to be a serious issue for single
|
return;
|
||||||
// docs (the main actual problem is displaying the wrong message
|
|
||||||
// from a compacted mail folder)
|
|
||||||
//
|
|
||||||
// !! NOTE: there is one case where doing a partial index update
|
|
||||||
// will not work: if the search result does not exist in the new
|
|
||||||
// version of the file, it won't be purged from the index because
|
|
||||||
// a partial index pass does no purge, so its ref date will stay
|
|
||||||
// the same and you keep getting the message about the index being
|
|
||||||
// out of date. The only way to fix this is to run a normal
|
|
||||||
// indexing pass (common case: the mbox was shortened and the
|
|
||||||
// result msgnum is beyond the new end)
|
|
||||||
// Also we should re-run the query after updating the index
|
|
||||||
// because the ipaths may be wrong in the current result list We
|
|
||||||
// only do this for the main index, else jump and prey (cant
|
|
||||||
// update anyway, even the makesig() call might not make sense for
|
|
||||||
// our base config)
|
|
||||||
if (!doc.ipath.empty() && rcldb && rcldb->whatDbIdx(doc) == 0) {
|
|
||||||
string udi;
|
|
||||||
doc.getmeta(Rcl::Doc::keyudi, &udi);
|
|
||||||
if (!udi.empty()) {
|
|
||||||
string sig;
|
|
||||||
if (!FileInterner::makesig(theconfig, doc, sig)) {
|
|
||||||
QMessageBox::warning(0, "Recoll",
|
|
||||||
tr("Can't access file: ") +
|
|
||||||
QString::fromLocal8Bit(doc.url.c_str()));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (rcldb->needUpdate(udi, sig)) {
|
|
||||||
QString msg =
|
|
||||||
tr("Index not up to date for this file. "
|
|
||||||
"Refusing to risk showing the wrong entry. ");
|
|
||||||
bool ixnotact = (m_indexerState == IXST_NOTRUNNING);
|
|
||||||
if (ixnotact) {
|
|
||||||
msg += tr("Click Ok to update the "
|
|
||||||
"index for this file, then you will need to "
|
|
||||||
"re-run the query when indexing is done. ");
|
|
||||||
} else {
|
|
||||||
msg += tr("The indexer is running so things should "
|
|
||||||
"improve when it's done. ");
|
|
||||||
}
|
|
||||||
msg += tr("Click Cancel to return to the list. "
|
|
||||||
"Click Ignore to show the preview anyway. ");
|
|
||||||
QMessageBox::StandardButtons bts =
|
|
||||||
QMessageBox::Ignore | QMessageBox::Cancel;
|
|
||||||
if (ixnotact)
|
|
||||||
bts |= QMessageBox::Ok;
|
|
||||||
int rep =
|
|
||||||
QMessageBox::warning(0, tr("Warning"),
|
|
||||||
msg, bts,
|
|
||||||
ixnotact? QMessageBox::Cancel :
|
|
||||||
QMessageBox::NoButton);
|
|
||||||
if (m_indexerState == IXST_NOTRUNNING &&
|
|
||||||
rep == QMessageBox::Ok) {
|
|
||||||
LOGDEB(("Requesting index update for %s\n",
|
|
||||||
doc.url.c_str()));
|
|
||||||
vector<Rcl::Doc> docs(1, doc);
|
|
||||||
updateIdxForDocs(docs);
|
|
||||||
}
|
|
||||||
if (rep != QMessageBox::Ignore)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Do the zeitgeist thing
|
// Do the zeitgeist thing
|
||||||
zg_send_event(ZGSEND_PREVIEW, doc);
|
zg_send_event(ZGSEND_PREVIEW, doc);
|
||||||
|
|
||||||
|
@ -1322,6 +1339,7 @@ void RclMain::updateIdxForDocs(vector<Rcl::Doc>& docs)
|
||||||
vector<string> args;
|
vector<string> args;
|
||||||
args.push_back("-c");
|
args.push_back("-c");
|
||||||
args.push_back(theconfig->getConfDir());
|
args.push_back(theconfig->getConfDir());
|
||||||
|
args.push_back("-e");
|
||||||
args.push_back("-i");
|
args.push_back("-i");
|
||||||
args.insert(args.end(), paths.begin(), paths.end());
|
args.insert(args.end(), paths.begin(), paths.end());
|
||||||
m_idxproc = new ExecCmd;
|
m_idxproc = new ExecCmd;
|
||||||
|
|
|
@ -205,6 +205,7 @@ private:
|
||||||
virtual void showRTITool(bool modal);
|
virtual void showRTITool(bool modal);
|
||||||
virtual void updateIdxForDocs(vector<Rcl::Doc>&);
|
virtual void updateIdxForDocs(vector<Rcl::Doc>&);
|
||||||
virtual void initiateQuery();
|
virtual void initiateQuery();
|
||||||
|
virtual bool containerUpToDate(Rcl::Doc& doc);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // RCLMAIN_W_H
|
#endif // RCLMAIN_W_H
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue