Compare commits

..

9 Commits
3.4.0 ... 3.4.2

Author SHA1 Message Date
55nknown
2afad1cc89 update gitmodules 2022-11-21 21:16:52 +01:00
55nknown
94b2fe3cb7 fix app not starting when no users 2022-11-21 21:06:46 +01:00
55nknown
8a75642ec9 update gitmodules 2022-11-21 21:01:34 +01:00
55nknown
f4b03b0304 add premium submodule 2022-11-21 20:08:28 +01:00
annon
5281b9f202 Update README.md 2022-11-21 13:33:17 +01:00
55nknown
db58b54754 bump version 2022-11-21 13:27:39 +01:00
55nknown
7de3d211bb set user to last selected one 2022-11-21 12:41:22 +01:00
55nknown
d3e5fc99ea html fallback 2022-11-21 10:11:24 +01:00
55nknown
17cffc0576 revert goalplanner avghelper 2022-11-21 09:34:51 +01:00
15 changed files with 69 additions and 41 deletions

4
.gitmodules vendored
View File

@@ -9,3 +9,7 @@
[submodule "Kreta API"]
path = filcnaplo_kreta_api
url = https://github.com/filc/kreten
[submodule "Premium"]
path = filcnaplo_premium
url = git@github.com:filc/premium

View File

