From 3107970fc5f8c08e90706dd779e46504a3496676 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Barbosa?= Date: Thu, 4 Jun 2026 15:26:56 +0100 Subject: [PATCH 1/4] refactored the structure of the fetchers folder --- .../notifications/tuition_notification.dart | 4 +- .../calendar_fetcher.dart} | 2 +- .../all_course_units_fetcher.dart | 0 .../course_units_info_fetcher.dart | 4 +- .../current_course_units_fetcher.dart | 4 +- .../{ => academics}/courses_fetcher.dart | 4 +- .../{ => academics}/exam_fetcher.dart | 4 +- .../{ => academics}/faculties_fetcher.dart | 0 .../professor_info_fetcher.dart | 0 .../schedule}/schedule_fetcher.dart | 4 +- .../schedule}/schedule_fetcher_api.dart | 2 +- .../schedule}/schedule_fetcher_new_api.dart | 2 +- .../book_thumbnail_fetcher.dart} | 2 +- .../library_occupation_fetcher.dart | 0 .../locations}/location_fetcher.dart | 0 .../locations}/location_fetcher_asset.dart | 2 +- .../locations}/location_fetcher_osm.dart | 2 +- .../fetchers/{ => campus}/news_fetcher.dart | 0 .../{ => campus}/restaurant_fetcher.dart | 0 .../session_dependent_fetcher.dart} | 2 +- .../terms_and_conditions_fetcher.dart | 0 .../current_account_fetcher.dart} | 4 +- .../{ => finances}/print_fetcher.dart | 4 +- .../{ => finances}/reference_fetcher.dart | 4 +- .../{ => profile}/profile_fetcher.dart | 6 +- .../{ => profile}/profile_info_fetcher.dart | 4 +- .../{ => transit}/departures_fetcher.dart | 0 .../parsers/parser_course_unit_info.dart | 2 +- packages/uni_app/lib/main.dart | 2 +- .../providers/riverpod/calendar_provider.dart | 8 +- .../riverpod/course_units_info_provider.dart | 2 +- .../riverpod/current_account_provider.dart | 4 +- .../providers/riverpod/exam_provider.dart | 2 +- .../riverpod/faculty_locations_provider.dart | 4 +- .../providers/riverpod/lecture_provider.dart | 2 +- .../riverpod/library_occupation_provider.dart | 2 +- .../providers/riverpod/news_provider.dart | 2 +- .../riverpod/professor_info_provider.dart | 2 +- .../riverpod/professor_lectures_provider.dart | 2 +- .../riverpod/profile_info_provider.dart | 2 +- .../providers/riverpod/profile_provider.dart | 12 +- .../riverpod/restaurant_provider.dart | 2 +- .../providers/riverpod/session_provider.dart | 2 +- .../session/flows/credentials/request.dart | 2 +- .../lib/session/flows/federated/request.dart | 2 +- .../about/widgets/terms_and_conditions.dart | 2 +- .../course_unit_info/course_unit_info.dart | 2 +- .../widgets/course_unit_sheet.dart | 4 +- .../widgets/create_print_mb_dialog.dart | 322 +++++++++--------- .../lib/view/terms_and_condition_dialog.dart | 2 +- .../lecture_provider_test.mocks.dart | 2 +- .../providers/calendar_provider_test.dart | 4 +- 52 files changed, 227 insertions(+), 227 deletions(-) rename packages/uni_app/lib/controller/fetchers/{calendar_fetcher_json.dart => academics/calendar_fetcher.dart} (97%) rename packages/uni_app/lib/controller/fetchers/{course_units_fetcher => academics/course_units}/all_course_units_fetcher.dart (100%) rename packages/uni_app/lib/controller/fetchers/{course_units_fetcher => academics/course_units}/course_units_info_fetcher.dart (97%) rename packages/uni_app/lib/controller/fetchers/{course_units_fetcher => academics/course_units}/current_course_units_fetcher.dart (90%) rename packages/uni_app/lib/controller/fetchers/{ => academics}/courses_fetcher.dart (85%) rename packages/uni_app/lib/controller/fetchers/{ => academics}/exam_fetcher.dart (91%) rename packages/uni_app/lib/controller/fetchers/{ => academics}/faculties_fetcher.dart (100%) rename packages/uni_app/lib/controller/fetchers/{ => academics}/professor_info_fetcher.dart (100%) rename packages/uni_app/lib/controller/fetchers/{schedule_fetcher => academics/schedule}/schedule_fetcher.dart (92%) rename packages/uni_app/lib/controller/fetchers/{schedule_fetcher => academics/schedule}/schedule_fetcher_api.dart (94%) rename packages/uni_app/lib/controller/fetchers/{schedule_fetcher => academics/schedule}/schedule_fetcher_new_api.dart (96%) rename packages/uni_app/lib/controller/fetchers/{book_fetcher.dart => campus/book_thumbnail_fetcher.dart} (98%) rename packages/uni_app/lib/controller/fetchers/{ => campus}/library_occupation_fetcher.dart (100%) rename packages/uni_app/lib/controller/fetchers/{location_fetcher => campus/locations}/location_fetcher.dart (100%) rename packages/uni_app/lib/controller/fetchers/{location_fetcher => campus/locations}/location_fetcher_asset.dart (92%) rename packages/uni_app/lib/controller/fetchers/{location_fetcher => campus/locations}/location_fetcher_osm.dart (97%) rename packages/uni_app/lib/controller/fetchers/{ => campus}/news_fetcher.dart (100%) rename packages/uni_app/lib/controller/fetchers/{ => campus}/restaurant_fetcher.dart (100%) rename packages/uni_app/lib/controller/fetchers/{session_dependant_fetcher.dart => core/session_dependent_fetcher.dart} (71%) rename packages/uni_app/lib/controller/fetchers/{ => core}/terms_and_conditions_fetcher.dart (100%) rename packages/uni_app/lib/controller/fetchers/{fees_fetcher.dart => finances/current_account_fetcher.dart} (89%) rename packages/uni_app/lib/controller/fetchers/{ => finances}/print_fetcher.dart (91%) rename packages/uni_app/lib/controller/fetchers/{ => finances}/reference_fetcher.dart (83%) rename packages/uni_app/lib/controller/fetchers/{ => profile}/profile_fetcher.dart (88%) rename packages/uni_app/lib/controller/fetchers/{ => profile}/profile_info_fetcher.dart (90%) rename packages/uni_app/lib/controller/fetchers/{ => transit}/departures_fetcher.dart (100%) diff --git a/packages/uni_app/lib/controller/background_workers/notifications/tuition_notification.dart b/packages/uni_app/lib/controller/background_workers/notifications/tuition_notification.dart index 3b90cbad4..dc5b0d296 100644 --- a/packages/uni_app/lib/controller/background_workers/notifications/tuition_notification.dart +++ b/packages/uni_app/lib/controller/background_workers/notifications/tuition_notification.dart @@ -1,6 +1,6 @@ import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:uni/controller/background_workers/notifications.dart'; -import 'package:uni/controller/fetchers/fees_fetcher.dart'; +import 'package:uni/controller/fetchers/finances/current_account_fetcher.dart'; import 'package:uni/controller/local_storage/preferences_controller.dart'; import 'package:uni/controller/parsers/parser_fees.dart'; import 'package:uni/session/flows/base/session.dart'; @@ -54,7 +54,7 @@ class TuitionNotification extends Notification { if (notificationsAreDisabled) { return false; } - final feesFetcher = FeesFetcher(); + final feesFetcher = CurrentAccountFetcher(); DateTime? dueDate; try { dueDate = parseFeesNextLimit( diff --git a/packages/uni_app/lib/controller/fetchers/calendar_fetcher_json.dart b/packages/uni_app/lib/controller/fetchers/academics/calendar_fetcher.dart similarity index 97% rename from packages/uni_app/lib/controller/fetchers/calendar_fetcher_json.dart rename to packages/uni_app/lib/controller/fetchers/academics/calendar_fetcher.dart index 04e513c58..d103fbc7f 100644 --- a/packages/uni_app/lib/controller/fetchers/calendar_fetcher_json.dart +++ b/packages/uni_app/lib/controller/fetchers/academics/calendar_fetcher.dart @@ -2,7 +2,7 @@ import 'dart:convert'; import 'package:flutter/services.dart'; import 'package:uni/model/entities/calendar_event.dart'; -class CalendarFetcherJson { +class CalendarFetcher { /// Fetches the calendar events from the local JSON file. Future> getCalendar(String locale) async { final filePath = 'assets/text/calendar/${locale}Calendar.json'; diff --git a/packages/uni_app/lib/controller/fetchers/course_units_fetcher/all_course_units_fetcher.dart b/packages/uni_app/lib/controller/fetchers/academics/course_units/all_course_units_fetcher.dart similarity index 100% rename from packages/uni_app/lib/controller/fetchers/course_units_fetcher/all_course_units_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/academics/course_units/all_course_units_fetcher.dart diff --git a/packages/uni_app/lib/controller/fetchers/course_units_fetcher/course_units_info_fetcher.dart b/packages/uni_app/lib/controller/fetchers/academics/course_units/course_units_info_fetcher.dart similarity index 97% rename from packages/uni_app/lib/controller/fetchers/course_units_fetcher/course_units_info_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/academics/course_units/course_units_info_fetcher.dart index 15d386d8f..864207ac8 100644 --- a/packages/uni_app/lib/controller/fetchers/course_units_fetcher/course_units_info_fetcher.dart +++ b/packages/uni_app/lib/controller/fetchers/academics/course_units/course_units_info_fetcher.dart @@ -1,6 +1,6 @@ import 'package:html/parser.dart'; import 'package:http/http.dart'; -import 'package:uni/controller/fetchers/session_dependant_fetcher.dart'; +import 'package:uni/controller/fetchers/core/session_dependent_fetcher.dart'; import 'package:uni/controller/networking/network_router.dart'; import 'package:uni/controller/parsers/parser_course_unit_info.dart'; import 'package:uni/controller/parsers/schedule/new_api/parser.dart'; @@ -10,7 +10,7 @@ import 'package:uni/model/entities/course_units/sheet.dart'; import 'package:uni/model/entities/lecture.dart'; import 'package:uni/session/flows/base/session.dart'; -class CourseUnitsInfoFetcher implements SessionDependantFetcher { +class CourseUnitsInfoFetcher implements SessionDependentFetcher { @override List getEndpoints(Session session) { return NetworkRouter.getBaseUrlsFromSession( diff --git a/packages/uni_app/lib/controller/fetchers/course_units_fetcher/current_course_units_fetcher.dart b/packages/uni_app/lib/controller/fetchers/academics/course_units/current_course_units_fetcher.dart similarity index 90% rename from packages/uni_app/lib/controller/fetchers/course_units_fetcher/current_course_units_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/academics/course_units/current_course_units_fetcher.dart index fd984c50e..311959a8f 100644 --- a/packages/uni_app/lib/controller/fetchers/course_units_fetcher/current_course_units_fetcher.dart +++ b/packages/uni_app/lib/controller/fetchers/academics/course_units/current_course_units_fetcher.dart @@ -1,11 +1,11 @@ import 'dart:convert'; -import 'package:uni/controller/fetchers/session_dependant_fetcher.dart'; +import 'package:uni/controller/fetchers/core/session_dependent_fetcher.dart'; import 'package:uni/controller/networking/network_router.dart'; import 'package:uni/model/entities/course_units/course_unit.dart'; import 'package:uni/session/flows/base/session.dart'; -class CurrentCourseUnitsFetcher implements SessionDependantFetcher { +class CurrentCourseUnitsFetcher implements SessionDependentFetcher { @override List getEndpoints(Session session) { // all faculties list user course units on all faculties diff --git a/packages/uni_app/lib/controller/fetchers/courses_fetcher.dart b/packages/uni_app/lib/controller/fetchers/academics/courses_fetcher.dart similarity index 85% rename from packages/uni_app/lib/controller/fetchers/courses_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/academics/courses_fetcher.dart index ad25cea9c..a609752b8 100644 --- a/packages/uni_app/lib/controller/fetchers/courses_fetcher.dart +++ b/packages/uni_app/lib/controller/fetchers/academics/courses_fetcher.dart @@ -1,11 +1,11 @@ import 'package:http/http.dart'; -import 'package:uni/controller/fetchers/session_dependant_fetcher.dart'; +import 'package:uni/controller/fetchers/core/session_dependent_fetcher.dart'; import 'package:uni/controller/networking/network_router.dart'; import 'package:uni/model/entities/course_units/course_unit.dart'; import 'package:uni/session/flows/base/session.dart'; /// Returns the user's current list of [CourseUnit]. -class CoursesFetcher implements SessionDependantFetcher { +class CoursesFetcher implements SessionDependentFetcher { @override List getEndpoints(Session session) { final urls = NetworkRouter.getBaseUrlsFromSession( diff --git a/packages/uni_app/lib/controller/fetchers/exam_fetcher.dart b/packages/uni_app/lib/controller/fetchers/academics/exam_fetcher.dart similarity index 91% rename from packages/uni_app/lib/controller/fetchers/exam_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/academics/exam_fetcher.dart index 104818624..a2b210d0d 100644 --- a/packages/uni_app/lib/controller/fetchers/exam_fetcher.dart +++ b/packages/uni_app/lib/controller/fetchers/academics/exam_fetcher.dart @@ -1,11 +1,11 @@ -import 'package:uni/controller/fetchers/session_dependant_fetcher.dart'; +import 'package:uni/controller/fetchers/core/session_dependent_fetcher.dart'; import 'package:uni/controller/networking/network_router.dart'; import 'package:uni/controller/parsers/parser_exams.dart'; import 'package:uni/model/entities/course_units/course_unit.dart'; import 'package:uni/model/entities/exam.dart'; import 'package:uni/session/flows/base/session.dart'; -class ExamFetcher implements SessionDependantFetcher { +class ExamFetcher implements SessionDependentFetcher { ExamFetcher(this.userUcs); List userUcs; diff --git a/packages/uni_app/lib/controller/fetchers/faculties_fetcher.dart b/packages/uni_app/lib/controller/fetchers/academics/faculties_fetcher.dart similarity index 100% rename from packages/uni_app/lib/controller/fetchers/faculties_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/academics/faculties_fetcher.dart diff --git a/packages/uni_app/lib/controller/fetchers/professor_info_fetcher.dart b/packages/uni_app/lib/controller/fetchers/academics/professor_info_fetcher.dart similarity index 100% rename from packages/uni_app/lib/controller/fetchers/professor_info_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/academics/professor_info_fetcher.dart diff --git a/packages/uni_app/lib/controller/fetchers/schedule_fetcher/schedule_fetcher.dart b/packages/uni_app/lib/controller/fetchers/academics/schedule/schedule_fetcher.dart similarity index 92% rename from packages/uni_app/lib/controller/fetchers/schedule_fetcher/schedule_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/academics/schedule/schedule_fetcher.dart index 639ff9fdc..05ef8779d 100644 --- a/packages/uni_app/lib/controller/fetchers/schedule_fetcher/schedule_fetcher.dart +++ b/packages/uni_app/lib/controller/fetchers/academics/schedule/schedule_fetcher.dart @@ -1,10 +1,10 @@ -import 'package:uni/controller/fetchers/session_dependant_fetcher.dart'; +import 'package:uni/controller/fetchers/core/session_dependent_fetcher.dart'; import 'package:uni/model/entities/lecture.dart'; import 'package:uni/model/utils/time/week.dart'; import 'package:uni/session/flows/base/session.dart'; /// Class for fetching the user's schedule. -abstract class ScheduleFetcher extends SessionDependantFetcher { +abstract class ScheduleFetcher extends SessionDependentFetcher { // Returns the user's lectures. Future> getLectures(Session session, {int? lectiveYear}); diff --git a/packages/uni_app/lib/controller/fetchers/schedule_fetcher/schedule_fetcher_api.dart b/packages/uni_app/lib/controller/fetchers/academics/schedule/schedule_fetcher_api.dart similarity index 94% rename from packages/uni_app/lib/controller/fetchers/schedule_fetcher/schedule_fetcher_api.dart rename to packages/uni_app/lib/controller/fetchers/academics/schedule/schedule_fetcher_api.dart index 593cf3287..45d2d8cfc 100644 --- a/packages/uni_app/lib/controller/fetchers/schedule_fetcher/schedule_fetcher_api.dart +++ b/packages/uni_app/lib/controller/fetchers/academics/schedule/schedule_fetcher_api.dart @@ -1,5 +1,5 @@ import 'package:http/http.dart' as http; -import 'package:uni/controller/fetchers/schedule_fetcher/schedule_fetcher.dart'; +import 'package:uni/controller/fetchers/academics/schedule/schedule_fetcher.dart'; import 'package:uni/controller/networking/network_router.dart'; import 'package:uni/controller/parsers/schedule/api/parser.dart'; import 'package:uni/model/entities/lecture.dart'; diff --git a/packages/uni_app/lib/controller/fetchers/schedule_fetcher/schedule_fetcher_new_api.dart b/packages/uni_app/lib/controller/fetchers/academics/schedule/schedule_fetcher_new_api.dart similarity index 96% rename from packages/uni_app/lib/controller/fetchers/schedule_fetcher/schedule_fetcher_new_api.dart rename to packages/uni_app/lib/controller/fetchers/academics/schedule/schedule_fetcher_new_api.dart index 983db2a6b..8ae7f6fb6 100644 --- a/packages/uni_app/lib/controller/fetchers/schedule_fetcher/schedule_fetcher_new_api.dart +++ b/packages/uni_app/lib/controller/fetchers/academics/schedule/schedule_fetcher_new_api.dart @@ -1,4 +1,4 @@ -import 'package:uni/controller/fetchers/schedule_fetcher/schedule_fetcher.dart'; +import 'package:uni/controller/fetchers/academics/schedule/schedule_fetcher.dart'; import 'package:uni/controller/networking/network_router.dart'; import 'package:uni/controller/parsers/schedule/new_api/parser.dart'; import 'package:uni/model/entities/lecture.dart'; diff --git a/packages/uni_app/lib/controller/fetchers/book_fetcher.dart b/packages/uni_app/lib/controller/fetchers/campus/book_thumbnail_fetcher.dart similarity index 98% rename from packages/uni_app/lib/controller/fetchers/book_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/campus/book_thumbnail_fetcher.dart index 879f6d7f7..79a1daaf6 100644 --- a/packages/uni_app/lib/controller/fetchers/book_fetcher.dart +++ b/packages/uni_app/lib/controller/fetchers/campus/book_thumbnail_fetcher.dart @@ -3,7 +3,7 @@ import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:uni/controller/networking/network_router.dart'; -class BookThumbFetcher { +class BookThumbnailFetcher { Future fetchBookThumb(String isbn) async { final googleBooksFuture = _fetchFromGoogleBooks(isbn); final openLibraryFuture = _fetchFromOpenLibrary(isbn); diff --git a/packages/uni_app/lib/controller/fetchers/library_occupation_fetcher.dart b/packages/uni_app/lib/controller/fetchers/campus/library_occupation_fetcher.dart similarity index 100% rename from packages/uni_app/lib/controller/fetchers/library_occupation_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/campus/library_occupation_fetcher.dart diff --git a/packages/uni_app/lib/controller/fetchers/location_fetcher/location_fetcher.dart b/packages/uni_app/lib/controller/fetchers/campus/locations/location_fetcher.dart similarity index 100% rename from packages/uni_app/lib/controller/fetchers/location_fetcher/location_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/campus/locations/location_fetcher.dart diff --git a/packages/uni_app/lib/controller/fetchers/location_fetcher/location_fetcher_asset.dart b/packages/uni_app/lib/controller/fetchers/campus/locations/location_fetcher_asset.dart similarity index 92% rename from packages/uni_app/lib/controller/fetchers/location_fetcher/location_fetcher_asset.dart rename to packages/uni_app/lib/controller/fetchers/campus/locations/location_fetcher_asset.dart index dcc9d6c60..3cb7e7260 100644 --- a/packages/uni_app/lib/controller/fetchers/location_fetcher/location_fetcher_asset.dart +++ b/packages/uni_app/lib/controller/fetchers/campus/locations/location_fetcher_asset.dart @@ -1,5 +1,5 @@ import 'package:flutter/services.dart' show rootBundle; -import 'package:uni/controller/fetchers/location_fetcher/location_fetcher.dart'; +import 'package:uni/controller/fetchers/campus/locations/location_fetcher.dart'; import 'package:uni/model/entities/indoor_floor_plan.dart'; import 'package:uni/model/entities/location_group.dart'; diff --git a/packages/uni_app/lib/controller/fetchers/location_fetcher/location_fetcher_osm.dart b/packages/uni_app/lib/controller/fetchers/campus/locations/location_fetcher_osm.dart similarity index 97% rename from packages/uni_app/lib/controller/fetchers/location_fetcher/location_fetcher_osm.dart rename to packages/uni_app/lib/controller/fetchers/campus/locations/location_fetcher_osm.dart index d43c37108..f39b050a1 100644 --- a/packages/uni_app/lib/controller/fetchers/location_fetcher/location_fetcher_osm.dart +++ b/packages/uni_app/lib/controller/fetchers/campus/locations/location_fetcher_osm.dart @@ -1,5 +1,5 @@ import 'package:http/http.dart' as http; -import 'package:uni/controller/fetchers/location_fetcher/location_fetcher.dart'; +import 'package:uni/controller/fetchers/campus/locations/location_fetcher.dart'; import 'package:uni/controller/parsers/parser_osm.dart'; import 'package:uni/model/entities/indoor_floor_plan.dart'; import 'package:uni/model/entities/location_group.dart'; diff --git a/packages/uni_app/lib/controller/fetchers/news_fetcher.dart b/packages/uni_app/lib/controller/fetchers/campus/news_fetcher.dart similarity index 100% rename from packages/uni_app/lib/controller/fetchers/news_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/campus/news_fetcher.dart diff --git a/packages/uni_app/lib/controller/fetchers/restaurant_fetcher.dart b/packages/uni_app/lib/controller/fetchers/campus/restaurant_fetcher.dart similarity index 100% rename from packages/uni_app/lib/controller/fetchers/restaurant_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/campus/restaurant_fetcher.dart diff --git a/packages/uni_app/lib/controller/fetchers/session_dependant_fetcher.dart b/packages/uni_app/lib/controller/fetchers/core/session_dependent_fetcher.dart similarity index 71% rename from packages/uni_app/lib/controller/fetchers/session_dependant_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/core/session_dependent_fetcher.dart index 727f59e79..d238f6074 100644 --- a/packages/uni_app/lib/controller/fetchers/session_dependant_fetcher.dart +++ b/packages/uni_app/lib/controller/fetchers/core/session_dependent_fetcher.dart @@ -1,5 +1,5 @@ import 'package:uni/session/flows/base/session.dart'; -abstract class SessionDependantFetcher { +abstract class SessionDependentFetcher { List getEndpoints(Session session); } diff --git a/packages/uni_app/lib/controller/fetchers/terms_and_conditions_fetcher.dart b/packages/uni_app/lib/controller/fetchers/core/terms_and_conditions_fetcher.dart similarity index 100% rename from packages/uni_app/lib/controller/fetchers/terms_and_conditions_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/core/terms_and_conditions_fetcher.dart diff --git a/packages/uni_app/lib/controller/fetchers/fees_fetcher.dart b/packages/uni_app/lib/controller/fetchers/finances/current_account_fetcher.dart similarity index 89% rename from packages/uni_app/lib/controller/fetchers/fees_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/finances/current_account_fetcher.dart index 1a52259b0..85db2c56c 100644 --- a/packages/uni_app/lib/controller/fetchers/fees_fetcher.dart +++ b/packages/uni_app/lib/controller/fetchers/finances/current_account_fetcher.dart @@ -1,11 +1,11 @@ import 'package:http/http.dart'; -import 'package:uni/controller/fetchers/session_dependant_fetcher.dart'; +import 'package:uni/controller/fetchers/core/session_dependent_fetcher.dart'; import 'package:uni/controller/networking/network_router.dart'; import 'package:uni/controller/parsers/parser_current_account.dart'; import 'package:uni/model/entities/current_account.dart'; import 'package:uni/session/flows/base/session.dart'; -class FeesFetcher implements SessionDependantFetcher { +class CurrentAccountFetcher implements SessionDependentFetcher { @override List getEndpoints(Session session) { // TO DO: Check balance on all faculties and discard if user is not enrolled diff --git a/packages/uni_app/lib/controller/fetchers/print_fetcher.dart b/packages/uni_app/lib/controller/fetchers/finances/print_fetcher.dart similarity index 91% rename from packages/uni_app/lib/controller/fetchers/print_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/finances/print_fetcher.dart index 73c02f183..2afa31d0b 100644 --- a/packages/uni_app/lib/controller/fetchers/print_fetcher.dart +++ b/packages/uni_app/lib/controller/fetchers/finances/print_fetcher.dart @@ -1,9 +1,9 @@ import 'package:http/http.dart' as http; -import 'package:uni/controller/fetchers/session_dependant_fetcher.dart'; +import 'package:uni/controller/fetchers/core/session_dependent_fetcher.dart'; import 'package:uni/controller/networking/network_router.dart'; import 'package:uni/session/flows/base/session.dart'; -class PrintFetcher implements SessionDependantFetcher { +class PrintFetcher implements SessionDependentFetcher { @override List getEndpoints(Session session) { final url = '${NetworkRouter.getBaseUrl('feup')}imp4_impressoes.atribs'; diff --git a/packages/uni_app/lib/controller/fetchers/reference_fetcher.dart b/packages/uni_app/lib/controller/fetchers/finances/reference_fetcher.dart similarity index 83% rename from packages/uni_app/lib/controller/fetchers/reference_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/finances/reference_fetcher.dart index 93d88685d..e86a12e5f 100644 --- a/packages/uni_app/lib/controller/fetchers/reference_fetcher.dart +++ b/packages/uni_app/lib/controller/fetchers/finances/reference_fetcher.dart @@ -1,9 +1,9 @@ import 'package:http/http.dart'; -import 'package:uni/controller/fetchers/session_dependant_fetcher.dart'; +import 'package:uni/controller/fetchers/core/session_dependent_fetcher.dart'; import 'package:uni/controller/networking/network_router.dart'; import 'package:uni/session/flows/base/session.dart'; -class ReferenceFetcher implements SessionDependantFetcher { +class ReferenceFetcher implements SessionDependentFetcher { @override List getEndpoints(Session session) { final baseUrls = diff --git a/packages/uni_app/lib/controller/fetchers/profile_fetcher.dart b/packages/uni_app/lib/controller/fetchers/profile/profile_fetcher.dart similarity index 88% rename from packages/uni_app/lib/controller/fetchers/profile_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/profile/profile_fetcher.dart index 76c4e565e..ec8329a12 100644 --- a/packages/uni_app/lib/controller/fetchers/profile_fetcher.dart +++ b/packages/uni_app/lib/controller/fetchers/profile/profile_fetcher.dart @@ -1,12 +1,12 @@ -import 'package:uni/controller/fetchers/courses_fetcher.dart'; -import 'package:uni/controller/fetchers/session_dependant_fetcher.dart'; +import 'package:uni/controller/fetchers/academics/courses_fetcher.dart'; +import 'package:uni/controller/fetchers/core/session_dependent_fetcher.dart'; import 'package:uni/controller/networking/network_router.dart'; import 'package:uni/controller/parsers/parser_courses.dart'; import 'package:uni/controller/parsers/parser_pedagogical_surveys.dart'; import 'package:uni/model/entities/profile.dart'; import 'package:uni/session/flows/base/session.dart'; -class ProfileFetcher implements SessionDependantFetcher { +class ProfileFetcher implements SessionDependentFetcher { @override List getEndpoints(Session session) { final url = NetworkRouter.getBaseUrlsFromSession( diff --git a/packages/uni_app/lib/controller/fetchers/profile_info_fetcher.dart b/packages/uni_app/lib/controller/fetchers/profile/profile_info_fetcher.dart similarity index 90% rename from packages/uni_app/lib/controller/fetchers/profile_info_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/profile/profile_info_fetcher.dart index 03239b084..61fc7f538 100644 --- a/packages/uni_app/lib/controller/fetchers/profile_info_fetcher.dart +++ b/packages/uni_app/lib/controller/fetchers/profile/profile_info_fetcher.dart @@ -1,10 +1,10 @@ -import 'package:uni/controller/fetchers/session_dependant_fetcher.dart'; +import 'package:uni/controller/fetchers/core/session_dependent_fetcher.dart'; import 'package:uni/controller/networking/network_router.dart'; import 'package:uni/controller/parsers/parser_profile_info.dart'; import 'package:uni/model/entities/profile_info.dart'; import 'package:uni/session/flows/base/session.dart'; -class ProfileInfoFetcher implements SessionDependantFetcher { +class ProfileInfoFetcher implements SessionDependentFetcher { @override List getEndpoints(Session session) { final url = NetworkRouter.getBaseUrlsFromSession( diff --git a/packages/uni_app/lib/controller/fetchers/departures_fetcher.dart b/packages/uni_app/lib/controller/fetchers/transit/departures_fetcher.dart similarity index 100% rename from packages/uni_app/lib/controller/fetchers/departures_fetcher.dart rename to packages/uni_app/lib/controller/fetchers/transit/departures_fetcher.dart diff --git a/packages/uni_app/lib/controller/parsers/parser_course_unit_info.dart b/packages/uni_app/lib/controller/parsers/parser_course_unit_info.dart index f8be2f519..d42fd5be4 100644 --- a/packages/uni_app/lib/controller/parsers/parser_course_unit_info.dart +++ b/packages/uni_app/lib/controller/parsers/parser_course_unit_info.dart @@ -2,7 +2,7 @@ import 'dart:convert'; import 'package:html/parser.dart'; import 'package:http/http.dart' as http; -import 'package:uni/controller/fetchers/course_units_fetcher/course_units_info_fetcher.dart'; +import 'package:uni/controller/fetchers/academics/course_units/course_units_info_fetcher.dart'; import 'package:uni/model/entities/course_units/course_unit_class.dart'; import 'package:uni/model/entities/course_units/course_unit_directory.dart'; import 'package:uni/model/entities/course_units/course_unit_file.dart'; diff --git a/packages/uni_app/lib/main.dart b/packages/uni_app/lib/main.dart index 203605230..8ee03002d 100644 --- a/packages/uni_app/lib/main.dart +++ b/packages/uni_app/lib/main.dart @@ -14,7 +14,7 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:ua_client_hints/ua_client_hints.dart'; import 'package:uni/controller/background_workers/background_callback.dart'; import 'package:uni/controller/cleanup.dart'; -import 'package:uni/controller/fetchers/terms_and_conditions_fetcher.dart'; +import 'package:uni/controller/fetchers/core/terms_and_conditions_fetcher.dart'; import 'package:uni/controller/local_storage/migrations/migration_controller.dart'; import 'package:uni/controller/local_storage/preferences_controller.dart'; import 'package:uni/generated/l10n.dart'; diff --git a/packages/uni_app/lib/model/providers/riverpod/calendar_provider.dart b/packages/uni_app/lib/model/providers/riverpod/calendar_provider.dart index e24165756..203277dd1 100644 --- a/packages/uni_app/lib/model/providers/riverpod/calendar_provider.dart +++ b/packages/uni_app/lib/model/providers/riverpod/calendar_provider.dart @@ -1,5 +1,5 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:uni/controller/fetchers/calendar_fetcher_json.dart'; +import 'package:uni/controller/fetchers/academics/calendar_fetcher.dart'; import 'package:uni/model/entities/app_locale.dart'; import 'package:uni/model/entities/localized_events.dart'; import 'package:uni/model/providers/riverpod/cached_async_notifier.dart'; @@ -10,11 +10,11 @@ final calendarProvider = ); class CalendarNotifier extends CachedAsyncNotifier { - CalendarNotifier({CalendarFetcherJson? fetcher}) : _fetcher = fetcher; + CalendarNotifier({CalendarFetcher? fetcher}) : _fetcher = fetcher; - final CalendarFetcherJson? _fetcher; + final CalendarFetcher? _fetcher; - CalendarFetcherJson get fetcher => _fetcher ?? CalendarFetcherJson(); + CalendarFetcher get fetcher => _fetcher ?? CalendarFetcher(); @override Duration? get cacheDuration => const Duration(days: 30); diff --git a/packages/uni_app/lib/model/providers/riverpod/course_units_info_provider.dart b/packages/uni_app/lib/model/providers/riverpod/course_units_info_provider.dart index 812953797..40a376647 100644 --- a/packages/uni_app/lib/model/providers/riverpod/course_units_info_provider.dart +++ b/packages/uni_app/lib/model/providers/riverpod/course_units_info_provider.dart @@ -1,7 +1,7 @@ import 'dart:collection'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:uni/controller/fetchers/course_units_fetcher/course_units_info_fetcher.dart'; +import 'package:uni/controller/fetchers/academics/course_units/course_units_info_fetcher.dart'; import 'package:uni/model/entities/course_units/course_unit.dart'; import 'package:uni/model/entities/course_units/course_unit_class.dart'; import 'package:uni/model/entities/course_units/course_unit_directory.dart'; diff --git a/packages/uni_app/lib/model/providers/riverpod/current_account_provider.dart b/packages/uni_app/lib/model/providers/riverpod/current_account_provider.dart index 4ca3d43c1..7cddd328b 100644 --- a/packages/uni_app/lib/model/providers/riverpod/current_account_provider.dart +++ b/packages/uni_app/lib/model/providers/riverpod/current_account_provider.dart @@ -1,11 +1,11 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:uni/controller/fetchers/fees_fetcher.dart'; +import 'package:uni/controller/fetchers/finances/current_account_fetcher.dart'; import 'package:uni/controller/parsers/parser_current_account.dart'; import 'package:uni/model/providers/riverpod/session_provider.dart'; final currentAccountProvider = FutureProvider.autoDispose((ref) async { final session = await ref.watch(sessionProvider.future); - final fetcher = FeesFetcher(); + final fetcher = CurrentAccountFetcher(); final parser = CurrentAccountParser(session: session); final result = await fetcher.extractCurrentAccount(session!, parser); return result; diff --git a/packages/uni_app/lib/model/providers/riverpod/exam_provider.dart b/packages/uni_app/lib/model/providers/riverpod/exam_provider.dart index 66e4801b8..513ac51f5 100644 --- a/packages/uni_app/lib/model/providers/riverpod/exam_provider.dart +++ b/packages/uni_app/lib/model/providers/riverpod/exam_provider.dart @@ -1,5 +1,5 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:uni/controller/fetchers/exam_fetcher.dart'; +import 'package:uni/controller/fetchers/academics/exam_fetcher.dart'; import 'package:uni/controller/local_storage/database/database.dart'; import 'package:uni/model/entities/exam.dart'; import 'package:uni/model/entities/profile.dart'; diff --git a/packages/uni_app/lib/model/providers/riverpod/faculty_locations_provider.dart b/packages/uni_app/lib/model/providers/riverpod/faculty_locations_provider.dart index 6f419e77b..04c13ec41 100644 --- a/packages/uni_app/lib/model/providers/riverpod/faculty_locations_provider.dart +++ b/packages/uni_app/lib/model/providers/riverpod/faculty_locations_provider.dart @@ -1,7 +1,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/legacy.dart'; -import 'package:uni/controller/fetchers/location_fetcher/location_fetcher_asset.dart'; -import 'package:uni/controller/fetchers/location_fetcher/location_fetcher_osm.dart'; +import 'package:uni/controller/fetchers/campus/locations/location_fetcher_asset.dart'; +import 'package:uni/controller/fetchers/campus/locations/location_fetcher_osm.dart'; import 'package:uni/model/entities/faculty_config.dart'; import 'package:uni/model/entities/indoor_floor_plan.dart'; import 'package:uni/model/entities/location_group.dart'; diff --git a/packages/uni_app/lib/model/providers/riverpod/lecture_provider.dart b/packages/uni_app/lib/model/providers/riverpod/lecture_provider.dart index 1b1d568e5..5b3869675 100644 --- a/packages/uni_app/lib/model/providers/riverpod/lecture_provider.dart +++ b/packages/uni_app/lib/model/providers/riverpod/lecture_provider.dart @@ -1,6 +1,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:logger/logger.dart'; -import 'package:uni/controller/fetchers/schedule_fetcher/schedule_fetcher_new_api.dart'; +import 'package:uni/controller/fetchers/academics/schedule/schedule_fetcher_new_api.dart'; import 'package:uni/controller/local_storage/database/database.dart'; import 'package:uni/model/entities/lecture.dart'; import 'package:uni/model/providers/riverpod/cached_async_notifier.dart'; diff --git a/packages/uni_app/lib/model/providers/riverpod/library_occupation_provider.dart b/packages/uni_app/lib/model/providers/riverpod/library_occupation_provider.dart index 8880b4352..0a6462061 100644 --- a/packages/uni_app/lib/model/providers/riverpod/library_occupation_provider.dart +++ b/packages/uni_app/lib/model/providers/riverpod/library_occupation_provider.dart @@ -1,5 +1,5 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:uni/controller/fetchers/library_occupation_fetcher.dart'; +import 'package:uni/controller/fetchers/campus/library_occupation_fetcher.dart'; import 'package:uni/controller/local_storage/database/database.dart'; import 'package:uni/model/entities/library_occupation.dart'; import 'package:uni/model/providers/riverpod/cached_async_notifier.dart'; diff --git a/packages/uni_app/lib/model/providers/riverpod/news_provider.dart b/packages/uni_app/lib/model/providers/riverpod/news_provider.dart index 7c79c3fba..7830d66e0 100644 --- a/packages/uni_app/lib/model/providers/riverpod/news_provider.dart +++ b/packages/uni_app/lib/model/providers/riverpod/news_provider.dart @@ -1,5 +1,5 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:uni/controller/fetchers/news_fetcher.dart'; +import 'package:uni/controller/fetchers/campus/news_fetcher.dart'; import 'package:uni/controller/local_storage/database/database.dart'; import 'package:uni/model/entities/news.dart'; import 'package:uni/model/providers/riverpod/cached_async_notifier.dart'; diff --git a/packages/uni_app/lib/model/providers/riverpod/professor_info_provider.dart b/packages/uni_app/lib/model/providers/riverpod/professor_info_provider.dart index d9183f95a..2f7be84e1 100644 --- a/packages/uni_app/lib/model/providers/riverpod/professor_info_provider.dart +++ b/packages/uni_app/lib/model/providers/riverpod/professor_info_provider.dart @@ -1,5 +1,5 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:uni/controller/fetchers/professor_info_fetcher.dart'; +import 'package:uni/controller/fetchers/academics/professor_info_fetcher.dart'; import 'package:uni/model/entities/course_units/sheet.dart'; import 'package:uni/model/providers/riverpod/cached_async_notifier.dart'; import 'package:uni/model/providers/riverpod/session_provider.dart'; diff --git a/packages/uni_app/lib/model/providers/riverpod/professor_lectures_provider.dart b/packages/uni_app/lib/model/providers/riverpod/professor_lectures_provider.dart index 1163b5164..fad4c9efb 100644 --- a/packages/uni_app/lib/model/providers/riverpod/professor_lectures_provider.dart +++ b/packages/uni_app/lib/model/providers/riverpod/professor_lectures_provider.dart @@ -1,5 +1,5 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:uni/controller/fetchers/schedule_fetcher/schedule_fetcher_new_api.dart'; +import 'package:uni/controller/fetchers/academics/schedule/schedule_fetcher_new_api.dart'; import 'package:uni/model/entities/course_units/sheet.dart'; import 'package:uni/model/entities/lecture.dart'; import 'package:uni/model/providers/riverpod/session_provider.dart'; diff --git a/packages/uni_app/lib/model/providers/riverpod/profile_info_provider.dart b/packages/uni_app/lib/model/providers/riverpod/profile_info_provider.dart index 9d6d2af59..d3c0c5a41 100644 --- a/packages/uni_app/lib/model/providers/riverpod/profile_info_provider.dart +++ b/packages/uni_app/lib/model/providers/riverpod/profile_info_provider.dart @@ -1,5 +1,5 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:uni/controller/fetchers/profile_info_fetcher.dart'; +import 'package:uni/controller/fetchers/profile/profile_info_fetcher.dart'; import 'package:uni/controller/local_storage/database/database.dart'; import 'package:uni/model/entities/profile_info.dart'; import 'package:uni/model/providers/riverpod/cached_async_notifier.dart'; diff --git a/packages/uni_app/lib/model/providers/riverpod/profile_provider.dart b/packages/uni_app/lib/model/providers/riverpod/profile_provider.dart index dc71768b3..086542864 100644 --- a/packages/uni_app/lib/model/providers/riverpod/profile_provider.dart +++ b/packages/uni_app/lib/model/providers/riverpod/profile_provider.dart @@ -1,11 +1,11 @@ import 'dart:io'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:uni/controller/fetchers/course_units_fetcher/all_course_units_fetcher.dart'; -import 'package:uni/controller/fetchers/course_units_fetcher/current_course_units_fetcher.dart'; -import 'package:uni/controller/fetchers/fees_fetcher.dart'; -import 'package:uni/controller/fetchers/print_fetcher.dart'; -import 'package:uni/controller/fetchers/profile_fetcher.dart'; +import 'package:uni/controller/fetchers/academics/course_units/all_course_units_fetcher.dart'; +import 'package:uni/controller/fetchers/academics/course_units/current_course_units_fetcher.dart'; +import 'package:uni/controller/fetchers/finances/current_account_fetcher.dart'; +import 'package:uni/controller/fetchers/finances/print_fetcher.dart'; +import 'package:uni/controller/fetchers/profile/profile_fetcher.dart'; import 'package:uni/controller/local_storage/database/database.dart'; import 'package:uni/controller/local_storage/file_offline_storage.dart'; import 'package:uni/controller/local_storage/preferences_controller.dart'; @@ -110,7 +110,7 @@ class ProfileNotifier extends CachedAsyncNotifier { } Future<(String, DateTime?)> _fetchFees(Session session) async { - final response = await FeesFetcher().getUserFeesResponse(session); + final response = await CurrentAccountFetcher().getUserFeesResponse(session); return (parseFeesBalance(response), parseFeesNextLimit(response)); } diff --git a/packages/uni_app/lib/model/providers/riverpod/restaurant_provider.dart b/packages/uni_app/lib/model/providers/riverpod/restaurant_provider.dart index 32bdbc62e..b392da3e2 100644 --- a/packages/uni_app/lib/model/providers/riverpod/restaurant_provider.dart +++ b/packages/uni_app/lib/model/providers/riverpod/restaurant_provider.dart @@ -1,5 +1,5 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:uni/controller/fetchers/restaurant_fetcher.dart'; +import 'package:uni/controller/fetchers/campus/restaurant_fetcher.dart'; import 'package:uni/controller/local_storage/database/database.dart'; import 'package:uni/model/entities/restaurant.dart'; import 'package:uni/model/providers/riverpod/cached_async_notifier.dart'; diff --git a/packages/uni_app/lib/model/providers/riverpod/session_provider.dart b/packages/uni_app/lib/model/providers/riverpod/session_provider.dart index 9d19b2953..25d03230d 100644 --- a/packages/uni_app/lib/model/providers/riverpod/session_provider.dart +++ b/packages/uni_app/lib/model/providers/riverpod/session_provider.dart @@ -1,6 +1,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:uni/controller/background_workers/notifications.dart'; -import 'package:uni/controller/fetchers/terms_and_conditions_fetcher.dart'; +import 'package:uni/controller/fetchers/core/terms_and_conditions_fetcher.dart'; import 'package:uni/controller/local_storage/preferences_controller.dart'; import 'package:uni/controller/networking/network_router.dart'; import 'package:uni/model/providers/riverpod/cached_async_notifier.dart'; diff --git a/packages/uni_app/lib/session/flows/credentials/request.dart b/packages/uni_app/lib/session/flows/credentials/request.dart index 501efc2d0..7fcd8d75c 100644 --- a/packages/uni_app/lib/session/flows/credentials/request.dart +++ b/packages/uni_app/lib/session/flows/credentials/request.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'dart:io'; import 'package:http/http.dart' as http; -import 'package:uni/controller/fetchers/faculties_fetcher.dart'; +import 'package:uni/controller/fetchers/academics/faculties_fetcher.dart'; import 'package:uni/http/client/cookie.dart'; import 'package:uni/session/exception.dart'; import 'package:uni/session/flows/base/request.dart'; diff --git a/packages/uni_app/lib/session/flows/federated/request.dart b/packages/uni_app/lib/session/flows/federated/request.dart index 71b17420a..09cccfdfb 100644 --- a/packages/uni_app/lib/session/flows/federated/request.dart +++ b/packages/uni_app/lib/session/flows/federated/request.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:http/http.dart' as http; import 'package:openid_client/openid_client.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:uni/controller/fetchers/faculties_fetcher.dart'; +import 'package:uni/controller/fetchers/academics/faculties_fetcher.dart'; import 'package:uni/session/exception.dart'; import 'package:uni/session/flows/base/request.dart'; import 'package:uni/session/flows/federated/client.dart'; diff --git a/packages/uni_app/lib/view/about/widgets/terms_and_conditions.dart b/packages/uni_app/lib/view/about/widgets/terms_and_conditions.dart index b59d1a1d6..30d35b16b 100644 --- a/packages/uni_app/lib/view/about/widgets/terms_and_conditions.dart +++ b/packages/uni_app/lib/view/about/widgets/terms_and_conditions.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_markdown/flutter_markdown.dart'; -import 'package:uni/controller/fetchers/terms_and_conditions_fetcher.dart'; +import 'package:uni/controller/fetchers/core/terms_and_conditions_fetcher.dart'; import 'package:uni/controller/networking/url_launcher.dart'; import 'package:uni/generated/l10n.dart'; diff --git a/packages/uni_app/lib/view/course_unit_info/course_unit_info.dart b/packages/uni_app/lib/view/course_unit_info/course_unit_info.dart index 7da0f0a34..32003c74f 100644 --- a/packages/uni_app/lib/view/course_unit_info/course_unit_info.dart +++ b/packages/uni_app/lib/view/course_unit_info/course_unit_info.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:uni/controller/fetchers/course_units_fetcher/course_units_info_fetcher.dart'; +import 'package:uni/controller/fetchers/academics/course_units/course_units_info_fetcher.dart'; import 'package:uni/generated/l10n.dart'; import 'package:uni/model/entities/course_units/course_unit.dart'; import 'package:uni/model/entities/exam.dart'; diff --git a/packages/uni_app/lib/view/course_unit_info/widgets/course_unit_sheet.dart b/packages/uni_app/lib/view/course_unit_info/widgets/course_unit_sheet.dart index 10445b820..5364b9135 100644 --- a/packages/uni_app/lib/view/course_unit_info/widgets/course_unit_sheet.dart +++ b/packages/uni_app/lib/view/course_unit_info/widgets/course_unit_sheet.dart @@ -3,7 +3,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart'; -import 'package:uni/controller/fetchers/book_fetcher.dart'; +import 'package:uni/controller/fetchers/campus/book_thumbnail_fetcher.dart'; import 'package:uni/controller/local_storage/preferences_controller.dart'; import 'package:uni/generated/l10n.dart'; import 'package:uni/model/entities/course_units/sheet.dart'; @@ -181,7 +181,7 @@ class CourseUnitSheetView extends ConsumerWidget { children: courseUnitSheet.books.map((book) { return book.isbn.isNotEmpty ? FutureBuilder( - future: BookThumbFetcher().fetchBookThumb( + future: BookThumbnailFetcher().fetchBookThumb( book.isbn, ), builder: (context, snapshot) { diff --git a/packages/uni_app/lib/view/profile/widgets/create_print_mb_dialog.dart b/packages/uni_app/lib/view/profile/widgets/create_print_mb_dialog.dart index b389c26d5..cea36bc20 100644 --- a/packages/uni_app/lib/view/profile/widgets/create_print_mb_dialog.dart +++ b/packages/uni_app/lib/view/profile/widgets/create_print_mb_dialog.dart @@ -1,161 +1,161 @@ -import 'package:currency_text_input_formatter/currency_text_input_formatter.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_riverpod/legacy.dart'; -import 'package:uni/controller/fetchers/print_fetcher.dart'; -import 'package:uni/generated/l10n.dart'; -import 'package:uni/model/providers/riverpod/session_provider.dart'; -import 'package:uni/view/widgets/toast_message.dart'; - -final moneyValueProvider = StateProvider((ref) => 1.0); - -Future addMoneyDialog(BuildContext context) { - final formKey = GlobalKey(); - final controller = TextEditingController(text: '1,00 €'); - - return showDialog( - context: context, - builder: (context) { - return Consumer( - builder: (context, ref, child) { - final value = ref.watch(moneyValueProvider); - - void onValueChange() { - final inputValue = valueTextToNumber(controller.text); - ref.read(moneyValueProvider.notifier).state = inputValue; - } - - controller.addListener(onValueChange); - - return AlertDialog( - content: Form( - key: formKey, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.only(top: 5, bottom: 10), - child: Text( - S.of(context).reference_sigarra_help, - textAlign: TextAlign.start, - style: Theme.of(context).textTheme.titleMedium, - ), - ), - Row( - children: [ - IconButton( - icon: const Icon(Icons.indeterminate_check_box), - tooltip: S.of(context).decrement, - onPressed: () { - final decreasedValue = - valueTextToNumber(controller.text) - 1; - if (decreasedValue < 1) { - return; - } - - controller.value = TextEditingValue( - text: numberToValueText(decreasedValue), - ); - }, - ), - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 5, - vertical: 10, - ), - child: TextFormField( - controller: controller, - inputFormatters: [formatter], - keyboardType: TextInputType.number, - textAlign: TextAlign.center, - onTap: () { - controller.value = const TextEditingValue( - selection: TextSelection.collapsed(offset: 0), - ); - }, - onChanged: (string) { - controller.value = TextEditingValue( - text: string, - selection: TextSelection.collapsed( - offset: string.length, - ), - ); - }, - ), - ), - ), - IconButton( - icon: const Icon(Icons.add_box), - tooltip: S.of(context).increment, - onPressed: () { - controller.value = TextEditingValue( - text: numberToValueText( - valueTextToNumber(controller.text) + 1, - ), - ); - }, - ), - ], - ), - ], - ), - ), - title: Text( - S.of(context).add_quota, - style: Theme.of(context).textTheme.headlineMedium, - ), - actions: [ - TextButton( - child: Text( - S.of(context).cancel, - style: Theme.of(context).textTheme.bodyMedium, - ), - onPressed: () => Navigator.pop(context), - ), - ElevatedButton( - onPressed: () => generateReference(context, ref, value), - child: Text(S.of(context).generate_reference), - ), - ], - ); - }, - ); - }, - ); -} - -final formatter = CurrencyTextInputFormatter.currency( - locale: 'pt', - decimalDigits: 2, - symbol: '€ ', -); - -double valueTextToNumber(String value) => - double.parse(value.substring(0, value.length - 2).replaceAll(',', '.')); - -String numberToValueText(double number) => number.toStringAsFixed(2); - -Future generateReference( - BuildContext context, - WidgetRef ref, - double amount, -) async { - if (amount < 1) { - await ToastMessage.warning(context, S.of(context).min_value_reference); - return; - } - - final session = ref.read(sessionProvider.select((value) => value.value!)); - final response = await PrintFetcher.generatePrintMoneyReference( - amount, - session, - ); - - if (response.statusCode == 200 && context.mounted) { - Navigator.of(context).pop(false); - await ToastMessage.success(context, S.of(context).reference_success); - } else if (context.mounted) { - await ToastMessage.error(context, S.of(context).some_error); - } -} +import 'package:currency_text_input_formatter/currency_text_input_formatter.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/legacy.dart'; +import 'package:uni/controller/fetchers/finances/print_fetcher.dart'; +import 'package:uni/generated/l10n.dart'; +import 'package:uni/model/providers/riverpod/session_provider.dart'; +import 'package:uni/view/widgets/toast_message.dart'; + +final moneyValueProvider = StateProvider((ref) => 1.0); + +Future addMoneyDialog(BuildContext context) { + final formKey = GlobalKey(); + final controller = TextEditingController(text: '1,00 €'); + + return showDialog( + context: context, + builder: (context) { + return Consumer( + builder: (context, ref, child) { + final value = ref.watch(moneyValueProvider); + + void onValueChange() { + final inputValue = valueTextToNumber(controller.text); + ref.read(moneyValueProvider.notifier).state = inputValue; + } + + controller.addListener(onValueChange); + + return AlertDialog( + content: Form( + key: formKey, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.only(top: 5, bottom: 10), + child: Text( + S.of(context).reference_sigarra_help, + textAlign: TextAlign.start, + style: Theme.of(context).textTheme.titleMedium, + ), + ), + Row( + children: [ + IconButton( + icon: const Icon(Icons.indeterminate_check_box), + tooltip: S.of(context).decrement, + onPressed: () { + final decreasedValue = + valueTextToNumber(controller.text) - 1; + if (decreasedValue < 1) { + return; + } + + controller.value = TextEditingValue( + text: numberToValueText(decreasedValue), + ); + }, + ), + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 5, + vertical: 10, + ), + child: TextFormField( + controller: controller, + inputFormatters: [formatter], + keyboardType: TextInputType.number, + textAlign: TextAlign.center, + onTap: () { + controller.value = const TextEditingValue( + selection: TextSelection.collapsed(offset: 0), + ); + }, + onChanged: (string) { + controller.value = TextEditingValue( + text: string, + selection: TextSelection.collapsed( + offset: string.length, + ), + ); + }, + ), + ), + ), + IconButton( + icon: const Icon(Icons.add_box), + tooltip: S.of(context).increment, + onPressed: () { + controller.value = TextEditingValue( + text: numberToValueText( + valueTextToNumber(controller.text) + 1, + ), + ); + }, + ), + ], + ), + ], + ), + ), + title: Text( + S.of(context).add_quota, + style: Theme.of(context).textTheme.headlineMedium, + ), + actions: [ + TextButton( + child: Text( + S.of(context).cancel, + style: Theme.of(context).textTheme.bodyMedium, + ), + onPressed: () => Navigator.pop(context), + ), + ElevatedButton( + onPressed: () => generateReference(context, ref, value), + child: Text(S.of(context).generate_reference), + ), + ], + ); + }, + ); + }, + ); +} + +final formatter = CurrencyTextInputFormatter.currency( + locale: 'pt', + decimalDigits: 2, + symbol: '€ ', +); + +double valueTextToNumber(String value) => + double.parse(value.substring(0, value.length - 2).replaceAll(',', '.')); + +String numberToValueText(double number) => number.toStringAsFixed(2); + +Future generateReference( + BuildContext context, + WidgetRef ref, + double amount, +) async { + if (amount < 1) { + await ToastMessage.warning(context, S.of(context).min_value_reference); + return; + } + + final session = ref.read(sessionProvider.select((value) => value.value!)); + final response = await PrintFetcher.generatePrintMoneyReference( + amount, + session, + ); + + if (response.statusCode == 200 && context.mounted) { + Navigator.of(context).pop(false); + await ToastMessage.success(context, S.of(context).reference_success); + } else if (context.mounted) { + await ToastMessage.error(context, S.of(context).some_error); + } +} diff --git a/packages/uni_app/lib/view/terms_and_condition_dialog.dart b/packages/uni_app/lib/view/terms_and_condition_dialog.dart index 02b5d7397..7ebf04bbd 100644 --- a/packages/uni_app/lib/view/terms_and_condition_dialog.dart +++ b/packages/uni_app/lib/view/terms_and_condition_dialog.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; -import 'package:uni/controller/fetchers/terms_and_conditions_fetcher.dart'; +import 'package:uni/controller/fetchers/core/terms_and_conditions_fetcher.dart'; import 'package:uni/controller/local_storage/preferences_controller.dart'; import 'package:uni/generated/l10n.dart'; import 'package:uni/view/about/widgets/terms_and_conditions.dart'; diff --git a/packages/uni_app/test/mocks/unit/providers/lecture_provider_test.mocks.dart b/packages/uni_app/test/mocks/unit/providers/lecture_provider_test.mocks.dart index cd3cc95b3..7de281a75 100644 --- a/packages/uni_app/test/mocks/unit/providers/lecture_provider_test.mocks.dart +++ b/packages/uni_app/test/mocks/unit/providers/lecture_provider_test.mocks.dart @@ -10,7 +10,7 @@ import 'dart:typed_data' as _i11; import 'package:http/http.dart' as _i2; import 'package:mockito/mockito.dart' as _i1; import 'package:mockito/src/dummies.dart' as _i10; -import 'package:uni/controller/fetchers/schedule_fetcher/schedule_fetcher.dart' +import 'package:uni/controller/fetchers/academics/schedule/schedule_fetcher.dart' as _i3; import 'package:uni/model/entities/lecture.dart' as _i5; import 'package:uni/model/entities/profile.dart' as _i7; diff --git a/packages/uni_app/test/unit/providers/calendar_provider_test.dart b/packages/uni_app/test/unit/providers/calendar_provider_test.dart index 0f53ef138..f17e2341c 100644 --- a/packages/uni_app/test/unit/providers/calendar_provider_test.dart +++ b/packages/uni_app/test/unit/providers/calendar_provider_test.dart @@ -1,13 +1,13 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import 'package:uni/controller/fetchers/calendar_fetcher_json.dart'; +import 'package:uni/controller/fetchers/academics/calendar_fetcher.dart'; import 'package:uni/controller/local_storage/preferences_controller.dart'; import 'package:uni/model/entities/app_locale.dart'; import 'package:uni/model/entities/calendar_event.dart'; import 'package:uni/model/providers/riverpod/calendar_provider.dart'; -class FakeCalendarFetcher extends CalendarFetcherJson { +class FakeCalendarFetcher extends CalendarFetcher { bool throwError = false; Map> mockGroups = {'pt': [], 'en': []}; From 0e4da6fa86f06f3d9eaa042f9c278bc08af3b8fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Barbosa?= Date: Thu, 4 Jun 2026 15:32:33 +0100 Subject: [PATCH 2/4] removed transit related dead code --- .../fetchers/transit/departures_fetcher.dart | 179 ------------------ 1 file changed, 179 deletions(-) delete mode 100644 packages/uni_app/lib/controller/fetchers/transit/departures_fetcher.dart diff --git a/packages/uni_app/lib/controller/fetchers/transit/departures_fetcher.dart b/packages/uni_app/lib/controller/fetchers/transit/departures_fetcher.dart deleted file mode 100644 index 8f827fcaf..000000000 --- a/packages/uni_app/lib/controller/fetchers/transit/departures_fetcher.dart +++ /dev/null @@ -1,179 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; -import 'dart:io'; - -import 'package:html/dom.dart'; -import 'package:html/parser.dart'; -import 'package:http/io_client.dart' as http; -import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:uni/controller/networking/network_router.dart'; -import 'package:uni/model/entities/bus.dart'; -import 'package:uni/model/entities/bus_stop.dart'; -import 'package:uni/model/entities/trip.dart'; - -class DeparturesFetcher { - DeparturesFetcher(this._stopCode, this._stopData); - - final String _stopCode; - final BusStopData _stopData; - static final _client = http.IOClient( - HttpClient(context: SecurityContext()) - ..badCertificateCallback = (cert, host, port) => - host == 'www.stcp.pt' && port == 443, - ); - - Future _getCSRFToken() async { - final url = - 'https://www.stcp.pt/en/travel/timetables/?paragem=$_stopCode&t=smsbus'; - - final response = await _client.get(url.toUri()); - final htmlResponse = parse(response.body); - try { - final scriptText = htmlResponse - .querySelectorAll('table script') - .where((element) => element.text.contains(_stopCode)) - .map((e) => e.text) - .first; - - final callParam = scriptText - .substring(scriptText.indexOf('(')) - .split(',') - .firstWhere((element) => element.contains(')')); - - final csrfToken = callParam.substring( - callParam.indexOf("'") + 1, - callParam.lastIndexOf("'"), - ); - return csrfToken; - } catch (err, st) { - unawaited( - Sentry.captureEvent( - SentryEvent( - throwable: err, - request: SentryRequest(url: url, data: response.body), - ), - stackTrace: st, - ), - ); - rethrow; - } - } - - void throwCSRFTokenError() { - throw Exception('No CSRF token found!'); - } - - Future> getDepartures() async { - final csrfToken = await _getCSRFToken(); - - final url = - 'https://www.stcp.pt/pt/itinerarium/soapclient.php?codigo=$_stopCode&hash123=$csrfToken'; - - final response = await _client.get(url.toUri()); - final htmlResponse = parse(response.body); - - final tableEntries = htmlResponse.querySelectorAll( - '#smsBusResults > tbody > tr.even', - ); - - final configuredBuses = _stopData.configuredBuses; - - final tripList = []; - - for (final entry in tableEntries) { - final rawBusInformation = entry.querySelectorAll('td'); - - final busLine = rawBusInformation[0] - .querySelector('ul > li') - ?.text - .trim(); - - if (!configuredBuses.contains(busLine)) { - continue; - } - - final busDestination = rawBusInformation[0].text - .replaceAll('\n', '') - .replaceAll('\t', '') - .replaceAll(' ', '') - .replaceAll('-', '') - .substring(busLine!.length + 1); - - final busTimeRemaining = _getBusTimeRemaining(rawBusInformation); - - final newTrip = Trip( - line: busLine, - destination: busDestination, - timeRemaining: busTimeRemaining, - ); - - tripList.add(newTrip); - } - return tripList; - } - - /// Extracts the time remaining for a bus to reach a stop. - static int _getBusTimeRemaining(List rawBusInformation) { - if (rawBusInformation[1].text.trim() == 'a passar') { - return 0; - } else { - final regex = RegExp('([0-9]+)'); - - return int.parse(regex.stringMatch(rawBusInformation[2].text).toString()); - } - } - - /// Retrieves the name and code of the stops with code [stopCode]. - static Future> getStopsByName(String stopCode) async { - final stopsList = []; - - // Search by approximate name - final url = - 'https://www.stcp.pt/pt/itinerarium/callservice.php?action=srchstoplines&stopname=$stopCode'; - - final response = await _client.post(url.toUri()); - final json = jsonDecode(response.body) as List; - for (final busKey in json) { - final bus = busKey as Map; - final stopDescription = '${bus['name']} [${bus['code']}]'; - stopsList.add(stopDescription); - } - - return stopsList; - } - - /// Retrieves real-time information about the user's selected bus lines. - static Future> getNextArrivalsStop( - String stopCode, - BusStopData stopData, - ) { - return DeparturesFetcher(stopCode, stopData).getDepartures(); - } - - /// Returns the bus lines that stop at the given [stop]. - static Future> getBusesStoppingAt(String stop) async { - final url = - 'https://www.stcp.pt/pt/itinerarium/callservice.php?action=srchstoplines&stopcode=$stop'; - - final response = await _client.post(url.toUri()); - - final json = jsonDecode(response.body) as List; - - final buses = []; - - for (final data in json) { - final lines = (data as Map)['lines'] as List; - for (final busInfo in lines) { - final bus = busInfo as Map; - final newBus = Bus( - busCode: bus['code'] as String, - destination: bus['description'] as String, - direction: bus['dir'] != 0, - ); - buses.add(newBus); - } - } - - return buses; - } -} From 10cf2d79e0841939552fdeb8d5796c02399f3054 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Barbosa?= Date: Thu, 4 Jun 2026 15:47:29 +0100 Subject: [PATCH 3/4] remove other bus related content --- packages/uni_app/assets/images/bus.png | Bin 97144 -> 0 bytes .../lib/generated/intl/messages_en.dart | 11 +-- .../lib/generated/intl/messages_pt_PT.dart | 2 +- packages/uni_app/lib/generated/l10n.dart | 84 +----------------- .../lib/generated/model/entities/bus.g.dart | 19 ---- .../generated/model/entities/bus_stop.g.dart | 26 ------ .../lib/generated/model/entities/trip.g.dart | 19 ---- packages/uni_app/lib/l10n/intl_en.arb | 18 +--- packages/uni_app/lib/l10n/intl_pt_PT.arb | 18 +--- packages/uni_app/lib/model/entities/bus.dart | 22 ----- .../uni_app/lib/model/entities/bus_stop.dart | 21 ----- packages/uni_app/lib/model/entities/trip.dart | 24 ----- .../uni_app/lib/utils/navigation_items.dart | 1 - 13 files changed, 7 insertions(+), 258 deletions(-) delete mode 100644 packages/uni_app/assets/images/bus.png delete mode 100644 packages/uni_app/lib/generated/model/entities/bus.g.dart delete mode 100644 packages/uni_app/lib/generated/model/entities/bus_stop.g.dart delete mode 100644 packages/uni_app/lib/generated/model/entities/trip.g.dart delete mode 100644 packages/uni_app/lib/model/entities/bus.dart delete mode 100644 packages/uni_app/lib/model/entities/bus_stop.dart delete mode 100644 packages/uni_app/lib/model/entities/trip.dart diff --git a/packages/uni_app/assets/images/bus.png b/packages/uni_app/assets/images/bus.png deleted file mode 100644 index 1313c483feb2d6d6fc5101bd56d50ba982fee181..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97144 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 Oy%c1Wr7J%e1^yp409@|? diff --git a/packages/uni_app/lib/generated/intl/messages_en.dart b/packages/uni_app/lib/generated/intl/messages_en.dart index 0a2668b06..22df8300c 100644 --- a/packages/uni_app/lib/generated/intl/messages_en.dart +++ b/packages/uni_app/lib/generated/intl/messages_en.dart @@ -28,7 +28,7 @@ class MessageLookup extends MessageLookupByLibrary { "${Intl.plural(time, zero: 'Refreshed ${time} minutes ago', one: 'Refreshed ${time} minute ago', other: 'Refreshed ${time} minutes ago')}"; static m3(title) => - "${Intl.select(title, {'horario': 'Schedule', 'exames': 'Exams', 'area': 'Personal Area', 'cadeiras': 'Course Units', 'autocarros': 'Buses', 'locais': 'Places', 'restaurantes': 'Restaurants', 'calendario': 'Calendar', 'biblioteca': 'Library', 'percurso_academico': 'Academic Path', 'mapa': 'Map', 'faculdade': 'Faculty', 'bug_report': 'Leave Feedback', 'conta_corrente': 'Current Account', 'other': 'Other'})}"; + "${Intl.select(title, {'horario': 'Schedule', 'exames': 'Exams', 'area': 'Personal Area', 'cadeiras': 'Course Units', 'locais': 'Places', 'restaurantes': 'Restaurants', 'calendario': 'Calendar', 'biblioteca': 'Library', 'percurso_academico': 'Academic Path', 'mapa': 'Map', 'faculdade': 'Faculty', 'bug_report': 'Leave Feedback', 'conta_corrente': 'Current Account', 'other': 'Other'})}"; static m4(period) => "${Intl.select(period, {'lunch': 'Lunch', 'dinner': 'Dinner', 'other': 'Other'})}"; @@ -336,10 +336,7 @@ class MessageLookup extends MessageLookupByLibrary { ), "no_app": MessageLookupByLibrary.simpleMessage( "No app found to open the file", - ), - "no_bus": MessageLookupByLibrary.simpleMessage("Don\'t miss any bus!"), - "no_bus_stops": MessageLookupByLibrary.simpleMessage("No configured stops"), - "no_class": MessageLookupByLibrary.simpleMessage( + ), "no_class": MessageLookupByLibrary.simpleMessage( "There are no classes to display", ), "no_classes": MessageLookupByLibrary.simpleMessage("No classes to present"), @@ -563,9 +560,7 @@ class MessageLookup extends MessageLookupByLibrary { "some_error": MessageLookupByLibrary.simpleMessage("Some error!"), "spotted_an_error": MessageLookupByLibrary.simpleMessage( "Something not right?", - ), - "stcp_stops": MessageLookupByLibrary.simpleMessage("STCP - Upcoming Trips"), - "stores": MessageLookupByLibrary.simpleMessage("Stores"), + ), "stores": MessageLookupByLibrary.simpleMessage("Stores"), "student_number": MessageLookupByLibrary.simpleMessage("Student Number"), "success": MessageLookupByLibrary.simpleMessage("Sent with success"), "successful_open": MessageLookupByLibrary.simpleMessage( diff --git a/packages/uni_app/lib/generated/intl/messages_pt_PT.dart b/packages/uni_app/lib/generated/intl/messages_pt_PT.dart index d3e0a65b9..a4d5e2e17 100644 --- a/packages/uni_app/lib/generated/intl/messages_pt_PT.dart +++ b/packages/uni_app/lib/generated/intl/messages_pt_PT.dart @@ -28,7 +28,7 @@ class MessageLookup extends MessageLookupByLibrary { "${Intl.plural(time, zero: 'Atualizado há ${time} minutos', one: 'Atualizado há ${time} minuto', other: 'Atualizado há ${time} minutos')}"; static m3(title) => - "${Intl.select(title, {'horario': 'Horário', 'exames': 'Exames', 'area': 'Área Pessoal', 'cadeiras': 'Cadeiras', 'autocarros': 'Autocarros', 'locais': 'Locais', 'restaurantes': 'Restaurantes', 'calendario': 'Calendário', 'biblioteca': 'Biblioteca', 'percurso_academico': 'Percurso Académico', 'mapa': 'Mapa', 'faculdade': 'Faculdade', 'bug_report': 'Feedback', 'conta_corrente': 'Conta Corrente', 'other': 'Outros'})}"; + "${Intl.select(title, {'horario': 'Horário', 'exames': 'Exames', 'area': 'Área Pessoal', 'cadeiras': 'Cadeiras', 'locais': 'Locais', 'restaurantes': 'Restaurantes', 'calendario': 'Calendário', 'biblioteca': 'Biblioteca', 'percurso_academico': 'Percurso Académico', 'mapa': 'Mapa', 'faculdade': 'Faculdade', 'bug_report': 'Feedback', 'conta_corrente': 'Conta Corrente', 'other': 'Outros'})}"; static m4(period) => "${Intl.select(period, {'lunch': 'Almoço', 'dinner': 'Jantar', 'other': 'Other'})}"; diff --git a/packages/uni_app/lib/generated/l10n.dart b/packages/uni_app/lib/generated/l10n.dart index a10c5191b..a64182eb3 100644 --- a/packages/uni_app/lib/generated/l10n.dart +++ b/packages/uni_app/lib/generated/l10n.dart @@ -244,46 +244,6 @@ class S { ); } - /// `Unable to get information` - String get bus_error { - return Intl.message( - 'Unable to get information', - name: 'bus_error', - desc: '', - args: [], - ); - } - - /// `Personalize your buses here` - String get buses_personalize { - return Intl.message( - 'Personalize your buses here', - name: 'buses_personalize', - desc: '', - args: [], - ); - } - - /// `Favorite buses will be displayed in the favorites 'Bus' widget. The remaining ones will only be displayed on the page.` - String get buses_text { - return Intl.message( - 'Favorite buses will be displayed in the favorites \'Bus\' widget. The remaining ones will only be displayed on the page.', - name: 'buses_text', - desc: '', - args: [], - ); - } - - /// `Select the buses you want information about:` - String get bus_information { - return Intl.message( - 'Select the buses you want information about:', - name: 'bus_information', - desc: '', - args: [], - ); - } - /// `Cancel` String get cancel { return Intl.message('Cancel', name: 'cancel', desc: '', args: []); @@ -364,16 +324,6 @@ class S { return Intl.message('Done', name: 'conclude', desc: '', args: []); } - /// `Configured Buses` - String get configured_buses { - return Intl.message( - 'Configured Buses', - name: 'configured_buses', - desc: '', - args: [], - ); - } - /// `Confirm` String get confirm { return Intl.message('Confirm', name: 'confirm', desc: '', args: []); @@ -805,9 +755,7 @@ class S { 'horario': 'Schedule', 'exames': 'Exams', 'area': 'Personal Area', - 'cadeiras': 'Course Units', - 'autocarros': 'Buses', - 'locais': 'Places', + 'cadeiras': 'Course Units', 'locais': 'Places', 'restaurantes': 'Restaurants', 'calendario': 'Calendar', 'biblioteca': 'Library', @@ -829,26 +777,6 @@ class S { return Intl.message('News', name: 'news', desc: '', args: []); } - /// `Don't miss any bus!` - String get no_bus { - return Intl.message( - 'Don\'t miss any bus!', - name: 'no_bus', - desc: '', - args: [], - ); - } - - /// `No configured stops` - String get no_bus_stops { - return Intl.message( - 'No configured stops', - name: 'no_bus_stops', - desc: '', - args: [], - ); - } - /// `There are no classes to display` String get no_class { return Intl.message( @@ -1404,16 +1332,6 @@ class S { return Intl.message('Some error!', name: 'some_error', desc: '', args: []); } - /// `STCP - Upcoming Trips` - String get stcp_stops { - return Intl.message( - 'STCP - Upcoming Trips', - name: 'stcp_stops', - desc: '', - args: [], - ); - } - /// `Student Number` String get student_number { return Intl.message( diff --git a/packages/uni_app/lib/generated/model/entities/bus.g.dart b/packages/uni_app/lib/generated/model/entities/bus.g.dart deleted file mode 100644 index 60a853a70..000000000 --- a/packages/uni_app/lib/generated/model/entities/bus.g.dart +++ /dev/null @@ -1,19 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of '../../../model/entities/bus.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -Bus _$BusFromJson(Map json) => Bus( - busCode: json['busCode'] as String, - destination: json['destination'] as String, - direction: json['direction'] as bool? ?? false, -); - -Map _$BusToJson(Bus instance) => { - 'busCode': instance.busCode, - 'destination': instance.destination, - 'direction': instance.direction, -}; diff --git a/packages/uni_app/lib/generated/model/entities/bus_stop.g.dart b/packages/uni_app/lib/generated/model/entities/bus_stop.g.dart deleted file mode 100644 index 0ee387249..000000000 --- a/packages/uni_app/lib/generated/model/entities/bus_stop.g.dart +++ /dev/null @@ -1,26 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of '../../../model/entities/bus_stop.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -BusStopData _$BusStopDataFromJson(Map json) => BusStopData( - configuredBuses: (json['configuredBuses'] as List) - .map((e) => e as String) - .toSet(), - favorited: json['favorited'] as bool? ?? false, - trips: - (json['trips'] as List?) - ?.map((e) => Trip.fromJson(e as Map)) - .toList() ?? - const [], -); - -Map _$BusStopDataToJson(BusStopData instance) => - { - 'configuredBuses': instance.configuredBuses.toList(), - 'favorited': instance.favorited, - 'trips': instance.trips, - }; diff --git a/packages/uni_app/lib/generated/model/entities/trip.g.dart b/packages/uni_app/lib/generated/model/entities/trip.g.dart deleted file mode 100644 index 1c36e6cfc..000000000 --- a/packages/uni_app/lib/generated/model/entities/trip.g.dart +++ /dev/null @@ -1,19 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of '../../../model/entities/trip.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -Trip _$TripFromJson(Map json) => Trip( - line: json['line'] as String, - destination: json['destination'] as String, - timeRemaining: (json['timeRemaining'] as num).toInt(), -); - -Map _$TripToJson(Trip instance) => { - 'line': instance.line, - 'destination': instance.destination, - 'timeRemaining': instance.timeRemaining, -}; diff --git a/packages/uni_app/lib/l10n/intl_en.arb b/packages/uni_app/lib/l10n/intl_en.arb index b1b398565..8389b8db6 100644 --- a/packages/uni_app/lib/l10n/intl_en.arb +++ b/packages/uni_app/lib/l10n/intl_en.arb @@ -50,14 +50,6 @@ "@bs_description": {}, "bug_description": "Bug found, how to reproduce it, etc.", "@bug_description": {}, - "bus_error": "Unable to get information", - "@bus_error": {}, - "buses_personalize": "Personalize your buses here", - "@buses_personalize": {}, - "buses_text": "Favorite buses will be displayed in the favorites 'Bus' widget. The remaining ones will only be displayed on the page.", - "@buses_text": {}, - "bus_information": "Select the buses you want information about:", - "@bus_information": {}, "cancel": "Cancel", "@cancel": {}, "apply": "Apply", @@ -80,8 +72,6 @@ "@college_select": {}, "conclude": "Done", "@conclude": {}, - "configured_buses": "Configured Buses", - "@configured_buses": {}, "confirm": "Confirm", "@confirm": {}, "consent": "I consent to this information being reviewed by NIAEFEUP and may be deleted at my request.", @@ -194,14 +184,10 @@ "@min_value_reference": {}, "multimedia_center": "Multimedia center", "@multimedia_center": {}, - "nav_title": "{title, select, horario{Schedule} exames{Exams} area{Personal Area} cadeiras{Course Units} autocarros{Buses} locais{Places} restaurantes{Restaurants} calendario{Calendar} biblioteca{Library} percurso_academico{Academic Path} mapa{Map} faculdade{Faculty} bug_report{Leave Feedback} conta_corrente{Current Account} other{Other}}", + "nav_title": "{title, select, horario{Schedule} exames{Exams} area{Personal Area} cadeiras{Course Units} locais{Places} restaurantes{Restaurants} calendario{Calendar} biblioteca{Library} percurso_academico{Academic Path} mapa{Map} faculdade{Faculty} bug_report{Leave Feedback} conta_corrente{Current Account} other{Other}}", "@nav_title": {}, "news": "News", "@news": {}, - "no_bus": "Don't miss any bus!", - "@no_bus": {}, - "no_bus_stops": "No configured stops", - "@no_bus_stops": {}, "no_class": "There are no classes to display", "@no_class": {}, "no_classes_this_week": "You have no classes this week", @@ -330,8 +316,6 @@ "@sent_error": {}, "some_error": "Some error!", "@some_error": {}, - "stcp_stops": "STCP - Upcoming Trips", - "@stcp_stops": {}, "student_number": "Student Number", "@student_number": {}, "success": "Sent with success", diff --git a/packages/uni_app/lib/l10n/intl_pt_PT.arb b/packages/uni_app/lib/l10n/intl_pt_PT.arb index 482dfccdb..f910736e0 100644 --- a/packages/uni_app/lib/l10n/intl_pt_PT.arb +++ b/packages/uni_app/lib/l10n/intl_pt_PT.arb @@ -50,14 +50,6 @@ "@bs_description": {}, "bug_description": "Bug encontrado, como o reproduzir, etc", "@bug_description": {}, - "bus_error": "Não foi possível obter informação", - "@bus_error": {}, - "buses_personalize": "Configura aqui os teus autocarros", - "@buses_personalize": {}, - "buses_text": "Os autocarros favoritos serão apresentados no widget 'Autocarros' dos favoritos. Os restantes serão apresentados apenas na página.", - "@buses_text": {}, - "bus_information": "Seleciona os autocarros dos quais queres informação:", - "@bus_information": {}, "breakfast": "Pequeno Almoço", "@breakfast": {}, "cancel": "Cancelar", @@ -82,8 +74,6 @@ "@college_select": {}, "conclude": "Concluído", "@conclude": {}, - "configured_buses": "Autocarros Configurados", - "@configured_buses": {}, "confirm": "Confirmar", "@confirm": {}, "consent": "Consinto que esta informação seja revista pelo NIAEFEUP, podendo ser eliminada a meu pedido.", @@ -202,14 +192,10 @@ "@min_value_reference": {}, "multimedia_center": "Centro de multimédia", "@multimedia_center": {}, - "nav_title": "{title, select, horario{Horário} exames{Exames} area{Área Pessoal} cadeiras{Cadeiras} autocarros{Autocarros} locais{Locais} restaurantes{Restaurantes} calendario{Calendário} biblioteca{Biblioteca} percurso_academico{Percurso Académico} mapa{Mapa} faculdade{Faculdade} bug_report{Feedback} conta_corrente{Conta Corrente} other{Outros}}", + "nav_title": "{title, select, horario{Horário} exames{Exames} area{Área Pessoal} cadeiras{Cadeiras} locais{Locais} restaurantes{Restaurantes} calendario{Calendário} biblioteca{Biblioteca} percurso_academico{Percurso Académico} mapa{Mapa} faculdade{Faculdade} bug_report{Feedback} conta_corrente{Conta Corrente} other{Outros}}", "@nav_title": {}, "news": "Notícias", "@news": {}, - "no_bus": "Não percas nenhum autocarro!", - "@no_bus": {}, - "no_bus_stops": "Não existe nenhuma paragem configurada", - "@no_bus_stops": {}, "no_class": "Não existem turmas para apresentar", "@no_class": {}, "no_classes_this_week": "Não tens aulas esta semana", @@ -328,8 +314,6 @@ "@sent_error": {}, "some_error": "Algum erro!", "@some_error": {}, - "stcp_stops": "STCP - Próximas Viagens", - "@stcp_stops": {}, "student_number": "Número de Estudante", "@student_number": {}, "snackbar": "Snackbar", diff --git a/packages/uni_app/lib/model/entities/bus.dart b/packages/uni_app/lib/model/entities/bus.dart deleted file mode 100644 index dfe850de5..000000000 --- a/packages/uni_app/lib/model/entities/bus.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; - -part '../../generated/model/entities/bus.g.dart'; - -/// Stores information about a bus. -/// -/// Stores the bus code (`busCode`), the `destination` of the bus -/// and its `direction`. -@JsonSerializable() -class Bus { - Bus({ - required this.busCode, - required this.destination, - this.direction = false, - }); - - factory Bus.fromJson(Map json) => _$BusFromJson(json); - String busCode; - String destination; - bool direction; - Map toJson() => _$BusToJson(this); -} diff --git a/packages/uni_app/lib/model/entities/bus_stop.dart b/packages/uni_app/lib/model/entities/bus_stop.dart deleted file mode 100644 index 65cc40311..000000000 --- a/packages/uni_app/lib/model/entities/bus_stop.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; -import 'package:uni/model/entities/trip.dart'; - -part '../../generated/model/entities/bus_stop.g.dart'; - -/// Stores information about a bus stop. -@JsonSerializable() -class BusStopData { - BusStopData({ - required this.configuredBuses, - this.favorited = false, - this.trips = const [], - }); - - factory BusStopData.fromJson(Map json) => - _$BusStopDataFromJson(json); - final Set configuredBuses; - bool favorited; - List trips; - Map toJson() => _$BusStopDataToJson(this); -} diff --git a/packages/uni_app/lib/model/entities/trip.dart b/packages/uni_app/lib/model/entities/trip.dart deleted file mode 100644 index dd85dea31..000000000 --- a/packages/uni_app/lib/model/entities/trip.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; - -part '../../generated/model/entities/trip.g.dart'; - -/// Stores information about a bus trip. -@JsonSerializable() -class Trip { - Trip({ - required this.line, - required this.destination, - required this.timeRemaining, - }); - - factory Trip.fromJson(Map json) => _$TripFromJson(json); - final String line; - final String destination; - final int timeRemaining; - Map toJson() => _$TripToJson(this); - - /// Compares the remaining time of two trips. - int compare(Trip other) { - return timeRemaining.compareTo(other.timeRemaining); - } -} diff --git a/packages/uni_app/lib/utils/navigation_items.dart b/packages/uni_app/lib/utils/navigation_items.dart index 098b61485..d7891050f 100644 --- a/packages/uni_app/lib/utils/navigation_items.dart +++ b/packages/uni_app/lib/utils/navigation_items.dart @@ -4,7 +4,6 @@ enum NavigationItem { navExams('exames'), navCourseUnit('cadeira'), navProfessorSchedule('horario_docente'), - navStops('autocarros'), navLocations('locais', faculties: {'feup'}), navRestaurants('restaurantes'), navCalendar('calendario'), From 1a25d4360b561a8dcc08b3d1f65b9fcd0bc39dd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Barbosa?= Date: Fri, 5 Jun 2026 10:06:55 +0100 Subject: [PATCH 4/4] formatting --- packages/uni_app/lib/generated/intl/messages_en.dart | 6 ++++-- packages/uni_app/lib/generated/l10n.dart | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/uni_app/lib/generated/intl/messages_en.dart b/packages/uni_app/lib/generated/intl/messages_en.dart index 22df8300c..df5769cec 100644 --- a/packages/uni_app/lib/generated/intl/messages_en.dart +++ b/packages/uni_app/lib/generated/intl/messages_en.dart @@ -336,7 +336,8 @@ class MessageLookup extends MessageLookupByLibrary { ), "no_app": MessageLookupByLibrary.simpleMessage( "No app found to open the file", - ), "no_class": MessageLookupByLibrary.simpleMessage( + ), + "no_class": MessageLookupByLibrary.simpleMessage( "There are no classes to display", ), "no_classes": MessageLookupByLibrary.simpleMessage("No classes to present"), @@ -560,7 +561,8 @@ class MessageLookup extends MessageLookupByLibrary { "some_error": MessageLookupByLibrary.simpleMessage("Some error!"), "spotted_an_error": MessageLookupByLibrary.simpleMessage( "Something not right?", - ), "stores": MessageLookupByLibrary.simpleMessage("Stores"), + ), + "stores": MessageLookupByLibrary.simpleMessage("Stores"), "student_number": MessageLookupByLibrary.simpleMessage("Student Number"), "success": MessageLookupByLibrary.simpleMessage("Sent with success"), "successful_open": MessageLookupByLibrary.simpleMessage( diff --git a/packages/uni_app/lib/generated/l10n.dart b/packages/uni_app/lib/generated/l10n.dart index a64182eb3..444b89813 100644 --- a/packages/uni_app/lib/generated/l10n.dart +++ b/packages/uni_app/lib/generated/l10n.dart @@ -755,7 +755,8 @@ class S { 'horario': 'Schedule', 'exames': 'Exams', 'area': 'Personal Area', - 'cadeiras': 'Course Units', 'locais': 'Places', + 'cadeiras': 'Course Units', + 'locais': 'Places', 'restaurantes': 'Restaurants', 'calendario': 'Calendar', 'biblioteca': 'Library',