5656logger = logging .getLogger (__name__ )
5757
5858
59- def build_history_day (
60- user , day_key , logging_style_override = None , media_types = None
61- ):
59+ def build_history_day (user , day_key , logging_style_override = None , media_types = None ):
6260 """Build a single history day payload for a user."""
6361 if not day_key :
6462 return None
@@ -71,12 +69,18 @@ def build_history_day(
7169 if not day_date :
7270 return None
7371 requested_media_types = expand_history_media_types (media_types )
74- include_episode = requested_media_types is None or "episode" in requested_media_types
72+ include_episode = (
73+ requested_media_types is None or "episode" in requested_media_types
74+ )
7575 include_movie = requested_media_types is None or "movie" in requested_media_types
7676 include_music = requested_media_types is None or "music" in requested_media_types
77- include_podcast = requested_media_types is None or "podcast" in requested_media_types
77+ include_podcast = (
78+ requested_media_types is None or "podcast" in requested_media_types
79+ )
7880 include_game = requested_media_types is None or "game" in requested_media_types
79- include_boardgame = requested_media_types is None or "boardgame" in requested_media_types
81+ include_boardgame = (
82+ requested_media_types is None or "boardgame" in requested_media_types
83+ )
8084
8185 day_start = timezone .make_aware (
8286 datetime .combine (day_date , datetime .min .time ()),
@@ -203,7 +207,10 @@ def build_history_day(
203207 (MediaTypes .MANGA .value , Manga ),
204208 (MediaTypes .ANIME .value , Anime ),
205209 ):
206- if requested_media_types is not None and media_type_value not in requested_media_types :
210+ if (
211+ requested_media_types is not None
212+ and media_type_value not in requested_media_types
213+ ):
207214 continue
208215 records = (
209216 model .objects .filter (user = user )
@@ -511,21 +518,25 @@ def build_history_day(
511518 # Games / Boardgames
512519 if logging_style == "sessions" :
513520 games = (
514- Game .objects .filter (user = user )
515- .filter (
516- models .Q (end_date__gte = day_start , end_date__lt = day_end )
517- | (
518- models .Q (end_date__isnull = True )
519- & models .Q (start_date__gte = day_start , start_date__lt = day_end )
520- )
521- | (
522- models .Q (end_date__isnull = True )
523- & models .Q (start_date__isnull = True )
524- & models .Q (created_at__gte = day_start , created_at__lt = day_end )
521+ (
522+ Game .objects .filter (user = user )
523+ .filter (
524+ models .Q (end_date__gte = day_start , end_date__lt = day_end )
525+ | (
526+ models .Q (end_date__isnull = True )
527+ & models .Q (start_date__gte = day_start , start_date__lt = day_end )
528+ )
529+ | (
530+ models .Q (end_date__isnull = True )
531+ & models .Q (start_date__isnull = True )
532+ & models .Q (created_at__gte = day_start , created_at__lt = day_end )
533+ )
525534 )
535+ .select_related ("item" )
526536 )
527- .select_related ("item" )
528- ) if include_game else Game .objects .none ()
537+ if include_game
538+ else Game .objects .none ()
539+ )
529540 for game in games :
530541 activity_dt = game .end_date or game .start_date or game .created_at
531542 played_at_local = _localize_datetime (activity_dt )
@@ -568,21 +579,25 @@ def build_history_day(
568579 entries .append (entry )
569580
570581 boardgames = (
571- BoardGame .objects .filter (user = user )
572- .filter (
573- models .Q (end_date__gte = day_start , end_date__lt = day_end )
574- | (
575- models .Q (end_date__isnull = True )
576- & models .Q (start_date__gte = day_start , start_date__lt = day_end )
577- )
578- | (
579- models .Q (end_date__isnull = True )
580- & models .Q (start_date__isnull = True )
581- & models .Q (created_at__gte = day_start , created_at__lt = day_end )
582+ (
583+ BoardGame .objects .filter (user = user )
584+ .filter (
585+ models .Q (end_date__gte = day_start , end_date__lt = day_end )
586+ | (
587+ models .Q (end_date__isnull = True )
588+ & models .Q (start_date__gte = day_start , start_date__lt = day_end )
589+ )
590+ | (
591+ models .Q (end_date__isnull = True )
592+ & models .Q (start_date__isnull = True )
593+ & models .Q (created_at__gte = day_start , created_at__lt = day_end )
594+ )
582595 )
596+ .select_related ("item" )
583597 )
584- .select_related ("item" )
585- ) if include_boardgame else BoardGame .objects .none ()
598+ if include_boardgame
599+ else BoardGame .objects .none ()
600+ )
586601 for boardgame in boardgames :
587602 activity_dt = (
588603 boardgame .end_date or boardgame .start_date or boardgame .created_at
@@ -748,7 +763,14 @@ def build_history_day(
748763 if not entries :
749764 return None
750765
751- entries .sort (key = lambda entry : entry ["played_at_local" ], reverse = True )
766+ entries .sort (
767+ key = lambda entry : (
768+ entry ["played_at_local" ],
769+ entry .get ("season_number" ) or 0 ,
770+ entry .get ("episode_number" ) or 0 ,
771+ ),
772+ reverse = True ,
773+ )
752774 total_minutes = sum (entry ["runtime_minutes" ] or 0 for entry in entries )
753775 first_entry_time = entries [0 ]["played_at_local" ]
754776
0 commit comments