diff --git a/packages/uni_app/lib/controller/fetchers/course_units_fetcher/course_units_info_fetcher.dart b/packages/uni_app/lib/controller/fetchers/course_units_fetcher/course_units_info_fetcher.dart index 6e43e026d..be6667c9f 100644 --- a/packages/uni_app/lib/controller/fetchers/course_units_fetcher/course_units_info_fetcher.dart +++ b/packages/uni_app/lib/controller/fetchers/course_units_fetcher/course_units_info_fetcher.dart @@ -1,10 +1,10 @@ import 'package:html/parser.dart'; +import 'package:http/http.dart'; import 'package:uni/controller/fetchers/session_dependant_fetcher.dart'; import 'package:uni/controller/networking/network_router.dart'; import 'package:uni/controller/parsers/parser_course_unit_info.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_sheet.dart'; import 'package:uni/model/entities/course_units/sheet.dart'; import 'package:uni/session/flows/base/session.dart'; @@ -14,31 +14,39 @@ class CourseUnitsInfoFetcher implements SessionDependantFetcher { return NetworkRouter.getBaseUrlsFromSession(session).toList(); } - Future fetchCourseUnitSheet( - Session session, - int occurrId, - ) async { - // if course unit is not from the main faculty, Sigarra redirects - final url = '${getEndpoints(session)[0]}ucurr_geral.ficha_uc_view'; - final response = await NetworkRouter.getWithCookies( - url, - {'pv_ocorrencia_id': occurrId.toString()}, - session, - ); - return parseCourseUnitSheet(response); - } - Future fetchSheet( Session session, int occurId, ) async { - final url = '${getEndpoints(session)[0]}mob_ucurr_geral.perfil'; - final response = await NetworkRouter.getWithCookies( - url, - {'pv_ocorrencia_id': occurId.toString()}, - session, + final responses = await Future.wait( + getEndpoints(session) + .map((endpoint) => '$endpoint' 'mob_ucurr_geral.perfil') + .map( + (url) => NetworkRouter.getWithCookies( + url, + {'pv_ocorrencia_id': occurId.toString()}, + session, + ).catchError((_) => Response('', 500)), + ), ); - return parseSheet(response); + + final bestResponse = responses + .where((response) => response.statusCode == 200) + .fold( + null, + (best, current) => + current.body.length > (best?.body.length ?? 0) ? current : best, + ); + + return bestResponse != null + ? parseSheet(bestResponse) + : Sheet( + professors: [], + regents: [], + content: '', + evaluation: '', + books: [], + ); } Future> fetchCourseUnitFiles( diff --git a/packages/uni_ui/lib/timeline/timeline.dart b/packages/uni_ui/lib/timeline/timeline.dart index 2c4590927..8ac5b68ed 100644 --- a/packages/uni_ui/lib/timeline/timeline.dart +++ b/packages/uni_ui/lib/timeline/timeline.dart @@ -129,7 +129,7 @@ class _TimelineState extends State { child: ScrollablePositionedList.builder( itemCount: widget.content.length, itemScrollController: _itemScrollController, - itemPositionsListener: _itemPositionsListener, + itemPositionsListener: _itemPositionsListener, itemBuilder: (context, index) { return widget.content[index]; },