diff --git a/app.py b/app.py index baf24ea..a376737 100644 --- a/app.py +++ b/app.py @@ -123,11 +123,29 @@ def _keys_context(): key_query += f" ORDER BY {order_by} " keys = conn.execute(key_query, params).fetchall() - conn.close() key_maps = {k: sorted(v) for k, v in key_maps.items()} + + # Build info view data: all keys (unfiltered), grouped by map then unassigned. + all_keys = conn.execute(""" + SELECT k.id, k.name, k.grid_image_url, k.wiki_url, + r.priority, r.reason, COALESCE(r.used_in_quest, 0) AS used_in_quest + FROM keys k + LEFT JOIN key_ratings r ON k.id = r.key_id + ORDER BY k.name ASC + """).fetchall() + conn.close() + + # keys_by_map: list of (map_row, [key_row, ...]) sorted by map name + keys_by_map = [] + for m in sorted(maps, key=lambda r: r["name"]): + bucket = [k for k in all_keys if m["id"] in key_maps.get(k["id"], [])] + keys_by_map.append((m, bucket)) + unassigned_keys = [k for k in all_keys if not key_maps.get(k["id"])] + return dict(keys=keys, maps=maps, key_maps=key_maps, - map_filter=map_filter, sort=sort, show=show) + map_filter=map_filter, sort=sort, show=show, + keys_by_map=keys_by_map, unassigned_keys=unassigned_keys) @app.route("/keys") @@ -183,6 +201,23 @@ def rate_key(): return redirect(f"{base_url}#key-{key_id}") +@app.route("/rate_json", methods=["POST"]) +def rate_json(): + data = request.get_json(force=True) + key_id = data.get("key_id") + if not key_id: + return jsonify({"ok": False, "error": "missing key_id"}), 400 + priority = data.get("priority") # None or int + reason = data.get("reason", "") + used_in_quest = 1 if data.get("used_in_quest") else 0 + map_ids = [int(m) for m in data.get("map_ids", [])] + conn = get_db() + _update_key(conn, key_id, priority, reason, used_in_quest, map_ids) + conn.commit() + conn.close() + return jsonify({"ok": True}) + + def _update_key(conn, key_id, priority, reason, used_in_quest, map_ids): conn.execute(""" INSERT INTO key_ratings (key_id, priority, reason, used_in_quest) diff --git a/tarkov.db b/tarkov.db index 9a02721..8f5f6cc 100644 Binary files a/tarkov.db and b/tarkov.db differ diff --git a/templates/keys.html b/templates/keys.html index 6e429f4..cece58d 100644 --- a/templates/keys.html +++ b/templates/keys.html @@ -1,7 +1,7 @@ - OnlyScavs – Key Ratings + OnlyScavs – Keys @@ -276,107 +217,284 @@ Barters -

Key Ratings

-
- - +

Keys

- - +
+ +
- - + {# Embed map list for JS #} + - -
+ {% macro priority_badge(key) %} + {% if key.priority == 4 %}SUPER + {% elif key.priority == 3 %}HIGH + {% elif key.priority == 2 %}MED + {% elif key.priority == 1 %}LOW + {% elif key.priority == 0 %}IGNORE + {% else %}{% endif %} + {% endmacro %} -
- {% if map_filter %}{% endif %} - {% if sort %}{% endif %} - {% if show %}{% endif %} - -
- -
- - {% for key in keys %} - {% set selected_maps = key_maps.get(key.id, []) %} -
- - - -
-
- {{ key.name }} - {% if key.wiki_url %}wiki ↗{% endif %} -
- {% if selected_maps %} -
- {% for map in maps %} - {% if map.id in selected_maps %} - {{ map.name }} - {% endif %} - {% endfor %} -
+ {% macro key_row(key, show_maps=true) %} + {% set selected_maps = key_maps.get(key.id, []) %} + + + + {{ key.name }} + {% if key.wiki_url %}
wiki ↗{% endif %} + + {{ priority_badge(key) }} + + {% if key.used_in_quest %} + + {% else %} + + {% endif %} + + +
+ {% if show_maps %} + {% for m in maps %}{% if m.id in selected_maps %}{{ m.name }}{% endif %}{% endfor %} {% endif %} + +
- -
- - - - -
- {% endfor %} + {% for map, map_keys in keys_by_map %} +
+
{{ map.name }}
+ + + + + + + + + + + {% for key in map_keys %}{{ key_row(key) }}{% endfor %} + {% if not map_keys %}{% endif %} + +
KeyPriorityQuestMapsNote
No keys assigned to this map.
+
+ {% endfor %} -
- -
- +
+
Unassigned
+ + + + + + + + + + + {% for key in unassigned_keys %}{{ key_row(key, show_maps=false) }}{% endfor %} + {% if not unassigned_keys %}{% endif %} + +
KeyPriorityQuestMapsNote
All keys assigned to maps.
+
+ +