added connected double lessons with own setting

This commit is contained in:
Lars Neuhaus 2024-03-30 18:26:33 +01:00
parent 9cb3a93a51
commit afdc02f2a4
5 changed files with 60 additions and 5 deletions

@ -4,7 +4,9 @@ part 'timetableSettings.g.dart';
@JsonSerializable()
class TimetableSettings {
TimetableSettings();
bool connectDoubleLessons;
TimetableSettings({required this.connectDoubleLessons});
factory TimetableSettings.fromJson(Map<String, dynamic> json) => _$TimetableSettingsFromJson(json);
Map<String, dynamic> toJson() => _$TimetableSettingsToJson(this);

@ -7,7 +7,11 @@ part of 'timetableSettings.dart';
// **************************************************************************
TimetableSettings _$TimetableSettingsFromJson(Map<String, dynamic> json) =>
TimetableSettings();
TimetableSettings(
connectDoubleLessons: json['connectDoubleLessons'] as bool,
);
Map<String, dynamic> _$TimetableSettingsToJson(TimetableSettings instance) =>
<String, dynamic>{};
<String, dynamic>{
'connectDoubleLessons': instance.connectDoubleLessons,
};

@ -243,9 +243,43 @@ class _TimetableState extends State<Timetable> {
];
}
List<GetTimetableResponseObject> _removeDuplicates(TimetableProps data, Duration maxTimeBetweenDouble) {
List<GetTimetableResponseObject> timetableList = data.getTimetableResponse.result.toList();
if(timetableList.isEmpty){ return timetableList; }
timetableList.sort((a, b) => _parseWebuntisTimestamp(a.date, a.startTime).compareTo(_parseWebuntisTimestamp(b.date, b.startTime)));
GetTimetableResponseObject previousElement = timetableList.first;
for (var i = 1; i < timetableList.length; i++) {
GetTimetableResponseObject currentElement = timetableList.elementAt(i);
bool isSameSubject() => (currentElement.su.firstOrNull?.id ?? 1) == (previousElement.su.firstOrNull?.id ?? 2);
bool isNotSeparated() => _parseWebuntisTimestamp(previousElement.date, previousElement.endTime).add(maxTimeBetweenDouble).add(const Duration(seconds: 1))
.isAfter(_parseWebuntisTimestamp(currentElement.date, currentElement.startTime));
if(isSameSubject() && isNotSeparated()){
previousElement.endTime = currentElement.endTime;
timetableList.remove(currentElement);
i--;
}else{
previousElement = currentElement;
}
}
return timetableList;
}
TimetableEvents _buildTableEvents(TimetableProps data) {
List<Appointment> appointments = data.getTimetableResponse.result.map((element) {
List<GetTimetableResponseObject> timetableList = data.getTimetableResponse.result.toList();
if(settings.val().timetableSettings.connectDoubleLessons){
timetableList = _removeDuplicates(data, const Duration(minutes: 5));
}
List<Appointment> appointments = timetableList.map((element) {
GetRoomsResponse rooms = data.getRoomsResponse;
GetSubjectsResponse subjects = data.getSubjectsResponse;

@ -22,7 +22,9 @@ class DefaultSettings {
askedForPreferredGradeSystem: false,
inputs: []
),
timetableSettings: TimetableSettings(),
timetableSettings: TimetableSettings(
connectDoubleLessons: false,
),
talkSettings: TalkSettings(
sortFavoritesToTop: true,
sortUnreadToTop: false,

@ -98,6 +98,19 @@ class _SettingsState extends State<Settings> {
const Divider(),
ListTile(
leading: const Icon(Icons.calendar_view_day_outlined),
title: const Text("Doppelstunden als eine Stunde anzeigen"),
trailing: Checkbox(
value: settings.val().timetableSettings.connectDoubleLessons,
onChanged: (e) {
settings.val(write: true).timetableSettings.connectDoubleLessons = e!;
},
),
),
const Divider(),
ListTile(
leading: const Icon(Icons.star_border),
title: const Text("Favoriten im Talk nach oben sortieren"),