From e1870b08e5d01aa9b8e1eaf5aa466bba0c9e0f91 Mon Sep 17 00:00:00 2001 From: balint1414 Date: Fri, 14 Jun 2024 10:44:10 +0200 Subject: [PATCH 01/15] =?UTF-8?q?Hiba=20ablak=20sz=C3=B6veg=C3=A9nek=20meg?= =?UTF-8?q?v=C3=A1ltoztat=C3=A1sa.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/screens/error_report_screen.dart | 44 +++++++++---------- .../lib/screens/error_report_screen.i18n.dart | 18 ++++---- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/refilc_mobile_ui/lib/screens/error_report_screen.dart b/refilc_mobile_ui/lib/screens/error_report_screen.dart index 0901be7..458ba0d 100644 --- a/refilc_mobile_ui/lib/screens/error_report_screen.dart +++ b/refilc_mobile_ui/lib/screens/error_report_screen.dart @@ -29,7 +29,7 @@ class ErrorReportScreen extends StatelessWidget { Padding( padding: const EdgeInsets.only(bottom: 4.0), child: Text( - "ekretaYou".i18n, + "title".i18n, style: TextStyle( color: AppColors.of(context).text.withOpacity(0.7), fontSize: 24.0, @@ -37,27 +37,27 @@ class ErrorReportScreen extends StatelessWidget { ), ), ), - FutureBuilder( - future: dirtyString(), - builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.waiting) { - return const CircularProgressIndicator(); - } - if (snapshot.hasError) { - return Text("Error: ${snapshot.error}"); - } - return Text( - snapshot.data ?? "", - textAlign: TextAlign.center, - style: TextStyle( - color: AppColors.of(context).text, - fontSize: 24.0, - fontWeight: FontWeight.w700, - fontStyle: FontStyle.italic, - ), - ); - }, - ), + //FutureBuilder( + // future: dirtyString(), + // builder: (context, snapshot) { + // if (snapshot.connectionState == ConnectionState.waiting) { + // return const CircularProgressIndicator(); + // } + // if (snapshot.hasError) { + // return Text("Error: ${snapshot.error}"); + // } + // return Text( + // snapshot.data ?? "", + // textAlign: TextAlign.center, + // style: TextStyle( + // color: AppColors.of(context).text, + // fontSize: 24.0, + // fontWeight: FontWeight.w700, + // fontStyle: FontStyle.italic, + // ), + // ); + // }, + //), const SizedBox(height: 16), Text( "smth_went_wrong".i18n, diff --git a/refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart b/refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart index ee30471..a198376 100644 --- a/refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart +++ b/refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart @@ -4,8 +4,8 @@ extension SettingsLocalization on String { static final _t = Translations.byLocale("hu_hu") + { "en_en": { - "ekretaYou": "e-KRÉTA, you", - "description": "An error occurred!", + "title": "Unexpected error.", + "description": "Unexpected error while using the application!", "submit": "Submit", "goback": "Go back", "details": "Details", @@ -15,11 +15,11 @@ extension SettingsLocalization on String { "stack": "Stack Trace", "done": "Done", "smth_went_wrong": - "Something went wrong, it is of course the fault of Educational Development Informatikai Zrt. (e-KRÉTA) in any case! /s", + "An unexpected error occurred while using the app.", }, "hu_hu": { - "ekretaYou": "e-KRÉTA, te", - "description": "Fasz-emulátor hivatásos balfasz!", + "title": "Váratlan hiba.", + "description": "Váratlan hiba az alkalmazás használata közben!", "submit": "Hiba jelentése", "goback": "Vissza", "details": "Részletek", @@ -29,11 +29,11 @@ extension SettingsLocalization on String { "stack": "Stacktrace", "done": "Kész", "smth_went_wrong": - "Valami probléma történt, ez természetesen az Educational Development Informatikai Zrt. (e-KRÉTA) hibája minden esetben! /s", + "Nem várt hiba következett be az alkalmazás használata közben.", }, "de_de": { - "ekretaYou": "e-KRÉTA, du", - "description": "Ein Fehler ist aufgetreten!", + "title": "Unerwartetes Problem.", + "description": "Unerwarteter Fehler bei der Benutzung der Anwendung!", "submit": "Abschicken", "goback": "Zurück", "details": "Details", @@ -43,7 +43,7 @@ extension SettingsLocalization on String { "stack": "Stack Trace", "done": "Fertig", "smth_went_wrong": - "Irgendetwas ist schief gelaufen, es ist natürlich auf jeden Fall die Schuld der Educational Development Informatikai Zrt. (e-KRÉTA)! /s", + "Bei der Benutzung der Anwendung ist ein unerwarteter Fehler aufgetreten.", }, }; From cad7bd19dc3efff7f72b9e947ee0ce22a15a8b19 Mon Sep 17 00:00:00 2001 From: balint1414 Date: Fri, 14 Jun 2024 10:56:15 +0200 Subject: [PATCH 02/15] =?UTF-8?q?Hiba=20ablak=20sz=C3=B6veg=C3=A9nek=20meg?= =?UTF-8?q?v=C3=A1ltoztat=C3=A1sa.=20(2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/screens/error_report_screen.dart | 42 +++++++++---------- .../lib/screens/error_report_screen.i18n.dart | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/refilc_mobile_ui/lib/screens/error_report_screen.dart b/refilc_mobile_ui/lib/screens/error_report_screen.dart index 458ba0d..04e706f 100644 --- a/refilc_mobile_ui/lib/screens/error_report_screen.dart +++ b/refilc_mobile_ui/lib/screens/error_report_screen.dart @@ -37,27 +37,27 @@ class ErrorReportScreen extends StatelessWidget { ), ), ), - //FutureBuilder( - // future: dirtyString(), - // builder: (context, snapshot) { - // if (snapshot.connectionState == ConnectionState.waiting) { - // return const CircularProgressIndicator(); - // } - // if (snapshot.hasError) { - // return Text("Error: ${snapshot.error}"); - // } - // return Text( - // snapshot.data ?? "", - // textAlign: TextAlign.center, - // style: TextStyle( - // color: AppColors.of(context).text, - // fontSize: 24.0, - // fontWeight: FontWeight.w700, - // fontStyle: FontStyle.italic, - // ), - // ); - // }, - //), + FutureBuilder( + future: dirtyString(), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return const CircularProgressIndicator(); + } + if (snapshot.hasError) { + return Text("Error: ${snapshot.error}"); + } + return Text( + snapshot.data ?? "", + textAlign: TextAlign.center, + style: TextStyle( + color: AppColors.of(context).text, + fontSize: 24.0, + fontWeight: FontWeight.w700, + fontStyle: FontStyle.italic, + ), + ); + }, + ), const SizedBox(height: 16), Text( "smth_went_wrong".i18n, diff --git a/refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart b/refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart index a198376..0e3e1c5 100644 --- a/refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart +++ b/refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart @@ -51,4 +51,4 @@ extension SettingsLocalization on String { String fill(List params) => localizeFill(this, params); String plural(int value) => localizePlural(value, this, _t); String version(Object modifier) => localizeVersion(modifier, this, _t); -} +} \ No newline at end of file From ac11da1744ea1ca2913f83350762062777f09aae Mon Sep 17 00:00:00 2001 From: balint1414 Date: Fri, 14 Jun 2024 10:58:26 +0200 Subject: [PATCH 03/15] =?UTF-8?q?Hiba=20ablak=20sz=C3=B6veg=C3=A9nek=20meg?= =?UTF-8?q?v=C3=A1ltoztat=C3=A1sa.=20(2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- refilc_mobile_ui/lib/screens/error_report_screen.dart | 2 +- refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/refilc_mobile_ui/lib/screens/error_report_screen.dart b/refilc_mobile_ui/lib/screens/error_report_screen.dart index 04e706f..e64a5f5 100644 --- a/refilc_mobile_ui/lib/screens/error_report_screen.dart +++ b/refilc_mobile_ui/lib/screens/error_report_screen.dart @@ -276,4 +276,4 @@ class ErrorDetail extends StatelessWidget { ), ); } -} +} \ No newline at end of file diff --git a/refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart b/refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart index 0e3e1c5..a198376 100644 --- a/refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart +++ b/refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart @@ -51,4 +51,4 @@ extension SettingsLocalization on String { String fill(List params) => localizeFill(this, params); String plural(int value) => localizePlural(value, this, _t); String version(Object modifier) => localizeVersion(modifier, this, _t); -} \ No newline at end of file +} From e6f7728e42852d2ef05b94c90b467593283c79fa Mon Sep 17 00:00:00 2001 From: balint1414 Date: Fri, 14 Jun 2024 11:27:29 +0200 Subject: [PATCH 04/15] =?UTF-8?q?Hiba=20ablak=20sz=C3=B6veg=C3=A9nek=20meg?= =?UTF-8?q?v=C3=A1ltoztat=C3=A1sa.=20(3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- refilc_mobile_ui/lib/screens/error_report_screen.dart | 2 +- refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/refilc_mobile_ui/lib/screens/error_report_screen.dart b/refilc_mobile_ui/lib/screens/error_report_screen.dart index e64a5f5..aed20d1 100644 --- a/refilc_mobile_ui/lib/screens/error_report_screen.dart +++ b/refilc_mobile_ui/lib/screens/error_report_screen.dart @@ -29,7 +29,7 @@ class ErrorReportScreen extends StatelessWidget { Padding( padding: const EdgeInsets.only(bottom: 4.0), child: Text( - "title".i18n, + "ekretaYou".i18n, style: TextStyle( color: AppColors.of(context).text.withOpacity(0.7), fontSize: 24.0, diff --git a/refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart b/refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart index a198376..8089fd3 100644 --- a/refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart +++ b/refilc_mobile_ui/lib/screens/error_report_screen.i18n.dart @@ -4,7 +4,7 @@ extension SettingsLocalization on String { static final _t = Translations.byLocale("hu_hu") + { "en_en": { - "title": "Unexpected error.", + "ekretaYou": "e-KRÉTA, you", "description": "Unexpected error while using the application!", "submit": "Submit", "goback": "Go back", @@ -18,7 +18,7 @@ extension SettingsLocalization on String { "An unexpected error occurred while using the app.", }, "hu_hu": { - "title": "Váratlan hiba.", + "ekretaYou": "e-KRÉTA, te", "description": "Váratlan hiba az alkalmazás használata közben!", "submit": "Hiba jelentése", "goback": "Vissza", @@ -32,7 +32,7 @@ extension SettingsLocalization on String { "Nem várt hiba következett be az alkalmazás használata közben.", }, "de_de": { - "title": "Unerwartetes Problem.", + "ekretaYou": "e-KRÉTA, du", "description": "Unerwarteter Fehler bei der Benutzung der Anwendung!", "submit": "Abschicken", "goback": "Zurück", From 3a927160192547cf14f6de48110d8c282ea40fc9 Mon Sep 17 00:00:00 2001 From: zypherift Date: Fri, 14 Jun 2024 14:54:34 +0200 Subject: [PATCH 05/15] add ger/eng export translation --- refilc/lib/helpers/notification_helper.dart | 2 +- .../lib/screens/settings/settings_screen.i18n.dart | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/refilc/lib/helpers/notification_helper.dart b/refilc/lib/helpers/notification_helper.dart index d909578..9ee1a49 100644 --- a/refilc/lib/helpers/notification_helper.dart +++ b/refilc/lib/helpers/notification_helper.dart @@ -22,7 +22,7 @@ import 'package:intl/intl.dart'; import 'package:refilc_kreta_api/models/message.dart'; // if you want to add a new category, also add it to the DB or else the app will probably crash -enum LastSeenCategory { +enum LastSeenCategory { grade, surprisegrade, absence, diff --git a/refilc_mobile_ui/lib/screens/settings/settings_screen.i18n.dart b/refilc_mobile_ui/lib/screens/settings/settings_screen.i18n.dart index c357d3a..dff11ea 100644 --- a/refilc_mobile_ui/lib/screens/settings/settings_screen.i18n.dart +++ b/refilc_mobile_ui/lib/screens/settings/settings_screen.i18n.dart @@ -4,6 +4,8 @@ extension SettingsLocalization on String { static final _t = Translations.byLocale("hu_hu") + { "en_en": { + "heads_up": "Heads up!", + "export_warning": "Exported grades are currently not yet viewable in reFilc, you'll only be able to view them manually in JSON format. In the future, this functionality will be extended and you will be able to view the tickets in the app interface.", "personal_details": "Personal Details", "open_dkt": "Open DCS", "edit_nickname": "Edit Nickname", @@ -126,6 +128,8 @@ extension SettingsLocalization on String { "grade_exporting": "Grade Exporting", }, "hu_hu": { + "heads_up": "Figyelem!", + "export_warning": "Az exportált jegyek jelenleg még nem megtekinthetők a reFilc-ben, csak te magad tudod átnézni őket JSON formátumban. A jövőben ez a funkció bővülni fog, és a jegyeket meg is tekintheted majd a reFilc felületén.", "personal_details": "Személyes információk", "open_dkt": "DKT megnyitása", "edit_nickname": "Becenév szerkesztése", @@ -248,6 +252,8 @@ extension SettingsLocalization on String { "grade_exporting": "Jegy exportálás", }, "de_de": { + "heads_up": "Achtung!", + "export_warning": "Exportierte Tickets sind derzeit noch nicht in reFilc einsehbar, Sie können sie nur selbst im JSON- Format überprüfen. In Zukunft wird diese Funktionalität erweitert und Sie werden die Tickets in der reFilc-Oberfläche anzeigen können", "personal_details": "Persönliche Angaben", "open_dkt": "Öffnen RDZ", "edit_nickname": "Spitznamen bearbeiten", From 1abe990847b1959563d6a0c22ba9493be5355708 Mon Sep 17 00:00:00 2001 From: zypherift Date: Fri, 14 Jun 2024 14:55:35 +0200 Subject: [PATCH 06/15] yes --- refilc_plus | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refilc_plus b/refilc_plus index 9bd46b8..00c2323 160000 --- a/refilc_plus +++ b/refilc_plus @@ -1 +1 @@ -Subproject commit 9bd46b81f230cd094787e1436cd5e8cdee7b5529 +Subproject commit 00c23238e0ae55d8e1029ab69ab835fa652e8952 From d8393b24e11de7cb955f7158c9404bed7b3a45d4 Mon Sep 17 00:00:00 2001 From: zypherift Date: Fri, 14 Jun 2024 15:02:10 +0200 Subject: [PATCH 07/15] fix multiple schools appearing in personal details menu --- .../lib/screens/settings/accounts/account_view.dart | 4 ---- 1 file changed, 4 deletions(-) diff --git a/refilc_mobile_ui/lib/screens/settings/accounts/account_view.dart b/refilc_mobile_ui/lib/screens/settings/accounts/account_view.dart index 7b9b5de..7f4eadd 100644 --- a/refilc_mobile_ui/lib/screens/settings/accounts/account_view.dart +++ b/refilc_mobile_ui/lib/screens/settings/accounts/account_view.dart @@ -59,10 +59,6 @@ class AccountView extends StatelessWidget { const SizedBox( height: 10.0, ), - // Detail( - // title: "parents".i18n, - // description: user.student.parents.join(", ")), - Detail(title: "school".i18n, description: user.student.school.name), ], ), ); From 9e815aff2fec81b293346fd360ea76192ac89166 Mon Sep 17 00:00:00 2001 From: zypherift Date: Fri, 14 Jun 2024 15:05:17 +0200 Subject: [PATCH 08/15] maybe fix token spam --- refilc_kreta_api/lib/client/client.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refilc_kreta_api/lib/client/client.dart b/refilc_kreta_api/lib/client/client.dart index d771097..5518e29 100644 --- a/refilc_kreta_api/lib/client/client.dart +++ b/refilc_kreta_api/lib/client/client.dart @@ -212,8 +212,8 @@ class KretaClient { res = await request.send(); if (res.statusCode == 401) { + headerMap.remove("authorization"); await refreshLogin(); - headerMap.remove("authorization"); } else { break; } From 47934620ea5c3d874612fc320cc44656ba0a3720 Mon Sep 17 00:00:00 2001 From: zypherift Date: Fri, 14 Jun 2024 15:16:03 +0200 Subject: [PATCH 09/15] fix again --- refilc_kreta_api/lib/client/client.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refilc_kreta_api/lib/client/client.dart b/refilc_kreta_api/lib/client/client.dart index 5518e29..b075ec1 100644 --- a/refilc_kreta_api/lib/client/client.dart +++ b/refilc_kreta_api/lib/client/client.dart @@ -80,8 +80,8 @@ class KretaClient { _status.triggerRequest(res); if (res.statusCode == 401) { - await refreshLogin(); headerMap.remove("authorization"); + await refreshLogin(); } else { break; } From dd8a4430a9211ee5f997b8e21d66ca33585d92a8 Mon Sep 17 00:00:00 2001 From: Kima Date: Sun, 16 Jun 2024 20:01:22 +0200 Subject: [PATCH 10/15] translation fixes --- .../widgets/absence/absence_tile.i18n.dart | 4 +-- .../widgets/absence/absence_view.i18n.dart | 4 +-- .../missed_exam/missed_exam_tile.i18n.dart | 6 ++--- .../lib/pages/grades/grades_page.i18n.dart | 11 ++++---- .../lib/pages/home/home_page.i18n.dart | 9 +++---- .../pages/home/live_card/live_card.i18n.dart | 12 ++++----- .../settings/accounts/account_view.i18n.dart | 8 +++--- .../screens/summary/summary_screen.i18n.dart | 27 +++++++------------ refilc_plus | 2 +- 9 files changed, 36 insertions(+), 47 deletions(-) diff --git a/refilc_mobile_ui/lib/common/widgets/absence/absence_tile.i18n.dart b/refilc_mobile_ui/lib/common/widgets/absence/absence_tile.i18n.dart index 515cda1..db00c6e 100644 --- a/refilc_mobile_ui/lib/common/widgets/absence/absence_tile.i18n.dart +++ b/refilc_mobile_ui/lib/common/widgets/absence/absence_tile.i18n.dart @@ -9,7 +9,7 @@ extension Localization on String { "unexcused": "unexcused %s", "absence": "absence", "delay": "delay", - "minute": " minutes of ".one(" minute of "), + "minute": " minute(s) of ", }, "hu_hu": { "excused": "igazolt %s", @@ -25,7 +25,7 @@ extension Localization on String { "unexcused": "unanerkannt %s", "absence": "Abwesenheit", "delay": "Verspätung", - "minute": " Minuten ".one(" Minute "), + "minute": " Minute(n) ", } }; diff --git a/refilc_mobile_ui/lib/common/widgets/absence/absence_view.i18n.dart b/refilc_mobile_ui/lib/common/widgets/absence/absence_view.i18n.dart index 3af7d33..d3c3575 100644 --- a/refilc_mobile_ui/lib/common/widgets/absence/absence_view.i18n.dart +++ b/refilc_mobile_ui/lib/common/widgets/absence/absence_view.i18n.dart @@ -9,7 +9,7 @@ extension Localization on String { "Mode": "Mode", "Submit date": "Submit Date", "show in timetable": "Show in timetable", - "minutes": "minutes".one("minute"), + "minutes": "minute(s)", "delay": "Delay", }, "hu_hu": { @@ -27,7 +27,7 @@ extension Localization on String { "Mode": "Typ", "Submit date": "Datum einreichen", "show in timetable": "im Stundenplan anzeigen", - "minutes": "Minuten".one("Minute"), + "minutes": "Minute(n)", "delay": "Verspätung", } }; diff --git a/refilc_mobile_ui/lib/common/widgets/missed_exam/missed_exam_tile.i18n.dart b/refilc_mobile_ui/lib/common/widgets/missed_exam/missed_exam_tile.i18n.dart index 2362b96..828deb9 100644 --- a/refilc_mobile_ui/lib/common/widgets/missed_exam/missed_exam_tile.i18n.dart +++ b/refilc_mobile_ui/lib/common/widgets/missed_exam/missed_exam_tile.i18n.dart @@ -17,7 +17,7 @@ extension Localization on String { "Messages": "Messages", "Absences": "Absences", "update_available": "Update Available", - "missed_exams": "You missed %s exams this week.".one("You missed an exam this week."), + "missed_exams": "You missed %s exam(s) this week.", "missed_exam_contact": "Contact %s, to resolve it!", }, "hu_hu": { @@ -34,7 +34,7 @@ extension Localization on String { "Messages": "Üzenetek", "Absences": "Hiányok", "update_available": "Frissítés elérhető", - "missed_exams": "Ezen a héten hiányoztál %s dolgozatról.".one("Ezen a héten hiányoztál egy dolgozatról."), + "missed_exams": "Ezen a héten hiányoztál %s dolgozatról.", "missed_exam_contact": "Keresd %s-t, ha pótolni szeretnéd!", }, "de_de": { @@ -51,7 +51,7 @@ extension Localization on String { "Messages": "Nachrichten", "Absences": "Fehlen", "update_available": "Update verfügbar", - "missed_exams": "Diese Woche haben Sie %s Prüfungen verpasst.".one("Diese Woche haben Sie eine Prüfung verpasst."), + "missed_exams": "Diese Woche haben Sie %s Prüfungen verpasst.", "missed_exam_contact": "Wenden Sie sich an %s, um sie zu erneuern!", }, }; diff --git a/refilc_mobile_ui/lib/pages/grades/grades_page.i18n.dart b/refilc_mobile_ui/lib/pages/grades/grades_page.i18n.dart index e4092ee..f362a2f 100644 --- a/refilc_mobile_ui/lib/pages/grades/grades_page.i18n.dart +++ b/refilc_mobile_ui/lib/pages/grades/grades_page.i18n.dart @@ -4,8 +4,9 @@ extension Localization on String { static final _t = Translations.byLocale("hu_hu") + { "en_en": { - "Grades": "Subjects", - "Ghost Grades": "Grades", + "Grades": "Grades", + "page_title_grades": "Subjects", + "Ghost Grades": "Ghost Grades", "Subjects": "Your Subjects", "Subjects_changes": "Subject Differences", "empty": "You don't have any subjects.", @@ -17,8 +18,7 @@ extension Localization on String { "subjectavg": "Subject Average", "classavg": "Class Average", "fail_warning": "Failure warning", - "fail_warning_description": - "You are failing %d subjects!".one("You are failing a subject!"), + "fail_warning_description": "You are failing %d subject(s)!", "data": "Data", "you_have_hw": "You have %s homework(s) to do", "grades_cnt": "Grade count: %s", @@ -58,7 +58,8 @@ extension Localization on String { "grade_calc": "Jegy kalkulátor", }, "de_de": { - "Grades": "Fächer", + "Grades": "Klassen", + "page_title_grades": "Themen", "Ghost Grades": "Geist Noten", "Subjects": "Ihre Themen", "Subjects_changes": "Betreff Änderungen", diff --git a/refilc_mobile_ui/lib/pages/home/home_page.i18n.dart b/refilc_mobile_ui/lib/pages/home/home_page.i18n.dart index 182c670..c0d9944 100644 --- a/refilc_mobile_ui/lib/pages/home/home_page.i18n.dart +++ b/refilc_mobile_ui/lib/pages/home/home_page.i18n.dart @@ -19,8 +19,7 @@ extension Localization on String { "Messages": "Messages", "Absences": "Absences", "update_available": "Update Available", - "missed_exams": "You missed %s exams this week." - .one("You missed an exam this week."), + "missed_exams": "You missed %s exam(s) this week.", "missed_exam_contact": "Contact %s to resolve it!", }, "hu_hu": { @@ -39,8 +38,7 @@ extension Localization on String { "Messages": "Üzenetek", "Absences": "Hiányzások", "update_available": "Frissítés elérhető", - "missed_exams": "Ezen a héten hiányoztál %s dolgozatról." - .one("Ezen a héten hiányoztál egy dolgozatról."), + "missed_exams": "Ezen a héten hiányoztál %s dolgozatról.", "missed_exam_contact": "Keresd %s tanár urat/hölgyet, hogy pótold!", }, "de_de": { @@ -59,8 +57,7 @@ extension Localization on String { "Messages": "Nachrichten", "Absences": "Fehlen", "update_available": "Update verfügbar", - "missed_exams": "Diese Woche haben Sie %s Prüfungen verpasst." - .one("Diese Woche haben Sie eine Prüfung verpasst."), + "missed_exams": "Diese Woche haben Sie %s Prüfungen verpasst.", "missed_exam_contact": "Wenden Sie sich an %s, um sie zu erneuern!", }, }; diff --git a/refilc_mobile_ui/lib/pages/home/live_card/live_card.i18n.dart b/refilc_mobile_ui/lib/pages/home/live_card/live_card.i18n.dart index da48ce6..c108af6 100644 --- a/refilc_mobile_ui/lib/pages/home/live_card/live_card.i18n.dart +++ b/refilc_mobile_ui/lib/pages/home/live_card/live_card.i18n.dart @@ -5,8 +5,8 @@ extension Localization on String { { "en_en": { "next": "Next", - "remaining min": "%d mins".one("%d min"), - "remaining sec": "%d secs".one("%d sec"), + "remaining min": "%d min(s)", + "remaining sec": "%d sec(s)", "break": "Break", "go to room": "Go to room %s.", "go ground floor": "Go to the ground floor.", @@ -27,8 +27,8 @@ extension Localization on String { }, "hu_hu": { "next": "Következő", - "remaining min": "%d perc".one("%d perc"), - "remaining sec": "%d másodperc".one("%d másodperc"), + "remaining min": "%d perc", + "remaining sec": "%d másodperc", "break": "Szünet", "go to room": "Menj a(z) %s terembe.", "go ground floor": "Menj a földszintre.", @@ -49,8 +49,8 @@ extension Localization on String { }, "de_de": { "next": "Nächste", - "remaining min": "%d Minuten".one("%d Minute"), - "remaining sec": "%d Sekunden".one("%d Sekunden"), + "remaining min": "%d Minute(n)", + "remaining sec": "%d Sekunde(n)", "break": "Pause", "go to room": "Geh in den Raum %s.", "go ground floor": "Geh dir Treppe hinunter.", diff --git a/refilc_mobile_ui/lib/screens/settings/accounts/account_view.i18n.dart b/refilc_mobile_ui/lib/screens/settings/accounts/account_view.i18n.dart index ff292a4..5e38fae 100644 --- a/refilc_mobile_ui/lib/screens/settings/accounts/account_view.i18n.dart +++ b/refilc_mobile_ui/lib/screens/settings/accounts/account_view.i18n.dart @@ -8,22 +8,22 @@ extension Localization on String { "school": "School", "class": "Class", "address": "Home address", - "parents": "Parents".one("Parent"), - "parents_phone": "Parents' phone number: ".one("Parent"), + "parents": "Parent(s)", + "parents_phone": "Parents' phone number: ", }, "hu_hu": { "birthdate": "Születési dátum", "school": "Iskola", "class": "Osztály", "address": "Lakcím", - "parents": "Szülők".one("Szülő"), + "parents": "Szülő(k)", }, "de_de": { "birthdate": "Geburtsdatum", "school": "Schule", "class": "Klasse", "address": "Wohnanschrift", - "parents": "Eltern", + "parents": "Elter(n)", }, }; diff --git a/refilc_mobile_ui/lib/screens/summary/summary_screen.i18n.dart b/refilc_mobile_ui/lib/screens/summary/summary_screen.i18n.dart index abe8aeb..d259496 100644 --- a/refilc_mobile_ui/lib/screens/summary/summary_screen.i18n.dart +++ b/refilc_mobile_ui/lib/screens/summary/summary_screen.i18n.dart @@ -24,26 +24,17 @@ extension SettingsLocalization on String { "dontfelt": "You didn't like this...", "youlate": "You're late!", // allsum page - "test": "tests" - .one("test"), - "closingtest": "module tests" - .one("module test"), - "grade": "grades" - .one("grade"), - "hw": "homeworks" - .one("homework"), - "subject": "subjects" - .one("subject"), - "lesson": "lessons" - .one("lesson"), - "absence_sum": "absences" - .one("absence"), + "test": "test(s)", + "closingtest": "module test(s)", + "grade": "grade(s)", + "hw": "homework(s)", + "subject": "subject(s)", + "lesson": "lesson(s)", + "absence_sum": "absence(s)", "excused": "excused", "unexcused": "unexcused", - "delay_sum": "delays" - .one("delay"), - "min": "minutes" - .one("minute"), + "delay_sum": "delay(s)", + "min": "minute(s)", // personality page "click_reveal": "Click to reveal...", }, diff --git a/refilc_plus b/refilc_plus index 00c2323..9bd46b8 160000 --- a/refilc_plus +++ b/refilc_plus @@ -1 +1 @@ -Subproject commit 00c23238e0ae55d8e1029ab69ab835fa652e8952 +Subproject commit 9bd46b81f230cd094787e1436cd5e8cdee7b5529 From 9bee0daeb5d028a9b93179bcb11183a7e0eba544 Mon Sep 17 00:00:00 2001 From: zypherift Date: Sun, 16 Jun 2024 20:08:59 +0200 Subject: [PATCH 11/15] kill me --- refilc/lib/helpers/uwu_helper.dart | 130 +++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 refilc/lib/helpers/uwu_helper.dart diff --git a/refilc/lib/helpers/uwu_helper.dart b/refilc/lib/helpers/uwu_helper.dart new file mode 100644 index 0000000..b5c6dce --- /dev/null +++ b/refilc/lib/helpers/uwu_helper.dart @@ -0,0 +1,130 @@ +import 'dart:math'; + +class Uwuifier { + final Map _spacesModifier; + final double _wordsModifier; + + final List faces = [ + "OwO", + "UwU", + ">w<", + "^w^", + "^-^", + ":3", + ]; + + final List> uwuMap = [ + ['(?:r|l)', 'w'], + ['(?:R|L)', 'W'], + ['na', 'nya'], + ['ne', 'nye'], + ['NA', 'NYA'], + ['NE', 'NYE'], + ['Na', 'Nya'], + ['Ne', 'Nye'], + ['no', 'nyo'], + ['NO', 'NYO'], + ['No', 'Nyo'], + ['nO', 'NYo'], + ['ove', 'uv'], + ['no', 'nwo'], + ]; + + final Map _uwuCache = {}; + + Uwuifier({ + Map? spaces, + double? words, + }) : _spacesModifier = spaces ?? { + 'faces': 0.05, + 'actions': 0.0, + 'stutters': 0.1, + }, + _wordsModifier = words ?? 1.0; + + String uwuifyWords(String sentence) { + final words = sentence.split(' '); + + final uwuifiedSentence = words.map((word) { + if (isAt(word) || isUri(word)) return word; + + var seed = Random().nextDouble(); + for (final uwuMapEntry in uwuMap) { + final oldWord = RegExp(uwuMapEntry[0], caseSensitive: false); + final newWord = uwuMapEntry[1]; + if (seed > _wordsModifier) continue; + word = word.replaceAll(oldWord, newWord); + } + + return word; + }).join(' '); + + return uwuifiedSentence; + } + + String uwuifySpaces(String sentence) { + final words = sentence.split(' '); + + final faceThreshold = _spacesModifier['faces']!; + final actionThreshold = _spacesModifier['actions']! + faceThreshold; + final stutterThreshold = _spacesModifier['stutters']! + actionThreshold; + + final uwuifiedSentence = words.map((word) { + final seed = Random().nextDouble(); + final firstCharacter = word[0]; + + if (seed <= faceThreshold && faces.isNotEmpty) { + word += ' ${faces[Random().nextInt(faces.length)]}'; + } else if (seed <= actionThreshold) { + // Skip actions + } else if (seed <= stutterThreshold && !isUri(word)) { + if (Random().nextInt(10) == 0) { + final stutter = Random().nextInt(3); + return '${firstCharacter * (stutter + 1)}-$word'; + } + } + + return word; + }).join(' '); + + return uwuifiedSentence; + } + + String uwuifySentence(String sentence) { + if (_uwuCache.containsKey(sentence)) { + return _uwuCache[sentence]!; + } + + var uwuifiedSentence = uwuifyWords(sentence); + uwuifiedSentence = uwuifySpaces(uwuifiedSentence); + + _uwuCache[sentence] = uwuifiedSentence; + return uwuifiedSentence; + } + + bool isAt(String value) { + return value.startsWith('@'); + } + + bool isUri(String? value) { + if (value == null) return false; + final split = RegExp( + r'''(?:([^:/?#]+):)?(?:\/\/([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?''') + .firstMatch(value); + if (split == null) return false; + final scheme = split.group(1); + final authority = split.group(2); + final path = split.group(3); + if (!(scheme?.isNotEmpty == true && path?.isNotEmpty == true)) return false; + if (authority != null && authority.isNotEmpty) { + if (!(path?.isEmpty == true || path!.startsWith('/'))) return false; + } else if (path?.startsWith('//') == true) { + return false; + } + if (!RegExp(r'''^[a-z][a-z0-9+\-\.]*$''', caseSensitive: false) + .hasMatch(scheme!.toLowerCase())) { + return false; + } + return true; + } +} From c0dd84c6652c2c6004da9ce15f5171885307f728 Mon Sep 17 00:00:00 2001 From: Kima Date: Sun, 16 Jun 2024 21:32:27 +0200 Subject: [PATCH 12/15] finished grade importing and exporting totally --- refilc_kreta_api/lib/models/grade.dart | 35 +++++ .../lib/pages/grades/grades_page.dart | 133 ++++++++++++++---- refilc_mobile_ui/pubspec.yaml | 1 + refilc_plus | 2 +- 4 files changed, 139 insertions(+), 32 deletions(-) diff --git a/refilc_kreta_api/lib/models/grade.dart b/refilc_kreta_api/lib/models/grade.dart index a7d595a..b12469d 100644 --- a/refilc_kreta_api/lib/models/grade.dart +++ b/refilc_kreta_api/lib/models/grade.dart @@ -1,6 +1,7 @@ // ignore_for_file: no_leading_underscores_for_local_identifiers import 'package:refilc/utils/format.dart'; +import 'package:uuid/uuid.dart'; import 'category.dart'; import 'subject.dart'; import 'teacher.dart'; @@ -75,6 +76,40 @@ class Grade { ); } + factory Grade.fromExportJson(Map json) { + return Grade( + id: const Uuid().v4(), + date: json["date"] != null ? DateTime.parse(json["date"]) : DateTime(0), + value: GradeValue( + json["value"] ?? 0, + json["value_name"] ?? "", + json["value_name"] ?? "", + json["weight"] ?? 0, + percentage: false, + ), + teacher: Teacher.fromString((json["teacher"] ?? "").trim()), + description: json["description"] ?? "", + type: json["type"] != null + ? Category.getGradeType(json["type"] + .replaceAll("midYear", "evkozi_jegy_ertekeles") + .replaceAll("halfYear", "felevi_jegy_ertekeles") + .replaceAll("endYear", "evvegi_jegy_ertekeles")) + : GradeType.unknown, + groupId: const Uuid().v4(), + subject: GradeSubject( + id: const Uuid().v4(), + category: Category.fromJson({}), + name: json["subject"] ?? ""), + mode: Category.fromJson({}), + writeDate: + json["date"] != null ? DateTime.parse(json["date"]) : DateTime(0), + seenDate: + json["date"] != null ? DateTime.parse(json["date"]) : DateTime(0), + form: "", + json: json, + ); + } + bool compareTo(dynamic other) { if (runtimeType != other.runtimeType) return false; diff --git a/refilc_mobile_ui/lib/pages/grades/grades_page.dart b/refilc_mobile_ui/lib/pages/grades/grades_page.dart index 4f33264..5992cc9 100644 --- a/refilc_mobile_ui/lib/pages/grades/grades_page.dart +++ b/refilc_mobile_ui/lib/pages/grades/grades_page.dart @@ -1,9 +1,12 @@ // ignore_for_file: no_leading_underscores_for_local_identifiers +import 'dart:convert'; +import 'dart:io'; import 'dart:math'; import 'package:auto_size_text/auto_size_text.dart'; import 'package:collection/collection.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:refilc/api/providers/update_provider.dart'; import 'package:refilc/models/settings.dart'; @@ -89,19 +92,18 @@ class GradesPageState extends State { int avgDropValue = 0; bool gradeCalcMode = false; + bool importedViewMode = false; + + List jsonGrades = []; List getSubjectGrades(GradeSubject subject, {int days = 0}) => !gradeCalcMode - ? gradeProvider - .grades + ? (importedViewMode ? jsonGrades : gradeProvider.grades) .where((e) => - e - .subject == - subject && + e.subject == subject && e.type == GradeType.midYear && - (days == - 0 || + (days == 0 || e.date.isBefore( DateTime.now().subtract(Duration(days: days))))) .toList() @@ -110,18 +112,19 @@ class GradesPageState extends State { .toList(); void generateTiles() { - List subjects = gradeProvider.grades - .map((e) => GradeSubject( - category: e.subject.category, - id: e.subject.id, - name: e.subject.name, - renamedTo: e.subject.renamedTo, - customRounding: e.subject.customRounding, - teacher: e.teacher, - )) - .toSet() - .toList() - ..sort((a, b) => a.name.compareTo(b.name)); + List subjects = + (importedViewMode ? jsonGrades : gradeProvider.grades) + .map((e) => GradeSubject( + category: e.subject.category, + id: e.subject.id, + name: e.subject.name, + renamedTo: e.subject.renamedTo, + customRounding: e.subject.customRounding, + teacher: e.teacher, + )) + .toSet() + .toList() + ..sort((a, b) => a.name.compareTo(b.name)); List tiles = []; Map subjectAvgs = {}; @@ -165,7 +168,8 @@ class GradesPageState extends State { e.subject.id == subject.id && e.writeDate.isAfter(DateTime.now())); bool hasUnder = (hasHomework || nearestExam != null) && - Provider.of(context).qSubjectsSubTiles; + Provider.of(context, listen: false) + .qSubjectsSubTiles; return Padding( padding: i > 1 ? const EdgeInsets.only(top: 9.0) : EdgeInsets.zero, @@ -220,7 +224,8 @@ class GradesPageState extends State { height: 6.0, ), if (hasHomework && - Provider.of(context).qSubjectsSubTiles) + Provider.of(context, listen: false) + .qSubjectsSubTiles) Container( decoration: BoxDecoration( boxShadow: [ @@ -448,25 +453,28 @@ class GradesPageState extends State { .fold(0.0, (double a, double b) => a + b) / gradeProvider.groupAverages.length; - final now = gradeProvider.grades.isNotEmpty - ? gradeProvider.grades - .reduce((v, e) => e.date.isAfter(v.date) ? e : v) - .date - : DateTime.now(); + final now = + (importedViewMode ? jsonGrades : gradeProvider.grades).isNotEmpty + ? (importedViewMode ? jsonGrades : gradeProvider.grades) + .reduce((v, e) => e.date.isAfter(v.date) ? e : v) + .date + : DateTime.now(); final currentStudentAvg = AverageHelper.averageEvals(!gradeCalcMode - ? gradeProvider.grades + ? (importedViewMode ? jsonGrades : gradeProvider.grades) .where((e) => e.type == GradeType.midYear) .toList() : calculatorProvider.grades); - final prevStudentAvg = AverageHelper.averageEvals(gradeProvider.grades + final prevStudentAvg = AverageHelper.averageEvals((importedViewMode + ? jsonGrades + : gradeProvider.grades) .where((e) => e.type == GradeType.midYear) .where((e) => e.date.isBefore(now.subtract(const Duration(days: 30)))) .toList()); List graphGrades = !gradeCalcMode - ? gradeProvider.grades + ? (importedViewMode ? jsonGrades : gradeProvider.grades) .where((e) => e.type == GradeType.midYear && (avgDropValue == 0 || @@ -500,7 +508,7 @@ class GradesPageState extends State { // const SizedBox(width: 4.0), TrendDisplay( previous: prevStudentAvg, current: currentStudentAvg), - if (gradeProvider.grades + if ((importedViewMode ? jsonGrades : gradeProvider.grades) .where((e) => e.type == GradeType.midYear) .isNotEmpty) AverageDisplay(average: currentStudentAvg), @@ -632,7 +640,8 @@ class GradesPageState extends State { void gradeCalcTotal(BuildContext context) { calculatorProvider.clear(); - calculatorProvider.addAllGrades(gradeProvider.grades); + calculatorProvider + .addAllGrades((importedViewMode ? jsonGrades : gradeProvider.grades)); _sheetController = _scaffoldKey.currentState?.showBottomSheet( (context) => const RoundedBottomSheet( @@ -693,6 +702,68 @@ class GradesPageState extends State { const SizedBox( height: 10.0, ), + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12.0), + color: Theme.of(context).colorScheme.background), + child: ListTile( + title: Row( + children: [ + const Icon(Icons.toll_rounded), + const SizedBox( + width: 10.0, + ), + Text('import_grades'.i18n), + ], + ), + trailing: importedViewMode ? const Icon(FeatherIcons.x) : null, + onTap: () { + if (importedViewMode) { + importedViewMode = false; + + generateTiles(); + setState(() {}); + + Navigator.of(context, rootNavigator: true).pop(); + return; + } + + // if (!Provider.of(context, listen: false) + // .hasScope(PremiumScopes.gradeExporting)) { + // PlusLockedFeaturePopup.show( + // context: context, feature: PremiumFeature.gradeExporting); + // return; + // } + + // show file picker + FilePicker.platform.pickFiles( + type: FileType.custom, + allowedExtensions: ['json'], + ).then((value) { + if (value != null) { + final File file = File(value.files.single.path!); + final String content = file.readAsStringSync(); + final List json = jsonDecode(content); + + jsonGrades = json.map((e) => Grade.fromJson(e)).toList(); + importedViewMode = true; + + generateTiles(); + setState(() {}); + + print(content); + print(json); + print(jsonGrades.map((e) => e.json)); + } + }); + + Navigator.of(context, rootNavigator: true).pop(); + }, + ), + ), + const SizedBox( + height: 10.0, + ), Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(12.0), diff --git a/refilc_mobile_ui/pubspec.yaml b/refilc_mobile_ui/pubspec.yaml index 555383f..109ecc6 100644 --- a/refilc_mobile_ui/pubspec.yaml +++ b/refilc_mobile_ui/pubspec.yaml @@ -72,6 +72,7 @@ dependencies: carousel_slider: ^4.2.1 flutter_portal: ^1.1.4 webview_flutter: ^4.8.0 + file_picker: ^6.2.1 dev_dependencies: flutter_lints: ^3.0.1 diff --git a/refilc_plus b/refilc_plus index 9bd46b8..ac93b31 160000 --- a/refilc_plus +++ b/refilc_plus @@ -1 +1 @@ -Subproject commit 9bd46b81f230cd094787e1436cd5e8cdee7b5529 +Subproject commit ac93b31cbc8a3ce2a9e9e2036e2f2ae4ffbe51f3 From 4277f0662aaed93ea66dae4ca9f31940e2e65c2b Mon Sep 17 00:00:00 2001 From: Kima Date: Sun, 16 Jun 2024 21:33:33 +0200 Subject: [PATCH 13/15] added back premium check --- .../lib/pages/grades/grades_page.dart | 16 ++++++---------- refilc_plus | 2 +- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/refilc_mobile_ui/lib/pages/grades/grades_page.dart b/refilc_mobile_ui/lib/pages/grades/grades_page.dart index 5992cc9..4e6163d 100644 --- a/refilc_mobile_ui/lib/pages/grades/grades_page.dart +++ b/refilc_mobile_ui/lib/pages/grades/grades_page.dart @@ -728,12 +728,12 @@ class GradesPageState extends State { return; } - // if (!Provider.of(context, listen: false) - // .hasScope(PremiumScopes.gradeExporting)) { - // PlusLockedFeaturePopup.show( - // context: context, feature: PremiumFeature.gradeExporting); - // return; - // } + if (!Provider.of(context, listen: false) + .hasScope(PremiumScopes.gradeExporting)) { + PlusLockedFeaturePopup.show( + context: context, feature: PremiumFeature.gradeExporting); + return; + } // show file picker FilePicker.platform.pickFiles( @@ -750,10 +750,6 @@ class GradesPageState extends State { generateTiles(); setState(() {}); - - print(content); - print(json); - print(jsonGrades.map((e) => e.json)); } }); diff --git a/refilc_plus b/refilc_plus index ac93b31..c01a024 160000 --- a/refilc_plus +++ b/refilc_plus @@ -1 +1 @@ -Subproject commit ac93b31cbc8a3ce2a9e9e2036e2f2ae4ffbe51f3 +Subproject commit c01a0249b9266346d8e812fe026dc933500ceac7 From e73ee5a1f257cdb1d2a46ebfe94eecd4b59252ac Mon Sep 17 00:00:00 2001 From: Kima Date: Sun, 16 Jun 2024 21:36:00 +0200 Subject: [PATCH 14/15] translation for grade importing --- refilc_mobile_ui/lib/pages/grades/grades_page.i18n.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/refilc_mobile_ui/lib/pages/grades/grades_page.i18n.dart b/refilc_mobile_ui/lib/pages/grades/grades_page.i18n.dart index f362a2f..8404a52 100644 --- a/refilc_mobile_ui/lib/pages/grades/grades_page.i18n.dart +++ b/refilc_mobile_ui/lib/pages/grades/grades_page.i18n.dart @@ -29,6 +29,7 @@ extension Localization on String { "grades": "Grades", "show_exams_homework": "Exams and Homework", "grade_calc": "Grade Calculator", + "import_grades": "Import Grades (JSON)", }, "hu_hu": { "Grades": "Jegyek", @@ -56,6 +57,7 @@ extension Localization on String { "grades": "Jegyek", "show_exams_homework": "Dolgozatok és házik", "grade_calc": "Jegy kalkulátor", + "import_grades": "Jegyek importálása (JSON)", }, "de_de": { "Grades": "Klassen", @@ -83,6 +85,7 @@ extension Localization on String { "grades": "Noten", "show_exams_homework": "Referate und Hausaufgaben", "grade_calc": "Noten-Rechner", + "import_grades": "Noten importieren (JSON)", }, }; From 57d784443a6038f037618fe01ed812efc2ae14ae Mon Sep 17 00:00:00 2001 From: Kima Date: Sun, 16 Jun 2024 21:36:22 +0200 Subject: [PATCH 15/15] changed version number --- refilc/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refilc/pubspec.yaml b/refilc/pubspec.yaml index b2a4288..064f4bc 100644 --- a/refilc/pubspec.yaml +++ b/refilc/pubspec.yaml @@ -3,7 +3,7 @@ description: "Egy nem hivatalos e-KRÉTA kliens, diákoktól diákoknak." homepage: https://refilc.hu publish_to: "none" -version: 5.0.1+265 +version: 5.0.2+266 environment: sdk: ">=2.17.0 <=3.3.2"