@@ -5,7 +5,7 @@
#### Nem hivatalos e-napló alkalmazás az eKRÉTA rendszerhez
[![Downloads](https://img.shields.io/github/downloads-pre/filc/naplo/latest/total?color=%23&label=Downloads&logo=github&sort=semver)](https://github.com/filc/naplo/releases)   [![discord](https://img.shields.io/discord/712698455193157643?label=Discord)](http://filcnaplo.hu/discord)   [![Codemagic build status](https://api.codemagic.io/apps/612cc79b35b443d1b2c638ec/612cc79b35b443d1b2c638eb/status_badge.svg)](https://codemagic.io/apps/612cc79b35b443d1b2c638ec/612cc79b35b443d1b2c638eb/latest_build)
[![Downloads](https://img.shields.io/github/downloads-pre/filc/naplo/latest/total?color=%23&label=Downloads&logo=github&sort=semver)](https://github.com/filc/naplo/releases)   [![discord](https://img.shields.io/discord/712698455193157643?label=Discord)](http://filcnaplo.hu/discord)
## Setup

View File

@@ -1,16 +1,4 @@
What's new:
- A jelenlegi hét kiválasztása esetén, egyből az aktuális napot választja ki ⏰
- A szellemjegyeknél bármilyen értéket megadhatsz 🎲
- A házifeladatok mostmár tökéletesen működnek 📚
- Mobilnetes firssítésnél figyelmeztetés ⚠️
- Hibajavítások 🐛
- **Megérkezett a Filc Premium!** ✨
Prémium funkciók:
- Egyedi név 👤
- Részletes jegy statisztikák 📈
- Testre szabhatóbb színek 🎨
- Választható tantárgy ikonok 📚
- Heti órarend nézet 📅

View File

@@ -42,6 +42,8 @@ PODS:
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- home_widget (0.0.1):
- Flutter
- live_activities (0.0.1):
- Flutter
- open_file (0.0.1):
@@ -62,8 +64,12 @@ PODS:
- Flutter
- FMDB (>= 2.7.5)
- SwiftyGif (5.4.3)
- uni_links (0.0.1):
- Flutter
- url_launcher_ios (0.0.1):
- Flutter
- workmanager (0.0.1):
- Flutter
DEPENDENCIES:
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
@@ -71,6 +77,7 @@ DEPENDENCIES:
- file_picker (from `.symlinks/plugins/file_picker/ios`)
- Flutter (from `Flutter`)
- flutter_custom_tabs (from `.symlinks/plugins/flutter_custom_tabs/ios`)
- home_widget (from `.symlinks/plugins/home_widget/ios`)
- live_activities (from `.symlinks/plugins/live_activities/ios`)
- open_file (from `.symlinks/plugins/open_file/ios`)
- path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
@@ -78,7 +85,9 @@ DEPENDENCIES:
- quick_actions_ios (from `.symlinks/plugins/quick_actions_ios/ios`)
- share_plus (from `.symlinks/plugins/share_plus/ios`)
- sqflite (from `.symlinks/plugins/sqflite/ios`)
- uni_links (from `.symlinks/plugins/uni_links/ios`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
- workmanager (from `.symlinks/plugins/workmanager/ios`)
SPEC REPOS:
trunk:
@@ -99,6 +108,8 @@ EXTERNAL SOURCES:
:path: Flutter
flutter_custom_tabs:
:path: ".symlinks/plugins/flutter_custom_tabs/ios"
home_widget:
:path: ".symlinks/plugins/home_widget/ios"
live_activities:
:path: ".symlinks/plugins/live_activities/ios"
open_file:
@@ -113,8 +124,12 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/share_plus/ios"
sqflite:
:path: ".symlinks/plugins/sqflite/ios"
uni_links:
:path: ".symlinks/plugins/uni_links/ios"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
workmanager:
:path: ".symlinks/plugins/workmanager/ios"
CHECKOUT OPTIONS:
DKImagePickerController:
@@ -129,6 +144,7 @@ SPEC CHECKSUMS:
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
flutter_custom_tabs: 7a10a08686955cb748e5d26e0ae586d30689bf89
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
home_widget: 2829415127ee92e876f816cbbe44c0b6601b8a37
live_activities: 9ff56a06a2d43ecd68f56deeed13b18a8304789c
open_file: 02eb5cb6b21264bd3a696876f5afbfb7ca4f4b7d
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
@@ -139,7 +155,9 @@ SPEC CHECKSUMS:
share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780
uni_links: d97da20c7701486ba192624d99bffaaffcfc298a
url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de
workmanager: 0afdcf5628bbde6924c21af7836fed07b42e30e6
PODFILE CHECKSUM: 862f939bb7e5390bdb8b2534eb81a9457ea9fbdc

View File

@@ -1,3 +1,4 @@
import 'package:filcnaplo/models/settings.dart';
import 'package:filcnaplo/models/user.dart';
import 'package:filcnaplo_kreta_api/models/student.dart';
import 'package:flutter/foundation.dart';
@@ -18,8 +19,13 @@ class UserProvider with ChangeNotifier {
String? get nickname => user?.nickname;
String? get displayName => user?.displayName;
final SettingsProvider _settings;
UserProvider({required SettingsProvider settings}) : _settings = settings;
void setUser(String userId) {
_selectedUserId = userId;
_settings.update(lastAccountId: userId);
notifyListeners();
}

View File

@@ -52,9 +52,7 @@ class App extends StatelessWidget {
final UserProvider user;
final DatabaseProvider database;
App({Key? key, required this.database, required this.settings, required this.user}) : super(key: key) {
if (user.getUsers().isNotEmpty) user.setUser(user.getUsers().first.id);
}
const App({Key? key, required this.database, required this.settings, required this.user}) : super(key: key);
@override
Widget build(BuildContext context) {

View File

@@ -16,7 +16,7 @@ const settingsDB = DatabaseStruct("settings", {
"vibration_strength": int, "ab_weeks": int, "swap_ab_weeks": int,
"notifications": int, "notifications_bitfield": int, "notification_poll_interval": int, // notifications
"x_filc_id": String, "graph_class_avg": int, "presentation_mode": int, "bell_delay": int, "bell_delay_enabled": int,
"grade_opening_fun": int, "icon_pack": String, "premium_scopes": String, "premium_token": String,
"grade_opening_fun": int, "icon_pack": String, "premium_scopes": String, "premium_token": String, "last_account_id": String,
});
const usersDB = DatabaseStruct("users", {
"id": String, "name": String, "username": String, "password": String, "institute_code": String, "student": String, "role": int,

View File

@@ -29,12 +29,20 @@ class DatabaseQuery {
return settings;
}
Future<UserProvider> getUsers() async {
var userProvider = UserProvider();
Future<UserProvider> getUsers(SettingsProvider settings) async {
var userProvider = UserProvider(settings: settings);
List<Map> usersMap = await db.query("users");
for (var user in usersMap) {
userProvider.addUser(User.fromMap(user));
}
if (userProvider.getUsers().map((e) => e.id).contains(settings.lastAccountId)) {
userProvider.setUser(settings.lastAccountId);
} else {
if (usersMap.isNotEmpty) {
userProvider.setUser(userProvider.getUsers().first.id);
settings.update(lastAccountId: userProvider.id);
}
}
return userProvider;
}
}

View File

@@ -1,24 +1,21 @@
// ignore_for_file: no_leading_underscores_for_local_identifiers
import 'package:filcnaplo_kreta_api/models/grade.dart';
class AverageHelper {
static double averageEvals(List<Grade> grades, {bool finalAvg = false}) {
List<String> ignoreInFinal = ["5,SzorgalomErtek", "4,MagatartasErtek"];
if (finalAvg) grades.removeWhere((e) => (e.value.value == 0) || (ignoreInFinal.contains(e.gradeType?.id)));
double average = 0.0;
List<String> ignoreInFinal = ["5,SzorgalomErtek", "4,MagatartasErtek"];
if (finalAvg) {
grades.removeWhere((e) => (e.value.value == 0) || (ignoreInFinal.contains(e.gradeType?.id)));
}
for (var e in grades) {
average += e.value.value * ((finalAvg ? 100 : e.value.weight) / 100);
}
average = average / grades.map((e) => (finalAvg ? 100 : e.value.weight) / 100).fold(0.0, (a, b) => a + b);
double average =
grades.map((e) => e.value.value * e.value.weight / 100.0).fold(0.0, (double a, double b) => a + b) / weightSum(grades, finalAvg: finalAvg);
return average.isNaN ? 0.0 : average;
}
static double weightSum(List<Grade> grades, {bool finalAvg = false}) =>
grades.map((e) => finalAvg ? 1 : e.value.weight / 100).fold(0, (a, b) => a + b);
static int howManyNeeded(int grade, List<Grade> base, double goal, {bool filcgrade = true, double avg = 0, double wsum = 0}) {
double _avg = filcgrade ? averageEvals(base) : avg;
double _wsum = filcgrade ? weightSum(base) : wsum;
if (_avg >= goal) return 0;
return (_wsum * (_avg - goal) / (goal - grade)).ceil();
}
}

View File

@@ -37,7 +37,7 @@ class Startup {
await db.close();
await database.init();
settings = await database.query.getSettings(database);
user = await database.query.getUsers();
user = await database.query.getUsers(settings);
}
}

View File

@@ -64,6 +64,7 @@ class SettingsProvider extends ChangeNotifier {
Color _customHighlightColor;
List<String> _premiumScopes;
String _premiumAccessToken;
String _lastAccountId;
SettingsProvider({
DatabaseProvider? database,
@@ -97,6 +98,7 @@ class SettingsProvider extends ChangeNotifier {
required Color customHighlightColor,
required List<String> premiumScopes,
required String premiumAccessToken,
required String lastAccountId,
}) : _database = database,
_language = language,
_startPage = startPage,
@@ -127,7 +129,8 @@ class SettingsProvider extends ChangeNotifier {
_customBackgroundColor = customBackgroundColor,
_customHighlightColor = customHighlightColor,
_premiumScopes = premiumScopes,
_premiumAccessToken = premiumAccessToken;
_premiumAccessToken = premiumAccessToken,
_lastAccountId = lastAccountId;
factory SettingsProvider.fromMap(Map map, {required DatabaseProvider database}) {
Map<String, Object?>? configMap;
@@ -176,6 +179,7 @@ class SettingsProvider extends ChangeNotifier {
customHighlightColor: Color(map["custom_highlight_color"]),
premiumScopes: jsonDecode(map["premium_scopes"]).cast<String>(),
premiumAccessToken: map["premium_token"],
lastAccountId: map["last_account_id"],
);
}
@@ -214,6 +218,7 @@ class SettingsProvider extends ChangeNotifier {
"custom_highlight_color": _customHighlightColor.value,
"premium_scopes": jsonEncode(_premiumScopes),
"premium_token": _premiumAccessToken,
"last_account_id": _lastAccountId,
};
}
@@ -256,6 +261,7 @@ class SettingsProvider extends ChangeNotifier {
customHighlightColor: const Color(0xff222222),
premiumScopes: [],
premiumAccessToken: "",
lastAccountId: "",
);
}
@@ -290,6 +296,7 @@ class SettingsProvider extends ChangeNotifier {
Color? get customHighlightColor => _customHighlightColor;
List<String> get premiumScopes => _premiumScopes;
String get premiumAccessToken => _premiumAccessToken;
String get lastAccountId => _lastAccountId;
Future<void> update({
bool store = true,
@@ -323,6 +330,7 @@ class SettingsProvider extends ChangeNotifier {
Color? customHighlightColor,
List<String>? premiumScopes,
String? premiumAccessToken,
String? lastAccountId,
}) async {
if (language != null && language != _language) _language = language;
if (startPage != null && startPage != _startPage) _startPage = startPage;
@@ -356,6 +364,7 @@ class SettingsProvider extends ChangeNotifier {
if (customHighlightColor != null && customHighlightColor != _customHighlightColor) _customHighlightColor = customHighlightColor;
if (premiumScopes != null && premiumScopes != _premiumScopes) _premiumScopes = premiumScopes;
if (premiumAccessToken != null && premiumAccessToken != _premiumAccessToken) _premiumAccessToken = premiumAccessToken;
if (lastAccountId != null && lastAccountId != _lastAccountId) _lastAccountId = lastAccountId;
if (store) await _database?.store.storeSettings(this);
notifyListeners();

View File

@@ -29,7 +29,7 @@ extension StringFormatUtils on String {
htmlString = htmlString.replaceAll(RegExp(r'<p ?>'), "");
htmlString = htmlString.replaceAll(RegExp(r'</p ?>'), "\n");
var document = parse(htmlString);
return document.body?.text.trim() ?? "";
return document.body?.text.trim() ?? htmlString;
}
String limit(int max) {

View File

@@ -3,7 +3,7 @@ description: "Nem hivatalos e-napló alkalmazás az e-Kréta rendszerhez"
homepage: https://filcnaplo.hu
publish_to: "none"
version: 3.4.0+171
version: 3.4.2+173
environment:
sdk: ">=2.16.0-80.1.beta <3.0.0"