X-Git-Url: http://nitlanguage.org diff --git a/contrib/nitrpg/src/web.nit b/contrib/nitrpg/src/web.nit index 766af1a..3d54672 100644 --- a/contrib/nitrpg/src/web.nit +++ b/contrib/nitrpg/src/web.nit @@ -50,15 +50,15 @@ class RpgAction var page = new NitRpgPage(root_url) var error = new ErrorPanel(msg) page.flow_panels.add error - rsp.body = page.write_to_string + rsp.body = page return rsp end # Returns the game with `name` or null if no game exists with this name. fun load_game(name: String): nullable Game do - var repo = new Repo(api, name) - if api.was_error then return null - var game = new Game(api, repo) + var repo = api.load_repo(name) + if repo == null then return null + var game = new Game.from_mongo(api, repo) game.root_url = root_url return game end @@ -66,13 +66,16 @@ class RpgAction # Returns the list of saved games from NitRPG data. fun load_games: Array[Game] do var res = new Array[Game] - var rpgdir = "nitrpg_data" - if not rpgdir.file_exists then return res - for user in rpgdir.files do - for repo in "{rpgdir}/{user}".files do - var game = load_game("{user}/{repo}") - if game != null then res.add game - end + # TODO should be option + var mongo = new MongoClient("mongodb://mongo:27017") + var db = mongo.database("nitrpg") + for obj in db.collection("games").find_all(new JsonObject) do + var repo = api.load_repo(obj["name"].to_s) + assert repo != null + var game = new Game(api, repo) + game.from_json(obj) + game.root_url = root_url + res.add game end return res end @@ -92,7 +95,7 @@ class RpgHome page = new NitRpgPage(root_url) page.side_panels.add new GamesShortListPanel(root_url, games) page.flow_panels.add new MDPanel(readme) - response.body = page.write_to_string + response.body = page return response end @@ -123,7 +126,7 @@ class ListGames page.breadcrumbs = new Breadcrumbs page.breadcrumbs.add_link(root_url / "games", "games") page.flow_panels.add new GamesListPanel(root_url, games) - response.body = page.write_to_string + response.body = page return response end end @@ -175,6 +178,11 @@ class GameAction # From where to start the display of events related lists. var list_from = 0 + + # TODO should also check 201, 203 ... + private fun is_response_error(response: HttpResponse): Bool do + return response.status_code != 200 + end end # Repo overview page. @@ -183,11 +191,12 @@ class RepoHome redef fun answer(request, url) do var rsp = prepare_response(request, url) + if is_response_error(rsp) then return rsp page.side_panels.add new ShortListPlayersPanel(game) page.flow_panels.add new PodiumPanel(game) page.flow_panels.add new EventListPanel(game, list_limit, list_from) page.flow_panels.add new AchievementsListPanel(game) - rsp.body = page.write_to_string + rsp.body = page return rsp end end @@ -198,9 +207,10 @@ class ListPlayers redef fun answer(request, url) do var rsp = prepare_response(request, url) + if is_response_error(rsp) then return rsp page.breadcrumbs.add_link(game.url / "players", "players") page.flow_panels.add new ListPlayersPanel(game) - rsp.body = page.write_to_string + rsp.body = page return rsp end end @@ -211,6 +221,7 @@ class PlayerHome redef fun answer(request, url) do var rsp = prepare_response(request, url) + if is_response_error(rsp) then return rsp var name = request.param("player") if name == null then var msg = "Bad request: should look like /:owner/:repo/:players/:name." @@ -225,9 +236,10 @@ class PlayerHome page.side_panels.clear page.side_panels.add new PlayerStatusPanel(game, player) page.flow_panels.add new PlayerReviewsPanel(game, player) + page.flow_panels.add new PlayerWorkPanel(game, player) page.flow_panels.add new AchievementsListPanel(player) page.flow_panels.add new EventListPanel(player, list_limit, list_from) - rsp.body = page.write_to_string + rsp.body = page return rsp end end @@ -238,9 +250,10 @@ class ListAchievements redef fun answer(request, url) do var rsp = prepare_response(request, url) + if is_response_error(rsp) then return rsp page.breadcrumbs.add_link(game.url / "achievements", "achievements") page.flow_panels.add new AchievementsListPanel(game) - rsp.body = page.write_to_string + rsp.body = page return rsp end end @@ -251,6 +264,7 @@ class AchievementHome redef fun answer(request, url) do var rsp = prepare_response(request, url) + if is_response_error(rsp) then return rsp var name = request.param("achievement") if name == null then var msg = "Bad request: should look like /:owner/:repo/achievements/:achievement." @@ -264,7 +278,7 @@ class AchievementHome page.breadcrumbs.add_link(achievement.url, achievement.name) page.flow_panels.add new AchievementPanel(achievement) page.flow_panels.add new EventListPanel(achievement, list_limit, list_from) - rsp.body = page.write_to_string + rsp.body = page return rsp end end