| 6 | namespace Star { |
| 7 | |
| 8 | CodexDatabase::CodexDatabase() { |
| 9 | auto assets = Root::singleton().assets(); |
| 10 | auto& files = assets->scanExtension("codex"); |
| 11 | auto codexConfig = assets->json("/codex.config"); |
| 12 | assets->queueJsons(files); |
| 13 | for (auto& file : files) { |
| 14 | try { |
| 15 | auto codexJson = assets->json(file); |
| 16 | codexJson = codexJson.set("icon", |
| 17 | AssetPath::relativeTo(AssetPath::directory(file), codexJson.getString("icon", codexConfig.getString("defaultIcon")))); |
| 18 | |
| 19 | auto codex = make_shared<Codex>(codexJson, file); |
| 20 | |
| 21 | if (m_codexes.contains(codex->id())) |
| 22 | throw CodexDatabaseException::format("Duplicate codex named '{}', config file '{}'", codex->id(), file); |
| 23 | |
| 24 | m_codexes[codex->id()] = codex; |
| 25 | } catch (std::exception const& e) { |
| 26 | throw CodexDatabaseException(strf("Error reading codex config {}", file), e); |
| 27 | } |
| 28 | } |
| 29 | } |
| 30 | |
| 31 | StringMap<CodexConstPtr> CodexDatabase::codexes() const { |
| 32 | return m_codexes; |