Make ending sessions faster #71
|
@ -3,6 +3,7 @@
|
||||||
## Improved
|
## Improved
|
||||||
* game overview: improve how editions and purchases are displayed
|
* game overview: improve how editions and purchases are displayed
|
||||||
* add purchase: only allow choosing purchases of selected edition
|
* add purchase: only allow choosing purchases of selected edition
|
||||||
|
* session list: clicking the "End now?" link is not much faster
|
||||||
|
|
||||||
## 1.5.1 / 2023-11-14 21:10+01:00
|
## 1.5.1 / 2023-11-14 21:10+01:00
|
||||||
|
|
||||||
|
|
|
@ -29,36 +29,35 @@
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for data in dataset %}
|
{% for session in dataset %}
|
||||||
{% partialdef session-row inline=True %}
|
{% partialdef session-row inline=True %}
|
||||||
<tr>
|
<tr>
|
||||||
<td class="px-2 sm:px-4 md:px-6 md:py-2 purchase-name truncate max-w-20char md:max-w-40char">
|
<td class="px-2 sm:px-4 md:px-6 md:py-2 purchase-name truncate max-w-20char md:max-w-40char">
|
||||||
<a class="underline decoration-slate-500 sm:decoration-2"
|
<a class="underline decoration-slate-500 sm:decoration-2"
|
||||||
href="{% url 'view_game' data.purchase.edition.game.id %}">
|
href="{% url 'view_game' session.purchase.edition.game.id %}">
|
||||||
{{ data.purchase.edition }}
|
{{ session.purchase.edition }}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono hidden sm:table-cell">
|
<td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono hidden sm:table-cell">
|
||||||
{{ data.timestamp_start | date:"d/m/Y H:i" }}
|
{{ session.timestamp_start | date:"d/m/Y H:i" }}
|
||||||
</td>
|
</td>
|
||||||
<td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono hidden lg:table-cell">
|
<td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono hidden lg:table-cell">
|
||||||
{% if data.unfinished %}
|
{% if session.unfinished %}
|
||||||
<a href="{% url 'update_session' data.id %}"
|
<a href="{% url 'update_session' session.id %}"
|
||||||
hx-get="{% url 'update_session' data.id %}"
|
hx-get="{% url 'update_session' session.id %}"
|
||||||
|
hx-target="closest tr"
|
||||||
hx-swap="outerHTML"
|
hx-swap="outerHTML"
|
||||||
hx-target=".responsive-table tbody tr:first-child"
|
|
||||||
hx-select=".responsive-table tbody tr:first-child"
|
|
||||||
hx-indicator="#indicator"
|
hx-indicator="#indicator"
|
||||||
onClick="document.querySelector('#last-session-start').classList.remove('invisible')">
|
onClick="document.querySelector('#last-session-start').classList.remove('invisible')">
|
||||||
<span class="text-yellow-300">Finish now?</span>
|
<span class="text-yellow-300">Finish now?</span>
|
||||||
</a>
|
</a>
|
||||||
{% elif data.duration_manual %}
|
{% elif session.duration_manual %}
|
||||||
--
|
--
|
||||||
{% else %}
|
{% else %}
|
||||||
{{ data.timestamp_end | date:"d/m/Y H:i" }}
|
{{ session.timestamp_end | date:"d/m/Y H:i" }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono">{{ data.duration_formatted }}</td>
|
<td class="px-2 sm:px-4 md:px-6 md:py-2 font-mono">{{ session.duration_formatted }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endpartialdef %}
|
{% endpartialdef %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -13,6 +13,7 @@ from django.http import (
|
||||||
from django.shortcuts import redirect, render
|
from django.shortcuts import redirect, render
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
from django.shortcuts import get_object_or_404
|
||||||
|
|
||||||
from common.time import format_duration
|
from common.time import format_duration
|
||||||
from common.utils import safe_division
|
from common.utils import safe_division
|
||||||
|
@ -74,11 +75,12 @@ def add_session(request, purchase_id=None):
|
||||||
|
|
||||||
|
|
||||||
def update_session(request, session_id=None):
|
def update_session(request, session_id=None):
|
||||||
session = Session.objects.get(id=session_id)
|
session = get_object_or_404(Session, id=session_id)
|
||||||
session.finish_now()
|
session.finish_now()
|
||||||
session.save()
|
session.save()
|
||||||
if request.htmx:
|
if request.htmx:
|
||||||
return render(request, "list_sessions.html#session-row")
|
context = {"session": session}
|
||||||
|
return render(request, "list_sessions.html#session-row", context)
|
||||||
return redirect("list_sessions")
|
return redirect("list_sessions")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.
|
# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand.
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aniso8601"
|
name = "aniso8601"
|
||||||
|
@ -172,6 +172,21 @@ files = [
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
Django = ">=3.2"
|
Django = ">=3.2"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "django-htmx"
|
||||||
|
version = "1.17.2"
|
||||||
|
description = "Extensions for using Django with htmx."
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "django-htmx-1.17.2.tar.gz", hash = "sha256:4089f2ed38727e9846c2f4cd1daddf6b010c7be8d834cfbcffc8c5ecf445c04e"},
|
||||||
|
{file = "django_htmx-1.17.2-py3-none-any.whl", hash = "sha256:f4971432d2ca45dbb31d9b58add1c50ae54354afe4bf59cafd591b1711b502c0"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
asgiref = ">=3.6"
|
||||||
|
Django = ">=3.2"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "django-template-partials"
|
name = "django-template-partials"
|
||||||
version = "23.4"
|
version = "23.4"
|
||||||
|
@ -1005,4 +1020,4 @@ watchdog = ["watchdog (>=2.3)"]
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = "^3.11"
|
python-versions = "^3.11"
|
||||||
content-hash = "c9ce052c193fdf4cc4b22f0cd1f2368fae6bc9304c38c770843315f39fa08de4"
|
content-hash = "4662e73ad621b11cbe5b517ca08aae4cbeb350bfcc855a6c067861942e232d2a"
|
||||||
|
|
|
@ -13,6 +13,8 @@ django = "^4.2.0"
|
||||||
gunicorn = "^20.1.0"
|
gunicorn = "^20.1.0"
|
||||||
uvicorn = "^0.20.0"
|
uvicorn = "^0.20.0"
|
||||||
graphene-django = "^3.1.5"
|
graphene-django = "^3.1.5"
|
||||||
|
django-htmx = "^1.17.2"
|
||||||
|
django-template-partials = "^23.4"
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
[tool.poetry.group.dev.dependencies]
|
||||||
black = "^22.12.0"
|
black = "^22.12.0"
|
||||||
|
@ -28,9 +30,6 @@ pre-commit = "^3.5.0"
|
||||||
django-debug-toolbar = "^4.2.0"
|
django-debug-toolbar = "^4.2.0"
|
||||||
|
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
|
||||||
django-htmx = "^1.17.2"
|
|
||||||
django-template-partials = "^23.4"
|
|
||||||
[tool.isort]
|
[tool.isort]
|
||||||
profile = "black"
|
profile = "black"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue