diff --git a/src/qtgui/guiutils.cpp b/src/qtgui/guiutils.cpp
index fcfe62f8..6879b3f9 100644
--- a/src/qtgui/guiutils.cpp
+++ b/src/qtgui/guiutils.cpp
@@ -41,7 +41,7 @@ RclConfig *theconfig;
const char *PrefsPack::dfltResListFormat =
"
 | "
"%L %S %T "
- "%M %D %U %i "
+ "%M %D %U %i "
"%A %K |
"
;
@@ -290,10 +290,16 @@ void rwSettings(bool writing)
prefs.allExtraDbs.end(), dbdir) !=
prefs.allExtraDbs.end())
continue;
- if (!Rcl::Db::testDbDir(dbdir)) {
+ bool stripped;
+ if (!Rcl::Db::testDbDir(dbdir, &stripped)) {
LOGERR(("Not a xapian index: [%s]\n", dbdir.c_str()));
continue;
}
+ if (stripped != o_index_stripchars) {
+ LOGERR(("Incompatible character stripping: [%s]\n",
+ dbdir.c_str()));
+ continue;
+ }
prefs.allExtraDbs.push_back(dbdir);
}
}
@@ -305,8 +311,11 @@ void rwSettings(bool writing)
// actually there: useful for removable volumes.
for (list::iterator it = prefs.activeExtraDbs.begin();
it != prefs.activeExtraDbs.end();) {
- if (!Rcl::Db::testDbDir(*it)) {
- LOGINFO(("Not a xapian index: [%s]\n", it->c_str()));
+ bool stripped;
+ if (!Rcl::Db::testDbDir(*it, &stripped) ||
+ stripped != o_index_stripchars) {
+ LOGINFO(("Not a Xapian index or char stripping differs: [%s]\n",
+ it->c_str()));
it = prefs.activeExtraDbs.erase(it);
} else {
it++;
@@ -327,8 +336,11 @@ void rwSettings(bool writing)
prefs.activeExtraDbs.end(), dbdir) !=
prefs.activeExtraDbs.end())
continue;
- if (!Rcl::Db::testDbDir(dbdir)) {
- LOGERR(("Not a xapian index: [%s]\n", dbdir.c_str()));
+ bool strpd;
+ if (!Rcl::Db::testDbDir(dbdir, &strpd) ||
+ strpd != o_index_stripchars) {
+ LOGERR(("Not a Xapian dir or diff. char stripping: [%s]\n",
+ dbdir.c_str()));
continue;
}
prefs.activeExtraDbs.push_back(dbdir);
diff --git a/src/qtgui/uiprefs_w.cpp b/src/qtgui/uiprefs_w.cpp
index ff6c8a84..ef467336 100644
--- a/src/qtgui/uiprefs_w.cpp
+++ b/src/qtgui/uiprefs_w.cpp
@@ -533,11 +533,18 @@ void UIPrefsDialog::addExtraDbPB_clicked()
LOGDEB(("ExtraDbDial: got: [%s]\n", dbdir.c_str()));
path_catslash(dbdir);
- if (!Rcl::Db::testDbDir(dbdir)) {
+ bool stripped;
+ if (!Rcl::Db::testDbDir(dbdir, &stripped)) {
QMessageBox::warning(0, "Recoll",
tr("The selected directory does not appear to be a Xapian index"));
return;
}
+ if (o_index_stripchars != stripped) {
+ QMessageBox::warning(0, "Recoll",
+ tr("Cant add index with different case/diacritics"
+ " stripping option"));
+ return;
+ }
if (samedir(dbdir, theconfig->getDbDir())) {
QMessageBox::warning(0, "Recoll",
tr("This is the main/local index!"));
diff --git a/src/rcldb/rcldb.cpp b/src/rcldb/rcldb.cpp
index a381740f..e333161c 100644
--- a/src/rcldb/rcldb.cpp
+++ b/src/rcldb/rcldb.cpp
@@ -856,18 +856,29 @@ size_t Db::whatDbIdx(const Doc& doc)
return doc.xdocid % (m_extraDbs.size()+1);
}
-bool Db::testDbDir(const string &dir)
+bool Db::testDbDir(const string &dir, bool *stripped_p)
{
string aerr;
+ bool mstripped = true;
LOGDEB(("Db::testDbDir: [%s]\n", dir.c_str()));
try {
Xapian::Database db(dir);
+ // If we have terms with a leading ':' it's an
+ // unstripped index
+ Xapian::TermIterator term = db.allterms_begin(":");
+ if (term == db.allterms_end())
+ mstripped = true;
+ else
+ mstripped = false;
} XCATCHERROR(aerr);
if (!aerr.empty()) {
LOGERR(("Db::Open: error while trying to open database "
"from [%s]: %s\n", dir.c_str(), aerr.c_str()));
return false;
}
+ if (stripped_p)
+ *stripped_p = mstripped;
+
return true;
}
diff --git a/src/rcldb/rcldb.h b/src/rcldb/rcldb.h
index 61f350e9..5a2b9312 100644
--- a/src/rcldb/rcldb.h
+++ b/src/rcldb/rcldb.h
@@ -301,8 +301,9 @@ class Db {
* other: order of database in add_database() sequence.
*/
size_t whatDbIdx(const Doc& doc);
+
/** Tell if directory seems to hold xapian db */
- static bool testDbDir(const string &dir);
+ static bool testDbDir(const string &dir, bool *stripped = 0);
/** Return the index terms that match the input string
* Expansion is performed either with either wildcard or regexp processing