mu: better error handling for opening database read-only

Be a bit clearer for the user.
This commit is contained in:
Dirk-Jan C. Binnema
2020-02-04 21:14:30 +02:00
parent 3fc2a5f3f8
commit 2575b2d0e3
4 changed files with 61 additions and 18 deletions

View File

@ -479,23 +479,20 @@ mu_store_new_readable (const char* xpath, GError **err)
return reinterpret_cast<MuStore*>(new Store (xpath));
} catch (const Mu::Error& me) {
if (me.code() == Mu::Error::Code::SchemaMismatch)
g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_XAPIAN_NEEDS_REINDEX,
"read-only database @ %s needs (re)indexing", xpath);
else
g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_XAPIAN,
"error opening database @ %s: %s", xpath, me.what());
// } catch (const Xapian::DatabaseNotFoundError& dbe) { // Xapian 1.4.10
// g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_XAPIAN_NEEDS_REINDEX,
// "database @ %s not found", xpath);
} catch (const Xapian::DatabaseOpeningError& dbe) {
g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_XAPIAN_NEEDS_REINDEX,
"failed to open database @ %s", xpath);
} catch (...) {
g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_XAPIAN,
"error opening database @ %s", xpath);
if (me.code() == Mu::Error::Code::SchemaMismatch) {
g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_XAPIAN_SCHEMA_MISMATCH,
"read-only database @ %s schema version does not match",
xpath);
return NULL;
}
} catch (const Xapian::Error& dbe) {
g_warning ("failed to open database @ %s: %s", xpath,
dbe.get_error_string() ? dbe.get_error_string() : "something went wrong");
}
g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_XAPIAN_CANNOT_OPEN,
"failed to open database @ %s", xpath);
return NULL;
}