From 5c1bf763e1e67d8db6a416ca92367f3cd89c9d1b Mon Sep 17 00:00:00 2001
From: doodlezucc <electerminator@gmail.com>
Date: Wed, 29 Nov 2023 08:37:56 +0100
Subject: [PATCH] use date variable in TimetableData

---
 lib/fetching/timetable.dart        |  1 +
 lib/timetable/timetable.dart       | 17 ++++++++++-------
 lib/timetable/weekday_content.dart |  8 ++++++--
 lib/untis/lesson.dart              |  9 +++------
 lib/untis/timetable.dart           |  8 ++++++++
 5 files changed, 28 insertions(+), 15 deletions(-)

diff --git a/lib/fetching/timetable.dart b/lib/fetching/timetable.dart
index cc7bfa8..6c31f25 100644
--- a/lib/fetching/timetable.dart
+++ b/lib/fetching/timetable.dart
@@ -95,6 +95,7 @@ class CacheableTimetable extends Cacheable<TimetableData> {
     }
 
     return TimetableData(
+      date: date,
       lessons: timetableLessons,
       rooms: rooms.values.toSet(),
       teachers: teachers.values.toSet(),
diff --git a/lib/timetable/timetable.dart b/lib/timetable/timetable.dart
index 78f938a..56e2be3 100644
--- a/lib/timetable/timetable.dart
+++ b/lib/timetable/timetable.dart
@@ -8,6 +8,7 @@ import '../untis/lecture.dart';
 import '../untis/lesson.dart';
 import '../untis/period.dart';
 import '../untis/timetable.dart';
+import '../util/date_extension.dart';
 import '../util/listenable.dart';
 import 'period_background.dart';
 import 'weekday_content.dart';
@@ -66,17 +67,20 @@ class _TimetableState extends State<Timetable> {
         : mergeLessons(_getLessonsOfDay(index), profile.hiddenLectures);
   }
 
+  DateTime getDateAtWeekdayIndex(int index) {
+    final monday = DateTime.now().atStartOfWeek();
+
+    return monday.add(Duration(days: index));
+  }
+
   @override
   Widget build(BuildContext context) {
     return Column(
       children: [
         Row(
           children: List.generate(Timetable.weekdayCount, (index) {
-            final now = DateTime.now();
-            final currentWeekday = now.weekday;
-            final monday = now.subtract(Duration(days: currentWeekday - 1));
+            final indexedDay = getDateAtWeekdayIndex(index);
 
-            final indexedDay = monday.add(Duration(days: index));
             return Expanded(
               child: WeekdayHeader(
                 date: indexedDay,
@@ -104,12 +108,11 @@ class _TimetableState extends State<Timetable> {
                       crossAxisAlignment: CrossAxisAlignment.start,
                       children: List.generate(Timetable.weekdayCount, (index) {
                         final lessons = getMergedLessonsOfDay(index);
-                        final isCurrentDay =
-                            DateTime.now().weekday - 1 == index;
+                        final date = getDateAtWeekdayIndex(index);
 
                         return Expanded(
                           child: WeekdayContent(
-                            showTimeIndicator: isCurrentDay,
+                            date: date,
                             lessons: lessons,
                             appContext: widget.appContext,
                           ),
diff --git a/lib/timetable/weekday_content.dart b/lib/timetable/weekday_content.dart
index 8c78426..3e5f75e 100644
--- a/lib/timetable/weekday_content.dart
+++ b/lib/timetable/weekday_content.dart
@@ -3,13 +3,14 @@ import 'dart:math';
 import 'package:flutter/material.dart';
 
 import '../context.dart';
+import '../util/date_extension.dart';
 import '../util/simultaneous.dart';
 import '../untis/lesson.dart';
 import 'lesson.dart';
 import 'time_indicator.dart';
 
 class WeekdayContent extends StatelessWidget {
-  final bool showTimeIndicator;
+  final DateTime date;
   final List<Lesson> lessons;
   final List<FloatingLesson> floatingLessons;
   final AppContext appContext;
@@ -17,9 +18,12 @@ class WeekdayContent extends StatelessWidget {
   int get latestLessonEnd =>
       lessons.isEmpty ? 0 : lessons.map((e) => e.endMinutes).reduce(max);
 
+  bool get showTimeIndicator =>
+      date.atStartOfDay() == DateTime.now().atStartOfDay();
+
   WeekdayContent({
     super.key,
-    required this.showTimeIndicator,
+    required this.date,
     required this.lessons,
     required this.appContext,
   }) : floatingLessons = solveSimultaneous(
diff --git a/lib/untis/lesson.dart b/lib/untis/lesson.dart
index fd09b10..a37d046 100644
--- a/lib/untis/lesson.dart
+++ b/lib/untis/lesson.dart
@@ -65,13 +65,10 @@ class UntisLesson extends Lesson with UntisMixin {
 
   UntisLesson(
     this.json, {
-    required Lecture lecture,
-    required Set<Room> rooms,
-    required Set<Teacher> teachers,
+    required super.lecture,
+    required super.rooms,
+    required super.teachers,
   }) : super(
-          lecture: lecture,
-          rooms: rooms,
-          teachers: teachers,
           date: _parseDate(json['date']),
           start: _parseTime(json['startTime']),
           end: _parseTime(json['endTime']),
diff --git a/lib/untis/timetable.dart b/lib/untis/timetable.dart
index c0617b8..d9bb48f 100644
--- a/lib/untis/timetable.dart
+++ b/lib/untis/timetable.dart
@@ -1,20 +1,28 @@
+import '../util/date_extension.dart';
 import 'lesson.dart';
 import 'room.dart';
 import 'teacher.dart';
 
 class TimetableData {
+  final DateTime date;
   final Set<UntisLesson> lessons;
   final Set<Teacher> teachers;
   final Set<Room> rooms;
 
   TimetableData({
+    required this.date,
     required this.lessons,
     required this.teachers,
     required this.rooms,
   });
 
   static TimetableData merge(TimetableData a, TimetableData b) {
+    if (a.date.atStartOfWeek() != b.date.atStartOfWeek()) {
+      throw StateError('Timetables are from different weeks');
+    }
+
     return TimetableData(
+      date: a.date,
       lessons: a.lessons.union(b.lessons),
       teachers: a.teachers.union(b.teachers),
       rooms: a.rooms.union(b.rooms),
-- 
GitLab