Add playtime stats to navbar
This commit is contained in:
parent
967ff7df07
commit
aba9bc994d
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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"
|
||||||
|
@ -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"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user