Add playtime stats to navbar
All checks were successful
Django CI/CD / test (push) Successful in 1m1s
Django CI/CD / build-and-push (push) Successful in 2m16s

This commit is contained in:
Lukáš Kucharczyk 2025-02-08 13:46:56 +01:00
parent 967ff7df07
commit aba9bc994d
Signed by: lukas
SSH Key Fingerprint: SHA256:vMuSwvwAvcT6htVAioMP7rzzwMQNi3roESyhv+nAxeg
4 changed files with 21 additions and 2 deletions

View File

@ -9,6 +9,7 @@
* Manage purchases * Manage purchases
* Automatically convert purchase prices * Automatically convert purchase prices
* Add emulated property to sessions * Add emulated property to sessions
* Add today's and last 7 days playtime stats to navbar
## Improved ## Improved
* mark refunded purchases red on game overview * mark refunded purchases red on game overview

View File

@ -1728,6 +1728,10 @@ input:checked + .toggle-bg {
justify-content: space-between; justify-content: space-between;
} }
.gap-1 {
gap: 0.25rem;
}
.gap-2 { .gap-2 {
gap: 0.5rem; gap: 0.5rem;
} }

View File

@ -25,7 +25,11 @@
</svg> </svg>
</button> </button>
<div class="hidden w-full md:block md:w-auto" id="navbar-dropdown"> <div class="hidden w-full md:block md:w-auto" id="navbar-dropdown">
<ul class="flex flex-col font-medium p-4 md:p-0 mt-4 border border-gray-100 rounded-lg bg-gray-50 md:space-x-8 rtl:space-x-reverse md:flex-row md:mt-0 md:border-0 md:bg-white dark:bg-gray-800 md:dark:bg-gray-900 dark:border-gray-700"> <ul class="items-center flex flex-col font-medium p-4 md:p-0 mt-4 border border-gray-100 rounded-lg bg-gray-50 md:space-x-8 rtl:space-x-reverse md:flex-row md:mt-0 md:border-0 md:bg-white dark:bg-gray-800 md:dark:bg-gray-900 dark:border-gray-700">
<li class="text-white flex flex-col items-center text-xs">
<span class="flex uppercase gap-1">Today<span class="text-gray-400">·</span>Last 7 days</span>
<span class="flex items-center gap-1">{{ today_played }}<span class="text-gray-400">·</span>{{ last_7_played }}</span>
</li>
<li> <li>
<a href="#" <a href="#"
class="block py-2 px-3 text-white bg-blue-700 rounded md:bg-transparent md:text-blue-700 md:p-0 md:dark:text-blue-500 dark:bg-blue-600 md:dark:bg-transparent" class="block py-2 px-3 text-white bg-blue-700 rounded md:bg-transparent md:text-blue-700 md:p-0 md:dark:text-blue-500 dark:bg-blue-600 md:dark:bg-transparent"

View File

@ -1,4 +1,4 @@
from datetime import datetime from datetime import datetime, timedelta
from typing import Any, Callable from typing import Any, Callable
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
@ -8,6 +8,7 @@ from django.db.models.manager import BaseManager
from django.http import HttpRequest, HttpResponse, HttpResponseRedirect from django.http import HttpRequest, HttpResponse, HttpResponseRedirect
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.timezone import now as timezone_now
from common.time import available_stats_year_range, dateformat, format_duration from common.time import available_stats_year_range, dateformat, format_duration
from common.utils import safe_division from common.utils import safe_division
@ -15,11 +16,20 @@ from games.models import Game, Platform, Purchase, Session
def model_counts(request: HttpRequest) -> dict[str, bool]: def model_counts(request: HttpRequest) -> dict[str, bool]:
today_played = Session.objects.filter(
timestamp_start__year=2025, timestamp_start__day=8, timestamp_start__month=2
).aggregate(time=Sum(F("duration_calculated")))["time"]
last_7_played = Session.objects.filter(
timestamp_start__gte=(timezone_now() - timedelta(days=7))
).aggregate(time=Sum(F("duration_calculated")))["time"]
return { return {
"game_available": Game.objects.exists(), "game_available": Game.objects.exists(),
"platform_available": Platform.objects.exists(), "platform_available": Platform.objects.exists(),
"purchase_available": Purchase.objects.exists(), "purchase_available": Purchase.objects.exists(),
"session_count": Session.objects.exists(), "session_count": Session.objects.exists(),
"today_played": format_duration(today_played, "%H h %m m"),
"last_7_played": format_duration(last_7_played, "%H h %m m"),
} }