From e784e98e1f2ab312571466eeda3f1bd30b4e8543 Mon Sep 17 00:00:00 2001 From: Yannik Schmidt Date: Fri, 16 Jun 2023 15:32:04 +0200 Subject: [PATCH] feat: more infos in main view --- server.py | 32 +++++++++++++++++++++++++++++++- templates/index.html | 6 +++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/server.py b/server.py index 9745571..359fbdd 100755 --- a/server.py +++ b/server.py @@ -39,6 +39,29 @@ class Map(db.Model): r = q.filter(or_(ParsedReplay.uploader == player, ParsedReplay.login == player)).first() return r + def get_second_best_replay(self): + + q = db.session.query(ParsedReplay).filter(ParsedReplay.map_uid == self.map_uid) + q = q.filter(ParsedReplay.login != self.get_best_replay().login) + results = q.order_by(asc(ParsedReplay.race_time)).all() + if not results or len(results) < 1: + return None + return results[0] # because first is already filtered out by login filter + + def get_record_replay_percent_diff(self): + + best = self.get_best_replay() + second = self.get_second_best_replay() + + if not second: + return "" + elif best.race_time == second.race_time: + return "Tied by {}".format(second.clean_login()) + else: + dif = second.race_time - best.race_time + percent = dif/best.race_time*100 + return "+ {:.2f}% by {}".format(percent, second.clean_login()) + def get_best_replay_repr(self): r = self.get_best_replay() if not r: @@ -68,6 +91,12 @@ class ParsedReplay(db.Model): login = Column(String) cp_times = Column(String) + def clean_login(self): + if "/" in self.login: + return self.login.split("/")[0] + else: + return self.login + def guess_map(self): base = os.path.basename(self.filepath) return base.split("_")[1].split(".Replay")[0] @@ -256,8 +285,9 @@ def list(): def mapnames(): # TODO list by user # TODO download replay + player = flask.request.headers.get("X-Forwarded-Preferred-Username") maps = db.session.query(Map).order_by(asc(Map.mapname)).all() - return flask.render_template("index.html", maps=maps) + return flask.render_template("index.html", maps=maps, player=player) @app.route("/data-source/", methods=["POST"]) def source(map_uid): diff --git a/templates/index.html b/templates/index.html index 742ddf9..bb08853 100644 --- a/templates/index.html +++ b/templates/index.html @@ -11,7 +11,9 @@ Personal Best {% endif %} Record + Record Holder Record Age + Runner Up (%) @@ -23,8 +25,10 @@ {% if player %} {{ map.get_best_for_player(player) }} {% endif %} - {{ map.get_best_replay_repr() }} + {{ map.get_best_replay_repr().split(" ")[0] }} + {{ map.get_best_replay().clean_login() }} {{ map.get_best_replay_age() }} days + {{ map.get_record_replay_percent_diff() }} {% endfor %}