Properly fail when creating XapianSearcher on a zim without embedded index.

The XapianSearcher creation must fail with a exception if we cannot open
the xapian database.
So, if we try to open a zim and there is no embedded index, we must fail.

We raise the custom exception NoXapianIndexInZim in this case.
This commit is contained in:
Matthieu Gautier 2016-09-28 17:21:20 +02:00
parent e3c2a13fa6
commit e526026407
2 changed files with 14 additions and 8 deletions

View File

@ -36,18 +36,16 @@ namespace kiwix {
/* Open Xapian readable database */
void XapianSearcher::openIndex(const string &directoryPath) {
bool indexInZim = false;
try
{
zim::File zimFile = zim::File(directoryPath);
zim::Article xapianArticle = zimFile.getArticle('Z', "/Z/fulltextIndex/xapian");
if (xapianArticle.good())
{
if ( ! xapianArticle.good())
throw NoXapianIndexInZim();
zim::offset_type dbOffset = xapianArticle.getOffset();
int databasefd = open(directoryPath.c_str(), O_RDONLY);
lseek(databasefd, dbOffset, SEEK_SET);
this->readableDatabase = Xapian::Database(databasefd);
}
} catch (zim::ZimFileFormatError)
{
this->readableDatabase = Xapian::Database(directoryPath);

View File

@ -27,6 +27,14 @@ using namespace std;
namespace kiwix {
class NoXapianIndexInZim: public exception
{
virtual const char* what() const throw()
{
return "There is no fulltext index in the zim file";
}
};
class XapianSearcher : public Searcher {
public: