forked from firka/student-legacy
commented subject provider
This commit is contained in:
parent
2d5cbe8799
commit
c5b6f92b0e
@ -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();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user