WebHost: Add game listing for all players on room info page.

This commit is contained in:
Hussein Farran 2021-12-22 20:15:56 -05:00 committed by Fabian Dill
parent 1f4ddc295a
commit 3508cf21c7
4 changed files with 76 additions and 17 deletions

View File

@ -18,3 +18,34 @@
border-radius: 3px; border-radius: 3px;
width: 500px; width: 500px;
} }
#host-room table {
border-spacing: 0px;
}
#host-room table tbody{
background-color: #dce2bd;
}
#host-room table tbody tr:hover{
background-color: #e2eabb;
}
#host-room table tbody td{
padding: 4px 6px;
color: black;
}
#host-room table tbody a{
color: #234ae4;
}
#host-room table thead td{
background-color: #b0a77d;
color: black;
top: 0;
}
#host-room table tbody td{
border: 1px solid #bba967;
}

View File

@ -8,22 +8,43 @@
{%- endmacro %} {%- endmacro %}
{% macro list_patches_room(room) %} {% macro list_patches_room(room) %}
{% if room.seed.slots %} {% if room.seed.slots %}
<ul> <table>
<thead>
<tr>
<td>Id</td>
<td>Name</td>
<td>Game</td>
<td>Download Link</td>
<td>Tracker Page</td>
</tr>
</thead>
<tbody>
{% for patch in room.seed.slots|list|sort(attribute="player_id") %} {% for patch in room.seed.slots|list|sort(attribute="player_id") %}
{% if patch.game == "Minecraft" %} <tr>
<li><a href="{{ url_for("download_slot_file", room_id=room.id, player_id=patch.player_id) }}"> <td>{{ patch.player_id }}</td>
APMC for player {{ patch.player_id }} - {{ patch.player_name }}</a></li> <td>{{ patch.player_name }}</td>
{% elif patch.game == "Factorio" %} <td>{{ patch.game }}</td>
<li><a href="{{ url_for("download_slot_file", room_id=room.id, player_id=patch.player_id) }}"> <td>
Mod for player {{ patch.player_id }} - {{ patch.player_name }}</a></li> {% if patch.game == "Minecraft" %}
{% elif patch.game == "Ocarina of Time" %} <a href="{{ url_for("download_slot_file", room_id=room.id, player_id=patch.player_id) }}">
<li><a href="{{ url_for("download_slot_file", room_id=room.id, player_id=patch.player_id) }}"> Download APMC File...</a>
APZ5 for player {{ patch.player_id }} - {{ patch.player_name }}</a></li> {% elif patch.game == "Factorio" %}
{% else %} <a href="{{ url_for("download_slot_file", room_id=room.id, player_id=patch.player_id) }}">
<li><a href="{{ url_for("download_patch", patch_id=patch.id, room_id=room.id) }}"> Download Factorio Mod...</a>
Patch for player {{ patch.player_id }} - {{ patch.player_name }}</a></li> {% elif patch.game == "Ocarina of Time" %}
{% endif %} <a href="{{ url_for("download_slot_file", room_id=room.id, player_id=patch.player_id) }}">
Download APZ5 File...</a>
{% elif patch.game in ["A Link to the Past", "Secret of Evermore", "Super Metroid"] %}
<a href="{{ url_for("download_patch", patch_id=patch.id, room_id=room.id) }}">
Download Patch File...</a>
{% else %}
No file to download for this game.
{% endif %}
</td>
<td><a href="{{ url_for("getPlayerTracker", tracker=room.tracker, tracked_team=0, tracked_player=patch.player_id) }}">Tracker</a></td>
</tr>
{% endfor %} {% endfor %}
</ul> </tbody>
</table>
{% endif %} {% endif %}
{%- endmacro -%} {%- endmacro -%}

View File

@ -2,7 +2,7 @@
{% block head %} {% block head %}
{{ super() }} {{ super() }}
<title>Generate Game</title> <title>User Content</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename="styles/userContent.css") }}" /> <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename="styles/userContent.css") }}" />
<script type="application/ecmascript" src="{{ url_for('static', filename="assets/userContent.js") }}"></script> <script type="application/ecmascript" src="{{ url_for('static', filename="assets/userContent.js") }}"></script>
{% endblock %} {% endblock %}

View File

@ -62,12 +62,19 @@ def upload_zip_to_db(zfile: zipfile.ZipFile, owner=None, meta={"race": False}, s
elif file.filename.endswith(".archipelago"): elif file.filename.endswith(".archipelago"):
try: try:
multidata = zfile.open(file).read() multidata = zfile.open(file).read()
MultiServer.Context._decompress(multidata)
except: except:
flash("Could not load multidata. File may be corrupted or incompatible.") flash("Could not load multidata. File may be corrupted or incompatible.")
multidata = None multidata = None
if multidata: if multidata:
decompressed_multidata = MultiServer.Context._decompress(multidata)
leftover_names = [(name, decompressed_multidata["names"][0].index(name) + 1) for name in
decompressed_multidata["names"][0] if name not in [slot.player_name for slot in slots]]
newslots = [(Slot(data=None, player_name=name, player_id=slot, game=decompressed_multidata["games"][slot]))
for name, slot in leftover_names]
for slot in newslots:
slots.add(slot)
flush() # commit slots flush() # commit slots
seed = Seed(multidata=multidata, spoiler=spoiler, slots=slots, owner=owner, meta=json.dumps(meta), seed = Seed(multidata=multidata, spoiler=spoiler, slots=slots, owner=owner, meta=json.dumps(meta),
id=sid if sid else uuid.uuid4()) id=sid if sid else uuid.uuid4())