diff --git a/filcnaplo/lib/database/init.dart b/filcnaplo/lib/database/init.dart index 37ee7e3..b947ef8 100644 --- a/filcnaplo/lib/database/init.dart +++ b/filcnaplo/lib/database/init.dart @@ -15,6 +15,7 @@ const settingsDB = DatabaseStruct("settings", { "vibration_strength": int, "ab_weeks": int, "swap_ab_weeks": int, "notifications": int, "notifications_bitfield": int, "notification_poll_interval": int, // notifications "x_filc_id": String, "graph_class_avg": int, "presentation_mode": int, "bell_delay": int, "bell_delay_enabled": int, + "grade_opening_fun": int, }); const usersDB = DatabaseStruct( "users", {"id": String, "name": String, "username": String, "password": String, "institute_code": String, "student": String, "role": int}); @@ -22,6 +23,7 @@ const userDataDB = DatabaseStruct("user_data", { "id": String, "grades": String, "timetable": String, "exams": String, "homework": String, "messages": String, "notes": String, "events": String, "absences": String, "group_averages": String, // "subject_lesson_count": String, // non kreta data + "last_seen_grade": int, }); Future createTable(Database db, DatabaseStruct struct) => db.execute("CREATE TABLE IF NOT EXISTS ${struct.table} ($struct)"); @@ -61,6 +63,7 @@ Future initDB() async { "grades": "[]", "timetable": "[]", "exams": "[]", "homework": "[]", "messages": "[]", "notes": "[]", "events": "[]", "absences": "[]", "group_averages": "[]", // "subject_lesson_count": "{}", // non kreta data + "last_seen_grade": "0", }); } catch (error) { print("ERROR: migrateDB: $error"); diff --git a/filcnaplo/lib/database/query.dart b/filcnaplo/lib/database/query.dart index bd753b7..ab19331 100644 --- a/filcnaplo/lib/database/query.dart +++ b/filcnaplo/lib/database/query.dart @@ -132,4 +132,13 @@ class UserDatabaseQuery { SubjectLessonCount lessonCount = SubjectLessonCount.fromMap(jsonDecode(lessonCountJson) as Map); return lessonCount; } + + Future lastSeenGrade({required String userId}) async { + List userData = await db.query("user_data", where: "id = ?", whereArgs: [userId]); + if (userData.isEmpty) return DateTime(0); + int? lastSeenDate = userData.elementAt(0)["last_seen_grade"] as int?; + if (lastSeenDate == null) return DateTime(0); + DateTime lastSeen = DateTime.fromMillisecondsSinceEpoch(lastSeenDate); + return lastSeen; + } } diff --git a/filcnaplo/lib/database/store.dart b/filcnaplo/lib/database/store.dart index 7e024dd..1046e7e 100644 --- a/filcnaplo/lib/database/store.dart +++ b/filcnaplo/lib/database/store.dart @@ -91,9 +91,13 @@ class UserDatabaseStore { await db.update("user_data", {"group_averages": groupAveragesJson}, where: "id = ?", whereArgs: [userId]); } - Future storeSubjectLessonCount(SubjectLessonCount lessonCount, {required String userId}) async { String lessonCountJson = jsonEncode(lessonCount.toMap()); await db.update("user_data", {"subject_lesson_count": lessonCountJson}, where: "id = ?", whereArgs: [userId]); } + + Future storeLastSeenGrade(DateTime date, {required String userId}) async { + int lastSeenDate = date.millisecondsSinceEpoch; + await db.update("user_data", {"last_seen_grade": lastSeenDate}, where: "id = ?", whereArgs: [userId]); + } } diff --git a/filcnaplo/lib/models/settings.dart b/filcnaplo/lib/models/settings.dart index 343fa48..ecb1504 100644 --- a/filcnaplo/lib/models/settings.dart +++ b/filcnaplo/lib/models/settings.dart @@ -55,6 +55,7 @@ class SettingsProvider extends ChangeNotifier { bool _presentationMode; bool _bellDelayEnabled; int _bellDelay; + bool _gradeOpeningFun; SettingsProvider({ required String language, @@ -80,6 +81,7 @@ class SettingsProvider extends ChangeNotifier { required bool presentationMode, required bool bellDelayEnabled, required int bellDelay, + required bool gradeOpeningFun, }) : _language = language, _startPage = startPage, _rounding = rounding, @@ -102,7 +104,8 @@ class SettingsProvider extends ChangeNotifier { _goodStudent = goodStudent, _presentationMode = presentationMode, _bellDelayEnabled = bellDelayEnabled, - _bellDelay = bellDelay; + _bellDelay = bellDelay, + _gradeOpeningFun = gradeOpeningFun; factory SettingsProvider.fromMap(Map map) { Map? configMap; @@ -143,6 +146,7 @@ class SettingsProvider extends ChangeNotifier { presentationMode: map["presentation_mode"] == 1, bellDelayEnabled: map["bell_delay_enabled"] == 1, bellDelay: map["bell_delay"], + gradeOpeningFun: map["grade_opening_fun"] == 1, ); } @@ -174,6 +178,7 @@ class SettingsProvider extends ChangeNotifier { "presentation_mode": _presentationMode ? 1 : 0, "bell_delay_enabled": _bellDelayEnabled ? 1 : 0, "bell_delay": _bellDelay, + "grade_opening_fun": _gradeOpeningFun ? 1 : 0, }; } @@ -208,6 +213,7 @@ class SettingsProvider extends ChangeNotifier { presentationMode: false, bellDelayEnabled: false, bellDelay: 0, + gradeOpeningFun: true, ); } @@ -235,6 +241,7 @@ class SettingsProvider extends ChangeNotifier { bool get presentationMode => _presentationMode; bool get bellDelayEnabled => _bellDelayEnabled; int get bellDelay => _bellDelay; + bool get gradeOpeningFun => _gradeOpeningFun; Future update( BuildContext context, { @@ -263,6 +270,7 @@ class SettingsProvider extends ChangeNotifier { bool? presentationMode, bool? bellDelayEnabled, int? bellDelay, + bool? gradeOpeningFun, }) async { if (language != null && language != _language) _language = language; if (startPage != null && startPage != _startPage) _startPage = startPage; @@ -289,6 +297,7 @@ class SettingsProvider extends ChangeNotifier { if (presentationMode != null && presentationMode != _presentationMode) _presentationMode = presentationMode; if (bellDelay != null && bellDelay != _bellDelay) _bellDelay = bellDelay; if (bellDelayEnabled != null && bellDelayEnabled != _bellDelayEnabled) _bellDelayEnabled = bellDelayEnabled; + if (gradeOpeningFun != null && gradeOpeningFun != _gradeOpeningFun) _gradeOpeningFun = gradeOpeningFun; database ??= Provider.of(context, listen: false); if (store) await database.store.storeSettings(this); diff --git a/filcnaplo_mobile_ui b/filcnaplo_mobile_ui index 189ea69..a417359 160000 --- a/filcnaplo_mobile_ui +++ b/filcnaplo_mobile_ui @@ -1 +1 @@ -Subproject commit 189ea69afc7c13cc71852b94a893f1024dd355ee +Subproject commit a417359d1aa9405e6a6ae80a96c1c1451f390323