X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=xonstat%2Fviews%2Fgame.py;h=1ed1741f52eb4cbec54bf1ccbceed7f058e9cf85;hb=3b8781019d65300747c6d7de8a9b9641fa3aafe4;hp=2a7fbb56ad5cb2d7245532ffadb6e5792e166ac0;hpb=d0bdb7b7a561d9d69e7dad55dfacc6e1cbc96df7;p=xonotic%2Fxonstat.git diff --git a/xonstat/views/game.py b/xonstat/views/game.py index 2a7fbb5..1ed1741 100644 --- a/xonstat/views/game.py +++ b/xonstat/views/game.py @@ -13,27 +13,40 @@ log = logging.getLogger(__name__) def _game_index_data(request): + if request.matchdict.has_key('game_type_cd'): + game_type_cd = request.matchdict['game_type_cd'] + else: + game_type_cd = None + if request.params.has_key('page'): current_page = request.params['page'] else: current_page = 1 - - games_q = DBSession.query(Game, Server, Map).\ - filter(Game.server_id == Server.server_id).\ - filter(Game.map_id == Map.map_id).\ - order_by(Game.game_id.desc()) - - games = Page(games_q, current_page, items_per_page=10, url=page_url) - - pgstats = {} - for (game, server, map) in games: - pgstats[game.game_id] = DBSession.query(PlayerGameStat).\ - filter(PlayerGameStat.game_id == game.game_id).\ - order_by(PlayerGameStat.scoreboardpos).\ - order_by(PlayerGameStat.score).all() + + try: + rgs_q = recent_games_q(game_type_cd=game_type_cd) + + games = Page(rgs_q, current_page, items_per_page=10, url=page_url) + + # replace the items in the canned pagination class with more rich ones + games.items = [RecentGame(row) for row in games.items] + + pgstats = {} + for game in games.items: + pgstats[game.game_id] = DBSession.query(PlayerGameStat).\ + filter(PlayerGameStat.game_id == game.game_id).\ + order_by(PlayerGameStat.scoreboardpos).\ + order_by(PlayerGameStat.score).all() + + except Exception as e: + games = None + pgstats = None + game_type_cd = None return {'games':games, - 'pgstats':pgstats} + 'pgstats':pgstats, + 'game_type_cd':game_type_cd, + } def game_index(request): @@ -62,13 +75,19 @@ def _game_info_data(request): else: show_elo = False + if request.params.has_key('show_latency'): + show_latency = True + else: + show_latency = False + try: notfound = False - (game, server, map) = DBSession.query(Game, Server, Map).\ + (game, server, map, gametype) = DBSession.query(Game, Server, Map, GameType).\ filter(Game.game_id == game_id).\ filter(Game.server_id == Server.server_id).\ - filter(Game.map_id == Map.map_id).one() + filter(Game.map_id == Map.map_id).\ + filter(Game.game_type_cd == GameType.game_type_cd).one() pgstats = DBSession.query(PlayerGameStat).\ filter(PlayerGameStat.game_id == game_id).\ @@ -79,10 +98,10 @@ def _game_info_data(request): captimes = [] if game.game_type_cd == 'ctf': for pgstat in pgstats: - if pgstat.fastest_cap is not None: + if pgstat.fastest is not None: captimes.append(pgstat) - captimes = sorted(captimes, key=lambda x:x.fastest_cap) + captimes = sorted(captimes, key=lambda x:x.fastest) pwstats = {} for (pwstat, pgstat, weapon) in DBSession.query(PlayerWeaponStat, PlayerGameStat, Weapon).\ @@ -108,19 +127,23 @@ def _game_info_data(request): game = None server = None map = None + gametype = None pgstats = None pwstats = None captimes = None show_elo = False + show_latency = False raise inst return {'game':game, 'server':server, 'map':map, + 'gametype':gametype, 'pgstats':pgstats, 'pwstats':pwstats, 'captimes':captimes, 'show_elo':show_elo, + 'show_latency':show_latency, }