commented subject provider

This commit is contained in:
Kima 2023-10-15 12:55:14 +02:00
parent 2d5cbe8799
commit c5b6f92b0e

View File

@ -1,165 +1,165 @@
import 'package:filcnaplo/api/providers/user_provider.dart'; // import 'package:filcnaplo/api/providers/user_provider.dart';
import 'package:filcnaplo/api/providers/database_provider.dart'; // import 'package:filcnaplo/api/providers/database_provider.dart';
import 'package:filcnaplo/models/settings.dart'; // import 'package:filcnaplo/models/settings.dart';
import 'package:filcnaplo/models/user.dart'; // import 'package:filcnaplo/models/user.dart';
import 'package:filcnaplo_kreta_api/client/api.dart'; // import 'package:filcnaplo_kreta_api/client/api.dart';
import 'package:filcnaplo_kreta_api/client/client.dart'; // import 'package:filcnaplo_kreta_api/client/client.dart';
import 'package:filcnaplo_kreta_api/models/grade.dart'; // import 'package:filcnaplo_kreta_api/models/grade.dart';
import 'package:filcnaplo_kreta_api/models/group_average.dart'; // import 'package:filcnaplo_kreta_api/models/group_average.dart';
import 'package:filcnaplo_kreta_api/providers/grade_provider.i18n.dart'; // import 'package:filcnaplo_kreta_api/providers/grade_provider.i18n.dart';
import 'package:flutter/material.dart'; // import 'package:flutter/material.dart';
class SubjectProvider with ChangeNotifier { // class SubjectProvider with ChangeNotifier {
// Private // // Private
late List<Grade> _grades; // late List<Grade> _grades;
late DateTime _lastSeen; // late DateTime _lastSeen;
late String _groups; // late String _groups;
List<GroupAverage> _groupAvg = []; // List<GroupAverage> _groupAvg = [];
late final SettingsProvider _settings; // late final SettingsProvider _settings;
late final UserProvider _user; // late final UserProvider _user;
late final DatabaseProvider _database; // late final DatabaseProvider _database;
late final KretaClient _kreta; // late final KretaClient _kreta;
// Public // // Public
List<Grade> get grades => _grades; // List<Grade> get grades => _grades;
DateTime get lastSeenDate => // DateTime get lastSeenDate =>
_settings.gradeOpeningFun ? _lastSeen : DateTime(3000); // _settings.gradeOpeningFun ? _lastSeen : DateTime(3000);
String get groups => _groups; // String get groups => _groups;
List<GroupAverage> get groupAverages => _groupAvg; // List<GroupAverage> get groupAverages => _groupAvg;
SubjectProvider({ // SubjectProvider({
List<Grade> initialGrades = const [], // List<Grade> initialGrades = const [],
required SettingsProvider settings, // required SettingsProvider settings,
required UserProvider user, // required UserProvider user,
required DatabaseProvider database, // required DatabaseProvider database,
required KretaClient kreta, // required KretaClient kreta,
}) { // }) {
_settings = settings; // _settings = settings;
_user = user; // _user = user;
_database = database; // _database = database;
_kreta = kreta; // _kreta = kreta;
_grades = List.castFrom(initialGrades); // _grades = List.castFrom(initialGrades);
_lastSeen = DateTime.now(); // _lastSeen = DateTime.now();
if (_grades.isEmpty) restore(); // if (_grades.isEmpty) restore();
} // }
Future<void> seenAll() async { // Future<void> seenAll() async {
String? userId = _user.id; // String? userId = _user.id;
if (userId != null) { // if (userId != null) {
final userStore = _database.userStore; // final userStore = _database.userStore;
userStore.storeLastSeenGrade(DateTime.now(), userId: userId); // userStore.storeLastSeenGrade(DateTime.now(), userId: userId);
_lastSeen = DateTime.now(); // _lastSeen = DateTime.now();
} // }
} // }
Future<void> restore() async { // Future<void> restore() async {
String? userId = _user.id; // String? userId = _user.id;
// Load grades from the database // // Load grades from the database
if (userId != null) { // if (userId != null) {
final userQuery = _database.userQuery; // final userQuery = _database.userQuery;
_grades = await userQuery.getGrades(userId: userId); // _grades = await userQuery.getGrades(userId: userId);
await convertBySettings(); // await convertBySettings();
_groupAvg = await userQuery.getGroupAverages(userId: userId); // _groupAvg = await userQuery.getGroupAverages(userId: userId);
notifyListeners(); // notifyListeners();
DateTime lastSeenDB = await userQuery.lastSeenGrade(userId: userId); // DateTime lastSeenDB = await userQuery.lastSeenGrade(userId: userId);
if (lastSeenDB.millisecondsSinceEpoch == 0 || // if (lastSeenDB.millisecondsSinceEpoch == 0 ||
lastSeenDB.year == 0 || // lastSeenDB.year == 0 ||
!_settings.gradeOpeningFun) { // !_settings.gradeOpeningFun) {
_lastSeen = DateTime.now(); // _lastSeen = DateTime.now();
await seenAll(); // await seenAll();
} else { // } else {
_lastSeen = lastSeenDB; // _lastSeen = lastSeenDB;
} // }
notifyListeners(); // notifyListeners();
} // }
} // }
// good student mode, renamed subjects // // good student mode, renamed subjects
Future<void> convertBySettings() async { // Future<void> convertBySettings() async {
Map<String, String> renamedSubjects = _settings.renamedSubjectsEnabled // Map<String, String> renamedSubjects = _settings.renamedSubjectsEnabled
? await _database.userQuery.renamedSubjects(userId: _user.user!.id) // ? await _database.userQuery.renamedSubjects(userId: _user.user!.id)
: {}; // : {};
Map<String, String> renamedTeachers = _settings.renamedTeachersEnabled // Map<String, String> renamedTeachers = _settings.renamedTeachersEnabled
? await _database.userQuery.renamedTeachers(userId: _user.user!.id) // ? await _database.userQuery.renamedTeachers(userId: _user.user!.id)
: {}; // : {};
for (Grade grade in _grades) { // for (Grade grade in _grades) {
grade.subject.renamedTo = // grade.subject.renamedTo =
renamedSubjects.isNotEmpty ? renamedSubjects[grade.subject.id] : null; // renamedSubjects.isNotEmpty ? renamedSubjects[grade.subject.id] : null;
grade.teacher.renamedTo = // grade.teacher.renamedTo =
renamedTeachers.isNotEmpty ? renamedTeachers[grade.teacher.id] : null; // renamedTeachers.isNotEmpty ? renamedTeachers[grade.teacher.id] : null;
grade.value.value = // grade.value.value =
_settings.goodStudent ? 5 : grade.json!["SzamErtek"] ?? 0; // _settings.goodStudent ? 5 : grade.json!["SzamErtek"] ?? 0;
grade.value.valueName = _settings.goodStudent // grade.value.valueName = _settings.goodStudent
? "Jeles".i18n // ? "Jeles".i18n
: '${grade.json!["SzovegesErtek"]}' // : '${grade.json!["SzovegesErtek"]}'
.replaceAll(RegExp(r'[(]+[12345]?[)]'), '') // .replaceAll(RegExp(r'[(]+[12345]?[)]'), '')
.i18n; // .i18n;
grade.value.shortName = _settings.goodStudent // grade.value.shortName = _settings.goodStudent
? "Jeles".i18n // ? "Jeles".i18n
: '${grade.json!["SzovegesErtekelesRovidNev"]}' != "null" && // : '${grade.json!["SzovegesErtekelesRovidNev"]}' != "null" &&
'${grade.json!["SzovegesErtekelesRovidNev"]}' != "-" && // '${grade.json!["SzovegesErtekelesRovidNev"]}' != "-" &&
'${grade.json!["SzovegesErtekelesRovidNev"]}' // '${grade.json!["SzovegesErtekelesRovidNev"]}'
.replaceAll(RegExp(r'[0123456789]+[%]?'), '') != // .replaceAll(RegExp(r'[0123456789]+[%]?'), '') !=
"" // ""
? '${grade.json!["SzovegesErtekelesRovidNev"]}'.i18n // ? '${grade.json!["SzovegesErtekelesRovidNev"]}'.i18n
: grade.value.valueName; // : grade.value.valueName;
} // }
notifyListeners(); // notifyListeners();
} // }
// Fetches Grades from the Kreta API then stores them in the database // // fetch subjects from kreten then store them
Future<void> fetch() async { // Future<void> fetch() async {
User? user = _user.user; // User? user = _user.user;
if (user == null) throw "Cannot fetch Grades for User null"; // if (user == null) throw "Cannot fetch Subjects for User null";
String iss = user.instituteCode; // String iss = user.instituteCode;
List? gradesJson = await _kreta.getAPI(KretaAPI.grades(iss)); // List? gradesJson = await _kreta.getAPI(KretaAPI.subjects(iss, ""));
if (gradesJson == null) throw "Cannot fetch Grades for User ${user.id}"; // if (gradesJson == null) throw "Cannot fetch Subjects for User ${user.id}";
List<Grade> grades = gradesJson.map((e) => Grade.fromJson(e)).toList(); // List<Grade> grades = gradesJson.map((e) => Grade.fromJson(e)).toList();
if (grades.isNotEmpty || _grades.isNotEmpty) await store(grades); // if (grades.isNotEmpty || _grades.isNotEmpty) await store(grades);
List? groupsJson = await _kreta.getAPI(KretaAPI.groups(iss)); // List? groupsJson = await _kreta.getAPI(KretaAPI.groups(iss));
if (groupsJson == null || groupsJson.isEmpty) { // if (groupsJson == null || groupsJson.isEmpty) {
throw "Cannot fetch Groups for User ${user.id}"; // throw "Cannot fetch Groups for User ${user.id}";
} // }
_groups = (groupsJson[0]["OktatasNevelesiFeladat"] ?? {})["Uid"] ?? ""; // _groups = (groupsJson[0]["OktatasNevelesiFeladat"] ?? {})["Uid"] ?? "";
List? groupAvgJson = // List? groupAvgJson =
await _kreta.getAPI(KretaAPI.groupAverages(iss, _groups)); // await _kreta.getAPI(KretaAPI.groupAverages(iss, _groups));
if (groupAvgJson == null) { // if (groupAvgJson == null) {
throw "Cannot fetch Class Averages for User ${user.id}"; // throw "Cannot fetch Class Averages for User ${user.id}";
} // }
final groupAvgs = // final groupAvgs =
groupAvgJson.map((e) => GroupAverage.fromJson(e)).toList(); // groupAvgJson.map((e) => GroupAverage.fromJson(e)).toList();
await storeGroupAvg(groupAvgs); // await storeGroupAvg(groupAvgs);
} // }
// Stores Grades in the database // // store subjects in db
Future<void> store(List<Grade> grades) async { // Future<void> store(List<Grade> grades) async {
User? user = _user.user; // User? user = _user.user;
if (user == null) throw "Cannot store Grades for User null"; // if (user == null) throw "Cannot store Grades for User null";
String userId = user.id; // String userId = user.id;
await _database.userStore.storeGrades(grades, userId: userId); // await _database.userStore.storeGrades(grades, userId: userId);
_grades = grades; // _grades = grades;
await convertBySettings(); // await convertBySettings();
} // }
Future<void> storeGroupAvg(List<GroupAverage> groupAvgs) async { // Future<void> storeGroupAvg(List<GroupAverage> groupAvgs) async {
_groupAvg = groupAvgs; // _groupAvg = groupAvgs;
User? user = _user.user; // User? user = _user.user;
if (user == null) throw "Cannot store Grades for User null"; // if (user == null) throw "Cannot store Grades for User null";
String userId = user.id; // String userId = user.id;
await _database.userStore.storeGroupAverages(groupAvgs, userId: userId); // await _database.userStore.storeGroupAverages(groupAvgs, userId: userId);
notifyListeners(); // notifyListeners();
} // }
} // }