aboutsummaryrefslogtreecommitdiff
path: root/zenserver
diff options
context:
space:
mode:
Diffstat (limited to 'zenserver')
-rw-r--r--zenserver/projectstore.cpp32
-rw-r--r--zenserver/projectstore.h1
2 files changed, 33 insertions, 0 deletions
diff --git a/zenserver/projectstore.cpp b/zenserver/projectstore.cpp
index 113a7cec4..58b806989 100644
--- a/zenserver/projectstore.cpp
+++ b/zenserver/projectstore.cpp
@@ -933,6 +933,17 @@ ProjectStore::DiscoverProjects()
}
void
+ProjectStore::IterateProjects(std::function<void(Project& Prj)>&& Fn)
+{
+ RwLock::SharedLockScope _(m_ProjectsLock);
+
+ for (auto& Kv : m_Projects)
+ {
+ Fn(Kv.second);
+ }
+}
+
+void
ProjectStore::Flush()
{
// TODO
@@ -1072,6 +1083,27 @@ HttpProjectService::HttpProjectService(CidStore& Store, ProjectStore* Projects)
m_Router.AddPattern("hash", "([[:xdigit:]]{40})");
m_Router.RegisterRoute(
+ "list",
+ [this](HttpRouterRequest& Req) {
+ m_ProjectStore->DiscoverProjects();
+
+ CbWriter Response;
+ Response.BeginArray();
+ m_ProjectStore->IterateProjects([&Response](ProjectStore::Project& Prj) {
+ Response.BeginObject();
+ Response << "Id"sv << Prj.Identifier;
+ Response << "RootDir"sv << Prj.RootDir.string();
+ Response << "ProjectRootDir"sv << Prj.ProjectRootDir;
+ Response << "EngineRootDir"sv << Prj.EngineRootDir;
+ Response.EndObject();
+ });
+ Response.EndArray();
+
+ Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Response.Save().AsArray());
+ },
+ HttpVerb::kGet);
+
+ m_Router.RegisterRoute(
"{project}/oplog/{log}/batch",
[this](HttpRouterRequest& Req) {
HttpServerRequest& HttpReq = Req.ServerRequest();
diff --git a/zenserver/projectstore.h b/zenserver/projectstore.h
index 283dec3b2..f71434783 100644
--- a/zenserver/projectstore.h
+++ b/zenserver/projectstore.h
@@ -189,6 +189,7 @@ public:
void Flush();
void Scrub(ScrubContext& Ctx);
void DiscoverProjects();
+ void IterateProjects(std::function<void(Project& Prj)>&& Fn);
spdlog::logger& Log() { return m_Log; }
const std::filesystem::path& BasePath() const { return m_ProjectBasePath; }