feat: more infos in main view

This commit is contained in:
2023-06-16 15:32:04 +02:00
parent 441891da12
commit e784e98e1f
2 changed files with 36 additions and 2 deletions

View File

@@ -39,6 +39,29 @@ class Map(db.Model):
r = q.filter(or_(ParsedReplay.uploader == player, ParsedReplay.login == player)).first() r = q.filter(or_(ParsedReplay.uploader == player, ParsedReplay.login == player)).first()
return r 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): def get_best_replay_repr(self):
r = self.get_best_replay() r = self.get_best_replay()
if not r: if not r:
@@ -68,6 +91,12 @@ class ParsedReplay(db.Model):
login = Column(String) login = Column(String)
cp_times = 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): def guess_map(self):
base = os.path.basename(self.filepath) base = os.path.basename(self.filepath)
return base.split("_")[1].split(".Replay")[0] return base.split("_")[1].split(".Replay")[0]
@@ -256,8 +285,9 @@ def list():
def mapnames(): def mapnames():
# TODO list by user # TODO list by user
# TODO download replay # TODO download replay
player = flask.request.headers.get("X-Forwarded-Preferred-Username")
maps = db.session.query(Map).order_by(asc(Map.mapname)).all() 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/<path:map_uid>", methods=["POST"]) @app.route("/data-source/<path:map_uid>", methods=["POST"])
def source(map_uid): def source(map_uid):

View File

@@ -11,7 +11,9 @@
<th class="px-2">Personal Best</th> <th class="px-2">Personal Best</th>
{% endif %} {% endif %}
<th class="px-2">Record</th> <th class="px-2">Record</th>
<th class="px-2">Record Holder</th>
<th class="px-2">Record Age</th> <th class="px-2">Record Age</th>
<th class="px-2">Runner Up (%)</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@@ -23,8 +25,10 @@
{% if player %} {% if player %}
<td class="px-2">{{ map.get_best_for_player(player) }}</td> <td class="px-2">{{ map.get_best_for_player(player) }}</td>
{% endif %} {% endif %}
<td class="px-2">{{ map.get_best_replay_repr() }}</td> <td class="px-2">{{ map.get_best_replay_repr().split(" ")[0] }}</td>
<td class="px-2">{{ map.get_best_replay().clean_login() }}</td>
<td class="px-2">{{ map.get_best_replay_age() }} days</td> <td class="px-2">{{ map.get_best_replay_age() }} days</td>
<td class="px-2">{{ map.get_record_replay_percent_diff() }}</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>