mirror of
https://github.com/FAUSheppy/tmnf-replay-server.git
synced 2025-12-06 07:01:37 +01:00
feat: more infos in main view
This commit is contained in:
32
server.py
32
server.py
@@ -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):
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user