diff --git a/src/Cache_p.h b/src/Cache_p.h
index b995eed1..67185298 100644
--- a/src/Cache_p.h
+++ b/src/Cache_p.h
@@ -451,40 +451,40 @@ private:
const std::string &room_id,
std::string_view state_key = "")
{
- constexpr auto type = mtx::events::state_content_to_type<T>;
- static_assert(type != mtx::events::EventType::Unsupported,
- "Not a supported type in state events.");
-
- if (room_id.empty())
- return std::nullopt;
- const auto typeStr = to_string(type);
+ try {
+ constexpr auto type = mtx::events::state_content_to_type<T>;
+ static_assert(type != mtx::events::EventType::Unsupported,
+ "Not a supported type in state events.");
- std::string_view value;
- if (state_key.empty()) {
- auto db = getStatesDb(txn, room_id);
- if (!db.get(txn, typeStr, value)) {
+ if (room_id.empty())
return std::nullopt;
- }
- } else {
- auto db = getStatesKeyDb(txn, room_id);
- std::string d = json::object({{"key", state_key}}).dump();
- std::string_view data = d;
- std::string_view typeStrV = typeStr;
+ const auto typeStr = to_string(type);
- auto cursor = lmdb::cursor::open(txn, db);
- if (!cursor.get(typeStrV, data, MDB_GET_BOTH))
- return std::nullopt;
+ std::string_view value;
+ if (state_key.empty()) {
+ auto db = getStatesDb(txn, room_id);
+ if (!db.get(txn, typeStr, value)) {
+ return std::nullopt;
+ }
+ } else {
+ auto db = getStatesKeyDb(txn, room_id);
+ std::string d = json::object({{"key", state_key}}).dump();
+ std::string_view data = d;
+ std::string_view typeStrV = typeStr;
+
+ auto cursor = lmdb::cursor::open(txn, db);
+ if (!cursor.get(typeStrV, data, MDB_GET_BOTH))
+ return std::nullopt;
- try {
- auto eventsDb = getEventsDb(txn, room_id);
- if (!eventsDb.get(txn, json::parse(data)["id"].get<std::string>(), value))
+ try {
+ auto eventsDb = getEventsDb(txn, room_id);
+ if (!eventsDb.get(txn, json::parse(data)["id"].get<std::string>(), value))
+ return std::nullopt;
+ } catch (std::exception &e) {
return std::nullopt;
- } catch (std::exception &e) {
- return std::nullopt;
+ }
}
- }
- try {
return json::parse(value).get<mtx::events::StateEvent<T>>();
} catch (std::exception &e) {
return std::nullopt;
|