diff options
Diffstat (limited to 'zenserver/projectstore.cpp')
| -rw-r--r-- | zenserver/projectstore.cpp | 32 |
1 files changed, 32 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(); |