diff --git a/src/qtgui/main.cpp b/src/qtgui/main.cpp index f1c38192..fbf80f7b 100644 --- a/src/qtgui/main.cpp +++ b/src/qtgui/main.cpp @@ -72,7 +72,7 @@ void startManual(const string& helpindex) mainWindow->startManual(helpindex); } -bool maybeOpenDb(string &reason, bool force) +bool maybeOpenDb(string &reason, bool force, bool *maindberror) { if (!rcldb) { reason = "Internal error: db not created"; @@ -87,9 +87,13 @@ bool maybeOpenDb(string &reason, bool force) LOGDEB(("main: adding [%s]\n", it->c_str())); rcldb->addQueryDb(*it); } - if (!rcldb->isopen() && !rcldb->open(Rcl::Db::DbRO)) { + Rcl::Db::OpenError error; + if (!rcldb->isopen() && !rcldb->open(Rcl::Db::DbRO, &error)) { reason = "Could not open database in " + theconfig->getDbDir() + " wait for indexing to complete?"; + if (maindberror) { + *maindberror = (error == Rcl::Db::DbOpenMainDb) ? true : false; + } return false; } rcldb->setAbstractParams(-1, prefs.syntAbsLen, prefs.syntAbsCtx); diff --git a/src/qtgui/rclmain_w.cpp b/src/qtgui/rclmain_w.cpp index 0e98892c..0e7ce17d 100644 --- a/src/qtgui/rclmain_w.cpp +++ b/src/qtgui/rclmain_w.cpp @@ -345,25 +345,31 @@ void RclMain::initDbOpen() bool needindexconfig = false; bool nodb = false; string reason; - if (!maybeOpenDb(reason)) { + bool maindberror; + if (!maybeOpenDb(reason, true, &maindberror)) { nodb = true; - switch (QMessageBox:: - question - (this, "Recoll", - qApp->translate("Main", "Could not open database in ") + - QString::fromLocal8Bit(theconfig->getDbDir().c_str()) + - qApp->translate("Main", - ".\n" - "Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed."), - "Ok", "Cancel", 0, 0)) { + if (maindberror) { + switch (QMessageBox:: + question + (this, "Recoll", + qApp->translate("Main", "Could not open database in ") + + QString::fromLocal8Bit(theconfig->getDbDir().c_str()) + + qApp->translate("Main", + ".\n" + "Click Cancel if you want to edit the configuration file before indexing starts, or Ok to let it proceed."), + "Ok", "Cancel", 0, 0)) { - case 0: // Ok: indexing is going to start. - start_indexing(true); - break; + case 0: // Ok: indexing is going to start. + start_indexing(true); + break; - case 1: // Cancel - needindexconfig = true; - break; + case 1: // Cancel + needindexconfig = true; + break; + } + } else { + QMessageBox::warning(0, "Recoll", + tr("Could not open external index. Db not open. Check external indexes list.")); } } diff --git a/src/qtgui/recoll.h b/src/qtgui/recoll.h index c786a5f8..a704690a 100644 --- a/src/qtgui/recoll.h +++ b/src/qtgui/recoll.h @@ -26,7 +26,8 @@ // Misc declarations in need of sharing between the UI files // Open the database if needed. We now force a close/open by default -extern bool maybeOpenDb(std::string &reason, bool force = true); +extern bool maybeOpenDb(std::string &reason, bool force = true, + bool *maindberror = 0); /** Retrieve configured stemming languages */ bool getStemLangs(list& langs); diff --git a/src/rcldb/rcldb.cpp b/src/rcldb/rcldb.cpp index 9f42cf81..03da775d 100644 --- a/src/rcldb/rcldb.cpp +++ b/src/rcldb/rcldb.cpp @@ -534,8 +534,11 @@ list Db::getStemmerNames() return res; } -bool Db::open(OpenMode mode) +bool Db::open(OpenMode mode, OpenError *error) { + if (error) + *error = DbOpenMainDb; + if (m_ndb == 0 || m_config == 0) { m_reason = "Null configuration or Xapian Db"; return false; @@ -586,12 +589,17 @@ bool Db::open(OpenMode mode) m_ndb->xrdb = Xapian::Database(dir); for (list::iterator it = m_extraDbs.begin(); it != m_extraDbs.end(); it++) { + if (error) + *error = DbOpenExtraDb; LOGDEB(("Db::Open: adding query db [%s]\n", it->c_str())); - // Used to be non-fatal (1.13 and older) but I can't see why + // An error here used to be non-fatal (1.13 and older) + // but I can't see why m_ndb->xrdb.add_database(Xapian::Database(*it)); } break; } + if (error) + *error = DbOpenMainDb; // Check index format version. Must not try to check a just created or // truncated db @@ -608,6 +616,8 @@ bool Db::open(OpenMode mode) m_mode = mode; m_ndb->m_isopen = true; m_basedir = dir; + if (error) + *error = DbOpenNoError; return true; } XCATCHERROR(ermsg); diff --git a/src/rcldb/rcldb.h b/src/rcldb/rcldb.h index 67f561cb..f09ae8cc 100644 --- a/src/rcldb/rcldb.h +++ b/src/rcldb/rcldb.h @@ -95,7 +95,8 @@ class Db { ~Db(); enum OpenMode {DbRO, DbUpd, DbTrunc}; - bool open(OpenMode mode); + enum OpenError {DbOpenNoError, DbOpenMainDb, DbOpenExtraDb}; + bool open(OpenMode mode, OpenError *error = 0); bool close(); bool isopen(); diff --git a/website/BUGS.html b/website/BUGS.html index 22e81d3a..05397e58 100644 --- a/website/BUGS.html +++ b/website/BUGS.html @@ -37,33 +37,35 @@

recoll 1.15

-
    +
      + +
    • Cancelling a preview in the GUI will also cancel the indexing + thread if it is running.
    • Using search preview while the indexing thread is running will - sometimes crash the GUI or provoke other strangeness. This - is due to insufficient protection of resources shared by - several threads. The current and unsatisfying workaround, is - to avoid the situation, for example by using the standalone - recollindex program instead of the GUI indexing thread. I - will be working on a program-wide cleanup of multithreaded - operation for the next version.
    • + sometimes crash the GUI or provoke other strangeness. This is + apparently due to insufficient protection of resources shared by + several threads. After recent cleanup, the problem occurs quite + seldom but it is not completely gone. The current and + unsatisfying workaround, is to avoid the situation, for example + by using the standalone recollindex program instead of the GUI + indexing thread.
    • The operations on the parent document in the result list right click menu (Preview and Open), do not work, they access the file's parent directory instead.
    • The rclzip filter can't handle utf-8 in path names for archive - members. An updated filter is - available.
    • + members. An + updated filter is available.
    • The rclzip and rclchm filters can't handle archive members - with a colon (':') in the file name or path. The files are normally - indexed and can be searched for, but they can't be displayed - (neither opened nor previewed). There is a - patch which fixes the issue (then needs full reindex for these - files).
    • + with a colon (':') in the file name or path. The files are normally + indexed and can be searched for, but they can't be displayed + (neither opened nor previewed). There is a + + patch which fixes the issue (then needs full reindex for these + files).
    • After an upgrade, the recoll GUI sometimes crashes on startup. This is fixed by removing (back it up just in case)