diff --git a/packages/uni_app/assets/images/bus.png b/packages/uni_app/assets/images/bus.png deleted file mode 100644 index 1313c483f..000000000 Binary files a/packages/uni_app/assets/images/bus.png and /dev/null differ 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/departures_fetcher.dart b/packages/uni_app/lib/controller/fetchers/departures_fetcher.dart deleted file mode 100644 index 8f827fcaf..000000000 --- a/packages/uni_app/lib/controller/fetchers/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; - } -} 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 35d3bc9e8..33118827c 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/parsers/parser_course_unit_info.dart b/packages/uni_app/lib/controller/parsers/parser_course_unit_info.dart index 503b71755..d171c3998 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 @@ -3,7 +3,7 @@ import 'dart:convert'; import 'package:html/dom.dart' as dom; 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/generated/intl/messages_en.dart b/packages/uni_app/lib/generated/intl/messages_en.dart index 53258b4dc..c834f07d2 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'})}"; @@ -340,8 +340,6 @@ 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( "There are no classes to display", ), @@ -567,7 +565,6 @@ class MessageLookup extends MessageLookupByLibrary { "spotted_an_error": MessageLookupByLibrary.simpleMessage( "Something not right?", ), - "stcp_stops": MessageLookupByLibrary.simpleMessage("STCP - Upcoming Trips"), "stores": MessageLookupByLibrary.simpleMessage("Stores"), "student_number": MessageLookupByLibrary.simpleMessage("Student Number"), "success": MessageLookupByLibrary.simpleMessage("Sent with success"), 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 38731d77a..7059729e5 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 9af19581d..acf7ebfab 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: []); @@ -806,7 +756,6 @@ class S { 'exames': 'Exams', 'area': 'Personal Area', 'cadeiras': 'Course Units', - 'autocarros': 'Buses', 'locais': 'Places', 'restaurantes': 'Restaurants', 'calendario': 'Calendar', @@ -829,26 +778,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 +1333,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 198a5cfc0..6ecd693c5 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 f52854000..d28f17d90 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/main.dart b/packages/uni_app/lib/main.dart index 9fba620d2..c21f385bf 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/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/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 068dcaaf9..6154eab9e 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,5 +1,5 @@ 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'; @@ -9,7 +9,7 @@ final currentAccountProvider = FutureProvider.autoDispose((ref) async { throw Exception('Session is null — user may not be logged in'); } - final fetcher = FeesFetcher(); + final fetcher = CurrentAccountFetcher(); final parser = CurrentAccountParser(session: session); try { 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/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'), 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': []};