From fc9907f33d3b3da4c9090d8a2209b3d8701a4632 Mon Sep 17 00:00:00 2001 From: Armand <4831c0@proton.me> Date: Sat, 28 Feb 2026 07:47:33 +0100 Subject: [PATCH] firka: refactor file structure --- .../api/client/kreta_client.dart | 24 +- .../api/client/kreta_stream.dart | 12 +- .../client/live_activity_backend_client.dart | 2 +- firka/lib/{helpers => }/api/consts.dart | 2 +- .../{helpers => }/api/exceptions/token.dart | 0 .../{helpers => }/api/model/all_lessons.dart | 0 .../{helpers => }/api/model/class_group.dart | 2 +- .../lib/{helpers => }/api/model/generic.dart | 0 firka/lib/{helpers => }/api/model/grade.dart | 4 +- .../lib/{helpers => }/api/model/guardian.dart | 0 .../lib/{helpers => }/api/model/homework.dart | 2 +- .../{helpers => }/api/model/institution.dart | 0 .../{helpers => }/api/model/notice_board.dart | 2 +- .../lib/{helpers => }/api/model/omission.dart | 4 +- .../lib/{helpers => }/api/model/student.dart | 6 +- .../lib/{helpers => }/api/model/subject.dart | 0 firka/lib/{helpers => }/api/model/test.dart | 2 +- .../{helpers => }/api/model/timetable.dart | 4 +- .../{helpers => }/api/resp/token_grant.dart | 0 firka/lib/{helpers => }/api/token_grant.dart | 8 +- firka/lib/app/app_state.dart | 66 + firka/lib/app/initialization.dart | 399 ++++ firka/lib/app/initialization_screen.dart | 180 ++ .../lib/{helpers => core}/average_helper.dart | 2 +- firka/lib/{helpers => core}/debug_helper.dart | 0 firka/lib/{helpers => core}/extensions.dart | 6 +- firka/lib/{helpers => core}/firka_bundle.dart | 2 +- firka/lib/{helpers => core}/icon_helper.dart | 0 .../{helpers => core}/image_preloader.dart | 2 +- firka/lib/{helpers => core}/json_helper.dart | 0 .../{helpers => core}/profile_picture.dart | 2 +- firka/lib/{helpers => core}/settings.dart | 11 +- .../{helpers => core/state}/firka_state.dart | 2 +- .../state}/update_notifier.dart | 0 .../{helpers => core}/swear_generator.dart | 0 .../db => data}/ios_widget_helper.dart | 4 +- .../models/app_settings_model.dart | 0 .../models/generic_cache_model.dart | 0 .../models/homework_cache_model.dart | 4 +- .../models/timetable_cache_model.dart | 4 +- .../db => data}/models/token_model.dart | 7 +- firka/lib/{helpers/db => data}/util.dart | 2 +- firka/lib/{helpers/db => data}/widget.dart | 16 +- .../db/models/app_settings_model.g.dart | 843 -------- .../db/models/generic_cache_model.g.dart | 505 ----- .../db/models/homework_cache_model.g.dart | 1109 ----------- .../db/models/timetable_cache_model.g.dart | 552 ------ .../lib/helpers/db/models/token_model.g.dart | 1709 ----------------- firka/lib/main.dart | 635 +----- .../active_account_helper.dart | 2 +- .../live_activity_manager.dart | 2 +- .../live_activity_service.dart | 20 +- .../watch_sync_helper.dart | 8 +- .../components}/common_bottom_sheets.dart | 38 +- .../ui => ui/components}/firka_button.dart | 0 .../ui => ui/components}/firka_card.dart | 6 +- .../ui => ui/components}/firka_shadow.dart | 4 +- .../{helpers/ui => ui/components}/grade.dart | 6 +- .../ui => ui/components}/grade_helpers.dart | 10 +- .../lib/ui/phone/pages/error/error_page.dart | 8 +- firka/lib/ui/phone/pages/extras/extras.dart | 18 +- .../lib/ui/phone/pages/extras/main_error.dart | 2 +- .../ui/phone/pages/extras/main_reauth.dart | 6 +- .../ui/phone/pages/extras/main_wear_pair.dart | 10 +- .../ui/phone/pages/extras/reauth_toast.dart | 6 +- .../lib/ui/phone/pages/home/home_grades.dart | 34 +- .../phone/pages/home/home_grades_subject.dart | 22 +- firka/lib/ui/phone/pages/home/home_main.dart | 36 +- .../lib/ui/phone/pages/home/home_subpage.dart | 6 +- .../ui/phone/pages/home/home_timetable.dart | 28 +- .../phone/pages/home/home_timetable_mo.dart | 26 +- .../ui/phone/screens/debug/debug_screen.dart | 18 +- .../ui/phone/screens/home/beta_screen.dart | 12 +- .../phone/screens/home/home_bottom_nav.dart | 1 - .../ui/phone/screens/home/home_screen.dart | 36 +- .../full_privacy_policy_screen.dart | 8 +- .../live_activity_consent_screen.dart | 12 +- .../ui/phone/screens/login/login_screen.dart | 12 +- .../phone/screens/message/message_screen.dart | 12 +- .../screens/settings/settings_screen.dart | 31 +- .../lib/ui/phone/widgets/bottom_nav_icon.dart | 4 +- .../lib/ui/phone/widgets/bottom_tt_icon.dart | 4 +- firka/lib/ui/phone/widgets/bubble_test.dart | 4 +- firka/lib/ui/phone/widgets/grade_chart.dart | 6 +- .../lib/ui/phone/widgets/home_bottom_nav.dart | 1 - .../widgets/home_main_starting_soon.dart | 8 +- .../ui/phone/widgets/home_main_welcome.dart | 10 +- firka/lib/ui/phone/widgets/homework.dart | 14 +- .../lib/ui/phone/widgets/info_board_item.dart | 6 +- firka/lib/ui/phone/widgets/lesson.dart | 22 +- firka/lib/ui/phone/widgets/lesson_big.dart | 14 +- firka/lib/ui/phone/widgets/lesson_small.dart | 10 +- firka/lib/ui/phone/widgets/login_webview.dart | 25 +- .../ui/phone/widgets/notice_board_item.dart | 4 +- firka/lib/ui/phone/widgets/tt_day.dart | 12 +- .../lib/ui/{widget => shared}/class_icon.dart | 4 +- .../ui/{widget => shared}/counter_digit.dart | 2 +- .../{widget => shared}/delayed_spinner.dart | 4 +- .../lib/ui/{widget => shared}/firka_icon.dart | 0 .../{widget => shared}/grade_small_card.dart | 12 +- firka/lib/ui/{model => theme}/style.dart | 0 firka/scripts/codegen.dart | 2 +- 102 files changed, 1025 insertions(+), 5719 deletions(-) rename firka/lib/{helpers => }/api/client/kreta_client.dart (97%) rename firka/lib/{helpers => }/api/client/kreta_stream.dart (92%) rename firka/lib/{helpers => }/api/client/live_activity_backend_client.dart (99%) rename firka/lib/{helpers => }/api/consts.dart (99%) rename firka/lib/{helpers => }/api/exceptions/token.dart (100%) rename firka/lib/{helpers => }/api/model/all_lessons.dart (100%) rename firka/lib/{helpers => }/api/model/class_group.dart (98%) rename firka/lib/{helpers => }/api/model/generic.dart (100%) rename firka/lib/{helpers => }/api/model/grade.dart (96%) rename firka/lib/{helpers => }/api/model/guardian.dart (100%) rename firka/lib/{helpers => }/api/model/homework.dart (97%) rename firka/lib/{helpers => }/api/model/institution.dart (100%) rename firka/lib/{helpers => }/api/model/notice_board.dart (97%) rename firka/lib/{helpers => }/api/model/omission.dart (95%) rename firka/lib/{helpers => }/api/model/student.dart (95%) rename firka/lib/{helpers => }/api/model/subject.dart (100%) rename firka/lib/{helpers => }/api/model/test.dart (96%) rename firka/lib/{helpers => }/api/model/timetable.dart (98%) rename firka/lib/{helpers => }/api/resp/token_grant.dart (100%) rename firka/lib/{helpers => }/api/token_grant.dart (94%) create mode 100644 firka/lib/app/app_state.dart create mode 100644 firka/lib/app/initialization.dart create mode 100644 firka/lib/app/initialization_screen.dart rename firka/lib/{helpers => core}/average_helper.dart (90%) rename firka/lib/{helpers => core}/debug_helper.dart (100%) rename firka/lib/{helpers => core}/extensions.dart (98%) rename firka/lib/{helpers => core}/firka_bundle.dart (97%) rename firka/lib/{helpers => core}/icon_helper.dart (100%) rename firka/lib/{helpers => core}/image_preloader.dart (99%) rename firka/lib/{helpers => core}/json_helper.dart (100%) rename firka/lib/{helpers => core}/profile_picture.dart (94%) rename firka/lib/{helpers => core}/settings.dart (98%) rename firka/lib/{helpers => core/state}/firka_state.dart (93%) rename firka/lib/{helpers => core/state}/update_notifier.dart (100%) rename firka/lib/{helpers => core}/swear_generator.dart (100%) rename firka/lib/{helpers/db => data}/ios_widget_helper.dart (98%) rename firka/lib/{helpers/db => data}/models/app_settings_model.dart (100%) rename firka/lib/{helpers/db => data}/models/generic_cache_model.dart (100%) rename firka/lib/{helpers/db => data}/models/homework_cache_model.dart (94%) rename firka/lib/{helpers/db => data}/models/timetable_cache_model.dart (89%) rename firka/lib/{helpers/db => data}/models/token_model.dart (95%) rename firka/lib/{helpers/db => data}/util.dart (92%) rename firka/lib/{helpers/db => data}/widget.dart (95%) delete mode 100644 firka/lib/helpers/db/models/app_settings_model.g.dart delete mode 100644 firka/lib/helpers/db/models/generic_cache_model.g.dart delete mode 100644 firka/lib/helpers/db/models/homework_cache_model.g.dart delete mode 100644 firka/lib/helpers/db/models/timetable_cache_model.g.dart delete mode 100644 firka/lib/helpers/db/models/token_model.g.dart rename firka/lib/{helpers => services}/active_account_helper.dart (94%) rename firka/lib/{helpers => services}/live_activity_manager.dart (99%) rename firka/lib/{helpers => services}/live_activity_service.dart (99%) rename firka/lib/{helpers => services}/watch_sync_helper.dart (99%) rename firka/lib/{helpers/ui => ui/components}/common_bottom_sheets.dart (97%) rename firka/lib/{helpers/ui => ui/components}/firka_button.dart (100%) rename firka/lib/{helpers/ui => ui/components}/firka_card.dart (96%) rename firka/lib/{helpers/ui => ui/components}/firka_shadow.dart (91%) rename firka/lib/{helpers/ui => ui/components}/grade.dart (95%) rename firka/lib/{helpers/ui => ui/components}/grade_helpers.dart (86%) delete mode 100644 firka/lib/ui/phone/screens/home/home_bottom_nav.dart delete mode 100644 firka/lib/ui/phone/widgets/home_bottom_nav.dart rename firka/lib/ui/{widget => shared}/class_icon.dart (88%) rename firka/lib/ui/{widget => shared}/counter_digit.dart (92%) rename firka/lib/ui/{widget => shared}/delayed_spinner.dart (89%) rename firka/lib/ui/{widget => shared}/firka_icon.dart (100%) rename firka/lib/ui/{widget => shared}/grade_small_card.dart (84%) rename firka/lib/ui/{model => theme}/style.dart (100%) diff --git a/firka/lib/helpers/api/client/kreta_client.dart b/firka/lib/api/client/kreta_client.dart similarity index 97% rename from firka/lib/helpers/api/client/kreta_client.dart rename to firka/lib/api/client/kreta_client.dart index a0939e0..f21a662 100644 --- a/firka/lib/helpers/api/client/kreta_client.dart +++ b/firka/lib/api/client/kreta_client.dart @@ -3,21 +3,21 @@ import 'dart:convert'; import 'dart:math'; import 'package:dio/dio.dart'; -import 'package:firka/helpers/api/model/all_lessons.dart'; -import 'package:firka/helpers/api/model/class_group.dart'; -import 'package:firka/helpers/api/model/homework.dart'; -import 'package:firka/helpers/api/model/timetable.dart'; -import 'package:firka/helpers/db/models/generic_cache_model.dart'; -import 'package:firka/helpers/db/models/timetable_cache_model.dart'; +import 'package:firka/api/model/all_lessons.dart'; +import 'package:firka/api/model/class_group.dart'; +import 'package:firka/api/model/homework.dart'; +import 'package:firka/api/model/timetable.dart'; +import 'package:firka/data/models/generic_cache_model.dart'; +import 'package:firka/data/models/timetable_cache_model.dart'; import 'package:intl/intl.dart'; import 'package:isar_community/isar.dart'; -import '../../../main.dart'; -import '../../db/models/token_model.dart'; -import '../../db/util.dart'; -import '../../debug_helper.dart'; -import '../../active_account_helper.dart'; -import '../../watch_sync_helper.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/data/models/token_model.dart'; +import 'package:firka/data/util.dart'; +import 'package:firka/core/debug_helper.dart'; +import 'package:firka/services/active_account_helper.dart'; +import 'package:firka/services/watch_sync_helper.dart'; import '../consts.dart'; import '../exceptions/token.dart'; import '../model/grade.dart'; diff --git a/firka/lib/helpers/api/client/kreta_stream.dart b/firka/lib/api/client/kreta_stream.dart similarity index 92% rename from firka/lib/helpers/api/client/kreta_stream.dart rename to firka/lib/api/client/kreta_stream.dart index b0ba063..d73cef6 100644 --- a/firka/lib/helpers/api/client/kreta_stream.dart +++ b/firka/lib/api/client/kreta_stream.dart @@ -1,9 +1,9 @@ -import 'package:firka/helpers/api/model/class_group.dart'; -import 'package:firka/helpers/api/model/homework.dart'; -import 'package:firka/helpers/api/model/notice_board.dart'; -import 'package:firka/helpers/api/model/omission.dart'; -import 'package:firka/helpers/api/model/test.dart'; -import 'package:firka/helpers/api/model/timetable.dart'; +import 'package:firka/api/model/class_group.dart'; +import 'package:firka/api/model/homework.dart'; +import 'package:firka/api/model/notice_board.dart'; +import 'package:firka/api/model/omission.dart'; +import 'package:firka/api/model/test.dart'; +import 'package:firka/api/model/timetable.dart'; import '../model/grade.dart'; import '../model/student.dart'; diff --git a/firka/lib/helpers/api/client/live_activity_backend_client.dart b/firka/lib/api/client/live_activity_backend_client.dart similarity index 99% rename from firka/lib/helpers/api/client/live_activity_backend_client.dart rename to firka/lib/api/client/live_activity_backend_client.dart index 4541894..adcacc4 100644 --- a/firka/lib/helpers/api/client/live_activity_backend_client.dart +++ b/firka/lib/api/client/live_activity_backend_client.dart @@ -1,5 +1,5 @@ import 'package:dio/dio.dart'; -import 'package:firka/helpers/api/model/timetable.dart'; +import 'package:firka/api/model/timetable.dart'; import 'package:logging/logging.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; diff --git a/firka/lib/helpers/api/consts.dart b/firka/lib/api/consts.dart similarity index 99% rename from firka/lib/helpers/api/consts.dart rename to firka/lib/api/consts.dart index 36c272d..42dea13 100644 --- a/firka/lib/helpers/api/consts.dart +++ b/firka/lib/api/consts.dart @@ -4,7 +4,7 @@ import 'dart:math'; import 'dart:typed_data'; import 'package:crypto/crypto.dart'; -import 'package:firka/main.dart'; +import 'package:firka/app/app_state.dart'; class Constants { static String get clientId { diff --git a/firka/lib/helpers/api/exceptions/token.dart b/firka/lib/api/exceptions/token.dart similarity index 100% rename from firka/lib/helpers/api/exceptions/token.dart rename to firka/lib/api/exceptions/token.dart diff --git a/firka/lib/helpers/api/model/all_lessons.dart b/firka/lib/api/model/all_lessons.dart similarity index 100% rename from firka/lib/helpers/api/model/all_lessons.dart rename to firka/lib/api/model/all_lessons.dart diff --git a/firka/lib/helpers/api/model/class_group.dart b/firka/lib/api/model/class_group.dart similarity index 98% rename from firka/lib/helpers/api/model/class_group.dart rename to firka/lib/api/model/class_group.dart index 44e1d4d..f2cc43f 100644 --- a/firka/lib/helpers/api/model/class_group.dart +++ b/firka/lib/api/model/class_group.dart @@ -1,4 +1,4 @@ -import 'package:firka/helpers/api/model/generic.dart'; +import 'package:firka/api/model/generic.dart'; class ClassGroup { final String uid; diff --git a/firka/lib/helpers/api/model/generic.dart b/firka/lib/api/model/generic.dart similarity index 100% rename from firka/lib/helpers/api/model/generic.dart rename to firka/lib/api/model/generic.dart diff --git a/firka/lib/helpers/api/model/grade.dart b/firka/lib/api/model/grade.dart similarity index 96% rename from firka/lib/helpers/api/model/grade.dart rename to firka/lib/api/model/grade.dart index c2c145b..4d11d00 100644 --- a/firka/lib/helpers/api/model/grade.dart +++ b/firka/lib/api/model/grade.dart @@ -1,5 +1,5 @@ -import 'package:firka/helpers/api/model/generic.dart'; -import 'package:firka/helpers/api/model/subject.dart'; +import 'package:firka/api/model/generic.dart'; +import 'package:firka/api/model/subject.dart'; class Grade { final String uid; diff --git a/firka/lib/helpers/api/model/guardian.dart b/firka/lib/api/model/guardian.dart similarity index 100% rename from firka/lib/helpers/api/model/guardian.dart rename to firka/lib/api/model/guardian.dart diff --git a/firka/lib/helpers/api/model/homework.dart b/firka/lib/api/model/homework.dart similarity index 97% rename from firka/lib/helpers/api/model/homework.dart rename to firka/lib/api/model/homework.dart index f665778..0bb89fa 100644 --- a/firka/lib/helpers/api/model/homework.dart +++ b/firka/lib/api/model/homework.dart @@ -1,4 +1,4 @@ -import 'package:firka/helpers/api/model/subject.dart'; +import 'package:firka/api/model/subject.dart'; import 'generic.dart'; diff --git a/firka/lib/helpers/api/model/institution.dart b/firka/lib/api/model/institution.dart similarity index 100% rename from firka/lib/helpers/api/model/institution.dart rename to firka/lib/api/model/institution.dart diff --git a/firka/lib/helpers/api/model/notice_board.dart b/firka/lib/api/model/notice_board.dart similarity index 97% rename from firka/lib/helpers/api/model/notice_board.dart rename to firka/lib/api/model/notice_board.dart index 908ebfa..78738ef 100644 --- a/firka/lib/helpers/api/model/notice_board.dart +++ b/firka/lib/api/model/notice_board.dart @@ -1,4 +1,4 @@ -import 'package:firka/helpers/api/model/generic.dart'; +import 'package:firka/api/model/generic.dart'; class NoticeBoardItem { final String uid; diff --git a/firka/lib/helpers/api/model/omission.dart b/firka/lib/api/model/omission.dart similarity index 95% rename from firka/lib/helpers/api/model/omission.dart rename to firka/lib/api/model/omission.dart index 0c44015..fc17c0c 100644 --- a/firka/lib/helpers/api/model/omission.dart +++ b/firka/lib/api/model/omission.dart @@ -1,5 +1,5 @@ -import 'package:firka/helpers/api/model/generic.dart'; -import 'package:firka/helpers/api/model/subject.dart'; +import 'package:firka/api/model/generic.dart'; +import 'package:firka/api/model/subject.dart'; class Omission { final String uid; diff --git a/firka/lib/helpers/api/model/student.dart b/firka/lib/api/model/student.dart similarity index 95% rename from firka/lib/helpers/api/model/student.dart rename to firka/lib/api/model/student.dart index f2c6742..4d7d2e5 100644 --- a/firka/lib/helpers/api/model/student.dart +++ b/firka/lib/api/model/student.dart @@ -1,6 +1,6 @@ -import 'package:firka/helpers/api/model/guardian.dart'; -import 'package:firka/helpers/api/model/institution.dart'; -import 'package:firka/helpers/json_helper.dart'; +import 'package:firka/api/model/guardian.dart'; +import 'package:firka/api/model/institution.dart'; +import 'package:firka/core/json_helper.dart'; import 'package:intl/intl.dart'; class Student { diff --git a/firka/lib/helpers/api/model/subject.dart b/firka/lib/api/model/subject.dart similarity index 100% rename from firka/lib/helpers/api/model/subject.dart rename to firka/lib/api/model/subject.dart diff --git a/firka/lib/helpers/api/model/test.dart b/firka/lib/api/model/test.dart similarity index 96% rename from firka/lib/helpers/api/model/test.dart rename to firka/lib/api/model/test.dart index b28f588..353af77 100644 --- a/firka/lib/helpers/api/model/test.dart +++ b/firka/lib/api/model/test.dart @@ -1,4 +1,4 @@ -import 'package:firka/helpers/api/model/subject.dart'; +import 'package:firka/api/model/subject.dart'; import 'generic.dart'; diff --git a/firka/lib/helpers/api/model/timetable.dart b/firka/lib/api/model/timetable.dart similarity index 98% rename from firka/lib/helpers/api/model/timetable.dart rename to firka/lib/api/model/timetable.dart index 6827c11..401ad5c 100644 --- a/firka/lib/helpers/api/model/timetable.dart +++ b/firka/lib/api/model/timetable.dart @@ -1,5 +1,5 @@ -import 'package:firka/helpers/api/model/generic.dart'; -import 'package:firka/helpers/api/model/subject.dart'; +import 'package:firka/api/model/generic.dart'; +import 'package:firka/api/model/subject.dart'; class Lesson { final String uid; diff --git a/firka/lib/helpers/api/resp/token_grant.dart b/firka/lib/api/resp/token_grant.dart similarity index 100% rename from firka/lib/helpers/api/resp/token_grant.dart rename to firka/lib/api/resp/token_grant.dart diff --git a/firka/lib/helpers/api/token_grant.dart b/firka/lib/api/token_grant.dart similarity index 94% rename from firka/lib/helpers/api/token_grant.dart rename to firka/lib/api/token_grant.dart index 9746e94..92a6797 100644 --- a/firka/lib/helpers/api/token_grant.dart +++ b/firka/lib/api/token_grant.dart @@ -1,9 +1,9 @@ import 'package:dio/dio.dart'; -import 'package:firka/helpers/api/exceptions/token.dart'; -import 'package:firka/helpers/api/resp/token_grant.dart'; -import 'package:firka/helpers/db/models/token_model.dart'; +import 'package:firka/api/exceptions/token.dart'; +import 'package:firka/api/resp/token_grant.dart'; +import 'package:firka/data/models/token_model.dart'; -import '../../main.dart'; +import 'package:firka/app/app_state.dart'; import 'consts.dart'; Future getAccessToken(String code) async { diff --git a/firka/lib/app/app_state.dart b/firka/lib/app/app_state.dart new file mode 100644 index 0000000..86dcff7 --- /dev/null +++ b/firka/lib/app/app_state.dart @@ -0,0 +1,66 @@ +import 'dart:typed_data'; +import 'package:dio/dio.dart'; +import 'package:flutter/material.dart'; +import 'package:firka/api/client/kreta_client.dart'; +import 'package:firka/data/models/token_model.dart'; +import 'package:firka/core/state/update_notifier.dart'; +import 'package:firka/core/settings.dart'; +import 'package:firka/l10n/app_localizations.dart'; +import 'package:logging/logging.dart'; +import 'package:package_info_plus/package_info_plus.dart'; +import 'package:isar_community/isar.dart'; +import 'dart:io'; + +late final Logger logger; + +final GlobalKey navigatorKey = GlobalKey(); +late AppInitialization initData; +bool initDone = false; + +final dio = Dio(); +final isBeta = true; + +final ValueNotifier isLightMode = ValueNotifier(true); +final UpdateNotifier globalUpdate = UpdateNotifier(); + +class DeviceInfo { + String model; + + String versionRelease; + String versionSdkInt; + + DeviceInfo(this.model, this.versionRelease, this.versionSdkInt); + + @override + String toString() { + return "DeviceInfo(model = \"$model\", versionRelease = \"$versionRelease\"" + ", versionSdkInt = \"$versionSdkInt\""; + } +} + +class AppInitialization { + final Isar isar; + final Directory appDir; + final PackageInfo packageInfo; + final DeviceInfo devInfo; + late KretaClient client; + List tokens; + bool hasWatchListener = false; + Uint8List? profilePicture; + SettingsStore settings; + UpdateNotifier settingsUpdateNotifier = UpdateNotifier(); + UpdateNotifier profilePictureUpdateNotifier = UpdateNotifier(); + AppLocalizations l10n; + final GlobalKey navigatorKey; + + AppInitialization({ + required this.isar, + required this.appDir, + required this.devInfo, + required this.packageInfo, + required this.tokens, + required this.settings, + required this.l10n, + required this.navigatorKey, + }); +} diff --git a/firka/lib/app/initialization.dart b/firka/lib/app/initialization.dart new file mode 100644 index 0000000..a8db8d6 --- /dev/null +++ b/firka/lib/app/initialization.dart @@ -0,0 +1,399 @@ +import 'dart:async'; +import 'dart:io'; +import 'dart:ui' as ui; +import 'package:flutter/foundation.dart'; +import 'package:flutter/scheduler.dart'; +import 'package:flutter/services.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/services/active_account_helper.dart'; +import 'package:firka/api/client/kreta_client.dart'; +import 'package:firka/data/models/app_settings_model.dart'; +import 'package:firka/data/models/generic_cache_model.dart'; +import 'package:firka/data/models/homework_cache_model.dart'; +import 'package:firka/data/models/timetable_cache_model.dart'; +import 'package:firka/data/models/token_model.dart'; +import 'package:firka/services/live_activity_service.dart'; +import 'package:firka/core/settings.dart'; +import 'package:firka/services/watch_sync_helper.dart'; +import 'package:firka/l10n/app_localizations_de.dart'; +import 'package:firka/l10n/app_localizations_en.dart'; +import 'package:firka/l10n/app_localizations_hu.dart'; +import 'package:firka/core/swear_generator.dart'; +import 'package:firka/ui/theme/style.dart'; +import 'package:intl/intl.dart'; +import 'package:logging/logging.dart'; +import 'package:path/path.dart' as p; +import 'package:isar_community/isar.dart'; +import 'package:package_info_plus/package_info_plus.dart'; +import 'package:path_provider/path_provider.dart'; + +Isar? isarInit; + +Future initDB() async { + if (isarInit != null) return isarInit!; + final dir = await getApplicationDocumentsDirectory(); + + isarInit = await Isar.open( + [ + TokenModelSchema, + GenericCacheModelSchema, + TimetableCacheModelSchema, + HomeworkCacheModelSchema, + AppSettingsModelSchema, + HomeworkDoneModelSchema, + ], + inspector: true, + directory: dir.path, + ); + + return isarInit!; +} + +Future initLang(AppInitialization data) async { + String? languageCode; + + switch ((data.settings.group("settings").subGroup("application")["language"] + as SettingsItemsRadio) + .activeIndex) { + case 1: // hu + data.l10n = AppLocalizationsHu(); + languageCode = 'hu'; + break; + case 2: // en + data.l10n = AppLocalizationsEn(); + languageCode = 'en'; + break; + case 3: // de + data.l10n = AppLocalizationsDe(); + languageCode = 'de'; + break; + default: // auto + switch (ui.PlatformDispatcher.instance.locale.languageCode) { + case 'hu': + data.l10n = AppLocalizationsHu(); + languageCode = 'hu'; + break; + case 'en': + data.l10n = AppLocalizationsEn(); + languageCode = 'en'; + break; + case 'de': + data.l10n = AppLocalizationsDe(); + languageCode = 'de'; + break; + } + break; + } + + if (languageCode != null && Platform.isIOS) { + try { + await LiveActivityService.updateLanguagePreference(languageCode); + } catch (e) { + logger.warning('Failed to update language preference on backend: $e'); + } + + try { + await WatchSyncHelper.sendLanguageToWatch(); + } catch (e) { + logger.warning('Failed to send language to Watch: $e'); + } + } +} + +void initTheme(AppInitialization data) { + final brightness = + SchedulerBinding.instance.platformDispatcher.platformBrightness; + + switch ((data.settings.group("settings").subGroup("customization")["theme"] + as SettingsItemsRadio) + .activeIndex) { + case 1: + appStyle = lightStyle; + isLightMode.value = true; + break; + case 2: + appStyle = darkStyle; + isLightMode.value = false; + break; + default: + if (brightness == Brightness.dark) { + appStyle = darkStyle; + isLightMode.value = false; + } else { + appStyle = lightStyle; + isLightMode.value = true; + } + } +} + +Future _initData(AppInitialization init) async { + await init.settings.load(init.isar.appSettingsModels); + await initLang(init); + initTheme(init); + init.settings = SettingsStore(init.l10n); + await init.settings.load(init.isar.appSettingsModels); + + var dispatcher = SchedulerBinding.instance.platformDispatcher; + + dispatcher.onPlatformBrightnessChanged = () { + globalUpdate.update(); + initTheme(init); + }; + + dispatcher.onLocaleChanged = () { + final languageSetting = + init.settings.group("settings").subGroup("application")["language"] + as SettingsItemsRadio; + final isAutoLanguage = languageSetting.activeIndex == 0; + if (!isAutoLanguage) { + return; + } + + final previousLocale = init.l10n.localeName; + unawaited(() async { + await initLang(init); + final nextLocale = init.l10n.localeName; + if (previousLocale != nextLocale) { + logger.info( + "[Init] System locale changed in auto mode: $previousLocale -> $nextLocale", + ); + } + globalUpdate.update(); + }()); + }; + + resetOldTimeTableCache(init.isar); + resetOldHomeworkCache(init.isar); + + var didRunFreshInstallCleanup = false; + if (Platform.isIOS) { + try { + didRunFreshInstallCleanup = + await WatchSyncHelper.runFreshInstallCleanupIfNeeded(isar: init.isar); + if (didRunFreshInstallCleanup) { + logger.info( + '[Init] Fresh-install cleanup completed; skipping startup iCloud recovery on this launch', + ); + } else { + await WatchSyncHelper.checkAndRecoverFromiCloud( + isar: init.isar, + tokens: init.tokens, + ); + } + } catch (e) { + logger.warning('[Init] iCloud bootstrap/recovery failed: $e'); + } + } + + final allTokens = await init.isar.tokenModels.where().findAll(); + init.tokens = allTokens; + + if (allTokens.isNotEmpty) { + final token = pickActiveToken(tokens: allTokens, settings: init.settings); + if (token == null) { + logger.warning( + "[Init] Tokens disappeared during initialization; skipping client setup", + ); + return; + } + logger.fine("Initializing kréta client as: ${token.studentId}"); + init.client = KretaClient(token, init.isar); + + if (Platform.isIOS) { + final expiryDate = token.expiryDate; + if (expiryDate != null && expiryDate.isAfter(DateTime.now())) { + KretaClient.clearReauthFlag(); + } + + unawaited(() async { + try { + await WatchSyncHelper.saveTokenToiCloud(token); + } catch (e) { + logger.warning('[Init] Failed to sync active token to iCloud: $e'); + } + + try { + await WatchSyncHelper.sendTokenModelToWatch(token); + } catch (e) { + logger.warning('[Init] Failed to sync active token to Watch: $e'); + } + }()); + } + } + + final dataDir = await getApplicationDocumentsDirectory(); + var pfpFile = File(p.join(dataDir.path, "profile.webp")); + + if (await pfpFile.exists()) { + init.profilePicture = await pfpFile.readAsBytes(); + } +} + +Future initializeApp() async { + if (initDone) { + await _initData(initData); + return initData; + } + final isar = await initDB(); + final tokens = await isar.tokenModels.where().findAll(); + + logger.finest('Token count: ${tokens.length}'); + + var devInfoFetched = false; + var devInfo = DeviceInfo("SM-A705FN", "11", "30"); + + try { + if (Platform.isAndroid) { + const channel = MethodChannel("firka.app/main"); + final rawInfo = ((await channel.invokeMethod("get_info")) as String) + .split(";"); + + devInfo = DeviceInfo(rawInfo[0], rawInfo[1], rawInfo[2]); + devInfoFetched = true; + } + } catch (e) { + if (e is Error) { + logger.shout("Error in initializeApp()", e.toString(), e.stackTrace); + } else { + logger.shout("Error in initializeApp()", e.toString()); + } + } + + logger.fine("Fetched device info: ${devInfoFetched ? "yes" : "no"}"); + logger.fine("Using device info: ${devInfo.toString()}"); + + var init = AppInitialization( + isar: isar, + appDir: await getApplicationDocumentsDirectory(), + devInfo: devInfo, + packageInfo: await PackageInfo.fromPlatform(), + tokens: tokens, + settings: SettingsStore(AppLocalizationsHu()), + l10n: AppLocalizationsHu(), + navigatorKey: navigatorKey, + ); + + if (Platform.isIOS) { + try { + await LiveActivityService.initialize().timeout( + const Duration(seconds: 8), + ); + } on TimeoutException catch (e, st) { + logger.warning('LiveActivity init timed out: $e', e, st); + } catch (e, st) { + logger.severe('Failed to initialize LiveActivity: $e', e, st); + } + } + + await _initData(init); + + init.settingsUpdateNotifier.addListener(() { + logger.finest("Settings updated"); + }); + + return init; +} + +Future setupLogging() async { + final jwtPattern = RegExp( + r'([A-Za-z0-9-_]+)\.([A-Za-z0-9-_]+)\.([A-Za-z0-9-_]+)', + ); + final omPattern = RegExp(r'(\d{3})(\d{6})([A-Za-z0-9]?)'); + final refreshTokenPattern = RegExp( + r'"(?=.{21,}$)([A-Z0-9]+-[A-Z0-9_\-.~+]*)"', + ); + + final docs = await getApplicationDocumentsDirectory(); + + Future deleteOldLogFiles() async { + final docs = await getApplicationDocumentsDirectory(); + final dir = Directory(docs.path); + if (!dir.existsSync()) return; + + final now = DateTime.now(); + final cutoff = now.subtract(Duration(days: 30)); + + final logFileRegex = RegExp(r'^(\d{4})_(\d{2})_(\d{2})\.log$'); + + for (final entity in dir.listSync()) { + if (entity is! File) continue; + final name = entity.uri.pathSegments.last; + final m = logFileRegex.firstMatch(name); + if (m == null) continue; + + try { + final y = int.parse(m.group(1)!); + final mo = int.parse(m.group(2)!); + final d = int.parse(m.group(3)!); + final fileDate = DateTime(y, mo, d); + if (fileDate.isBefore( + DateTime(cutoff.year, cutoff.month, cutoff.day), + )) { + logger.info("Removing old log file: $name"); + await entity.delete(); + } + } catch (_) { + // ignore parse/delete errors + } + } + } + + String logFilePathForDate(DateTime dt) { + final fileName = "${DateFormat("yyyy_MM_dd").format(dt)}.log"; + return Directory(docs.path).uri.resolve(fileName).toFilePath(); + } + + File fileForDate(DateTime dt) { + final path = logFilePathForDate(dt); + final file = File(path); + if (!file.existsSync()) file.createSync(recursive: true); + return file; + } + + String censorLog(String msg) { + return msg + .replaceAll(jwtPattern, '***') + .replaceAllMapped(omPattern, (match) { + return "${match.group(1)}******${match.group(3)}"; + }) + .replaceAll(refreshTokenPattern, '"***"'); + } + + hierarchicalLoggingEnabled = true; + logger.level = Level.ALL; + + DateTime currentDate = DateTime.now(); + IOSink sink = fileForDate(currentDate).openWrite(mode: FileMode.append); + + logger.onRecord.listen((record) { + final now = DateTime.now(); + if (now.year != currentDate.year || + now.month != currentDate.month || + now.day != currentDate.day) { + sink.flush(); + sink.close(); + currentDate = now; + sink = fileForDate(currentDate).openWrite(mode: FileMode.append); + } + + final censored = censorLog(record.message); + final timestamp = DateFormat('yyyy-MM-dd HH:mm:ss.SSS').format(now); + final level = record.level.name; + final line = '[$timestamp] [$level] [$censored]'; + sink.writeln(line); + + debugPrint( + "[Firka] [${record.level.name}] ${kDebugMode ? record.message : censored}", + ); + }); + + unawaited(deleteOldLogFiles()); + + try { + logger.finest('loading dirty words'); + await loadDirtyWords(); + logger.finest('loaded dirty words'); + } catch (e, st) { + logger.severe('Failed to load dirty words: $e', e, st); + } +} diff --git a/firka/lib/app/initialization_screen.dart b/firka/lib/app/initialization_screen.dart new file mode 100644 index 0000000..db93d2f --- /dev/null +++ b/firka/lib/app/initialization_screen.dart @@ -0,0 +1,180 @@ +import 'dart:async'; +import 'dart:io'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_native_splash/flutter_native_splash.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/app/initialization.dart'; +import 'package:firka/core/firka_bundle.dart'; +import 'package:firka/services/watch_sync_helper.dart'; +import 'package:firka/l10n/app_localizations.dart'; +import 'package:firka/ui/phone/screens/debug/debug_screen.dart'; +import 'package:firka/ui/phone/screens/home/home_screen.dart'; +import 'package:firka/ui/phone/screens/login/login_screen.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; + +class InitializationScreen extends StatelessWidget { + InitializationScreen({super.key}); + + final Future _init = initializeApp().timeout( + const Duration(seconds: 20), + ); + + @override + Widget build(BuildContext context) { + return FutureBuilder( + future: _init, + builder: (context, snapshot) { + // Check if initialization is complete + if (snapshot.connectionState == ConnectionState.done) { + if (snapshot.hasError) { + logger.shout( + "Error in InitializationScreen", + snapshot.error.toString(), + snapshot.stackTrace, + ); + + FlutterNativeSplash.remove(); + + // Handle initialization error + return MaterialApp( + key: ValueKey('errorPage'), + home: DefaultAssetBundle( + bundle: FirkaBundle(), + child: Scaffold( + body: Center( + child: Text( + 'Error initializing app: ${snapshot.error}', + style: TextStyle(color: Colors.red), + ), + ), + ), + ), + ); + } + + // Initialization successful, determine which screen to show + Widget screen; + + assert(snapshot.data != null); + initData = snapshot.data!; + initDone = true; + + FlutterNativeSplash.remove(); + + WatchSyncHelper.initialize(); + if (Platform.isIOS) { + unawaited(() async { + try { + await WatchSyncHelper.sendLanguageToWatch(); + } catch (e) { + logger.warning( + '[Init] Failed to publish language to Watch after sync init: $e', + ); + } + }()); + } + + if (!initData.hasWatchListener) { + initData.hasWatchListener = true; + + WatchSyncHelper.onWatchMessage = (msg) { + logger.finest("WatchOS IPC [Watch -> Phone]: ${msg["id"]}"); + + switch (msg["id"]) { + case "ping": + if (initData.tokens.isNotEmpty) { + logger.finest("WatchOS IPC [Phone -> Watch]: pong"); + const watchChannel = MethodChannel('app.firka/watch_sync'); + watchChannel.invokeMethod('sendMessageToWatch', { + "id": "pong", + }); + navigatorKey.currentState?.push( + MaterialPageRoute( + builder: (context) => HomeScreen( + initData, + true, + model: msg["model"] as String? ?? "unknown", + ), + ), + ); + } + } + }; + } + + if (snapshot.data!.tokens.isEmpty) { + screen = LoginScreen(initData, key: ValueKey('loginScreen')); + } else { + screen = HomeScreen(initData, false, key: ValueKey('homeScreen')); + } + + return MaterialApp( + title: 'Firka', + key: ValueKey('firkaApp'), + navigatorKey: navigatorKey, + theme: ThemeData( + primarySwatch: Colors.lightGreen, + visualDensity: VisualDensity.adaptivePlatformDensity, + ), + localizationsDelegates: [ + AppLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ], + supportedLocales: AppLocalizations.supportedLocales, + home: DefaultAssetBundle( + bundle: FirkaBundle(), + child: ValueListenableBuilder( + valueListenable: isLightMode, + builder: (context, isLight, _) { + final overlay = SystemUiOverlayStyle( + statusBarColor: Colors.transparent, + statusBarIconBrightness: isLight + ? Brightness.dark + : Brightness.light, + statusBarBrightness: isLight + ? Brightness.light + : Brightness.dark, + systemStatusBarContrastEnforced: false, + ); + + SystemChrome.setSystemUIOverlayStyle(overlay); + + return AnnotatedRegion( + value: overlay, + child: screen, + ); + }, + ), + ), + routes: { + '/login': (context) => DefaultAssetBundle( + bundle: FirkaBundle(), + child: LoginScreen(initData, key: ValueKey('loginScreen')), + ), + '/home': (context) => DefaultAssetBundle( + bundle: FirkaBundle(), + child: HomeScreen(initData, false, key: ValueKey('homeScreen')), + ), + '/debug': (context) => DefaultAssetBundle( + bundle: FirkaBundle(), + child: DebugScreen(initData, key: ValueKey('debugScreen')), + ), + }, + ); + } + + return MaterialApp( + home: DefaultAssetBundle( + bundle: FirkaBundle(), + child: Scaffold( + backgroundColor: const Color(0xFF7CA120), + body: Container(), + ), + ), + ); + }, + ); + } +} diff --git a/firka/lib/helpers/average_helper.dart b/firka/lib/core/average_helper.dart similarity index 90% rename from firka/lib/helpers/average_helper.dart rename to firka/lib/core/average_helper.dart index 928d2dc..b7255da 100644 --- a/firka/lib/helpers/average_helper.dart +++ b/firka/lib/core/average_helper.dart @@ -1,4 +1,4 @@ -import 'package:firka/helpers/api/model/grade.dart'; +import 'package:firka/api/model/grade.dart'; double calculateAverage(List sortedGrades) { double totalWeight = 0.0; diff --git a/firka/lib/helpers/debug_helper.dart b/firka/lib/core/debug_helper.dart similarity index 100% rename from firka/lib/helpers/debug_helper.dart rename to firka/lib/core/debug_helper.dart diff --git a/firka/lib/helpers/extensions.dart b/firka/lib/core/extensions.dart similarity index 98% rename from firka/lib/helpers/extensions.dart rename to firka/lib/core/extensions.dart index a96bc6e..f526e71 100644 --- a/firka/lib/helpers/extensions.dart +++ b/firka/lib/core/extensions.dart @@ -1,8 +1,8 @@ import 'package:intl/intl.dart'; -import '../l10n/app_localizations.dart'; -import 'api/model/timetable.dart'; -import 'debug_helper.dart'; +import 'package:firka/api/model/timetable.dart'; +import 'package:firka/core/debug_helper.dart'; +import 'package:firka/l10n/app_localizations.dart'; extension TimetableExtension on Iterable { List getAllSeqs(Lesson reference) { diff --git a/firka/lib/helpers/firka_bundle.dart b/firka/lib/core/firka_bundle.dart similarity index 97% rename from firka/lib/helpers/firka_bundle.dart rename to firka/lib/core/firka_bundle.dart index fd5a74b..cfb96b4 100644 --- a/firka/lib/helpers/firka_bundle.dart +++ b/firka/lib/core/firka_bundle.dart @@ -3,7 +3,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:brotli/brotli.dart'; -import 'package:firka/main.dart'; +import 'package:firka/app/app_state.dart'; import 'package:flutter/services.dart'; class FirkaBundle extends CachingAssetBundle { diff --git a/firka/lib/helpers/icon_helper.dart b/firka/lib/core/icon_helper.dart similarity index 100% rename from firka/lib/helpers/icon_helper.dart rename to firka/lib/core/icon_helper.dart diff --git a/firka/lib/helpers/image_preloader.dart b/firka/lib/core/image_preloader.dart similarity index 99% rename from firka/lib/helpers/image_preloader.dart rename to firka/lib/core/image_preloader.dart index 6b8b154..45998c0 100644 --- a/firka/lib/helpers/image_preloader.dart +++ b/firka/lib/core/image_preloader.dart @@ -1,6 +1,6 @@ import 'dart:ui' as ui; -import 'package:firka/main.dart'; +import 'package:firka/app/app_state.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; diff --git a/firka/lib/helpers/json_helper.dart b/firka/lib/core/json_helper.dart similarity index 100% rename from firka/lib/helpers/json_helper.dart rename to firka/lib/core/json_helper.dart diff --git a/firka/lib/helpers/profile_picture.dart b/firka/lib/core/profile_picture.dart similarity index 94% rename from firka/lib/helpers/profile_picture.dart rename to firka/lib/core/profile_picture.dart index 5ee4b04..eb1b097 100644 --- a/firka/lib/helpers/profile_picture.dart +++ b/firka/lib/core/profile_picture.dart @@ -1,6 +1,6 @@ import 'dart:io'; -import 'package:firka/main.dart'; +import 'package:firka/app/app_state.dart'; import 'package:image/image.dart'; import 'package:image_picker/image_picker.dart'; import 'package:path/path.dart' as p; diff --git a/firka/lib/helpers/settings.dart b/firka/lib/core/settings.dart similarity index 98% rename from firka/lib/helpers/settings.dart rename to firka/lib/core/settings.dart index 629e421..67755f7 100644 --- a/firka/lib/helpers/settings.dart +++ b/firka/lib/core/settings.dart @@ -2,16 +2,19 @@ import 'dart:collection'; import 'dart:core'; import 'dart:io'; -import 'package:firka/helpers/db/models/app_settings_model.dart'; -import 'package:firka/helpers/live_activity_service.dart'; +import 'package:firka/data/models/app_settings_model.dart'; +import 'package:firka/services/live_activity_service.dart'; import 'package:firka/l10n/app_localizations.dart'; -import 'package:firka/ui/widget/firka_icon.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:isar_community/isar.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; -import '../main.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/app/initialization.dart'; +import 'package:firka/app/initialization_screen.dart'; +import 'package:flutter/material.dart'; const bellRing = 1001; const rounding1 = 1002; diff --git a/firka/lib/helpers/firka_state.dart b/firka/lib/core/state/firka_state.dart similarity index 93% rename from firka/lib/helpers/firka_state.dart rename to firka/lib/core/state/firka_state.dart index d525650..3b4543e 100644 --- a/firka/lib/helpers/firka_state.dart +++ b/firka/lib/core/state/firka_state.dart @@ -1,4 +1,4 @@ -import 'package:firka/main.dart'; +import 'package:firka/app/app_state.dart'; import 'package:flutter/widgets.dart'; abstract class FirkaState extends State { diff --git a/firka/lib/helpers/update_notifier.dart b/firka/lib/core/state/update_notifier.dart similarity index 100% rename from firka/lib/helpers/update_notifier.dart rename to firka/lib/core/state/update_notifier.dart diff --git a/firka/lib/helpers/swear_generator.dart b/firka/lib/core/swear_generator.dart similarity index 100% rename from firka/lib/helpers/swear_generator.dart rename to firka/lib/core/swear_generator.dart diff --git a/firka/lib/helpers/db/ios_widget_helper.dart b/firka/lib/data/ios_widget_helper.dart similarity index 98% rename from firka/lib/helpers/db/ios_widget_helper.dart rename to firka/lib/data/ios_widget_helper.dart index 1a55944..2ca9414 100644 --- a/firka/lib/helpers/db/ios_widget_helper.dart +++ b/firka/lib/data/ios_widget_helper.dart @@ -1,8 +1,8 @@ import 'dart:convert'; import 'dart:io'; -import 'package:firka/helpers/api/model/grade.dart'; -import 'package:firka/helpers/api/model/timetable.dart'; +import 'package:firka/api/model/grade.dart'; +import 'package:firka/api/model/timetable.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; diff --git a/firka/lib/helpers/db/models/app_settings_model.dart b/firka/lib/data/models/app_settings_model.dart similarity index 100% rename from firka/lib/helpers/db/models/app_settings_model.dart rename to firka/lib/data/models/app_settings_model.dart diff --git a/firka/lib/helpers/db/models/generic_cache_model.dart b/firka/lib/data/models/generic_cache_model.dart similarity index 100% rename from firka/lib/helpers/db/models/generic_cache_model.dart rename to firka/lib/data/models/generic_cache_model.dart diff --git a/firka/lib/helpers/db/models/homework_cache_model.dart b/firka/lib/data/models/homework_cache_model.dart similarity index 94% rename from firka/lib/helpers/db/models/homework_cache_model.dart rename to firka/lib/data/models/homework_cache_model.dart index bc6aa0f..0913b48 100644 --- a/firka/lib/helpers/db/models/homework_cache_model.dart +++ b/firka/lib/data/models/homework_cache_model.dart @@ -1,7 +1,7 @@ import 'package:isar_community/isar.dart'; -import '../../debug_helper.dart'; -import '../util.dart'; +import 'package:firka/core/debug_helper.dart'; +import 'package:firka/data/util.dart'; part 'homework_cache_model.g.dart'; diff --git a/firka/lib/helpers/db/models/timetable_cache_model.dart b/firka/lib/data/models/timetable_cache_model.dart similarity index 89% rename from firka/lib/helpers/db/models/timetable_cache_model.dart rename to firka/lib/data/models/timetable_cache_model.dart index 24909e5..7be7d80 100644 --- a/firka/lib/helpers/db/models/timetable_cache_model.dart +++ b/firka/lib/data/models/timetable_cache_model.dart @@ -1,7 +1,7 @@ import 'package:isar_community/isar.dart'; -import '../../debug_helper.dart'; -import '../util.dart'; +import 'package:firka/core/debug_helper.dart'; +import 'package:firka/data/util.dart'; part 'timetable_cache_model.g.dart'; diff --git a/firka/lib/helpers/db/models/token_model.dart b/firka/lib/data/models/token_model.dart similarity index 95% rename from firka/lib/helpers/db/models/token_model.dart rename to firka/lib/data/models/token_model.dart index 763bd30..d339176 100644 --- a/firka/lib/helpers/db/models/token_model.dart +++ b/firka/lib/data/models/token_model.dart @@ -2,12 +2,11 @@ import 'dart:convert'; import 'package:crypto/crypto.dart'; import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart'; -import 'package:firka/helpers/api/resp/token_grant.dart'; -import 'package:firka/helpers/extensions.dart'; +import 'package:firka/api/resp/token_grant.dart'; +import 'package:firka/core/debug_helper.dart'; +import 'package:firka/core/extensions.dart'; import 'package:isar_community/isar.dart'; -import '../../debug_helper.dart'; - part 'token_model.g.dart'; @collection diff --git a/firka/lib/helpers/db/util.dart b/firka/lib/data/util.dart similarity index 92% rename from firka/lib/helpers/db/util.dart rename to firka/lib/data/util.dart index 9981a09..5c008e6 100644 --- a/firka/lib/helpers/db/util.dart +++ b/firka/lib/data/util.dart @@ -3,7 +3,7 @@ import 'dart:math'; import 'package:intl/intl.dart'; import 'package:isar_community/isar.dart'; -import '../debug_helper.dart'; +import 'package:firka/core/debug_helper.dart'; class DatedCacheEntry { Id? cacheKey; diff --git a/firka/lib/helpers/db/widget.dart b/firka/lib/data/widget.dart similarity index 95% rename from firka/lib/helpers/db/widget.dart rename to firka/lib/data/widget.dart index 017896d..c5b1ba2 100644 --- a/firka/lib/helpers/db/widget.dart +++ b/firka/lib/data/widget.dart @@ -1,18 +1,18 @@ import 'dart:convert'; import 'dart:io'; -import 'package:firka/helpers/api/client/kreta_client.dart'; -import 'package:firka/helpers/api/model/grade.dart'; -import 'package:firka/helpers/api/model/timetable.dart'; -import 'package:firka/helpers/db/ios_widget_helper.dart'; -import 'package:firka/helpers/debug_helper.dart'; -import 'package:firka/helpers/settings.dart'; -import 'package:firka/main.dart'; +import 'package:firka/api/client/kreta_client.dart'; +import 'package:firka/api/model/grade.dart'; +import 'package:firka/api/model/timetable.dart'; +import 'package:firka/core/debug_helper.dart'; +import 'package:firka/data/ios_widget_helper.dart'; +import 'package:firka/core/settings.dart'; +import 'package:firka/app/app_state.dart'; import 'package:flutter/foundation.dart'; import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart'; -import '../../ui/model/style.dart'; +import 'package:firka/ui/theme/style.dart'; class WidgetCacheHelper { static Map toJson(FirkaStyle style, List timetable) { diff --git a/firka/lib/helpers/db/models/app_settings_model.g.dart b/firka/lib/helpers/db/models/app_settings_model.g.dart deleted file mode 100644 index be5282b..0000000 --- a/firka/lib/helpers/db/models/app_settings_model.g.dart +++ /dev/null @@ -1,843 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'app_settings_model.dart'; - -// ************************************************************************** -// IsarCollectionGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetAppSettingsModelCollection on Isar { - IsarCollection get appSettingsModels => this.collection(); -} - -const AppSettingsModelSchema = CollectionSchema( - name: r'AppSettingsModel', - id: -638838212012723081, - properties: { - r'valueBool': PropertySchema( - id: 0, - name: r'valueBool', - type: IsarType.bool, - ), - r'valueDouble': PropertySchema( - id: 1, - name: r'valueDouble', - type: IsarType.double, - ), - r'valueIndex': PropertySchema( - id: 2, - name: r'valueIndex', - type: IsarType.long, - ), - r'valueString': PropertySchema( - id: 3, - name: r'valueString', - type: IsarType.string, - ), - }, - - estimateSize: _appSettingsModelEstimateSize, - serialize: _appSettingsModelSerialize, - deserialize: _appSettingsModelDeserialize, - deserializeProp: _appSettingsModelDeserializeProp, - idName: r'id', - indexes: {}, - links: {}, - embeddedSchemas: {}, - - getId: _appSettingsModelGetId, - getLinks: _appSettingsModelGetLinks, - attach: _appSettingsModelAttach, - version: '3.3.0', -); - -int _appSettingsModelEstimateSize( - AppSettingsModel object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - { - final value = object.valueString; - if (value != null) { - bytesCount += 3 + value.length * 3; - } - } - return bytesCount; -} - -void _appSettingsModelSerialize( - AppSettingsModel object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeBool(offsets[0], object.valueBool); - writer.writeDouble(offsets[1], object.valueDouble); - writer.writeLong(offsets[2], object.valueIndex); - writer.writeString(offsets[3], object.valueString); -} - -AppSettingsModel _appSettingsModelDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = AppSettingsModel(); - object.id = id; - object.valueBool = reader.readBoolOrNull(offsets[0]); - object.valueDouble = reader.readDoubleOrNull(offsets[1]); - object.valueIndex = reader.readLongOrNull(offsets[2]); - object.valueString = reader.readStringOrNull(offsets[3]); - return object; -} - -P _appSettingsModelDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readBoolOrNull(offset)) as P; - case 1: - return (reader.readDoubleOrNull(offset)) as P; - case 2: - return (reader.readLongOrNull(offset)) as P; - case 3: - return (reader.readStringOrNull(offset)) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _appSettingsModelGetId(AppSettingsModel object) { - return object.id ?? Isar.autoIncrement; -} - -List> _appSettingsModelGetLinks(AppSettingsModel object) { - return []; -} - -void _appSettingsModelAttach( - IsarCollection col, - Id id, - AppSettingsModel object, -) { - object.id = id; -} - -extension AppSettingsModelQueryWhereSort - on QueryBuilder { - QueryBuilder anyId() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension AppSettingsModelQueryWhere - on QueryBuilder { - QueryBuilder idEqualTo( - Id id, - ) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); - }); - } - - QueryBuilder - idNotEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ); - } - }); - } - - QueryBuilder - idGreaterThan(Id id, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: include), - ); - }); - } - - QueryBuilder - idLessThan(Id id, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: include), - ); - }); - } - - QueryBuilder idBetween( - Id lowerId, - Id upperId, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension AppSettingsModelQueryFilter - on QueryBuilder { - QueryBuilder - idIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'id'), - ); - }); - } - - QueryBuilder - idIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'id'), - ); - }); - } - - QueryBuilder - idEqualTo(Id? value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); - }); - } - - QueryBuilder - idGreaterThan(Id? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder - idLessThan(Id? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder - idBetween( - Id? lower, - Id? upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder - valueBoolIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'valueBool'), - ); - }); - } - - QueryBuilder - valueBoolIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'valueBool'), - ); - }); - } - - QueryBuilder - valueBoolEqualTo(bool? value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'valueBool', value: value), - ); - }); - } - - QueryBuilder - valueDoubleIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'valueDouble'), - ); - }); - } - - QueryBuilder - valueDoubleIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'valueDouble'), - ); - }); - } - - QueryBuilder - valueDoubleEqualTo(double? value, {double epsilon = Query.epsilon}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'valueDouble', - value: value, - - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder - valueDoubleGreaterThan( - double? value, { - bool include = false, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'valueDouble', - value: value, - - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder - valueDoubleLessThan( - double? value, { - bool include = false, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'valueDouble', - value: value, - - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder - valueDoubleBetween( - double? lower, - double? upper, { - bool includeLower = true, - bool includeUpper = true, - double epsilon = Query.epsilon, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'valueDouble', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - - epsilon: epsilon, - ), - ); - }); - } - - QueryBuilder - valueIndexIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'valueIndex'), - ); - }); - } - - QueryBuilder - valueIndexIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'valueIndex'), - ); - }); - } - - QueryBuilder - valueIndexEqualTo(int? value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'valueIndex', value: value), - ); - }); - } - - QueryBuilder - valueIndexGreaterThan(int? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'valueIndex', - value: value, - ), - ); - }); - } - - QueryBuilder - valueIndexLessThan(int? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'valueIndex', - value: value, - ), - ); - }); - } - - QueryBuilder - valueIndexBetween( - int? lower, - int? upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'valueIndex', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder - valueStringIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'valueString'), - ); - }); - } - - QueryBuilder - valueStringIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'valueString'), - ); - }); - } - - QueryBuilder - valueStringEqualTo(String? value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'valueString', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valueStringGreaterThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'valueString', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valueStringLessThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'valueString', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valueStringBetween( - String? lower, - String? upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'valueString', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valueStringStartsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'valueString', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valueStringEndsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'valueString', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valueStringContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'valueString', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valueStringMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'valueString', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valueStringIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'valueString', value: ''), - ); - }); - } - - QueryBuilder - valueStringIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'valueString', value: ''), - ); - }); - } -} - -extension AppSettingsModelQueryObject - on QueryBuilder {} - -extension AppSettingsModelQueryLinks - on QueryBuilder {} - -extension AppSettingsModelQuerySortBy - on QueryBuilder { - QueryBuilder - sortByValueBool() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'valueBool', Sort.asc); - }); - } - - QueryBuilder - sortByValueBoolDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'valueBool', Sort.desc); - }); - } - - QueryBuilder - sortByValueDouble() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'valueDouble', Sort.asc); - }); - } - - QueryBuilder - sortByValueDoubleDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'valueDouble', Sort.desc); - }); - } - - QueryBuilder - sortByValueIndex() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'valueIndex', Sort.asc); - }); - } - - QueryBuilder - sortByValueIndexDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'valueIndex', Sort.desc); - }); - } - - QueryBuilder - sortByValueString() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'valueString', Sort.asc); - }); - } - - QueryBuilder - sortByValueStringDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'valueString', Sort.desc); - }); - } -} - -extension AppSettingsModelQuerySortThenBy - on QueryBuilder { - QueryBuilder thenById() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.asc); - }); - } - - QueryBuilder - thenByIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.desc); - }); - } - - QueryBuilder - thenByValueBool() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'valueBool', Sort.asc); - }); - } - - QueryBuilder - thenByValueBoolDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'valueBool', Sort.desc); - }); - } - - QueryBuilder - thenByValueDouble() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'valueDouble', Sort.asc); - }); - } - - QueryBuilder - thenByValueDoubleDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'valueDouble', Sort.desc); - }); - } - - QueryBuilder - thenByValueIndex() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'valueIndex', Sort.asc); - }); - } - - QueryBuilder - thenByValueIndexDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'valueIndex', Sort.desc); - }); - } - - QueryBuilder - thenByValueString() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'valueString', Sort.asc); - }); - } - - QueryBuilder - thenByValueStringDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'valueString', Sort.desc); - }); - } -} - -extension AppSettingsModelQueryWhereDistinct - on QueryBuilder { - QueryBuilder - distinctByValueBool() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'valueBool'); - }); - } - - QueryBuilder - distinctByValueDouble() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'valueDouble'); - }); - } - - QueryBuilder - distinctByValueIndex() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'valueIndex'); - }); - } - - QueryBuilder - distinctByValueString({bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'valueString', caseSensitive: caseSensitive); - }); - } -} - -extension AppSettingsModelQueryProperty - on QueryBuilder { - QueryBuilder idProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'id'); - }); - } - - QueryBuilder valueBoolProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'valueBool'); - }); - } - - QueryBuilder - valueDoubleProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'valueDouble'); - }); - } - - QueryBuilder valueIndexProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'valueIndex'); - }); - } - - QueryBuilder - valueStringProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'valueString'); - }); - } -} diff --git a/firka/lib/helpers/db/models/generic_cache_model.g.dart b/firka/lib/helpers/db/models/generic_cache_model.g.dart deleted file mode 100644 index 76f65d7..0000000 --- a/firka/lib/helpers/db/models/generic_cache_model.g.dart +++ /dev/null @@ -1,505 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'generic_cache_model.dart'; - -// ************************************************************************** -// IsarCollectionGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetGenericCacheModelCollection on Isar { - IsarCollection get genericCacheModels => this.collection(); -} - -const GenericCacheModelSchema = CollectionSchema( - name: r'GenericCacheModel', - id: 3174486726793780620, - properties: { - r'cacheData': PropertySchema( - id: 0, - name: r'cacheData', - type: IsarType.string, - ), - }, - - estimateSize: _genericCacheModelEstimateSize, - serialize: _genericCacheModelSerialize, - deserialize: _genericCacheModelDeserialize, - deserializeProp: _genericCacheModelDeserializeProp, - idName: r'cacheKey', - indexes: {}, - links: {}, - embeddedSchemas: {}, - - getId: _genericCacheModelGetId, - getLinks: _genericCacheModelGetLinks, - attach: _genericCacheModelAttach, - version: '3.3.0', -); - -int _genericCacheModelEstimateSize( - GenericCacheModel object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - { - final value = object.cacheData; - if (value != null) { - bytesCount += 3 + value.length * 3; - } - } - return bytesCount; -} - -void _genericCacheModelSerialize( - GenericCacheModel object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeString(offsets[0], object.cacheData); -} - -GenericCacheModel _genericCacheModelDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = GenericCacheModel(); - object.cacheData = reader.readStringOrNull(offsets[0]); - object.cacheKey = id; - return object; -} - -P _genericCacheModelDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readStringOrNull(offset)) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _genericCacheModelGetId(GenericCacheModel object) { - return object.cacheKey ?? Isar.autoIncrement; -} - -List> _genericCacheModelGetLinks( - GenericCacheModel object, -) { - return []; -} - -void _genericCacheModelAttach( - IsarCollection col, - Id id, - GenericCacheModel object, -) { - object.cacheKey = id; -} - -extension GenericCacheModelQueryWhereSort - on QueryBuilder { - QueryBuilder - anyCacheKey() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension GenericCacheModelQueryWhere - on QueryBuilder { - QueryBuilder - cacheKeyEqualTo(Id cacheKey) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between(lower: cacheKey, upper: cacheKey), - ); - }); - } - - QueryBuilder - cacheKeyNotEqualTo(Id cacheKey) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: cacheKey, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: cacheKey, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: cacheKey, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: cacheKey, includeUpper: false), - ); - } - }); - } - - QueryBuilder - cacheKeyGreaterThan(Id cacheKey, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: cacheKey, includeLower: include), - ); - }); - } - - QueryBuilder - cacheKeyLessThan(Id cacheKey, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: cacheKey, includeUpper: include), - ); - }); - } - - QueryBuilder - cacheKeyBetween( - Id lowerCacheKey, - Id upperCacheKey, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerCacheKey, - includeLower: includeLower, - upper: upperCacheKey, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension GenericCacheModelQueryFilter - on QueryBuilder { - QueryBuilder - cacheDataIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'cacheData'), - ); - }); - } - - QueryBuilder - cacheDataIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'cacheData'), - ); - }); - } - - QueryBuilder - cacheDataEqualTo(String? value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'cacheData', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - cacheDataGreaterThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'cacheData', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - cacheDataLessThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'cacheData', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - cacheDataBetween( - String? lower, - String? upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'cacheData', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - cacheDataStartsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'cacheData', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - cacheDataEndsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'cacheData', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - cacheDataContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'cacheData', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - cacheDataMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'cacheData', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - cacheDataIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'cacheData', value: ''), - ); - }); - } - - QueryBuilder - cacheDataIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'cacheData', value: ''), - ); - }); - } - - QueryBuilder - cacheKeyIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'cacheKey'), - ); - }); - } - - QueryBuilder - cacheKeyIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'cacheKey'), - ); - }); - } - - QueryBuilder - cacheKeyEqualTo(Id? value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'cacheKey', value: value), - ); - }); - } - - QueryBuilder - cacheKeyGreaterThan(Id? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'cacheKey', - value: value, - ), - ); - }); - } - - QueryBuilder - cacheKeyLessThan(Id? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'cacheKey', - value: value, - ), - ); - }); - } - - QueryBuilder - cacheKeyBetween( - Id? lower, - Id? upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'cacheKey', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension GenericCacheModelQueryObject - on QueryBuilder {} - -extension GenericCacheModelQueryLinks - on QueryBuilder {} - -extension GenericCacheModelQuerySortBy - on QueryBuilder { - QueryBuilder - sortByCacheData() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cacheData', Sort.asc); - }); - } - - QueryBuilder - sortByCacheDataDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cacheData', Sort.desc); - }); - } -} - -extension GenericCacheModelQuerySortThenBy - on QueryBuilder { - QueryBuilder - thenByCacheData() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cacheData', Sort.asc); - }); - } - - QueryBuilder - thenByCacheDataDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cacheData', Sort.desc); - }); - } - - QueryBuilder - thenByCacheKey() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cacheKey', Sort.asc); - }); - } - - QueryBuilder - thenByCacheKeyDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cacheKey', Sort.desc); - }); - } -} - -extension GenericCacheModelQueryWhereDistinct - on QueryBuilder { - QueryBuilder - distinctByCacheData({bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'cacheData', caseSensitive: caseSensitive); - }); - } -} - -extension GenericCacheModelQueryProperty - on QueryBuilder { - QueryBuilder cacheKeyProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'cacheKey'); - }); - } - - QueryBuilder - cacheDataProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'cacheData'); - }); - } -} diff --git a/firka/lib/helpers/db/models/homework_cache_model.g.dart b/firka/lib/helpers/db/models/homework_cache_model.g.dart deleted file mode 100644 index 1cbb786..0000000 --- a/firka/lib/helpers/db/models/homework_cache_model.g.dart +++ /dev/null @@ -1,1109 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'homework_cache_model.dart'; - -// ************************************************************************** -// IsarCollectionGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetHomeworkCacheModelCollection on Isar { - IsarCollection get homeworkCacheModels => - this.collection(); -} - -const HomeworkCacheModelSchema = CollectionSchema( - name: r'HomeworkCacheModel', - id: -356692531669197690, - properties: { - r'values': PropertySchema( - id: 0, - name: r'values', - type: IsarType.stringList, - ), - }, - - estimateSize: _homeworkCacheModelEstimateSize, - serialize: _homeworkCacheModelSerialize, - deserialize: _homeworkCacheModelDeserialize, - deserializeProp: _homeworkCacheModelDeserializeProp, - idName: r'cacheKey', - indexes: {}, - links: {}, - embeddedSchemas: {}, - - getId: _homeworkCacheModelGetId, - getLinks: _homeworkCacheModelGetLinks, - attach: _homeworkCacheModelAttach, - version: '3.3.0', -); - -int _homeworkCacheModelEstimateSize( - HomeworkCacheModel object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - { - final list = object.values; - if (list != null) { - bytesCount += 3 + list.length * 3; - { - for (var i = 0; i < list.length; i++) { - final value = list[i]; - bytesCount += value.length * 3; - } - } - } - } - return bytesCount; -} - -void _homeworkCacheModelSerialize( - HomeworkCacheModel object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeStringList(offsets[0], object.values); -} - -HomeworkCacheModel _homeworkCacheModelDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = HomeworkCacheModel(); - object.cacheKey = id; - object.values = reader.readStringList(offsets[0]); - return object; -} - -P _homeworkCacheModelDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readStringList(offset)) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _homeworkCacheModelGetId(HomeworkCacheModel object) { - return object.cacheKey ?? Isar.autoIncrement; -} - -List> _homeworkCacheModelGetLinks( - HomeworkCacheModel object, -) { - return []; -} - -void _homeworkCacheModelAttach( - IsarCollection col, - Id id, - HomeworkCacheModel object, -) { - object.cacheKey = id; -} - -extension HomeworkCacheModelQueryWhereSort - on QueryBuilder { - QueryBuilder - anyCacheKey() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension HomeworkCacheModelQueryWhere - on QueryBuilder { - QueryBuilder - cacheKeyEqualTo(Id cacheKey) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between(lower: cacheKey, upper: cacheKey), - ); - }); - } - - QueryBuilder - cacheKeyNotEqualTo(Id cacheKey) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: cacheKey, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: cacheKey, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: cacheKey, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: cacheKey, includeUpper: false), - ); - } - }); - } - - QueryBuilder - cacheKeyGreaterThan(Id cacheKey, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: cacheKey, includeLower: include), - ); - }); - } - - QueryBuilder - cacheKeyLessThan(Id cacheKey, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: cacheKey, includeUpper: include), - ); - }); - } - - QueryBuilder - cacheKeyBetween( - Id lowerCacheKey, - Id upperCacheKey, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerCacheKey, - includeLower: includeLower, - upper: upperCacheKey, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension HomeworkCacheModelQueryFilter - on QueryBuilder { - QueryBuilder - cacheKeyIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'cacheKey'), - ); - }); - } - - QueryBuilder - cacheKeyIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'cacheKey'), - ); - }); - } - - QueryBuilder - cacheKeyEqualTo(Id? value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'cacheKey', value: value), - ); - }); - } - - QueryBuilder - cacheKeyGreaterThan(Id? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'cacheKey', - value: value, - ), - ); - }); - } - - QueryBuilder - cacheKeyLessThan(Id? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'cacheKey', - value: value, - ), - ); - }); - } - - QueryBuilder - cacheKeyBetween( - Id? lower, - Id? upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'cacheKey', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder - valuesIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'values'), - ); - }); - } - - QueryBuilder - valuesIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'values'), - ); - }); - } - - QueryBuilder - valuesElementEqualTo(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'values', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valuesElementGreaterThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'values', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valuesElementLessThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'values', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valuesElementBetween( - String lower, - String upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'values', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valuesElementStartsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'values', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valuesElementEndsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'values', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valuesElementContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'values', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valuesElementMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'values', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valuesElementIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'values', value: ''), - ); - }); - } - - QueryBuilder - valuesElementIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'values', value: ''), - ); - }); - } - - QueryBuilder - valuesLengthEqualTo(int length) { - return QueryBuilder.apply(this, (query) { - return query.listLength(r'values', length, true, length, true); - }); - } - - QueryBuilder - valuesIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.listLength(r'values', 0, true, 0, true); - }); - } - - QueryBuilder - valuesIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.listLength(r'values', 0, false, 999999, true); - }); - } - - QueryBuilder - valuesLengthLessThan(int length, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.listLength(r'values', 0, true, length, include); - }); - } - - QueryBuilder - valuesLengthGreaterThan(int length, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.listLength(r'values', length, include, 999999, true); - }); - } - - QueryBuilder - valuesLengthBetween( - int lower, - int upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.listLength( - r'values', - lower, - includeLower, - upper, - includeUpper, - ); - }); - } -} - -extension HomeworkCacheModelQueryObject - on QueryBuilder {} - -extension HomeworkCacheModelQueryLinks - on QueryBuilder {} - -extension HomeworkCacheModelQuerySortBy - on QueryBuilder {} - -extension HomeworkCacheModelQuerySortThenBy - on QueryBuilder { - QueryBuilder - thenByCacheKey() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cacheKey', Sort.asc); - }); - } - - QueryBuilder - thenByCacheKeyDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cacheKey', Sort.desc); - }); - } -} - -extension HomeworkCacheModelQueryWhereDistinct - on QueryBuilder { - QueryBuilder - distinctByValues() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'values'); - }); - } -} - -extension HomeworkCacheModelQueryProperty - on QueryBuilder { - QueryBuilder cacheKeyProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'cacheKey'); - }); - } - - QueryBuilder?, QQueryOperations> - valuesProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'values'); - }); - } -} - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetHomeworkDoneModelCollection on Isar { - IsarCollection get homeworkDoneModels => this.collection(); -} - -const HomeworkDoneModelSchema = CollectionSchema( - name: r'HomeworkDoneModel', - id: -864135255844965497, - properties: { - r'doneAt': PropertySchema(id: 0, name: r'doneAt', type: IsarType.dateTime), - r'homeworkId': PropertySchema( - id: 1, - name: r'homeworkId', - type: IsarType.string, - ), - }, - - estimateSize: _homeworkDoneModelEstimateSize, - serialize: _homeworkDoneModelSerialize, - deserialize: _homeworkDoneModelDeserialize, - deserializeProp: _homeworkDoneModelDeserializeProp, - idName: r'id', - indexes: {}, - links: {}, - embeddedSchemas: {}, - - getId: _homeworkDoneModelGetId, - getLinks: _homeworkDoneModelGetLinks, - attach: _homeworkDoneModelAttach, - version: '3.3.0', -); - -int _homeworkDoneModelEstimateSize( - HomeworkDoneModel object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - bytesCount += 3 + object.homeworkId.length * 3; - return bytesCount; -} - -void _homeworkDoneModelSerialize( - HomeworkDoneModel object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeDateTime(offsets[0], object.doneAt); - writer.writeString(offsets[1], object.homeworkId); -} - -HomeworkDoneModel _homeworkDoneModelDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = HomeworkDoneModel(); - object.doneAt = reader.readDateTime(offsets[0]); - object.homeworkId = reader.readString(offsets[1]); - object.id = id; - return object; -} - -P _homeworkDoneModelDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readDateTime(offset)) as P; - case 1: - return (reader.readString(offset)) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _homeworkDoneModelGetId(HomeworkDoneModel object) { - return object.id ?? Isar.autoIncrement; -} - -List> _homeworkDoneModelGetLinks( - HomeworkDoneModel object, -) { - return []; -} - -void _homeworkDoneModelAttach( - IsarCollection col, - Id id, - HomeworkDoneModel object, -) { - object.id = id; -} - -extension HomeworkDoneModelQueryWhereSort - on QueryBuilder { - QueryBuilder anyId() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension HomeworkDoneModelQueryWhere - on QueryBuilder { - QueryBuilder - idEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); - }); - } - - QueryBuilder - idNotEqualTo(Id id) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: false), - ); - } - }); - } - - QueryBuilder - idGreaterThan(Id id, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: id, includeLower: include), - ); - }); - } - - QueryBuilder - idLessThan(Id id, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: id, includeUpper: include), - ); - }); - } - - QueryBuilder - idBetween( - Id lowerId, - Id upperId, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension HomeworkDoneModelQueryFilter - on QueryBuilder { - QueryBuilder - doneAtEqualTo(DateTime value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'doneAt', value: value), - ); - }); - } - - QueryBuilder - doneAtGreaterThan(DateTime value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'doneAt', - value: value, - ), - ); - }); - } - - QueryBuilder - doneAtLessThan(DateTime value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'doneAt', - value: value, - ), - ); - }); - } - - QueryBuilder - doneAtBetween( - DateTime lower, - DateTime upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'doneAt', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder - homeworkIdEqualTo(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'homeworkId', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - homeworkIdGreaterThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'homeworkId', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - homeworkIdLessThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'homeworkId', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - homeworkIdBetween( - String lower, - String upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'homeworkId', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - homeworkIdStartsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'homeworkId', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - homeworkIdEndsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'homeworkId', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - homeworkIdContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'homeworkId', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - homeworkIdMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'homeworkId', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - homeworkIdIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'homeworkId', value: ''), - ); - }); - } - - QueryBuilder - homeworkIdIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'homeworkId', value: ''), - ); - }); - } - - QueryBuilder - idIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'id'), - ); - }); - } - - QueryBuilder - idIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'id'), - ); - }); - } - - QueryBuilder - idEqualTo(Id? value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); - }); - } - - QueryBuilder - idGreaterThan(Id? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder - idLessThan(Id? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); - }); - } - - QueryBuilder - idBetween( - Id? lower, - Id? upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension HomeworkDoneModelQueryObject - on QueryBuilder {} - -extension HomeworkDoneModelQueryLinks - on QueryBuilder {} - -extension HomeworkDoneModelQuerySortBy - on QueryBuilder { - QueryBuilder - sortByDoneAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'doneAt', Sort.asc); - }); - } - - QueryBuilder - sortByDoneAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'doneAt', Sort.desc); - }); - } - - QueryBuilder - sortByHomeworkId() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'homeworkId', Sort.asc); - }); - } - - QueryBuilder - sortByHomeworkIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'homeworkId', Sort.desc); - }); - } -} - -extension HomeworkDoneModelQuerySortThenBy - on QueryBuilder { - QueryBuilder - thenByDoneAt() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'doneAt', Sort.asc); - }); - } - - QueryBuilder - thenByDoneAtDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'doneAt', Sort.desc); - }); - } - - QueryBuilder - thenByHomeworkId() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'homeworkId', Sort.asc); - }); - } - - QueryBuilder - thenByHomeworkIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'homeworkId', Sort.desc); - }); - } - - QueryBuilder thenById() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.asc); - }); - } - - QueryBuilder - thenByIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'id', Sort.desc); - }); - } -} - -extension HomeworkDoneModelQueryWhereDistinct - on QueryBuilder { - QueryBuilder - distinctByDoneAt() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'doneAt'); - }); - } - - QueryBuilder - distinctByHomeworkId({bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'homeworkId', caseSensitive: caseSensitive); - }); - } -} - -extension HomeworkDoneModelQueryProperty - on QueryBuilder { - QueryBuilder idProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'id'); - }); - } - - QueryBuilder doneAtProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'doneAt'); - }); - } - - QueryBuilder - homeworkIdProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'homeworkId'); - }); - } -} diff --git a/firka/lib/helpers/db/models/timetable_cache_model.g.dart b/firka/lib/helpers/db/models/timetable_cache_model.g.dart deleted file mode 100644 index 11ce343..0000000 --- a/firka/lib/helpers/db/models/timetable_cache_model.g.dart +++ /dev/null @@ -1,552 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'timetable_cache_model.dart'; - -// ************************************************************************** -// IsarCollectionGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetTimetableCacheModelCollection on Isar { - IsarCollection get timetableCacheModels => - this.collection(); -} - -const TimetableCacheModelSchema = CollectionSchema( - name: r'TimetableCacheModel', - id: -8626340955125680275, - properties: { - r'values': PropertySchema( - id: 0, - name: r'values', - type: IsarType.stringList, - ), - }, - - estimateSize: _timetableCacheModelEstimateSize, - serialize: _timetableCacheModelSerialize, - deserialize: _timetableCacheModelDeserialize, - deserializeProp: _timetableCacheModelDeserializeProp, - idName: r'cacheKey', - indexes: {}, - links: {}, - embeddedSchemas: {}, - - getId: _timetableCacheModelGetId, - getLinks: _timetableCacheModelGetLinks, - attach: _timetableCacheModelAttach, - version: '3.3.0', -); - -int _timetableCacheModelEstimateSize( - TimetableCacheModel object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - { - final list = object.values; - if (list != null) { - bytesCount += 3 + list.length * 3; - { - for (var i = 0; i < list.length; i++) { - final value = list[i]; - bytesCount += value.length * 3; - } - } - } - } - return bytesCount; -} - -void _timetableCacheModelSerialize( - TimetableCacheModel object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeStringList(offsets[0], object.values); -} - -TimetableCacheModel _timetableCacheModelDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = TimetableCacheModel(); - object.cacheKey = id; - object.values = reader.readStringList(offsets[0]); - return object; -} - -P _timetableCacheModelDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readStringList(offset)) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _timetableCacheModelGetId(TimetableCacheModel object) { - return object.cacheKey ?? Isar.autoIncrement; -} - -List> _timetableCacheModelGetLinks( - TimetableCacheModel object, -) { - return []; -} - -void _timetableCacheModelAttach( - IsarCollection col, - Id id, - TimetableCacheModel object, -) { - object.cacheKey = id; -} - -extension TimetableCacheModelQueryWhereSort - on QueryBuilder { - QueryBuilder - anyCacheKey() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension TimetableCacheModelQueryWhere - on QueryBuilder { - QueryBuilder - cacheKeyEqualTo(Id cacheKey) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between(lower: cacheKey, upper: cacheKey), - ); - }); - } - - QueryBuilder - cacheKeyNotEqualTo(Id cacheKey) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: cacheKey, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan(lower: cacheKey, includeLower: false), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan(lower: cacheKey, includeLower: false), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: cacheKey, includeUpper: false), - ); - } - }); - } - - QueryBuilder - cacheKeyGreaterThan(Id cacheKey, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: cacheKey, includeLower: include), - ); - }); - } - - QueryBuilder - cacheKeyLessThan(Id cacheKey, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: cacheKey, includeUpper: include), - ); - }); - } - - QueryBuilder - cacheKeyBetween( - Id lowerCacheKey, - Id upperCacheKey, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerCacheKey, - includeLower: includeLower, - upper: upperCacheKey, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension TimetableCacheModelQueryFilter - on - QueryBuilder< - TimetableCacheModel, - TimetableCacheModel, - QFilterCondition - > { - QueryBuilder - cacheKeyIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'cacheKey'), - ); - }); - } - - QueryBuilder - cacheKeyIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'cacheKey'), - ); - }); - } - - QueryBuilder - cacheKeyEqualTo(Id? value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'cacheKey', value: value), - ); - }); - } - - QueryBuilder - cacheKeyGreaterThan(Id? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'cacheKey', - value: value, - ), - ); - }); - } - - QueryBuilder - cacheKeyLessThan(Id? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'cacheKey', - value: value, - ), - ); - }); - } - - QueryBuilder - cacheKeyBetween( - Id? lower, - Id? upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'cacheKey', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder - valuesIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'values'), - ); - }); - } - - QueryBuilder - valuesIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'values'), - ); - }); - } - - QueryBuilder - valuesElementEqualTo(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'values', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valuesElementGreaterThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'values', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valuesElementLessThan( - String value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'values', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valuesElementBetween( - String lower, - String upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'values', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valuesElementStartsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'values', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valuesElementEndsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'values', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valuesElementContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'values', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valuesElementMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'values', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - valuesElementIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'values', value: ''), - ); - }); - } - - QueryBuilder - valuesElementIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'values', value: ''), - ); - }); - } - - QueryBuilder - valuesLengthEqualTo(int length) { - return QueryBuilder.apply(this, (query) { - return query.listLength(r'values', length, true, length, true); - }); - } - - QueryBuilder - valuesIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.listLength(r'values', 0, true, 0, true); - }); - } - - QueryBuilder - valuesIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.listLength(r'values', 0, false, 999999, true); - }); - } - - QueryBuilder - valuesLengthLessThan(int length, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.listLength(r'values', 0, true, length, include); - }); - } - - QueryBuilder - valuesLengthGreaterThan(int length, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.listLength(r'values', length, include, 999999, true); - }); - } - - QueryBuilder - valuesLengthBetween( - int lower, - int upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.listLength( - r'values', - lower, - includeLower, - upper, - includeUpper, - ); - }); - } -} - -extension TimetableCacheModelQueryObject - on - QueryBuilder< - TimetableCacheModel, - TimetableCacheModel, - QFilterCondition - > {} - -extension TimetableCacheModelQueryLinks - on - QueryBuilder< - TimetableCacheModel, - TimetableCacheModel, - QFilterCondition - > {} - -extension TimetableCacheModelQuerySortBy - on QueryBuilder {} - -extension TimetableCacheModelQuerySortThenBy - on QueryBuilder { - QueryBuilder - thenByCacheKey() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cacheKey', Sort.asc); - }); - } - - QueryBuilder - thenByCacheKeyDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'cacheKey', Sort.desc); - }); - } -} - -extension TimetableCacheModelQueryWhereDistinct - on QueryBuilder { - QueryBuilder - distinctByValues() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'values'); - }); - } -} - -extension TimetableCacheModelQueryProperty - on QueryBuilder { - QueryBuilder cacheKeyProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'cacheKey'); - }); - } - - QueryBuilder?, QQueryOperations> - valuesProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'values'); - }); - } -} diff --git a/firka/lib/helpers/db/models/token_model.g.dart b/firka/lib/helpers/db/models/token_model.g.dart deleted file mode 100644 index affb6fe..0000000 --- a/firka/lib/helpers/db/models/token_model.g.dart +++ /dev/null @@ -1,1709 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'token_model.dart'; - -// ************************************************************************** -// IsarCollectionGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types - -extension GetTokenModelCollection on Isar { - IsarCollection get tokenModels => this.collection(); -} - -const TokenModelSchema = CollectionSchema( - name: r'TokenModel', - id: 6587729607152393036, - properties: { - r'accessToken': PropertySchema( - id: 0, - name: r'accessToken', - type: IsarType.string, - ), - r'expiryDate': PropertySchema( - id: 1, - name: r'expiryDate', - type: IsarType.dateTime, - ), - r'idToken': PropertySchema(id: 2, name: r'idToken', type: IsarType.string), - r'iss': PropertySchema(id: 3, name: r'iss', type: IsarType.string), - r'refreshToken': PropertySchema( - id: 4, - name: r'refreshToken', - type: IsarType.string, - ), - r'studentId': PropertySchema( - id: 5, - name: r'studentId', - type: IsarType.string, - ), - r'tokenVersion': PropertySchema( - id: 6, - name: r'tokenVersion', - type: IsarType.long, - ), - r'updatedAtMs': PropertySchema( - id: 7, - name: r'updatedAtMs', - type: IsarType.long, - ), - }, - - estimateSize: _tokenModelEstimateSize, - serialize: _tokenModelSerialize, - deserialize: _tokenModelDeserialize, - deserializeProp: _tokenModelDeserializeProp, - idName: r'studentIdNorm', - indexes: {}, - links: {}, - embeddedSchemas: {}, - - getId: _tokenModelGetId, - getLinks: _tokenModelGetLinks, - attach: _tokenModelAttach, - version: '3.3.0', -); - -int _tokenModelEstimateSize( - TokenModel object, - List offsets, - Map> allOffsets, -) { - var bytesCount = offsets.last; - { - final value = object.accessToken; - if (value != null) { - bytesCount += 3 + value.length * 3; - } - } - { - final value = object.idToken; - if (value != null) { - bytesCount += 3 + value.length * 3; - } - } - { - final value = object.iss; - if (value != null) { - bytesCount += 3 + value.length * 3; - } - } - { - final value = object.refreshToken; - if (value != null) { - bytesCount += 3 + value.length * 3; - } - } - { - final value = object.studentId; - if (value != null) { - bytesCount += 3 + value.length * 3; - } - } - return bytesCount; -} - -void _tokenModelSerialize( - TokenModel object, - IsarWriter writer, - List offsets, - Map> allOffsets, -) { - writer.writeString(offsets[0], object.accessToken); - writer.writeDateTime(offsets[1], object.expiryDate); - writer.writeString(offsets[2], object.idToken); - writer.writeString(offsets[3], object.iss); - writer.writeString(offsets[4], object.refreshToken); - writer.writeString(offsets[5], object.studentId); - writer.writeLong(offsets[6], object.tokenVersion); - writer.writeLong(offsets[7], object.updatedAtMs); -} - -TokenModel _tokenModelDeserialize( - Id id, - IsarReader reader, - List offsets, - Map> allOffsets, -) { - final object = TokenModel(); - object.accessToken = reader.readStringOrNull(offsets[0]); - object.expiryDate = reader.readDateTimeOrNull(offsets[1]); - object.idToken = reader.readStringOrNull(offsets[2]); - object.iss = reader.readStringOrNull(offsets[3]); - object.refreshToken = reader.readStringOrNull(offsets[4]); - object.studentId = reader.readStringOrNull(offsets[5]); - object.studentIdNorm = id; - object.tokenVersion = reader.readLongOrNull(offsets[6]); - object.updatedAtMs = reader.readLongOrNull(offsets[7]); - return object; -} - -P _tokenModelDeserializeProp

