diff --git a/packages/uni_app/lib/main.dart b/packages/uni_app/lib/main.dart index 203605230..9fba620d2 100644 --- a/packages/uni_app/lib/main.dart +++ b/packages/uni_app/lib/main.dart @@ -20,7 +20,11 @@ import 'package:uni/controller/local_storage/preferences_controller.dart'; import 'package:uni/generated/l10n.dart'; import 'package:uni/model/entities/course_units/course_unit.dart'; import 'package:uni/model/entities/course_units/sheet.dart'; +import 'package:uni/model/providers/mocks/mock_exam_provider.dart'; +import 'package:uni/model/providers/mocks/mock_lecture_provider.dart'; import 'package:uni/model/providers/plausible/plausible_provider.dart'; +import 'package:uni/model/providers/riverpod/exam_provider.dart'; +import 'package:uni/model/providers/riverpod/lecture_provider.dart'; import 'package:uni/model/providers/riverpod/profile_provider.dart'; import 'package:uni/model/providers/riverpod/theme_provider.dart'; import 'package:uni/utils/navigation_items.dart'; @@ -110,6 +114,9 @@ Future main() async { const route = '/splash'; + const useMockSchedule = bool.fromEnvironment('MOCK_SCHEDULE'); + const useMockExams = bool.fromEnvironment('MOCK_EXAMS'); + await SentryFlutter.init( (options) { options.dsn = @@ -118,6 +125,11 @@ Future main() async { appRunner: () { runApp( ProviderScope( + overrides: [ + if (useMockSchedule) + lectureProvider.overrideWith(MockLectureNotifier.new), + if (useMockExams) examProvider.overrideWith(MockExamNotifier.new), + ], child: PlausibleProvider( plausible: plausible, child: const Application(route), diff --git a/packages/uni_app/lib/model/providers/mocks/mock_exam_provider.dart b/packages/uni_app/lib/model/providers/mocks/mock_exam_provider.dart new file mode 100644 index 000000000..1f1a2fddd --- /dev/null +++ b/packages/uni_app/lib/model/providers/mocks/mock_exam_provider.dart @@ -0,0 +1,63 @@ +import 'package:uni/model/entities/exam.dart'; +import 'package:uni/model/providers/riverpod/exam_provider.dart'; + +class MockExamNotifier extends ExamNotifier { + @override + Future?> build() async { + return _generateMockExams(); + } + + @override + Future> loadFromStorage() async { + return _generateMockExams(); + } + + @override + Future?> loadFromRemote() async { + return _generateMockExams(); + } + + List _generateMockExams() { + final now = DateTime.now(); + final monday = now.subtract(Duration(days: now.weekday - 1)); + final exams = []; + + final subjects = ['ES', 'BD', 'SO', 'ME', 'RCOM']; + final subjectNames = [ + 'Engenharia de Software', + 'Bases de Dados', + 'Sistemas Operativos', + 'Métodos Estatísticos', + 'Redes de Computadores', + ]; + + final examDays = [ + monday.add(const Duration(days: 2)), + monday.add(const Duration(days: 4)), + monday.add(const Duration(days: 8)), + monday.add(const Duration(days: 10)), + monday.add(const Duration(days: 14)), + ]; + + for (var i = 0; i < 5; i++) { + final examDay = examDays[i]; + final start = DateTime(examDay.year, examDay.month, examDay.day, 14); + final finish = DateTime(examDay.year, examDay.month, examDay.day, 16, 30); + + exams.add( + Exam( + 'exam_mock_$i', + start, + finish, + subjects[i], + subjectNames[i], + ['B112', 'B113'], + 'EN', + 'occurr_$i', + ), + ); + } + + return exams; + } +} diff --git a/packages/uni_app/lib/model/providers/mocks/mock_lecture_provider.dart b/packages/uni_app/lib/model/providers/mocks/mock_lecture_provider.dart new file mode 100644 index 000000000..49655f79f --- /dev/null +++ b/packages/uni_app/lib/model/providers/mocks/mock_lecture_provider.dart @@ -0,0 +1,122 @@ +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:uni/model/entities/lecture.dart'; +import 'package:uni/model/providers/riverpod/lecture_provider.dart'; + +class MockLectureNotifier extends LectureNotifier { + @override + Future?> build() async { + return _generateMockLectures(); + } + + @override + Future> loadFromStorage() async { + return _generateMockLectures(); + } + + @override + Future?> loadFromRemote() async { + return _generateMockLectures(); + } + + List _generateMockLectures() { + final now = DateTime.now(); + final monday = now.subtract(Duration(days: now.weekday - 1)); + final lectures = []; + + final subjects = ['ES', 'BD', 'SO', 'ME', 'RCOMP']; + final subjectNames = [ + 'Engenharia de Software', + 'Bases de Dados', + 'Sistemas Operativos', + 'Métodos Estatísticos', + 'Redes de Computadores', + ]; + final teachers = ['AAM', 'SN', 'JFS', 'HLC', 'RM']; + final teacherNames = [ + 'Ademar Aguiar', + 'Sérgio Nunes', + 'José Silva', + 'Henrique Lopes Cardoso', + 'Rui Maranhão', + ]; + + for (var weekOffset = -1; weekOffset <= 4; weekOffset++) { + final baseMonday = monday.add(Duration(days: 7 * weekOffset)); + + for (var i = 0; i < 5; i++) { + final currentDay = baseMonday.add(Duration(days: i)); + final subjectIdx = i % subjects.length; + final subjectIdx2 = (i + 1) % subjects.length; + + final startTime1 = DateTime( + currentDay.year, + currentDay.month, + currentDay.day, + 8, + 30, + ); + final endTime1 = DateTime( + currentDay.year, + currentDay.month, + currentDay.day, + 10, + 30, + ); + + final startTime2 = DateTime( + currentDay.year, + currentDay.month, + currentDay.day, + 10, + 30, + ); + final endTime2 = DateTime( + currentDay.year, + currentDay.month, + currentDay.day, + 12, + 30, + ); + + lectures + ..add( + Lecture( + subjects[subjectIdx], + subjectNames[subjectIdx], + 'T', + startTime1, + endTime1, + 'B112', + teachers[subjectIdx], + teacherNames[subjectIdx], + 12345 + i, + '3LEIC01', + 1000 + i + (weekOffset * 100), + ), + ) + ..add( + Lecture( + subjects[subjectIdx2], + subjectNames[subjectIdx2], + 'TP', + startTime2, + endTime2, + 'B315', + teachers[subjectIdx2], + teacherNames[subjectIdx2], + 23456 + i, + '3LEIC01', + 2000 + i + (weekOffset * 100), + ), + ); + } + } + + return lectures; + } +} + +final mockLectureProvider = + AsyncNotifierProvider?>( + MockLectureNotifier.new, + );