Skip to content

Commit

Permalink
Refactor/speedup profile (#1116)
Browse files Browse the repository at this point in the history
  • Loading branch information
LuisDuarte1 authored Feb 8, 2024
2 parents 1bc8b76 + 49d4b2b commit eb7b58b
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,22 @@ class AllCourseUnitsFetcher {
Session session, {
List<CourseUnit>? currentCourseUnits,
}) async {
final allCourseUnits = <CourseUnit>[];

for (final course in courses) {
final courseUnits = await _getAllCourseUnitsAndCourseAveragesFromCourse(
course,
session,
currentCourseUnits: currentCourseUnits,
);
allCourseUnits.addAll(courseUnits.where((c) => c.enrollmentIsValid()));
}
final courseCourseUnits = await Future.wait(
courses
.map(
(course) => _getAllCourseUnitsAndCourseAveragesFromCourse(
course,
session,
currentCourseUnits: currentCourseUnits,
),
)
.toList(),
);

return allCourseUnits;
return courseCourseUnits
.expand((l) => l)
.where((c) => c.enrollmentIsValid())
.toList();
}

Future<List<CourseUnit>> _getAllCourseUnitsAndCourseAveragesFromCourse(
Expand Down
2 changes: 1 addition & 1 deletion uni/lib/model/providers/lazy/bus_stop_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import 'package:uni/model/providers/state_provider_notifier.dart';
import 'package:uni/model/providers/state_providers.dart';

class BusStopProvider extends StateProviderNotifier<Map<String, BusStopData>> {
BusStopProvider() : super(cacheDuration: null);
BusStopProvider() : super(cacheDuration: null, dependsOnSession: false);

@override
Future<Map<String, BusStopData>> loadFromStorage(
Expand Down
40 changes: 30 additions & 10 deletions uni/lib/model/providers/startup/profile_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,28 +27,48 @@ class ProfileProvider extends StateProviderNotifier<Profile> {

@override
Future<Profile> loadFromStorage(StateProviders stateProviders) async {
final profile = await loadProfile();
final databaseFutures = await Future.wait([
loadProfile(),
loadCourses(),
loadCourseUnits(),
]);

final profile = databaseFutures[0] as Profile;
final courses = databaseFutures[1] as List<Course>;
final courseUnits = databaseFutures[2] as List<CourseUnit>;

profile
..courses = await loadCourses()
..courseUnits = await loadCourseUnits();
..courses = courses
..courseUnits = courseUnits;

return profile;
}

@override
Future<Profile> loadFromRemote(StateProviders stateProviders) async {
final session = stateProviders.sessionProvider.state!;

final profile = await fetchUserInfo(session);
final profileFuture = fetchUserInfo(session);
final courseUnitsFutures = profileFuture.then(
(profile) => fetchCourseUnitsAndCourseAverages(session, profile!),
);

final userBalanceAndFeesLimit = await fetchUserFeesBalanceAndLimit(session);
final futures = await Future.wait([
profileFuture,
courseUnitsFutures,
fetchUserFeesBalanceAndLimit(session),
fetchUserPrintBalance(session),
]);
final profile = futures[0] as Profile?;
final courseUnits = futures[1] as List<CourseUnit>?;
final userBalanceAndFeesLimit = futures[2]! as Tuple2<String, DateTime?>;
final printBalance = futures[3]! as String;

profile!
..feesBalance = userBalanceAndFeesLimit.item1
..feesLimit = userBalanceAndFeesLimit.item2
..printBalance = await fetchUserPrintBalance(session);
..printBalance = printBalance;

final courseUnits =
await fetchCourseUnitsAndCourseAverages(session, profile);
if (courseUnits != null) {
profile.courseUnits = courseUnits;
}
Expand Down Expand Up @@ -141,10 +161,10 @@ class ProfileProvider extends StateProviderNotifier<Profile> {
final userPersistentInfo = PreferencesController.getPersistentUserInfo();
if (userPersistentInfo != null) {
final coursesDb = AppCoursesDatabase();
await coursesDb.saveNewCourses(profile.courses);
unawaited(coursesDb.saveNewCourses(profile.courses));

final courseUnitsDatabase = AppCourseUnitsDatabase();
await courseUnitsDatabase.saveNewCourseUnits(allCourseUnits);
unawaited(courseUnitsDatabase.saveNewCourseUnits(allCourseUnits));
}

return allCourseUnits;
Expand Down

0 comments on commit eb7b58b

Please sign in to comment.