( - IsarReader reader, - int propertyId, - int offset, - Map> allOffsets, -) { - switch (propertyId) { - case 0: - return (reader.readStringOrNull(offset)) as P; - case 1: - return (reader.readDateTimeOrNull(offset)) as P; - case 2: - return (reader.readStringOrNull(offset)) as P; - case 3: - return (reader.readStringOrNull(offset)) as P; - case 4: - return (reader.readStringOrNull(offset)) as P; - case 5: - return (reader.readStringOrNull(offset)) as P; - case 6: - return (reader.readLongOrNull(offset)) as P; - case 7: - return (reader.readLongOrNull(offset)) as P; - default: - throw IsarError('Unknown property with id $propertyId'); - } -} - -Id _tokenModelGetId(TokenModel object) { - return object.studentIdNorm ?? Isar.autoIncrement; -} - -List> _tokenModelGetLinks(TokenModel object) { - return []; -} - -void _tokenModelAttach(IsarCollection col, Id id, TokenModel object) { - object.studentIdNorm = id; -} - -extension TokenModelQueryWhereSort - on QueryBuilder { - QueryBuilder anyStudentIdNorm() { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause(const IdWhereClause.any()); - }); - } -} - -extension TokenModelQueryWhere - on QueryBuilder { - QueryBuilder studentIdNormEqualTo( - Id studentIdNorm, - ) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between(lower: studentIdNorm, upper: studentIdNorm), - ); - }); - } - - QueryBuilder - studentIdNormNotEqualTo(Id studentIdNorm) { - return QueryBuilder.apply(this, (query) { - if (query.whereSort == Sort.asc) { - return query - .addWhereClause( - IdWhereClause.lessThan(upper: studentIdNorm, includeUpper: false), - ) - .addWhereClause( - IdWhereClause.greaterThan( - lower: studentIdNorm, - includeLower: false, - ), - ); - } else { - return query - .addWhereClause( - IdWhereClause.greaterThan( - lower: studentIdNorm, - includeLower: false, - ), - ) - .addWhereClause( - IdWhereClause.lessThan(upper: studentIdNorm, includeUpper: false), - ); - } - }); - } - - QueryBuilder - studentIdNormGreaterThan(Id studentIdNorm, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.greaterThan(lower: studentIdNorm, includeLower: include), - ); - }); - } - - QueryBuilder studentIdNormLessThan( - Id studentIdNorm, { - bool include = false, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.lessThan(upper: studentIdNorm, includeUpper: include), - ); - }); - } - - QueryBuilder studentIdNormBetween( - Id lowerStudentIdNorm, - Id upperStudentIdNorm, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerStudentIdNorm, - includeLower: includeLower, - upper: upperStudentIdNorm, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension TokenModelQueryFilter - on QueryBuilder { - QueryBuilder - accessTokenIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'accessToken'), - ); - }); - } - - QueryBuilder - accessTokenIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'accessToken'), - ); - }); - } - - QueryBuilder - accessTokenEqualTo(String? value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'accessToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - accessTokenGreaterThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'accessToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - accessTokenLessThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'accessToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - accessTokenBetween( - String? lower, - String? upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'accessToken', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - accessTokenStartsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'accessToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - accessTokenEndsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'accessToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - accessTokenContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'accessToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - accessTokenMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'accessToken', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - accessTokenIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'accessToken', value: ''), - ); - }); - } - - QueryBuilder - accessTokenIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'accessToken', value: ''), - ); - }); - } - - QueryBuilder - expiryDateIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'expiryDate'), - ); - }); - } - - QueryBuilder - expiryDateIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'expiryDate'), - ); - }); - } - - QueryBuilder expiryDateEqualTo( - DateTime? value, - ) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'expiryDate', value: value), - ); - }); - } - - QueryBuilder - expiryDateGreaterThan(DateTime? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'expiryDate', - value: value, - ), - ); - }); - } - - QueryBuilder - expiryDateLessThan(DateTime? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'expiryDate', - value: value, - ), - ); - }); - } - - QueryBuilder expiryDateBetween( - DateTime? lower, - DateTime? upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'expiryDate', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder idTokenIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'idToken'), - ); - }); - } - - QueryBuilder - idTokenIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'idToken'), - ); - }); - } - - QueryBuilder idTokenEqualTo( - String? value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'idToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - idTokenGreaterThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'idToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder idTokenLessThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'idToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder idTokenBetween( - String? lower, - String? upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'idToken', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder idTokenStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'idToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder idTokenEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'idToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder idTokenContains( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'idToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder idTokenMatches( - String pattern, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'idToken', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder idTokenIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'idToken', value: ''), - ); - }); - } - - QueryBuilder - idTokenIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'idToken', value: ''), - ); - }); - } - - QueryBuilder issIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'iss'), - ); - }); - } - - QueryBuilder issIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'iss'), - ); - }); - } - - QueryBuilder issEqualTo( - String? value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'iss', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder issGreaterThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'iss', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder issLessThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'iss', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder issBetween( - String? lower, - String? upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'iss', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder issStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'iss', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder issEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'iss', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder issContains( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'iss', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder issMatches( - String pattern, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'iss', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder issIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'iss', value: ''), - ); - }); - } - - QueryBuilder issIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'iss', value: ''), - ); - }); - } - - QueryBuilder - refreshTokenIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'refreshToken'), - ); - }); - } - - QueryBuilder - refreshTokenIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'refreshToken'), - ); - }); - } - - QueryBuilder - refreshTokenEqualTo(String? value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'refreshToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - refreshTokenGreaterThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'refreshToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - refreshTokenLessThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'refreshToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - refreshTokenBetween( - String? lower, - String? upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'refreshToken', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - refreshTokenStartsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'refreshToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - refreshTokenEndsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'refreshToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - refreshTokenContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'refreshToken', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - refreshTokenMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'refreshToken', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - refreshTokenIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'refreshToken', value: ''), - ); - }); - } - - QueryBuilder - refreshTokenIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'refreshToken', value: ''), - ); - }); - } - - QueryBuilder - studentIdIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'studentId'), - ); - }); - } - - QueryBuilder - studentIdIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'studentId'), - ); - }); - } - - QueryBuilder studentIdEqualTo( - String? value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'studentId', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - studentIdGreaterThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'studentId', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder studentIdLessThan( - String? value, { - bool include = false, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'studentId', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder studentIdBetween( - String? lower, - String? upper, { - bool includeLower = true, - bool includeUpper = true, - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'studentId', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - studentIdStartsWith(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'studentId', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder studentIdEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'studentId', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder studentIdContains( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'studentId', - value: value, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder studentIdMatches( - String pattern, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'studentId', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); - }); - } - - QueryBuilder - studentIdIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'studentId', value: ''), - ); - }); - } - - QueryBuilder - studentIdIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'studentId', value: ''), - ); - }); - } - - QueryBuilder - studentIdNormIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'studentIdNorm'), - ); - }); - } - - QueryBuilder - studentIdNormIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'studentIdNorm'), - ); - }); - } - - QueryBuilder - studentIdNormEqualTo(Id? value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'studentIdNorm', value: value), - ); - }); - } - - QueryBuilder - studentIdNormGreaterThan(Id? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'studentIdNorm', - value: value, - ), - ); - }); - } - - QueryBuilder - studentIdNormLessThan(Id? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'studentIdNorm', - value: value, - ), - ); - }); - } - - QueryBuilder - studentIdNormBetween( - Id? lower, - Id? upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'studentIdNorm', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder - tokenVersionIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'tokenVersion'), - ); - }); - } - - QueryBuilder - tokenVersionIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'tokenVersion'), - ); - }); - } - - QueryBuilder - tokenVersionEqualTo(int? value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'tokenVersion', value: value), - ); - }); - } - - QueryBuilder - tokenVersionGreaterThan(int? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'tokenVersion', - value: value, - ), - ); - }); - } - - QueryBuilder - tokenVersionLessThan(int? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'tokenVersion', - value: value, - ), - ); - }); - } - - QueryBuilder - tokenVersionBetween( - int? lower, - int? upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'tokenVersion', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } - - QueryBuilder - updatedAtMsIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'updatedAtMs'), - ); - }); - } - - QueryBuilder - updatedAtMsIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'updatedAtMs'), - ); - }); - } - - QueryBuilder - updatedAtMsEqualTo(int? value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'updatedAtMs', value: value), - ); - }); - } - - QueryBuilder - updatedAtMsGreaterThan(int? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'updatedAtMs', - value: value, - ), - ); - }); - } - - QueryBuilder - updatedAtMsLessThan(int? value, {bool include = false}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'updatedAtMs', - value: value, - ), - ); - }); - } - - QueryBuilder - updatedAtMsBetween( - int? lower, - int? upper, { - bool includeLower = true, - bool includeUpper = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'updatedAtMs', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); - }); - } -} - -extension TokenModelQueryObject - on QueryBuilder {} - -extension TokenModelQueryLinks - on QueryBuilder {} - -extension TokenModelQuerySortBy - on QueryBuilder { - QueryBuilder sortByAccessToken() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'accessToken', Sort.asc); - }); - } - - QueryBuilder sortByAccessTokenDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'accessToken', Sort.desc); - }); - } - - QueryBuilder sortByExpiryDate() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'expiryDate', Sort.asc); - }); - } - - QueryBuilder sortByExpiryDateDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'expiryDate', Sort.desc); - }); - } - - QueryBuilder sortByIdToken() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'idToken', Sort.asc); - }); - } - - QueryBuilder sortByIdTokenDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'idToken', Sort.desc); - }); - } - - QueryBuilder sortByIss() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'iss', Sort.asc); - }); - } - - QueryBuilder sortByIssDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'iss', Sort.desc); - }); - } - - QueryBuilder sortByRefreshToken() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'refreshToken', Sort.asc); - }); - } - - QueryBuilder sortByRefreshTokenDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'refreshToken', Sort.desc); - }); - } - - QueryBuilder sortByStudentId() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'studentId', Sort.asc); - }); - } - - QueryBuilder sortByStudentIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'studentId', Sort.desc); - }); - } - - QueryBuilder sortByTokenVersion() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'tokenVersion', Sort.asc); - }); - } - - QueryBuilder sortByTokenVersionDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'tokenVersion', Sort.desc); - }); - } - - QueryBuilder sortByUpdatedAtMs() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'updatedAtMs', Sort.asc); - }); - } - - QueryBuilder sortByUpdatedAtMsDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'updatedAtMs', Sort.desc); - }); - } -} - -extension TokenModelQuerySortThenBy - on QueryBuilder { - QueryBuilder thenByAccessToken() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'accessToken', Sort.asc); - }); - } - - QueryBuilder thenByAccessTokenDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'accessToken', Sort.desc); - }); - } - - QueryBuilder thenByExpiryDate() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'expiryDate', Sort.asc); - }); - } - - QueryBuilder thenByExpiryDateDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'expiryDate', Sort.desc); - }); - } - - QueryBuilder thenByIdToken() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'idToken', Sort.asc); - }); - } - - QueryBuilder thenByIdTokenDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'idToken', Sort.desc); - }); - } - - QueryBuilder thenByIss() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'iss', Sort.asc); - }); - } - - QueryBuilder thenByIssDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'iss', Sort.desc); - }); - } - - QueryBuilder thenByRefreshToken() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'refreshToken', Sort.asc); - }); - } - - QueryBuilder thenByRefreshTokenDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'refreshToken', Sort.desc); - }); - } - - QueryBuilder thenByStudentId() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'studentId', Sort.asc); - }); - } - - QueryBuilder thenByStudentIdDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'studentId', Sort.desc); - }); - } - - QueryBuilder thenByStudentIdNorm() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'studentIdNorm', Sort.asc); - }); - } - - QueryBuilder thenByStudentIdNormDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'studentIdNorm', Sort.desc); - }); - } - - QueryBuilder thenByTokenVersion() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'tokenVersion', Sort.asc); - }); - } - - QueryBuilder thenByTokenVersionDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'tokenVersion', Sort.desc); - }); - } - - QueryBuilder thenByUpdatedAtMs() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'updatedAtMs', Sort.asc); - }); - } - - QueryBuilder thenByUpdatedAtMsDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(r'updatedAtMs', Sort.desc); - }); - } -} - -extension TokenModelQueryWhereDistinct - on QueryBuilder { - QueryBuilder distinctByAccessToken({ - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'accessToken', caseSensitive: caseSensitive); - }); - } - - QueryBuilder distinctByExpiryDate() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'expiryDate'); - }); - } - - QueryBuilder distinctByIdToken({ - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'idToken', caseSensitive: caseSensitive); - }); - } - - QueryBuilder distinctByIss({ - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'iss', caseSensitive: caseSensitive); - }); - } - - QueryBuilder distinctByRefreshToken({ - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'refreshToken', caseSensitive: caseSensitive); - }); - } - - QueryBuilder distinctByStudentId({ - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'studentId', caseSensitive: caseSensitive); - }); - } - - QueryBuilder distinctByTokenVersion() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'tokenVersion'); - }); - } - - QueryBuilder distinctByUpdatedAtMs() { - return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(r'updatedAtMs'); - }); - } -} - -extension TokenModelQueryProperty - on QueryBuilder { - QueryBuilder studentIdNormProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'studentIdNorm'); - }); - } - - QueryBuilder accessTokenProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'accessToken'); - }); - } - - QueryBuilder expiryDateProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'expiryDate'); - }); - } - - QueryBuilder idTokenProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'idToken'); - }); - } - - QueryBuilder issProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'iss'); - }); - } - - QueryBuilder refreshTokenProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'refreshToken'); - }); - } - - QueryBuilder studentIdProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'studentId'); - }); - } - - QueryBuilder tokenVersionProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'tokenVersion'); - }); - } - - QueryBuilder updatedAtMsProperty() { - return QueryBuilder.apply(this, (query) { - return query.addPropertyName(r'updatedAtMs'); - }); - } -} diff --git a/firka/lib/main.dart b/firka/lib/main.dart index 70920a1..43496ff 100644 --- a/firka/lib/main.dart +++ b/firka/lib/main.dart @@ -1,359 +1,12 @@ import 'dart:async'; -import 'dart:io'; -import 'dart:ui' as ui; -import 'package:dio/dio.dart'; -import 'package:firka/helpers/api/client/kreta_client.dart'; -import 'package:firka/helpers/db/models/app_settings_model.dart'; -import 'package:firka/helpers/db/models/generic_cache_model.dart'; -import 'package:firka/helpers/db/models/timetable_cache_model.dart'; -import 'package:firka/helpers/db/models/token_model.dart'; -import 'package:firka/helpers/firka_bundle.dart'; -import 'package:firka/helpers/settings.dart'; -import 'package:firka/helpers/swear_generator.dart'; -import 'package:firka/l10n/app_localizations_hu.dart'; -import 'package:firka/ui/model/style.dart'; -import 'package:firka/ui/phone/pages/error/error_page.dart'; -import 'package:firka/ui/phone/screens/debug/debug_screen.dart'; -import 'package:firka/ui/phone/screens/home/home_screen.dart'; -import 'package:firka/ui/phone/screens/login/login_screen.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:flutter_native_splash/flutter_native_splash.dart'; -import 'package:intl/intl.dart'; -import 'package:isar_community/isar.dart'; import 'package:logging/logging.dart'; -import 'package:package_info_plus/package_info_plus.dart'; -import 'package:path/path.dart' as p; -import 'package:path_provider/path_provider.dart'; +import 'package:flutter_native_splash/flutter_native_splash.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; -import 'helpers/db/models/homework_cache_model.dart'; -import 'helpers/update_notifier.dart'; -import 'helpers/live_activity_service.dart'; -import 'helpers/active_account_helper.dart'; -import 'helpers/watch_sync_helper.dart'; -import 'l10n/app_localizations.dart'; -import 'l10n/app_localizations_de.dart'; -import 'l10n/app_localizations_en.dart'; - -late final Logger logger; - -Isar? isarInit; -final GlobalKey navigatorKey = GlobalKey(); -late AppInitialization initData; -bool initDone = false; - -final dio = Dio(); -final isBeta = true; - -class DeviceInfo { - String model; - - String versionRelease; - String versionSdkInt; - - DeviceInfo(this.model, this.versionRelease, this.versionSdkInt); - - @override - String toString() { - return "DeviceInfo(model = \"$model\", versionRelease = \"$versionRelease\"" - ", versionSdkInt = \"$versionSdkInt\""; - } -} - -class AppInitialization { - final Isar isar; - final Directory appDir; - final PackageInfo packageInfo; - final DeviceInfo devInfo; - late KretaClient client; - List tokens; - bool hasWatchListener = false; - Uint8List? profilePicture; - SettingsStore settings; - UpdateNotifier settingsUpdateNotifier = UpdateNotifier(); - UpdateNotifier profilePictureUpdateNotifier = UpdateNotifier(); - AppLocalizations l10n; - final GlobalKey navigatorKey; - - AppInitialization({ - required this.isar, - required this.appDir, - required this.devInfo, - required this.packageInfo, - required this.tokens, - required this.settings, - required this.l10n, - required this.navigatorKey, - }); -} - -Future initDB() async { - if (isarInit != null) return isarInit!; - final dir = await getApplicationDocumentsDirectory(); - - isarInit = await Isar.open( - [ - TokenModelSchema, - GenericCacheModelSchema, - TimetableCacheModelSchema, - HomeworkCacheModelSchema, - AppSettingsModelSchema, - HomeworkDoneModelSchema, - ], - inspector: true, - directory: dir.path, - ); - - return isarInit!; -} - -Future initLang(AppInitialization data) async { - String? languageCode; - - switch ((data.settings.group("settings").subGroup("application")["language"] - as SettingsItemsRadio) - .activeIndex) { - case 1: // hu - data.l10n = AppLocalizationsHu(); - languageCode = 'hu'; - break; - case 2: // en - data.l10n = AppLocalizationsEn(); - languageCode = 'en'; - break; - case 3: // de - data.l10n = AppLocalizationsDe(); - languageCode = 'de'; - break; - default: // auto - switch (ui.PlatformDispatcher.instance.locale.languageCode) { - case 'hu': - data.l10n = AppLocalizationsHu(); - languageCode = 'hu'; - break; - case 'en': - data.l10n = AppLocalizationsEn(); - languageCode = 'en'; - break; - case 'de': - data.l10n = AppLocalizationsDe(); - languageCode = 'de'; - break; - } - break; - } - - if (languageCode != null && Platform.isIOS) { - try { - await LiveActivityService.updateLanguagePreference(languageCode); - } catch (e) { - logger.warning('Failed to update language preference on backend: $e'); - } - - try { - await WatchSyncHelper.sendLanguageToWatch(); - } catch (e) { - logger.warning('Failed to send language to Watch: $e'); - } - } -} - -void initTheme(AppInitialization data) { - final brightness = - SchedulerBinding.instance.platformDispatcher.platformBrightness; - - switch ((data.settings.group("settings").subGroup("customization")["theme"] - as SettingsItemsRadio) - .activeIndex) { - case 1: - appStyle = lightStyle; - isLightMode.value = true; - break; - case 2: - appStyle = darkStyle; - isLightMode.value = false; - break; - default: - if (brightness == Brightness.dark) { - appStyle = darkStyle; - isLightMode.value = false; - } else { - appStyle = lightStyle; - isLightMode.value = true; - } - } -} - -Future _initData(AppInitialization init) async { - await init.settings.load(init.isar.appSettingsModels); - await initLang(init); - initTheme(init); - init.settings = SettingsStore(init.l10n); - await init.settings.load(init.isar.appSettingsModels); - - var dispatcher = SchedulerBinding.instance.platformDispatcher; - - dispatcher.onPlatformBrightnessChanged = () { - globalUpdate.update(); - initTheme(init); - }; - - dispatcher.onLocaleChanged = () { - final languageSetting = - init.settings.group("settings").subGroup("application")["language"] - as SettingsItemsRadio; - final isAutoLanguage = languageSetting.activeIndex == 0; - if (!isAutoLanguage) { - return; - } - - final previousLocale = init.l10n.localeName; - unawaited(() async { - await initLang(init); - final nextLocale = init.l10n.localeName; - if (previousLocale != nextLocale) { - logger.info( - "[Init] System locale changed in auto mode: $previousLocale -> $nextLocale", - ); - } - globalUpdate.update(); - }()); - }; - - resetOldTimeTableCache(init.isar); - resetOldHomeworkCache(init.isar); - - var didRunFreshInstallCleanup = false; - if (Platform.isIOS) { - try { - didRunFreshInstallCleanup = - await WatchSyncHelper.runFreshInstallCleanupIfNeeded(isar: init.isar); - if (didRunFreshInstallCleanup) { - logger.info( - '[Init] Fresh-install cleanup completed; skipping startup iCloud recovery on this launch', - ); - } else { - await WatchSyncHelper.checkAndRecoverFromiCloud( - isar: init.isar, - tokens: init.tokens, - ); - } - } catch (e) { - logger.warning('[Init] iCloud bootstrap/recovery failed: $e'); - } - } - - final allTokens = await init.isar.tokenModels.where().findAll(); - init.tokens = allTokens; - - if (allTokens.isNotEmpty) { - final token = pickActiveToken(tokens: allTokens, settings: init.settings); - if (token == null) { - logger.warning( - "[Init] Tokens disappeared during initialization; skipping client setup", - ); - return; - } - logger.fine("Initializing kréta client as: ${token.studentId}"); - init.client = KretaClient(token, init.isar); - - if (Platform.isIOS) { - final expiryDate = token.expiryDate; - if (expiryDate != null && expiryDate.isAfter(DateTime.now())) { - KretaClient.clearReauthFlag(); - } - - unawaited(() async { - try { - await WatchSyncHelper.saveTokenToiCloud(token); - } catch (e) { - logger.warning('[Init] Failed to sync active token to iCloud: $e'); - } - - try { - await WatchSyncHelper.sendTokenModelToWatch(token); - } catch (e) { - logger.warning('[Init] Failed to sync active token to Watch: $e'); - } - }()); - } - } - - final dataDir = await getApplicationDocumentsDirectory(); - var pfpFile = File(p.join(dataDir.path, "profile.webp")); - - if (await pfpFile.exists()) { - init.profilePicture = await pfpFile.readAsBytes(); - } -} - -Future initializeApp() async { - if (initDone) { - await _initData(initData); - return initData; - } - final isar = await initDB(); - final tokens = await isar.tokenModels.where().findAll(); - - logger.finest('Token count: ${tokens.length}'); - - var devInfoFetched = false; - var devInfo = DeviceInfo("SM-A705FN", "11", "30"); - - try { - if (Platform.isAndroid) { - const channel = MethodChannel("firka.app/main"); - final rawInfo = ((await channel.invokeMethod("get_info")) as String) - .split(";"); - - devInfo = DeviceInfo(rawInfo[0], rawInfo[1], rawInfo[2]); - devInfoFetched = true; - } - } catch (e) { - if (e is Error) { - logger.shout("Error in initializeApp()", e.toString(), e.stackTrace); - } else { - logger.shout("Error in initializeApp()", e.toString()); - } - } - - logger.fine("Fetched device info: ${devInfoFetched ? "yes" : "no"}"); - logger.fine("Using device info: ${devInfo.toString()}"); - - var init = AppInitialization( - isar: isar, - appDir: await getApplicationDocumentsDirectory(), - devInfo: devInfo, - packageInfo: await PackageInfo.fromPlatform(), - tokens: tokens, - settings: SettingsStore(AppLocalizationsHu()), - l10n: AppLocalizationsHu(), - navigatorKey: navigatorKey, - ); - - if (Platform.isIOS) { - try { - await LiveActivityService.initialize().timeout( - const Duration(seconds: 8), - ); - } on TimeoutException catch (e, st) { - logger.warning('LiveActivity init timed out: $e', e, st); - } catch (e, st) { - logger.severe('Failed to initialize LiveActivity: $e', e, st); - } - } - - await _initData(init); - - init.settingsUpdateNotifier.addListener(() { - logger.finest("Settings updated"); - }); - - return init; -} +import 'package:firka/app/app_state.dart'; +import 'package:firka/app/initialization.dart'; +import 'package:firka/app/initialization_screen.dart'; +import 'package:firka/ui/phone/pages/error/error_page.dart'; void main() async { logger = Logger("Firka"); @@ -374,113 +27,8 @@ void main() async { logger.severe("Failed to load .env: $e", e, st); } - { - final jwtPattern = RegExp( - r'([A-Za-z0-9-_]+)\.([A-Za-z0-9-_]+)\.([A-Za-z0-9-_]+)', - ); - final omPattern = RegExp(r'(\d{3})(\d{6})([A-Za-z0-9]?)'); - final refreshTokenPattern = RegExp( - r'"(?=.{21,}$)([A-Z0-9]+-[A-Z0-9_\-.~+]*)"', - ); + await setupLogging(); - final docs = await getApplicationDocumentsDirectory(); - - Future deleteOldLogFiles() async { - final docs = await getApplicationDocumentsDirectory(); - final dir = Directory(docs.path); - if (!dir.existsSync()) return; - - final now = DateTime.now(); - final cutoff = now.subtract(Duration(days: 30)); - - final logFileRegex = RegExp(r'^(\d{4})_(\d{2})_(\d{2})\.log$'); - - for (final entity in dir.listSync()) { - if (entity is! File) continue; - final name = entity.uri.pathSegments.last; - final m = logFileRegex.firstMatch(name); - if (m == null) continue; - - try { - final y = int.parse(m.group(1)!); - final mo = int.parse(m.group(2)!); - final d = int.parse(m.group(3)!); - final fileDate = DateTime(y, mo, d); - if (fileDate.isBefore( - DateTime(cutoff.year, cutoff.month, cutoff.day), - )) { - logger.info("Removing old log file: $name"); - await entity.delete(); - } - } catch (_) { - // ignore parse/delete errors - } - } - } - - String logFilePathForDate(DateTime dt) { - final fileName = "${DateFormat("yyyy_MM_dd").format(dt)}.log"; - return Directory(docs.path).uri.resolve(fileName).toFilePath(); - } - - File fileForDate(DateTime dt) { - final path = logFilePathForDate(dt); - final file = File(path); - if (!file.existsSync()) file.createSync(recursive: true); - return file; - } - - String censorLog(String msg) { - return msg - .replaceAll(jwtPattern, '***') - .replaceAllMapped(omPattern, (match) { - return "${match.group(1)}******${match.group(3)}"; - }) - .replaceAll(refreshTokenPattern, '"***"'); - } - - hierarchicalLoggingEnabled = true; - logger.level = Level.ALL; - - DateTime currentDate = DateTime.now(); - IOSink sink = fileForDate(currentDate).openWrite(mode: FileMode.append); - - logger.onRecord.listen((record) { - final now = DateTime.now(); - if (now.year != currentDate.year || - now.month != currentDate.month || - now.day != currentDate.day) { - sink.flush(); - sink.close(); - currentDate = now; - sink = fileForDate(currentDate).openWrite(mode: FileMode.append); - } - - final censored = censorLog(record.message); - final timestamp = DateFormat('yyyy-MM-dd HH:mm:ss.SSS').format(now); - final level = record.level.name; - final line = '[$timestamp] [$level] [$censored]'; - sink.writeln(line); - - debugPrint( - "[Firka] [${record.level.name}] ${kDebugMode ? record.message : censored}", - ); - }); - - (() async { - await deleteOldLogFiles(); - })(); - } - - try { - logger.finest('loading dirty words'); - await loadDirtyWords(); - logger.finest('loaded dirty words'); - } catch (e, st) { - logger.severe('Failed to load dirty words: $e', e, st); - } - - // Run App Initialization runApp(InitializationScreen()); }, (error, stackTrace) { @@ -498,174 +46,3 @@ void main() async { }, ); } - -final ValueNotifier isLightMode = ValueNotifier(true); -final UpdateNotifier globalUpdate = UpdateNotifier(); - -class InitializationScreen extends StatelessWidget { - InitializationScreen({super.key}); - - final Future _init = initializeApp().timeout( - const Duration(seconds: 20), - ); - - @override - Widget build(BuildContext context) { - return FutureBuilder( - future: _init, - builder: (context, snapshot) { - // Check if initialization is complete - if (snapshot.connectionState == ConnectionState.done) { - if (snapshot.hasError) { - logger.shout( - "Error in InitializationScreen", - snapshot.error.toString(), - snapshot.stackTrace, - ); - - FlutterNativeSplash.remove(); - - // Handle initialization error - return MaterialApp( - key: ValueKey('errorPage'), - home: DefaultAssetBundle( - bundle: FirkaBundle(), - child: Scaffold( - body: Center( - child: Text( - 'Error initializing app: ${snapshot.error}', - style: TextStyle(color: Colors.red), - ), - ), - ), - ), - ); - } - - // Initialization successful, determine which screen to show - Widget screen; - - assert(snapshot.data != null); - initData = snapshot.data!; - initDone = true; - - FlutterNativeSplash.remove(); - - WatchSyncHelper.initialize(); - if (Platform.isIOS) { - unawaited(() async { - try { - await WatchSyncHelper.sendLanguageToWatch(); - } catch (e) { - logger.warning( - '[Init] Failed to publish language to Watch after sync init: $e', - ); - } - }()); - } - - if (!initData.hasWatchListener) { - initData.hasWatchListener = true; - - WatchSyncHelper.onWatchMessage = (msg) { - logger.finest("WatchOS IPC [Watch -> Phone]: ${msg["id"]}"); - - switch (msg["id"]) { - case "ping": - if (initData.tokens.isNotEmpty) { - logger.finest("WatchOS IPC [Phone -> Watch]: pong"); - const watchChannel = MethodChannel('app.firka/watch_sync'); - watchChannel.invokeMethod('sendMessageToWatch', { - "id": "pong", - }); - navigatorKey.currentState?.push( - MaterialPageRoute( - builder: (context) => HomeScreen( - initData, - true, - model: msg["model"] as String? ?? "unknown", - ), - ), - ); - } - } - }; - } - - if (snapshot.data!.tokens.isEmpty) { - screen = LoginScreen(initData, key: ValueKey('loginScreen')); - } else { - screen = HomeScreen(initData, false, key: ValueKey('homeScreen')); - } - - return MaterialApp( - title: 'Firka', - key: ValueKey('firkaApp'), - navigatorKey: navigatorKey, - // Use the global navigator key - theme: ThemeData( - primarySwatch: Colors.lightGreen, - visualDensity: VisualDensity.adaptivePlatformDensity, - ), - localizationsDelegates: [ - AppLocalizations.delegate, - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - ], - supportedLocales: AppLocalizations.supportedLocales, - home: DefaultAssetBundle( - bundle: FirkaBundle(), - child: ValueListenableBuilder( - valueListenable: isLightMode, - builder: (context, isLight, _) { - final overlay = SystemUiOverlayStyle( - statusBarColor: Colors.transparent, - statusBarIconBrightness: isLight - ? Brightness.dark - : Brightness.light, - statusBarBrightness: isLight - ? Brightness.light - : Brightness.dark, - systemStatusBarContrastEnforced: false, - ); - - // Ensure system is updated immediately - SystemChrome.setSystemUIOverlayStyle(overlay); - - return AnnotatedRegion( - value: overlay, - child: screen, - ); - }, - ), - ), - routes: { - '/login': (context) => DefaultAssetBundle( - bundle: FirkaBundle(), - child: LoginScreen(initData, key: ValueKey('loginScreen')), - ), - '/home': (context) => DefaultAssetBundle( - bundle: FirkaBundle(), - child: HomeScreen(initData, false, key: ValueKey('homeScreen')), - ), - '/debug': (context) => DefaultAssetBundle( - bundle: FirkaBundle(), - child: DebugScreen(initData, key: ValueKey('debugScreen')), - ), - }, - ); - } - - return MaterialApp( - home: DefaultAssetBundle( - bundle: FirkaBundle(), - child: Scaffold( - backgroundColor: const Color(0xFF7CA120), - body: Container(), // Covered by native splash - ), - ), - ); - }, - ); - } -} diff --git a/firka/lib/helpers/active_account_helper.dart b/firka/lib/services/active_account_helper.dart similarity index 94% rename from firka/lib/helpers/active_account_helper.dart rename to firka/lib/services/active_account_helper.dart index 4b5b0a1..21ba6cb 100644 --- a/firka/lib/helpers/active_account_helper.dart +++ b/firka/lib/services/active_account_helper.dart @@ -1,4 +1,4 @@ -import 'db/models/token_model.dart'; +import 'package:firka/data/models/token_model.dart'; int resolveActiveAccountIndex(dynamic settings) { try { diff --git a/firka/lib/helpers/live_activity_manager.dart b/firka/lib/services/live_activity_manager.dart similarity index 99% rename from firka/lib/helpers/live_activity_manager.dart rename to firka/lib/services/live_activity_manager.dart index 03aa6d9..d04bb79 100644 --- a/firka/lib/helpers/live_activity_manager.dart +++ b/firka/lib/services/live_activity_manager.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:flutter/services.dart'; -import 'package:firka/helpers/api/model/timetable.dart'; +import 'package:firka/api/model/timetable.dart'; import 'package:logging/logging.dart'; class LiveActivityManager { diff --git a/firka/lib/helpers/live_activity_service.dart b/firka/lib/services/live_activity_service.dart similarity index 99% rename from firka/lib/helpers/live_activity_service.dart rename to firka/lib/services/live_activity_service.dart index eb963f8..74fa9d1 100644 --- a/firka/lib/helpers/live_activity_service.dart +++ b/firka/lib/services/live_activity_service.dart @@ -1,21 +1,21 @@ import 'dart:async'; import 'dart:io'; -import 'package:firka/helpers/api/client/kreta_client.dart'; -import 'package:firka/helpers/api/client/live_activity_backend_client.dart'; -import 'package:firka/helpers/api/model/generic.dart'; -import 'package:firka/helpers/api/model/timetable.dart'; -import 'package:firka/helpers/db/models/app_settings_model.dart'; -import 'package:firka/helpers/db/widget.dart'; -import 'package:firka/helpers/live_activity_manager.dart'; -import 'package:firka/helpers/active_account_helper.dart'; -import 'package:firka/helpers/settings.dart'; +import 'package:firka/api/client/kreta_client.dart'; +import 'package:firka/api/client/live_activity_backend_client.dart'; +import 'package:firka/api/model/generic.dart'; +import 'package:firka/api/model/timetable.dart'; +import 'package:firka/data/models/app_settings_model.dart'; +import 'package:firka/data/widget.dart'; +import 'package:firka/services/live_activity_manager.dart'; +import 'package:firka/services/active_account_helper.dart'; +import 'package:firka/core/settings.dart'; import 'package:firka/ui/phone/screens/live_activity/live_activity_consent_screen.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:logging/logging.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import '../main.dart'; +import 'package:firka/app/app_state.dart'; /// Service that coordinates LiveActivity functionality /// Handles timetable synchronization, device token management, and activity updates diff --git a/firka/lib/helpers/watch_sync_helper.dart b/firka/lib/services/watch_sync_helper.dart similarity index 99% rename from firka/lib/helpers/watch_sync_helper.dart rename to firka/lib/services/watch_sync_helper.dart index e9ff458..96ee93e 100644 --- a/firka/lib/helpers/watch_sync_helper.dart +++ b/firka/lib/services/watch_sync_helper.dart @@ -7,10 +7,10 @@ import 'package:flutter/services.dart'; import 'package:isar_community/isar.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import '../main.dart'; -import 'active_account_helper.dart'; -import 'api/client/kreta_client.dart'; -import 'db/models/token_model.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/services/active_account_helper.dart'; +import 'package:firka/api/client/kreta_client.dart'; +import 'package:firka/data/models/token_model.dart'; /// Helper class for Watch ↔ iPhone token sync class WatchSyncHelper { diff --git a/firka/lib/helpers/ui/common_bottom_sheets.dart b/firka/lib/ui/components/common_bottom_sheets.dart similarity index 97% rename from firka/lib/helpers/ui/common_bottom_sheets.dart rename to firka/lib/ui/components/common_bottom_sheets.dart index ae61266..adfd98a 100644 --- a/firka/lib/helpers/ui/common_bottom_sheets.dart +++ b/firka/lib/ui/components/common_bottom_sheets.dart @@ -1,28 +1,28 @@ -import 'package:firka/helpers/api/model/generic.dart'; -import 'package:firka/helpers/api/model/grade.dart'; -import 'package:firka/helpers/api/model/homework.dart'; -import 'package:firka/helpers/api/model/subject.dart'; -import 'package:firka/helpers/db/models/homework_cache_model.dart'; -import 'package:firka/helpers/debug_helper.dart'; -import 'package:firka/helpers/extensions.dart'; -import 'package:firka/helpers/settings.dart'; -import 'package:firka/helpers/ui/firka_shadow.dart'; -import 'package:firka/ui/widget/firka_icon.dart'; +import 'package:firka/api/model/generic.dart'; +import 'package:firka/api/model/grade.dart'; +import 'package:firka/api/model/homework.dart'; +import 'package:firka/api/model/subject.dart'; +import 'package:firka/data/models/homework_cache_model.dart'; +import 'package:firka/core/debug_helper.dart'; +import 'package:firka/core/extensions.dart'; +import 'package:firka/core/settings.dart'; +import 'package:firka/ui/components/firka_shadow.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import 'package:flutter/material.dart'; import 'package:flutter_html/flutter_html.dart'; import 'package:flutter_svg/svg.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; import 'package:intl/intl.dart'; -import '../../main.dart'; -import '../../ui/model/style.dart'; -import '../../ui/phone/screens/home/home_screen.dart'; -import '../../ui/phone/widgets/lesson.dart'; -import '../../ui/widget/class_icon.dart'; -import '../api/model/timetable.dart'; -import 'firka_card.dart'; -import 'grade.dart'; -import '../../helpers/api/model/test.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/theme/style.dart'; +import 'package:firka/ui/phone/screens/home/home_screen.dart'; +import 'package:firka/ui/phone/widgets/lesson.dart'; +import 'package:firka/ui/shared/class_icon.dart'; +import 'package:firka/api/model/timetable.dart'; +import 'package:firka/ui/components/firka_card.dart'; +import 'package:firka/ui/components/grade.dart'; +import 'package:firka/api/model/test.dart'; Future showLessonBottomSheet( BuildContext context, diff --git a/firka/lib/helpers/ui/firka_button.dart b/firka/lib/ui/components/firka_button.dart similarity index 100% rename from firka/lib/helpers/ui/firka_button.dart rename to firka/lib/ui/components/firka_button.dart diff --git a/firka/lib/helpers/ui/firka_card.dart b/firka/lib/ui/components/firka_card.dart similarity index 96% rename from firka/lib/helpers/ui/firka_card.dart rename to firka/lib/ui/components/firka_card.dart index 76b1c57..c062bd4 100644 --- a/firka/lib/helpers/ui/firka_card.dart +++ b/firka/lib/ui/components/firka_card.dart @@ -1,8 +1,8 @@ -import 'package:firka/helpers/ui/firka_shadow.dart'; +import 'package:firka/ui/components/firka_shadow.dart'; import 'package:flutter/material.dart'; -import '../../main.dart'; -import '../../ui/model/style.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/theme/style.dart'; enum Attach { none, bottom, top } diff --git a/firka/lib/helpers/ui/firka_shadow.dart b/firka/lib/ui/components/firka_shadow.dart similarity index 91% rename from firka/lib/helpers/ui/firka_shadow.dart rename to firka/lib/ui/components/firka_shadow.dart index eb8a309..35c93b0 100644 --- a/firka/lib/helpers/ui/firka_shadow.dart +++ b/firka/lib/ui/components/firka_shadow.dart @@ -1,7 +1,7 @@ -import 'package:firka/main.dart'; +import 'package:firka/app/app_state.dart'; import 'package:flutter/material.dart'; -import '../../ui/model/style.dart'; +import 'package:firka/ui/theme/style.dart'; class FirkaShadow extends StatelessWidget { final Widget child; diff --git a/firka/lib/helpers/ui/grade.dart b/firka/lib/ui/components/grade.dart similarity index 95% rename from firka/lib/helpers/ui/grade.dart rename to firka/lib/ui/components/grade.dart index 49fb46c..c363b96 100644 --- a/firka/lib/helpers/ui/grade.dart +++ b/firka/lib/ui/components/grade.dart @@ -1,8 +1,8 @@ -import 'package:firka/helpers/api/model/grade.dart'; +import 'package:firka/api/model/grade.dart'; import 'package:flutter/material.dart'; -import '../../ui/model/style.dart'; -import 'grade_helpers.dart'; +import 'package:firka/ui/theme/style.dart'; +import 'package:firka/ui/components/grade_helpers.dart'; class GradeWidget extends StatelessWidget { final Grade grade; diff --git a/firka/lib/helpers/ui/grade_helpers.dart b/firka/lib/ui/components/grade_helpers.dart similarity index 86% rename from firka/lib/helpers/ui/grade_helpers.dart rename to firka/lib/ui/components/grade_helpers.dart index be85f56..f211c6c 100644 --- a/firka/lib/helpers/ui/grade_helpers.dart +++ b/firka/lib/ui/components/grade_helpers.dart @@ -1,11 +1,11 @@ import 'dart:ui'; -import 'package:firka/helpers/settings.dart'; -import 'package:firka/main.dart'; +import 'package:firka/core/settings.dart'; +import 'package:firka/app/app_state.dart'; -import '../../ui/model/style.dart'; -import '../api/model/grade.dart'; -import '../api/model/subject.dart'; +import 'package:firka/ui/theme/style.dart'; +import 'package:firka/api/model/grade.dart'; +import 'package:firka/api/model/subject.dart'; int roundGrade(double grade) { final rounding = initData.settings diff --git a/firka/lib/ui/phone/pages/error/error_page.dart b/firka/lib/ui/phone/pages/error/error_page.dart index d3ea7a5..f810a08 100644 --- a/firka/lib/ui/phone/pages/error/error_page.dart +++ b/firka/lib/ui/phone/pages/error/error_page.dart @@ -1,8 +1,8 @@ -import 'package:firka/ui/model/style.dart'; +import 'package:firka/ui/theme/style.dart'; import 'package:flutter/material.dart'; -import 'package:firka/helpers/image_preloader.dart'; -import 'package:firka/helpers/firka_bundle.dart'; -import 'package:firka/helpers/swear_generator.dart'; +import 'package:firka/core/image_preloader.dart'; +import 'package:firka/core/firka_bundle.dart'; +import 'package:firka/core/swear_generator.dart'; class ErrorPage extends StatelessWidget { final String exception; diff --git a/firka/lib/ui/phone/pages/extras/extras.dart b/firka/lib/ui/phone/pages/extras/extras.dart index 5253956..54fa3bb 100644 --- a/firka/lib/ui/phone/pages/extras/extras.dart +++ b/firka/lib/ui/phone/pages/extras/extras.dart @@ -1,16 +1,16 @@ -import 'package:firka/helpers/db/models/app_settings_model.dart'; -import 'package:firka/helpers/settings.dart'; -import 'package:firka/helpers/ui/firka_shadow.dart'; -import 'package:firka/main.dart'; -import 'package:firka/ui/model/style.dart'; +import 'package:firka/data/models/app_settings_model.dart'; +import 'package:firka/core/settings.dart'; +import 'package:firka/ui/components/firka_shadow.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/theme/style.dart'; import 'package:firka/ui/phone/screens/settings/settings_screen.dart'; -import 'package:firka/ui/widget/firka_icon.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import 'package:flutter/material.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; -import '../../../../helpers/firka_bundle.dart'; -import '../../screens/debug/debug_screen.dart'; -import '../../screens/home/home_screen.dart'; +import 'package:firka/core/firka_bundle.dart'; +import 'package:firka/ui/phone/screens/debug/debug_screen.dart'; +import 'package:firka/ui/phone/screens/home/home_screen.dart'; void showExtrasBottomSheet(BuildContext context, AppInitialization data) { Widget Function(double) debugBtn = (_) => const SizedBox(); diff --git a/firka/lib/ui/phone/pages/extras/main_error.dart b/firka/lib/ui/phone/pages/extras/main_error.dart index dbc1028..918a506 100644 --- a/firka/lib/ui/phone/pages/extras/main_error.dart +++ b/firka/lib/ui/phone/pages/extras/main_error.dart @@ -1,4 +1,4 @@ -import 'package:firka/ui/model/style.dart'; +import 'package:firka/ui/theme/style.dart'; import 'package:flutter/material.dart'; void showErrorBottomSheet(BuildContext context, String err) { diff --git a/firka/lib/ui/phone/pages/extras/main_reauth.dart b/firka/lib/ui/phone/pages/extras/main_reauth.dart index d6f3d66..ef99809 100644 --- a/firka/lib/ui/phone/pages/extras/main_reauth.dart +++ b/firka/lib/ui/phone/pages/extras/main_reauth.dart @@ -1,6 +1,6 @@ -import 'package:firka/helpers/settings.dart'; -import 'package:firka/main.dart'; -import 'package:firka/ui/model/style.dart'; +import 'package:firka/core/settings.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/theme/style.dart'; import 'package:firka/ui/phone/widgets/login_webview.dart'; import 'package:flutter/material.dart'; diff --git a/firka/lib/ui/phone/pages/extras/main_wear_pair.dart b/firka/lib/ui/phone/pages/extras/main_wear_pair.dart index 6c4fc58..0fcfbbb 100644 --- a/firka/lib/ui/phone/pages/extras/main_wear_pair.dart +++ b/firka/lib/ui/phone/pages/extras/main_wear_pair.dart @@ -1,11 +1,11 @@ -import 'package:firka/helpers/debug_helper.dart'; -import 'package:firka/helpers/ui/firka_card.dart'; -import 'package:firka/helpers/watch_sync_helper.dart'; -import 'package:firka/main.dart'; +import 'package:firka/core/debug_helper.dart'; +import 'package:firka/ui/components/firka_card.dart'; +import 'package:firka/services/watch_sync_helper.dart'; +import 'package:firka/app/app_state.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import '../../../model/style.dart'; +import 'package:firka/ui/theme/style.dart'; void showWearBottomSheet( BuildContext context, diff --git a/firka/lib/ui/phone/pages/extras/reauth_toast.dart b/firka/lib/ui/phone/pages/extras/reauth_toast.dart index 183677f..bf0c7ab 100644 --- a/firka/lib/ui/phone/pages/extras/reauth_toast.dart +++ b/firka/lib/ui/phone/pages/extras/reauth_toast.dart @@ -1,7 +1,7 @@ -import 'package:firka/main.dart'; -import 'package:firka/ui/model/style.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/theme/style.dart'; import 'package:firka/ui/phone/pages/extras/main_reauth.dart'; -import 'package:firka/ui/widget/firka_icon.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import 'package:flutter/material.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; diff --git a/firka/lib/ui/phone/pages/home/home_grades.dart b/firka/lib/ui/phone/pages/home/home_grades.dart index 34f5325..084d164 100644 --- a/firka/lib/ui/phone/pages/home/home_grades.dart +++ b/firka/lib/ui/phone/pages/home/home_grades.dart @@ -1,23 +1,23 @@ -import 'package:firka/helpers/api/client/kreta_client.dart'; -import 'package:firka/helpers/api/model/generic.dart'; -import 'package:firka/helpers/average_helper.dart'; -import 'package:firka/helpers/ui/firka_card.dart'; -import 'package:firka/helpers/ui/grade_helpers.dart'; +import 'package:firka/api/client/kreta_client.dart'; +import 'package:firka/api/model/generic.dart'; +import 'package:firka/core/average_helper.dart'; +import 'package:firka/ui/components/firka_card.dart'; +import 'package:firka/ui/components/grade_helpers.dart'; import 'package:firka/ui/phone/widgets/grade_chart.dart'; -import 'package:firka/ui/widget/grade_small_card.dart'; +import 'package:firka/ui/shared/grade_small_card.dart'; import 'package:flutter/material.dart'; -import '../../../../helpers/api/consts.dart'; -import '../../../../helpers/api/model/class_group.dart'; -import '../../../../helpers/api/model/grade.dart'; -import '../../../../helpers/api/model/subject.dart'; -import '../../../../helpers/api/model/timetable.dart'; -import '../../../../helpers/debug_helper.dart'; -import '../../../../helpers/firka_state.dart'; -import '../../../../helpers/update_notifier.dart'; -import '../../../../main.dart'; -import '../../../model/style.dart'; -import '../../../widget/delayed_spinner.dart'; +import 'package:firka/api/consts.dart'; +import 'package:firka/api/model/class_group.dart'; +import 'package:firka/api/model/grade.dart'; +import 'package:firka/api/model/subject.dart'; +import 'package:firka/api/model/timetable.dart'; +import 'package:firka/core/debug_helper.dart'; +import 'package:firka/core/state/firka_state.dart'; +import 'package:firka/core/state/update_notifier.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/theme/style.dart'; +import 'package:firka/ui/shared/delayed_spinner.dart'; class HomeGradesScreen extends StatefulWidget { final AppInitialization data; diff --git a/firka/lib/ui/phone/pages/home/home_grades_subject.dart b/firka/lib/ui/phone/pages/home/home_grades_subject.dart index 437816f..48b5cae 100644 --- a/firka/lib/ui/phone/pages/home/home_grades_subject.dart +++ b/firka/lib/ui/phone/pages/home/home_grades_subject.dart @@ -1,19 +1,19 @@ -import 'package:firka/helpers/api/model/grade.dart'; -import 'package:firka/helpers/extensions.dart'; -import 'package:firka/helpers/ui/common_bottom_sheets.dart'; -import 'package:firka/helpers/ui/firka_card.dart'; -import 'package:firka/helpers/ui/grade.dart'; +import 'package:firka/api/model/grade.dart'; +import 'package:firka/core/extensions.dart'; +import 'package:firka/ui/components/common_bottom_sheets.dart'; +import 'package:firka/ui/components/firka_card.dart'; +import 'package:firka/ui/components/grade.dart'; import 'package:firka/ui/phone/pages/home/home_grades.dart'; -import 'package:firka/ui/widget/class_icon.dart'; -import 'package:firka/ui/widget/firka_icon.dart'; +import 'package:firka/ui/shared/class_icon.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; -import '../../../../helpers/firka_state.dart'; -import '../../../../helpers/update_notifier.dart'; -import '../../../../main.dart'; -import '../../../model/style.dart'; +import 'package:firka/core/state/firka_state.dart'; +import 'package:firka/core/state/update_notifier.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/theme/style.dart'; class HomeGradesSubjectScreen extends StatefulWidget { final AppInitialization data; diff --git a/firka/lib/ui/phone/pages/home/home_main.dart b/firka/lib/ui/phone/pages/home/home_main.dart index dd816a5..2670d12 100644 --- a/firka/lib/ui/phone/pages/home/home_main.dart +++ b/firka/lib/ui/phone/pages/home/home_main.dart @@ -1,31 +1,31 @@ import 'dart:async'; -import 'package:firka/helpers/api/client/kreta_stream.dart'; -import 'package:firka/helpers/api/model/grade.dart'; -import 'package:firka/helpers/extensions.dart'; -import 'package:firka/helpers/ui/common_bottom_sheets.dart'; +import 'package:firka/api/client/kreta_stream.dart'; +import 'package:firka/api/model/grade.dart'; +import 'package:firka/core/extensions.dart'; +import 'package:firka/ui/components/common_bottom_sheets.dart'; import 'package:firka/ui/phone/screens/message/message_screen.dart'; import 'package:firka/ui/phone/widgets/home_main_starting_soon.dart'; import 'package:firka/ui/phone/widgets/homework.dart'; import 'package:firka/ui/phone/widgets/info_board_item.dart'; import 'package:firka/ui/phone/widgets/lesson_small.dart'; -import 'package:firka/ui/widget/delayed_spinner.dart'; +import 'package:firka/ui/shared/delayed_spinner.dart'; import 'package:flutter/material.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; -import '../../../../helpers/api/model/homework.dart'; -import '../../../../helpers/api/model/notice_board.dart'; -import '../../../../helpers/api/model/student.dart'; -import '../../../../helpers/api/model/test.dart'; -import '../../../../helpers/api/model/timetable.dart'; -import '../../../../helpers/debug_helper.dart'; -import '../../../../helpers/firka_state.dart'; -import '../../../../helpers/ui/firka_card.dart'; -import '../../../../helpers/ui/grade.dart'; -import '../../../../helpers/update_notifier.dart'; -import '../../../../main.dart'; -import '../../../model/style.dart'; -import '../../../widget/firka_icon.dart'; +import 'package:firka/api/model/homework.dart'; +import 'package:firka/api/model/notice_board.dart'; +import 'package:firka/api/model/student.dart'; +import 'package:firka/api/model/test.dart'; +import 'package:firka/api/model/timetable.dart'; +import 'package:firka/core/debug_helper.dart'; +import 'package:firka/core/state/firka_state.dart'; +import 'package:firka/ui/components/firka_card.dart'; +import 'package:firka/ui/components/grade.dart'; +import 'package:firka/core/state/update_notifier.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/theme/style.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import '../../widgets/home_main_welcome.dart'; import '../../widgets/lesson_big.dart'; diff --git a/firka/lib/ui/phone/pages/home/home_subpage.dart b/firka/lib/ui/phone/pages/home/home_subpage.dart index 63b0cd1..bc3ea64 100644 --- a/firka/lib/ui/phone/pages/home/home_subpage.dart +++ b/firka/lib/ui/phone/pages/home/home_subpage.dart @@ -1,9 +1,9 @@ import 'package:firka/ui/phone/screens/home/home_screen.dart'; import 'package:flutter/material.dart'; -import '../../../../helpers/firka_state.dart'; -import '../../../../helpers/update_notifier.dart'; -import '../../../model/style.dart'; +import 'package:firka/core/state/firka_state.dart'; +import 'package:firka/core/state/update_notifier.dart'; +import 'package:firka/ui/theme/style.dart'; class PageWithSubPages extends StatefulWidget { final int pageIndex; diff --git a/firka/lib/ui/phone/pages/home/home_timetable.dart b/firka/lib/ui/phone/pages/home/home_timetable.dart index 9f2ade8..107be65 100644 --- a/firka/lib/ui/phone/pages/home/home_timetable.dart +++ b/firka/lib/ui/phone/pages/home/home_timetable.dart @@ -1,27 +1,27 @@ import 'dart:async'; import 'package:carousel_slider/carousel_slider.dart'; -import 'package:firka/helpers/api/client/kreta_client.dart'; -import 'package:firka/helpers/api/client/kreta_stream.dart'; -import 'package:firka/helpers/api/model/test.dart'; -import 'package:firka/helpers/api/model/timetable.dart'; -import 'package:firka/helpers/debug_helper.dart'; -import 'package:firka/helpers/extensions.dart'; -import 'package:firka/helpers/settings.dart'; -import 'package:firka/ui/model/style.dart'; +import 'package:firka/api/client/kreta_client.dart'; +import 'package:firka/api/client/kreta_stream.dart'; +import 'package:firka/api/model/test.dart'; +import 'package:firka/api/model/timetable.dart'; +import 'package:firka/core/debug_helper.dart'; +import 'package:firka/core/extensions.dart'; +import 'package:firka/core/settings.dart'; +import 'package:firka/ui/theme/style.dart'; import 'package:firka/ui/phone/screens/settings/settings_screen.dart'; import 'package:firka/ui/phone/widgets/bubble_test.dart'; -import 'package:firka/ui/widget/delayed_spinner.dart'; +import 'package:firka/ui/shared/delayed_spinner.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; import 'package:transparent_pointer/transparent_pointer.dart'; -import '../../../../helpers/api/consts.dart'; -import '../../../../helpers/firka_state.dart'; -import '../../../../helpers/update_notifier.dart'; -import '../../../../main.dart'; -import '../../../widget/firka_icon.dart'; +import 'package:firka/api/consts.dart'; +import 'package:firka/core/state/firka_state.dart'; +import 'package:firka/core/state/update_notifier.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import '../../widgets/bottom_tt_icon.dart'; import '../../widgets/tt_day.dart'; diff --git a/firka/lib/ui/phone/pages/home/home_timetable_mo.dart b/firka/lib/ui/phone/pages/home/home_timetable_mo.dart index 095331f..a8fa296 100644 --- a/firka/lib/ui/phone/pages/home/home_timetable_mo.dart +++ b/firka/lib/ui/phone/pages/home/home_timetable_mo.dart @@ -1,21 +1,21 @@ -import 'package:firka/helpers/api/consts.dart'; -import 'package:firka/helpers/api/model/omission.dart'; -import 'package:firka/helpers/api/model/timetable.dart'; -import 'package:firka/helpers/debug_helper.dart'; -import 'package:firka/helpers/extensions.dart'; -import 'package:firka/helpers/settings.dart'; -import 'package:firka/ui/model/style.dart'; -import 'package:firka/ui/widget/delayed_spinner.dart'; +import 'package:firka/api/consts.dart'; +import 'package:firka/api/model/omission.dart'; +import 'package:firka/api/model/timetable.dart'; +import 'package:firka/core/debug_helper.dart'; +import 'package:firka/core/extensions.dart'; +import 'package:firka/core/settings.dart'; +import 'package:firka/ui/theme/style.dart'; +import 'package:firka/ui/shared/delayed_spinner.dart'; import 'package:flutter/material.dart'; import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; import 'package:transparent_pointer/transparent_pointer.dart'; -import '../../../../helpers/api/model/test.dart'; -import '../../../../helpers/firka_state.dart'; -import '../../../../helpers/update_notifier.dart'; -import '../../../../main.dart'; -import '../../../widget/firka_icon.dart'; +import 'package:firka/api/model/test.dart'; +import 'package:firka/core/state/firka_state.dart'; +import 'package:firka/core/state/update_notifier.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import '../../screens/settings/settings_screen.dart'; class HomeTimetableMonthlyScreen extends StatefulWidget { diff --git a/firka/lib/ui/phone/screens/debug/debug_screen.dart b/firka/lib/ui/phone/screens/debug/debug_screen.dart index 0789eb6..0d95dec 100644 --- a/firka/lib/ui/phone/screens/debug/debug_screen.dart +++ b/firka/lib/ui/phone/screens/debug/debug_screen.dart @@ -2,19 +2,19 @@ import 'dart:typed_data'; -import 'package:firka/helpers/db/models/token_model.dart'; -import 'package:firka/helpers/extensions.dart'; -import 'package:firka/helpers/icon_helper.dart'; -import 'package:firka/helpers/profile_picture.dart'; -import 'package:firka/main.dart'; +import 'package:firka/data/models/token_model.dart'; +import 'package:firka/core/extensions.dart'; +import 'package:firka/core/icon_helper.dart'; +import 'package:firka/core/profile_picture.dart'; +import 'package:firka/app/app_state.dart'; import 'package:firka/ui/phone/screens/login/login_screen.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; -import '../../../../helpers/debug_helper.dart'; -import '../../../../helpers/firka_bundle.dart'; -import '../../../../helpers/firka_state.dart'; -import '../../../widget/firka_icon.dart'; +import 'package:firka/core/debug_helper.dart'; +import 'package:firka/core/firka_bundle.dart'; +import 'package:firka/core/state/firka_state.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; class DebugScreen extends StatefulWidget { final AppInitialization data; diff --git a/firka/lib/ui/phone/screens/home/beta_screen.dart b/firka/lib/ui/phone/screens/home/beta_screen.dart index 0d9c82a..8501bf2 100644 --- a/firka/lib/ui/phone/screens/home/beta_screen.dart +++ b/firka/lib/ui/phone/screens/home/beta_screen.dart @@ -1,15 +1,15 @@ import 'dart:async'; import 'dart:io'; -import 'package:firka/helpers/db/models/app_settings_model.dart'; -import 'package:firka/helpers/settings.dart'; -import 'package:firka/helpers/ui/firka_button.dart'; -import 'package:firka/ui/model/style.dart'; +import 'package:firka/data/models/app_settings_model.dart'; +import 'package:firka/core/settings.dart'; +import 'package:firka/ui/components/firka_button.dart'; +import 'package:firka/ui/theme/style.dart'; import 'package:firka/ui/phone/screens/home/home_screen.dart'; import 'package:flutter/material.dart'; -import '../../../../helpers/firka_state.dart'; -import '../../../../main.dart'; +import 'package:firka/core/state/firka_state.dart'; +import 'package:firka/app/app_state.dart'; class BetaScreen extends StatefulWidget { final AppInitialization data; diff --git a/firka/lib/ui/phone/screens/home/home_bottom_nav.dart b/firka/lib/ui/phone/screens/home/home_bottom_nav.dart deleted file mode 100644 index 8b13789..0000000 --- a/firka/lib/ui/phone/screens/home/home_bottom_nav.dart +++ /dev/null @@ -1 +0,0 @@ - diff --git a/firka/lib/ui/phone/screens/home/home_screen.dart b/firka/lib/ui/phone/screens/home/home_screen.dart index 6403caf..28ccf90 100644 --- a/firka/lib/ui/phone/screens/home/home_screen.dart +++ b/firka/lib/ui/phone/screens/home/home_screen.dart @@ -1,16 +1,16 @@ import 'dart:async'; import 'dart:io'; -import 'package:firka/helpers/api/client/kreta_client.dart'; -import 'package:firka/helpers/api/client/kreta_stream.dart'; -import 'package:firka/helpers/api/exceptions/token.dart'; -import 'package:firka/helpers/active_account_helper.dart'; -import 'package:firka/helpers/extensions.dart'; -import 'package:firka/helpers/live_activity_service.dart'; -import 'package:firka/helpers/settings.dart'; -import 'package:firka/helpers/update_notifier.dart'; -import 'package:firka/helpers/watch_sync_helper.dart'; -import 'package:firka/main.dart'; -import 'package:firka/ui/model/style.dart'; +import 'package:firka/api/client/kreta_client.dart'; +import 'package:firka/api/client/kreta_stream.dart'; +import 'package:firka/api/exceptions/token.dart'; +import 'package:firka/services/active_account_helper.dart'; +import 'package:firka/core/extensions.dart'; +import 'package:firka/services/live_activity_service.dart'; +import 'package:firka/core/settings.dart'; +import 'package:firka/core/state/update_notifier.dart'; +import 'package:firka/services/watch_sync_helper.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/theme/style.dart'; import 'package:firka/ui/phone/pages/extras/main_wear_pair.dart'; import 'package:firka/ui/phone/pages/extras/reauth_toast.dart'; import 'package:firka/ui/phone/pages/home/home_grades.dart'; @@ -26,13 +26,13 @@ import 'package:home_widget/home_widget.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; import 'package:smart_scroll/smart_scroll.dart'; -import '../../../../helpers/db/widget.dart'; -import '../../../../helpers/debug_helper.dart'; -import '../../../../helpers/firka_bundle.dart'; -import '../../../../helpers/firka_state.dart'; -import '../../../../helpers/image_preloader.dart'; -import '../../../widget/delayed_spinner.dart'; -import '../../../widget/firka_icon.dart'; +import 'package:firka/data/widget.dart'; +import 'package:firka/core/debug_helper.dart'; +import 'package:firka/core/firka_bundle.dart'; +import 'package:firka/core/state/firka_state.dart'; +import 'package:firka/core/image_preloader.dart'; +import 'package:firka/ui/shared/delayed_spinner.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import '../../pages/extras/extras.dart'; import '../../pages/extras/main_error.dart'; import '../../pages/home/home_grades_subject.dart'; diff --git a/firka/lib/ui/phone/screens/live_activity/full_privacy_policy_screen.dart b/firka/lib/ui/phone/screens/live_activity/full_privacy_policy_screen.dart index eee8430..9b64f2f 100644 --- a/firka/lib/ui/phone/screens/live_activity/full_privacy_policy_screen.dart +++ b/firka/lib/ui/phone/screens/live_activity/full_privacy_policy_screen.dart @@ -1,10 +1,10 @@ -import 'package:firka/main.dart'; -import 'package:firka/ui/model/style.dart'; -import 'package:firka/ui/widget/firka_icon.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/theme/style.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import 'package:flutter/material.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; -import '../../../../helpers/firka_state.dart'; +import 'package:firka/core/state/firka_state.dart'; class FullPrivacyPolicyScreen extends StatefulWidget { final AppInitialization data; diff --git a/firka/lib/ui/phone/screens/live_activity/live_activity_consent_screen.dart b/firka/lib/ui/phone/screens/live_activity/live_activity_consent_screen.dart index ab9a166..2e161e9 100644 --- a/firka/lib/ui/phone/screens/live_activity/live_activity_consent_screen.dart +++ b/firka/lib/ui/phone/screens/live_activity/live_activity_consent_screen.dart @@ -1,15 +1,15 @@ import 'dart:typed_data'; -import 'package:firka/helpers/ui/firka_button.dart'; -import 'package:firka/helpers/ui/firka_card.dart'; -import 'package:firka/main.dart'; -import 'package:firka/ui/model/style.dart'; +import 'package:firka/ui/components/firka_button.dart'; +import 'package:firka/ui/components/firka_card.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/theme/style.dart'; import 'package:firka/ui/phone/screens/live_activity/full_privacy_policy_screen.dart'; -import 'package:firka/ui/widget/firka_icon.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import 'package:flutter/material.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; -import '../../../../helpers/firka_state.dart'; +import 'package:firka/core/state/firka_state.dart'; class LiveActivityConsentScreen extends StatefulWidget { final AppInitialization data; diff --git a/firka/lib/ui/phone/screens/login/login_screen.dart b/firka/lib/ui/phone/screens/login/login_screen.dart index 4c8cd30..3372d0e 100644 --- a/firka/lib/ui/phone/screens/login/login_screen.dart +++ b/firka/lib/ui/phone/screens/login/login_screen.dart @@ -1,17 +1,17 @@ import 'dart:math' as math; import 'package:carousel_slider/carousel_slider.dart'; -import 'package:firka/helpers/firka_bundle.dart'; -import 'package:firka/main.dart'; +import 'package:firka/core/firka_bundle.dart'; +import 'package:firka/app/app_state.dart'; import 'package:firka/ui/phone/widgets/login_webview.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:url_launcher/url_launcher.dart'; -import '../../../../helpers/firka_state.dart'; -import '../../../../helpers/image_preloader.dart'; -import '../../../model/style.dart'; -import '../../../widget/delayed_spinner.dart'; +import 'package:firka/core/state/firka_state.dart'; +import 'package:firka/core/image_preloader.dart'; +import 'package:firka/ui/theme/style.dart'; +import 'package:firka/ui/shared/delayed_spinner.dart'; // TODO: Replace these with actual privacy policy URLs const String _privacyUrlHungarian = diff --git a/firka/lib/ui/phone/screens/message/message_screen.dart b/firka/lib/ui/phone/screens/message/message_screen.dart index 1de523a..66263ad 100644 --- a/firka/lib/ui/phone/screens/message/message_screen.dart +++ b/firka/lib/ui/phone/screens/message/message_screen.dart @@ -1,12 +1,12 @@ -import 'package:firka/helpers/extensions.dart'; -import 'package:firka/main.dart'; +import 'package:firka/core/extensions.dart'; +import 'package:firka/app/app_state.dart'; import 'package:flutter/material.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; -import '../../../../helpers/api/model/notice_board.dart'; -import '../../../../helpers/firka_bundle.dart'; -import '../../../model/style.dart'; -import '../../../widget/firka_icon.dart'; +import 'package:firka/api/model/notice_board.dart'; +import 'package:firka/core/firka_bundle.dart'; +import 'package:firka/ui/theme/style.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; class MessageScreen extends StatelessWidget { final AppInitialization data; diff --git a/firka/lib/ui/phone/screens/settings/settings_screen.dart b/firka/lib/ui/phone/screens/settings/settings_screen.dart index 890504d..7d019a8 100644 --- a/firka/lib/ui/phone/screens/settings/settings_screen.dart +++ b/firka/lib/ui/phone/screens/settings/settings_screen.dart @@ -2,15 +2,15 @@ import 'dart:collection'; import 'dart:io'; import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart'; -import 'package:firka/helpers/db/models/app_settings_model.dart'; -import 'package:firka/helpers/db/models/token_model.dart'; -import 'package:firka/helpers/image_preloader.dart'; -import 'package:firka/helpers/ui/firka_button.dart'; -import 'package:firka/helpers/ui/firka_card.dart'; -import 'package:firka/main.dart'; -import 'package:firka/ui/model/style.dart'; +import 'package:firka/data/models/app_settings_model.dart'; +import 'package:firka/data/models/token_model.dart'; +import 'package:firka/core/image_preloader.dart'; +import 'package:firka/ui/components/firka_button.dart'; +import 'package:firka/ui/components/firka_card.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/theme/style.dart'; import 'package:firka/ui/phone/screens/login/login_screen.dart'; -import 'package:firka/ui/widget/firka_icon.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -20,13 +20,14 @@ import 'package:path/path.dart' as p; import 'package:share_plus/share_plus.dart'; import 'package:url_launcher/url_launcher_string.dart'; -import '../../../../helpers/db/widget.dart'; -import '../../../../helpers/firka_bundle.dart'; -import '../../../../helpers/firka_state.dart'; -import '../../../../helpers/api/client/kreta_client.dart'; -import '../../../../helpers/settings.dart'; -import '../../../../helpers/live_activity_service.dart'; -import '../../../../helpers/watch_sync_helper.dart'; +import 'package:firka/data/widget.dart'; +import 'package:firka/core/firka_bundle.dart'; +import 'package:firka/app/initialization_screen.dart'; +import 'package:firka/core/state/firka_state.dart'; +import 'package:firka/api/client/kreta_client.dart'; +import 'package:firka/core/settings.dart'; +import 'package:firka/services/live_activity_service.dart'; +import 'package:firka/services/watch_sync_helper.dart'; import '../../widgets/login_webview.dart'; class SettingsScreen extends StatefulWidget { diff --git a/firka/lib/ui/phone/widgets/bottom_nav_icon.dart b/firka/lib/ui/phone/widgets/bottom_nav_icon.dart index ed4ecef..c45345a 100644 --- a/firka/lib/ui/phone/widgets/bottom_nav_icon.dart +++ b/firka/lib/ui/phone/widgets/bottom_nav_icon.dart @@ -2,8 +2,8 @@ import 'dart:typed_data'; import 'package:flutter/material.dart'; -import '../../model/style.dart'; -import '../../widget/firka_icon.dart'; +import 'package:firka/ui/theme/style.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; class BottomNavIconWidget extends StatelessWidget { final void Function() onTap; diff --git a/firka/lib/ui/phone/widgets/bottom_tt_icon.dart b/firka/lib/ui/phone/widgets/bottom_tt_icon.dart index fc226d0..dd84b52 100644 --- a/firka/lib/ui/phone/widgets/bottom_tt_icon.dart +++ b/firka/lib/ui/phone/widgets/bottom_tt_icon.dart @@ -1,8 +1,8 @@ -import 'package:firka/helpers/extensions.dart'; +import 'package:firka/core/extensions.dart'; import 'package:firka/l10n/app_localizations.dart'; import 'package:flutter/material.dart'; -import '../../model/style.dart'; +import 'package:firka/ui/theme/style.dart'; class BottomTimeTableNavIconWidget extends StatelessWidget { final AppLocalizations l10n; diff --git a/firka/lib/ui/phone/widgets/bubble_test.dart b/firka/lib/ui/phone/widgets/bubble_test.dart index 92f96d1..f26ca2a 100644 --- a/firka/lib/ui/phone/widgets/bubble_test.dart +++ b/firka/lib/ui/phone/widgets/bubble_test.dart @@ -1,9 +1,9 @@ -import 'package:firka/ui/widget/firka_icon.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_svg/svg.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; -import '../../model/style.dart'; +import 'package:firka/ui/theme/style.dart'; class BubbleTest extends StatelessWidget { const BubbleTest({super.key}); diff --git a/firka/lib/ui/phone/widgets/grade_chart.dart b/firka/lib/ui/phone/widgets/grade_chart.dart index 8788c0a..4a2279a 100644 --- a/firka/lib/ui/phone/widgets/grade_chart.dart +++ b/firka/lib/ui/phone/widgets/grade_chart.dart @@ -1,6 +1,6 @@ -import 'package:firka/helpers/api/model/grade.dart'; -import 'package:firka/helpers/ui/grade_helpers.dart'; -import 'package:firka/ui/model/style.dart'; +import 'package:firka/api/model/grade.dart'; +import 'package:firka/ui/components/grade_helpers.dart'; +import 'package:firka/ui/theme/style.dart'; import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; diff --git a/firka/lib/ui/phone/widgets/home_bottom_nav.dart b/firka/lib/ui/phone/widgets/home_bottom_nav.dart deleted file mode 100644 index 8b13789..0000000 --- a/firka/lib/ui/phone/widgets/home_bottom_nav.dart +++ /dev/null @@ -1 +0,0 @@ - diff --git a/firka/lib/ui/phone/widgets/home_main_starting_soon.dart b/firka/lib/ui/phone/widgets/home_main_starting_soon.dart index e6f9235..56d055b 100644 --- a/firka/lib/ui/phone/widgets/home_main_starting_soon.dart +++ b/firka/lib/ui/phone/widgets/home_main_starting_soon.dart @@ -1,10 +1,10 @@ -import 'package:firka/helpers/ui/firka_card.dart'; +import 'package:firka/ui/components/firka_card.dart'; import 'package:firka/l10n/app_localizations.dart'; -import 'package:firka/ui/model/style.dart'; -import 'package:firka/ui/widget/counter_digit.dart'; +import 'package:firka/ui/theme/style.dart'; +import 'package:firka/ui/shared/counter_digit.dart'; import 'package:flutter/material.dart'; -import '../../../helpers/api/model/timetable.dart'; +import 'package:firka/api/model/timetable.dart'; class StartingSoonWidget extends StatelessWidget { final AppLocalizations l10n; diff --git a/firka/lib/ui/phone/widgets/home_main_welcome.dart b/firka/lib/ui/phone/widgets/home_main_welcome.dart index 85ec365..b37fc1d 100644 --- a/firka/lib/ui/phone/widgets/home_main_welcome.dart +++ b/firka/lib/ui/phone/widgets/home_main_welcome.dart @@ -1,14 +1,14 @@ import 'package:confetti/confetti.dart'; import 'package:intl/intl.dart'; -import 'package:firka/helpers/extensions.dart'; +import 'package:firka/core/extensions.dart'; import 'package:firka/l10n/app_localizations.dart'; -import 'package:firka/ui/widget/firka_icon.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import 'package:flutter/material.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; -import '../../../helpers/api/model/student.dart'; -import '../../../helpers/api/model/timetable.dart'; -import '../../model/style.dart'; +import 'package:firka/api/model/student.dart'; +import 'package:firka/api/model/timetable.dart'; +import 'package:firka/ui/theme/style.dart'; class WelcomeWidget extends StatefulWidget { final AppLocalizations l10n; diff --git a/firka/lib/ui/phone/widgets/homework.dart b/firka/lib/ui/phone/widgets/homework.dart index 572801f..5f68667 100644 --- a/firka/lib/ui/phone/widgets/homework.dart +++ b/firka/lib/ui/phone/widgets/homework.dart @@ -1,10 +1,10 @@ -import 'package:firka/helpers/api/model/homework.dart'; -import 'package:firka/helpers/db/models/homework_cache_model.dart'; -import 'package:firka/helpers/ui/common_bottom_sheets.dart'; -import 'package:firka/helpers/ui/firka_card.dart'; -import 'package:firka/main.dart'; -import 'package:firka/ui/model/style.dart'; -import 'package:firka/ui/widget/firka_icon.dart'; +import 'package:firka/api/model/homework.dart'; +import 'package:firka/data/models/homework_cache_model.dart'; +import 'package:firka/ui/components/common_bottom_sheets.dart'; +import 'package:firka/ui/components/firka_card.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/theme/style.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import 'package:flutter/material.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; diff --git a/firka/lib/ui/phone/widgets/info_board_item.dart b/firka/lib/ui/phone/widgets/info_board_item.dart index fe87084..8158b33 100644 --- a/firka/lib/ui/phone/widgets/info_board_item.dart +++ b/firka/lib/ui/phone/widgets/info_board_item.dart @@ -1,8 +1,8 @@ -import 'package:firka/helpers/ui/firka_card.dart'; -import 'package:firka/ui/model/style.dart'; +import 'package:firka/ui/components/firka_card.dart'; +import 'package:firka/ui/theme/style.dart'; import 'package:flutter/material.dart'; -import '../../../helpers/api/model/notice_board.dart'; +import 'package:firka/api/model/notice_board.dart'; // TODO: Finish class InfoBoardItemWidget extends StatelessWidget { diff --git a/firka/lib/ui/phone/widgets/lesson.dart b/firka/lib/ui/phone/widgets/lesson.dart index bccf87c..d6d9de3 100644 --- a/firka/lib/ui/phone/widgets/lesson.dart +++ b/firka/lib/ui/phone/widgets/lesson.dart @@ -1,18 +1,18 @@ -import 'package:firka/helpers/extensions.dart'; -import 'package:firka/helpers/settings.dart'; -import 'package:firka/helpers/ui/firka_card.dart'; -import 'package:firka/main.dart'; -import 'package:firka/ui/model/style.dart'; +import 'package:firka/core/extensions.dart'; +import 'package:firka/core/settings.dart'; +import 'package:firka/ui/components/firka_card.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/theme/style.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; -import '../../../helpers/api/model/test.dart'; -import '../../../helpers/api/model/timetable.dart'; -import '../../../helpers/debug_helper.dart'; -import '../../../helpers/ui/common_bottom_sheets.dart'; -import '../../widget/class_icon.dart'; -import '../../widget/firka_icon.dart'; +import 'package:firka/api/model/test.dart'; +import 'package:firka/api/model/timetable.dart'; +import 'package:firka/core/debug_helper.dart'; +import 'package:firka/ui/components/common_bottom_sheets.dart'; +import 'package:firka/ui/shared/class_icon.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import 'bubble_test.dart'; class LessonWidget extends StatelessWidget { diff --git a/firka/lib/ui/phone/widgets/lesson_big.dart b/firka/lib/ui/phone/widgets/lesson_big.dart index 7bfd626..739cf58 100644 --- a/firka/lib/ui/phone/widgets/lesson_big.dart +++ b/firka/lib/ui/phone/widgets/lesson_big.dart @@ -1,15 +1,15 @@ -import 'package:firka/helpers/api/model/test.dart'; -import 'package:firka/helpers/extensions.dart'; -import 'package:firka/helpers/ui/firka_card.dart'; +import 'package:firka/api/model/test.dart'; +import 'package:firka/core/extensions.dart'; +import 'package:firka/ui/components/firka_card.dart'; import 'package:firka/l10n/app_localizations.dart'; -import 'package:firka/ui/model/style.dart'; -import 'package:firka/ui/widget/firka_icon.dart'; +import 'package:firka/ui/theme/style.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; -import '../../../helpers/api/model/timetable.dart'; -import '../../widget/class_icon.dart'; +import 'package:firka/api/model/timetable.dart'; +import 'package:firka/ui/shared/class_icon.dart'; class LessonBigWidget extends StatelessWidget { final AppLocalizations l10n; diff --git a/firka/lib/ui/phone/widgets/lesson_small.dart b/firka/lib/ui/phone/widgets/lesson_small.dart index 0042c17..96270e1 100644 --- a/firka/lib/ui/phone/widgets/lesson_small.dart +++ b/firka/lib/ui/phone/widgets/lesson_small.dart @@ -1,11 +1,11 @@ -import 'package:firka/helpers/extensions.dart'; -import 'package:firka/helpers/ui/firka_card.dart'; +import 'package:firka/core/extensions.dart'; +import 'package:firka/ui/components/firka_card.dart'; import 'package:firka/l10n/app_localizations.dart'; -import 'package:firka/ui/model/style.dart'; +import 'package:firka/ui/theme/style.dart'; import 'package:flutter/material.dart'; -import '../../../helpers/api/model/timetable.dart'; -import '../../widget/class_icon.dart'; +import 'package:firka/api/model/timetable.dart'; +import 'package:firka/ui/shared/class_icon.dart'; class LessonSmallWidget extends StatelessWidget { final AppLocalizations l10n; diff --git a/firka/lib/ui/phone/widgets/login_webview.dart b/firka/lib/ui/phone/widgets/login_webview.dart index 5c0be80..042fd5f 100644 --- a/firka/lib/ui/phone/widgets/login_webview.dart +++ b/firka/lib/ui/phone/widgets/login_webview.dart @@ -1,22 +1,23 @@ import 'dart:async'; import 'dart:io'; -import 'package:firka/helpers/db/models/app_settings_model.dart'; -import 'package:firka/helpers/live_activity_service.dart'; -import 'package:firka/main.dart'; +import 'package:firka/data/models/app_settings_model.dart'; +import 'package:firka/services/live_activity_service.dart'; +import 'package:firka/app/app_state.dart'; import 'package:flutter/material.dart'; import 'package:isar_community/isar.dart'; import 'package:webview_flutter/webview_flutter.dart'; -import '../../../helpers/api/client/kreta_client.dart'; -import '../../../helpers/watch_sync_helper.dart'; -import '../../../helpers/api/consts.dart'; -import '../../../helpers/api/token_grant.dart'; -import '../../../helpers/db/models/token_model.dart'; -import '../../../helpers/firka_bundle.dart'; -import '../../../helpers/firka_state.dart'; -import '../../../helpers/settings.dart'; -import '../../../ui/model/style.dart'; +import 'package:firka/api/client/kreta_client.dart'; +import 'package:firka/services/watch_sync_helper.dart'; +import 'package:firka/api/consts.dart'; +import 'package:firka/api/token_grant.dart'; +import 'package:firka/data/models/token_model.dart'; +import 'package:firka/core/firka_bundle.dart'; +import 'package:firka/app/initialization_screen.dart'; +import 'package:firka/core/state/firka_state.dart'; +import 'package:firka/core/settings.dart'; +import 'package:firka/ui/theme/style.dart'; import '../pages/error/error_page.dart'; class LoginWebviewWidget extends StatefulWidget { diff --git a/firka/lib/ui/phone/widgets/notice_board_item.dart b/firka/lib/ui/phone/widgets/notice_board_item.dart index f841c3f..9b9d1db 100644 --- a/firka/lib/ui/phone/widgets/notice_board_item.dart +++ b/firka/lib/ui/phone/widgets/notice_board_item.dart @@ -1,7 +1,7 @@ -import 'package:firka/helpers/ui/firka_card.dart'; +import 'package:firka/ui/components/firka_card.dart'; import 'package:flutter/material.dart'; -import '../../../helpers/api/model/notice_board.dart'; +import 'package:firka/api/model/notice_board.dart'; // TODO: Finish class NoticeBoardItemWidget extends StatelessWidget { diff --git a/firka/lib/ui/phone/widgets/tt_day.dart b/firka/lib/ui/phone/widgets/tt_day.dart index 27a5210..4752cb6 100644 --- a/firka/lib/ui/phone/widgets/tt_day.dart +++ b/firka/lib/ui/phone/widgets/tt_day.dart @@ -1,9 +1,9 @@ -import 'package:firka/helpers/api/model/test.dart'; -import 'package:firka/helpers/api/model/timetable.dart'; -import 'package:firka/helpers/extensions.dart'; -import 'package:firka/helpers/ui/firka_card.dart'; -import 'package:firka/main.dart'; -import 'package:firka/ui/model/style.dart'; +import 'package:firka/api/model/test.dart'; +import 'package:firka/api/model/timetable.dart'; +import 'package:firka/core/extensions.dart'; +import 'package:firka/ui/components/firka_card.dart'; +import 'package:firka/app/app_state.dart'; +import 'package:firka/ui/theme/style.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; diff --git a/firka/lib/ui/widget/class_icon.dart b/firka/lib/ui/shared/class_icon.dart similarity index 88% rename from firka/lib/ui/widget/class_icon.dart rename to firka/lib/ui/shared/class_icon.dart index 80f6178..b689ed3 100644 --- a/firka/lib/ui/widget/class_icon.dart +++ b/firka/lib/ui/shared/class_icon.dart @@ -1,7 +1,7 @@ -import 'package:firka/helpers/icon_helper.dart'; +import 'package:firka/core/icon_helper.dart'; import 'package:flutter/material.dart'; -import 'firka_icon.dart'; +import 'package:firka/ui/shared/firka_icon.dart'; class ClassIconWidget extends StatelessWidget { final String _uid; diff --git a/firka/lib/ui/widget/counter_digit.dart b/firka/lib/ui/shared/counter_digit.dart similarity index 92% rename from firka/lib/ui/widget/counter_digit.dart rename to firka/lib/ui/shared/counter_digit.dart index 85133b4..16cf02f 100644 --- a/firka/lib/ui/widget/counter_digit.dart +++ b/firka/lib/ui/shared/counter_digit.dart @@ -1,4 +1,4 @@ -import 'package:firka/ui/model/style.dart'; +import 'package:firka/ui/theme/style.dart'; import 'package:flutter/material.dart'; class CounterDigitWidget extends StatelessWidget { diff --git a/firka/lib/ui/widget/delayed_spinner.dart b/firka/lib/ui/shared/delayed_spinner.dart similarity index 89% rename from firka/lib/ui/widget/delayed_spinner.dart rename to firka/lib/ui/shared/delayed_spinner.dart index 4701470..d505ed5 100644 --- a/firka/lib/ui/widget/delayed_spinner.dart +++ b/firka/lib/ui/shared/delayed_spinner.dart @@ -2,8 +2,8 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import '../../helpers/firka_state.dart'; -import '../model/style.dart'; +import 'package:firka/core/state/firka_state.dart'; +import 'package:firka/ui/theme/style.dart'; class DelayedSpinnerWidget extends StatefulWidget { const DelayedSpinnerWidget({super.key}); diff --git a/firka/lib/ui/widget/firka_icon.dart b/firka/lib/ui/shared/firka_icon.dart similarity index 100% rename from firka/lib/ui/widget/firka_icon.dart rename to firka/lib/ui/shared/firka_icon.dart diff --git a/firka/lib/ui/widget/grade_small_card.dart b/firka/lib/ui/shared/grade_small_card.dart similarity index 84% rename from firka/lib/ui/widget/grade_small_card.dart rename to firka/lib/ui/shared/grade_small_card.dart index 27cf773..599c5c9 100644 --- a/firka/lib/ui/widget/grade_small_card.dart +++ b/firka/lib/ui/shared/grade_small_card.dart @@ -1,11 +1,11 @@ -import 'package:firka/helpers/api/model/grade.dart'; -import 'package:firka/helpers/api/model/subject.dart'; -import 'package:firka/helpers/ui/firka_card.dart'; -import 'package:firka/helpers/ui/grade_helpers.dart'; -import 'package:firka/ui/widget/class_icon.dart'; +import 'package:firka/api/model/grade.dart'; +import 'package:firka/api/model/subject.dart'; +import 'package:firka/ui/components/firka_card.dart'; +import 'package:firka/ui/components/grade_helpers.dart'; +import 'package:firka/ui/shared/class_icon.dart'; import 'package:flutter/material.dart'; -import '../model/style.dart'; +import 'package:firka/ui/theme/style.dart'; class GradeSmallCard extends FirkaCard { final List grades; diff --git a/firka/lib/ui/model/style.dart b/firka/lib/ui/theme/style.dart similarity index 100% rename from firka/lib/ui/model/style.dart rename to firka/lib/ui/theme/style.dart diff --git a/firka/scripts/codegen.dart b/firka/scripts/codegen.dart index 1b34223..032c5ad 100644 --- a/firka/scripts/codegen.dart +++ b/firka/scripts/codegen.dart @@ -111,7 +111,7 @@ bool _l10nOutOfDate(String root) { } bool _isarOutOfDate(String root) { - final modelsDir = p.join(root, 'lib/helpers/db/models'); + final modelsDir = p.join(root, 'lib/data/models'); if (!Directory(modelsDir).existsSync()) return false; for (final entity in Directory(modelsDir).listSync()) {