From 34ca33f71abb4dc3e5e58faf67c6a03c37edeb86 Mon Sep 17 00:00:00 2001 From: Yannik Schmidt Date: Sat, 10 Jun 2023 18:21:30 +0200 Subject: [PATCH] wip: index & mapnames --- server.py | 52 +++++++++++++++++++++++++++++----------- templates/datatable.html | 2 +- templates/head.html | 28 ++++++++++++++++++++++ templates/index.html | 31 ++++++++++++++++++++++++ templates/map-info.html | 27 +-------------------- 5 files changed, 99 insertions(+), 41 deletions(-) create mode 100644 templates/head.html create mode 100644 templates/index.html diff --git a/server.py b/server.py index e51c4e6..0e88263 100755 --- a/server.py +++ b/server.py @@ -27,6 +27,30 @@ class Map(db.Model): map_uid = Column(String, primary_key=True) mapname = Column(String) + def get_best_replay(self): + + q = db.session.query(ParsedReplay).filter(ParsedReplay.map_uid == self.map_uid) + r = q.order_by(asc(ParsedReplay.race_time)).first() + return r + + def get_best_replay_for_player(self, player): + + q = db.session.query(ParsedReplay).filter(ParsedReplay.map_uid == self.map_uid) + r = q.filter(or_(ParsedReplay.uploader == player, ParsedReplay.login == player)).first() + return r + + def get_best_replay_repr(self): + r = self.get_best_replay() + if not r: + return "-" + return str(r) + + def get_best_replay_age(self): + + parsed = datetime.datetime.fromisoformat(self.get_best_replay().upload_dt) + delta = datetime.datetime.now() - parsed + return delta.days + class ParsedReplay(db.Model): __tablename__ = "replays" @@ -56,9 +80,9 @@ class ParsedReplay(db.Model): return t_string[:-4] def __repr__(self): - return "{time} on {map_n} by {login}/{uploader}".format( + return "{time} on {map_n} by {login}".format( time=self.get_human_readable_time(), - map_n=self.guess_map(), login=self.login, uploader=self.uploader) + map_n=self.guess_map(), login=self.login) def to_dict(self): d = dict() @@ -87,10 +111,10 @@ class DataTable(): # oder variable for use with sqlalchemy if self.orderAsc: self.orderAscDbClass = sqlalchemy.asc - self.orderAscDbClassReverse = sqlalchemy.desc + self.orderAscDbClassReverse = sqlalchemy.asc else: self.orderAscDbClass = sqlalchemy.desc - self.orderAscDbClassReverse = sqlalchemy.asc + self.orderAscDbClassReverse = sqlalchemy.desc def __build(self, results, total, filtered): @@ -170,7 +194,8 @@ def replay_from_path(fullpath, uploader=None): race_time=ghost.race_time, uploader=uploader, filepath=fullpath, - map_uid=ghost.uid, + #map_uid=ghost.uid, + map_uid=os.path.basename(fullpath).split("_")[1].split(".Replay")[0], ghost_id=ghost.id, login=ghost.login, upload_dt=datetime.datetime.now().isoformat(), @@ -183,25 +208,24 @@ def replay_from_path(fullpath, uploader=None): return replay -@app.route("/map") +@app.route("/map-info") def list(): - # TODO list maps by mapnames - # TODO list replays by mapnames - # TODO list by user - # TODO show all/show only best header_col = ["Player", "Time", "Date", "Replay"] map_uid = flask.request.args.get("map_uid") - return flask.render_template("index.html", header_col=header_col, map_uid=map_uid) + return flask.render_template("map-info.html", header_col=header_col, map_uid=map_uid) @app.route("/") def mapnames(): + # TODO list by user + maps = db.session.query(Map).order_by(asc(Map.mapname)).all() + return flask.render_template("index.html", maps=maps) -@app.route("/data-source", methods=["POST"]) -def source(): +@app.route("/data-source/", methods=["POST"]) +def source(map_uid): # path = map_uid dt = DataTable(flask.request.form.to_dict(), ["login", "race_time", "upload_dt", "filepath" ]) - jsonDict = dt.get(path) + jsonDict = dt.get(map_uid=map_uid) return flask.Response(json.dumps(jsonDict), 200, mimetype='application/json') @app.route("/upload", methods = ['GET', 'POST']) diff --git a/templates/datatable.html b/templates/datatable.html index adb1fa3..e0cdf11 100644 --- a/templates/datatable.html +++ b/templates/datatable.html @@ -16,7 +16,7 @@ dt = $('#tableMain').DataTable({ serverSide: true, ajax: { - url: '/data-source', + url: '/data-source/{{ map_uid }}', type: 'POST' }, "columnDefs": [ diff --git a/templates/head.html b/templates/head.html new file mode 100644 index 0000000..d4d789a --- /dev/null +++ b/templates/head.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..99eae6e --- /dev/null +++ b/templates/index.html @@ -0,0 +1,31 @@ + + {% include "head.html" %} + + + + + + + {% if player %} + + {% endif %} + + + + + + {% for map in maps %} + + + {% if player %} + + {% endif %} + + + + {% endfor %} + +
MapPersonal BestRecordRecord Age
+ {{ map.mapname }} + {{ map.get_best_for_player(player) }}{{ map.get_best_replay_repr() }}{{ map.get_best_replay_age() }} days
+ diff --git a/templates/map-info.html b/templates/map-info.html index afe0c37..691d058 100644 --- a/templates/map-info.html +++ b/templates/map-info.html @@ -1,30 +1,5 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + {% include "head.html" %} {% include "datatable.html" %}