From d9bd555e6a81268e1dca7a84e10fead4e71486ad Mon Sep 17 00:00:00 2001
From: Kima <kimavideos97@gmail.com>
Date: Wed, 27 Sep 2023 21:36:18 +0200
Subject: [PATCH 1/5] added grade colors to theme share

---
 filcnaplo/lib/api/client.dart                 | 49 +++++++++++++++-
 filcnaplo/lib/models/shared_theme.dart        | 46 ++++++++++++++-
 .../lib/screens/settings/settings_helper.dart |  6 +-
 .../lib/providers/share_provider.dart         | 56 +++++++++++++++++--
 .../lib/ui/mobile/settings/theme.dart         | 24 +++++++-
 5 files changed, 170 insertions(+), 11 deletions(-)

diff --git a/filcnaplo/lib/api/client.dart b/filcnaplo/lib/api/client.dart
index 0a78545..36ef6e9 100644
--- a/filcnaplo/lib/api/client.dart
+++ b/filcnaplo/lib/api/client.dart
@@ -40,6 +40,11 @@ class FilcAPI {
   static const allThemes = "$themeGet/all";
   static const themeByID = "$themeGet/";
 
+  static const gradeColorsShare = "$baseUrl/v2/shared/theme/add";
+  static const gradeColorsGet = "$baseUrl/v2/shared/theme/get";
+  static const allGradeColors = "$gradeColorsGet/all";
+  static const gradeColorsByID = "$gradeColorsGet/";
+
   static Future<bool> checkConnectivity() async =>
       (await Connectivity().checkConnectivity()) != ConnectivityResult.none;
 
@@ -235,7 +240,49 @@ class FilcAPI {
         throw "HTTP ${res.statusCode}: ${res.body}";
       }
     } on Exception catch (error, stacktrace) {
-      log("ERROR: FilcAPI.addSharedTheme: $error $stacktrace");
+      log("ERROR: FilcAPI.getSharedTheme: $error $stacktrace");
+    }
+    return null;
+  }
+
+  static Future<void> addSharedGradeColors(
+      SharedGradeColors gradeColors) async {
+    try {
+      gradeColors.json.remove('json');
+      gradeColors.json['is_public'] = gradeColors.isPublic.toString();
+      gradeColors.json['five_color'] = gradeColors.fiveColor.value.toString();
+      gradeColors.json['four_color'] = gradeColors.fourColor.value.toString();
+      gradeColors.json['three_color'] = gradeColors.threeColor.value.toString();
+      gradeColors.json['two_color'] = gradeColors.twoColor.value.toString();
+      gradeColors.json['one_color'] = gradeColors.oneColor.value.toString();
+
+      http.Response res = await http.post(
+        Uri.parse(gradeColorsShare),
+        body: gradeColors.json,
+        headers: {'Content-Type': 'application/x-www-form-urlencoded'},
+      );
+
+      if (res.statusCode != 201) {
+        throw "HTTP ${res.statusCode}: ${res.body}";
+      }
+
+      log('Shared grade colors successfully with ID: ${gradeColors.id}');
+    } on Exception catch (error, stacktrace) {
+      log("ERROR: FilcAPI.addSharedGradeColors: $error $stacktrace");
+    }
+  }
+
+  static Future<Map?> getSharedGradeColors(String id) async {
+    try {
+      http.Response res = await http.get(Uri.parse(gradeColorsByID + id));
+
+      if (res.statusCode == 200) {
+        return (jsonDecode(res.body) as Map);
+      } else {
+        throw "HTTP ${res.statusCode}: ${res.body}";
+      }
+    } on Exception catch (error, stacktrace) {
+      log("ERROR: FilcAPI.getSharedGradeColors: $error $stacktrace");
     }
     return null;
   }
diff --git a/filcnaplo/lib/models/shared_theme.dart b/filcnaplo/lib/models/shared_theme.dart
index 5c3486c..0784fcc 100644
--- a/filcnaplo/lib/models/shared_theme.dart
+++ b/filcnaplo/lib/models/shared_theme.dart
@@ -8,6 +8,7 @@ class SharedTheme {
   Color backgroundColor;
   Color panelsColor;
   Color accentColor;
+  SharedGradeColors gradeColors;
 
   SharedTheme({
     required this.json,
@@ -17,9 +18,10 @@ class SharedTheme {
     required this.backgroundColor,
     required this.panelsColor,
     required this.accentColor,
+    required this.gradeColors,
   });
 
-  factory SharedTheme.fromJson(Map json) {
+  factory SharedTheme.fromJson(Map json, Map gradeColorsJson) {
     return SharedTheme(
       json: json,
       id: json['public_id'],
@@ -28,6 +30,48 @@ class SharedTheme {
       backgroundColor: Color(json['background_color']),
       panelsColor: Color(json['panels_color']),
       accentColor: Color(json['accent_color']),
+      gradeColors: SharedGradeColors.fromJson(gradeColorsJson),
+    );
+  }
+}
+
+class SharedGradeColors {
+  Map json;
+  String id;
+  bool isPublic;
+  String nickname;
+  Color fiveColor;
+  Color fourColor;
+  Color threeColor;
+  Color twoColor;
+  Color oneColor;
+  String linkedThemeId;
+
+  SharedGradeColors({
+    required this.json,
+    required this.id,
+    this.isPublic = false,
+    this.nickname = 'Anonymous',
+    required this.fiveColor,
+    required this.fourColor,
+    required this.threeColor,
+    required this.twoColor,
+    required this.oneColor,
+    required this.linkedThemeId,
+  });
+
+  factory SharedGradeColors.fromJson(Map json) {
+    return SharedGradeColors(
+      json: json,
+      id: json['public_id'],
+      isPublic: json['is_public'] ?? false,
+      nickname: json['nickname'] ?? 'Anonymous',
+      fiveColor: Color(json['five_color']),
+      fourColor: Color(json['four_color']),
+      threeColor: Color(json['three_color']),
+      twoColor: Color(json['two_color']),
+      oneColor: Color(json['one_color']),
+      linkedThemeId: json['linked_theme_id'],
     );
   }
 }
diff --git a/filcnaplo_mobile_ui/lib/screens/settings/settings_helper.dart b/filcnaplo_mobile_ui/lib/screens/settings/settings_helper.dart
index 44b1334..e4c459f 100755
--- a/filcnaplo_mobile_ui/lib/screens/settings/settings_helper.dart
+++ b/filcnaplo_mobile_ui/lib/screens/settings/settings_helper.dart
@@ -623,7 +623,7 @@ class LiveActivityColorSetting extends StatefulWidget {
       _LiveActivityColorSettingState();
 }
 
-class _LiveActivityColorSettingState extends State<LiveActivityColorSetting> { 
+class _LiveActivityColorSettingState extends State<LiveActivityColorSetting> {
   late SettingsProvider settings;
   Color currentColor = const Color(0x00000000);
 
@@ -648,8 +648,8 @@ class _LiveActivityColorSettingState extends State<LiveActivityColorSetting> {
                 setState(() {
                   currentColor = k as Color;
                   settings.update(
-                          liveActivityColor: currentColor.withAlpha(255));
-                      Navigator.of(context).maybePop();
+                      liveActivityColor: currentColor.withAlpha(255));
+                  Navigator.of(context).maybePop();
                 });
               },
               elevation: 0,
diff --git a/filcnaplo_premium/lib/providers/share_provider.dart b/filcnaplo_premium/lib/providers/share_provider.dart
index 8407e43..1fbf2c2 100644
--- a/filcnaplo_premium/lib/providers/share_provider.dart
+++ b/filcnaplo_premium/lib/providers/share_provider.dart
@@ -17,8 +17,12 @@ class ShareProvider extends ChangeNotifier {
   // Future<void> shareTheme({required SharedTheme theme}) async {
 
   // }
+
+  // themes
   Future<SharedTheme> shareCurrentTheme(BuildContext context,
-      {bool isPublic = false, bool shareNick = true}) async {
+      {bool isPublic = false,
+      bool shareNick = true,
+      required SharedGradeColors gradeColors}) async {
     final SettingsProvider settings =
         Provider.of<SettingsProvider>(context, listen: false);
 
@@ -38,7 +42,7 @@ class ShareProvider extends ChangeNotifier {
           const Color(0xFF3D7BF4).value,
     };
 
-    SharedTheme theme = SharedTheme.fromJson(themeJson);
+    SharedTheme theme = SharedTheme.fromJson(themeJson, gradeColors.json);
     FilcAPI.addSharedTheme(theme);
 
     return theme;
@@ -49,8 +53,52 @@ class ShareProvider extends ChangeNotifier {
     Map? themeJson = await FilcAPI.getSharedTheme(id);
 
     if (themeJson != null) {
-      SharedTheme theme = SharedTheme.fromJson(themeJson);
-      return theme;
+      Map? gradeColorsJson =
+          await FilcAPI.getSharedGradeColors(themeJson['grade_colors_id']);
+
+      if (gradeColorsJson != null) {
+        SharedTheme theme = SharedTheme.fromJson(themeJson, gradeColorsJson);
+        return theme;
+      }
+    }
+
+    return null;
+  }
+
+  // grade colors
+  Future<SharedGradeColors> shareCurrentGradeColors(
+    BuildContext context, {
+    bool isPublic = false,
+    bool shareNick = true,
+  }) async {
+    final SettingsProvider settings =
+        Provider.of<SettingsProvider>(context, listen: false);
+
+    Map gradeColorsJson = {
+      'public_id': const Uuid().v4(),
+      'is_public': isPublic,
+      'nickname': shareNick ? _user.nickname : 'Anonymous',
+      'five_color': settings.gradeColors[4].value,
+      'four_color': settings.gradeColors[3].value,
+      'three_color': settings.gradeColors[2].value,
+      'two_color': settings.gradeColors[1].value,
+      'one_color': settings.gradeColors[0].value,
+    };
+
+    SharedGradeColors gradeColors = SharedGradeColors.fromJson(gradeColorsJson);
+    FilcAPI.addSharedGradeColors(gradeColors);
+
+    return gradeColors;
+  }
+
+  Future<SharedGradeColors?> getGradeColorsById(BuildContext context,
+      {required String id}) async {
+    Map? gradeColorsJson = await FilcAPI.getSharedGradeColors(id);
+
+    if (gradeColorsJson != null) {
+      SharedGradeColors gradeColors =
+          SharedGradeColors.fromJson(gradeColorsJson);
+      return gradeColors;
     }
 
     return null;
diff --git a/filcnaplo_premium/lib/ui/mobile/settings/theme.dart b/filcnaplo_premium/lib/ui/mobile/settings/theme.dart
index bcd0468..cbe4d40 100644
--- a/filcnaplo_premium/lib/ui/mobile/settings/theme.dart
+++ b/filcnaplo_premium/lib/ui/mobile/settings/theme.dart
@@ -283,8 +283,16 @@ class _PremiumCustomAccentColorSettingState
                                     label: "understand".i18n,
                                     onTap: () async {
                                       Navigator.of(context).pop();
-                                      SharedTheme theme = await shareProvider
-                                          .shareCurrentTheme(context);
+
+                                      SharedGradeColors gradeColors =
+                                          await shareProvider
+                                              .shareCurrentGradeColors(context);
+                                      SharedTheme theme =
+                                          await shareProvider.shareCurrentTheme(
+                                        context,
+                                        gradeColors: gradeColors,
+                                      );
+
                                       Share.share(
                                         theme.id,
                                         subject: 'share_subj_theme'.i18n,
@@ -804,6 +812,18 @@ class _PremiumCustomAccentColorSettingState
                                             setTheme(settings.theme, true);
                                           },
                                           onThemeIdProvided: (theme) {
+                                            // changing grade colors
+                                            List<Color> colors = [
+                                              theme.gradeColors.oneColor,
+                                              theme.gradeColors.twoColor,
+                                              theme.gradeColors.threeColor,
+                                              theme.gradeColors.fourColor,
+                                              theme.gradeColors.fiveColor,
+                                            ];
+                                            settings.update(
+                                                gradeColors: colors);
+
+                                            // changing theme
                                             setState(() {
                                               updateCustomColor(
                                                 null,

From 17b8b967673932bf8b2769415725fac900952f5a Mon Sep 17 00:00:00 2001
From: Kima <kimavideos97@gmail.com>
Date: Wed, 27 Sep 2023 21:38:48 +0200
Subject: [PATCH 2/5] commented shit in desktop code

---
 .../lib/screens/login/login_screen.dart       | 29 ++++++++++---------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/filcnaplo_desktop_ui/lib/screens/login/login_screen.dart b/filcnaplo_desktop_ui/lib/screens/login/login_screen.dart
index 650dc92..346fd63 100644
--- a/filcnaplo_desktop_ui/lib/screens/login/login_screen.dart
+++ b/filcnaplo_desktop_ui/lib/screens/login/login_screen.dart
@@ -7,7 +7,7 @@ import 'package:filcnaplo/api/client.dart';
 import 'package:filcnaplo/api/login.dart';
 import 'package:filcnaplo_mobile_ui/screens/login/login_button.dart';
 import 'package:filcnaplo_mobile_ui/screens/login/login_input.dart';
-import 'package:filcnaplo_desktop_ui/screens/login/school_input/school_input.dart';
+// import 'package:filcnaplo_desktop_ui/screens/login/school_input/school_input.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:flutter_acrylic/flutter_acrylic.dart';
@@ -36,8 +36,8 @@ class LoginScreen extends StatefulWidget {
 class _LoginScreenState extends State<LoginScreen> {
   final usernameController = TextEditingController();
   final passwordController = TextEditingController();
-  final schoolController = SchoolInputController();
-  final _scrollController = ScrollController();
+  // final schoolController = SchoolInputController();
+  // final _scrollController = ScrollController();
 
   LoginState _loginState = LoginState.normal;
   bool showBack = false;
@@ -57,9 +57,9 @@ class _LoginScreenState extends State<LoginScreen> {
 
     FilcAPI.getSchools().then((schools) {
       if (schools != null) {
-        schoolController.update(() {
-          schoolController.schools = schools;
-        });
+        // schoolController.update(() {
+        //   schoolController.schools = schools;
+        // });
       } else {
         ElegantNotification.error(
           background: Colors.white,
@@ -238,10 +238,10 @@ class _LoginScreenState extends State<LoginScreen> {
                                     ),
                                   ),
                                 ),
-                                SchoolInput(
-                                  scroll: _scrollController,
-                                  controller: schoolController,
-                                ),
+                                // SchoolInput(
+                                //   scroll: _scrollController,
+                                //   controller: schoolController,
+                                // ),
                               ],
                             ),
                           ),
@@ -320,8 +320,10 @@ class _LoginScreenState extends State<LoginScreen> {
     String password = passwordController.text;
 
     if (username == "" ||
-        password == "" ||
-        schoolController.selectedSchool == null) {
+            password ==
+                "" /*||
+        schoolController.selectedSchool == null*/
+        ) {
       return setState(() => _loginState = LoginState.missingFields);
     }
 
@@ -330,7 +332,8 @@ class _LoginScreenState extends State<LoginScreen> {
     loginAPI(
         username: username,
         password: password,
-        instituteCode: schoolController.selectedSchool!.instituteCode,
+        instituteCode: 'shit',
+        // instituteCode: schoolController.selectedSchool!.instituteCode,
         context: context,
         onLogin: (user) {
           ElegantNotification.success(

From 14ce4c82fb4277bbf41e1d1f7546a1db848dd9b4 Mon Sep 17 00:00:00 2001
From: Kima <kimavideos97@gmail.com>
Date: Wed, 27 Sep 2023 21:56:19 +0200
Subject: [PATCH 3/5] fixed test account crash

---
 filcnaplo/lib/models/user.dart | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/filcnaplo/lib/models/user.dart b/filcnaplo/lib/models/user.dart
index 9de5718..784c450 100644
--- a/filcnaplo/lib/models/user.dart
+++ b/filcnaplo/lib/models/user.dart
@@ -1,5 +1,6 @@
 import 'dart:convert';
 import 'package:filcnaplo_kreta_api/client/api.dart';
+import 'package:filcnaplo_kreta_api/models/school.dart';
 import 'package:filcnaplo_kreta_api/models/student.dart';
 import 'package:uuid/uuid.dart';
 
@@ -43,7 +44,16 @@ class User {
       username: map["username"],
       password: map["password"],
       name: map["name"].trim(),
-      student: Student.fromJson(jsonDecode(map["student"])),
+      student: map["student"] != 'null'
+          ? Student.fromJson(jsonDecode(map["student"]))
+          : Student(
+              id: const Uuid().v4(),
+              name: 'Ismeretlen Diák',
+              school: School(instituteCode: '', name: '', city: ''),
+              birth: DateTime.now(),
+              yearId: '1',
+              parents: [],
+            ),
       role: Role.values[map["role"] ?? 0],
       nickname: map["nickname"] ?? "",
       picture: map["picture"] ?? "",

From 64fb22de745150bc774a625256d250173da58f40 Mon Sep 17 00:00:00 2001
From: Kima <kimavideos97@gmail.com>
Date: Wed, 27 Sep 2023 23:02:28 +0200
Subject: [PATCH 4/5] grade colors sharing works fine ahh

---
 filcnaplo/lib/api/client.dart                       | 7 +++++--
 filcnaplo/lib/models/shared_theme.dart              | 7 ++-----
 filcnaplo/lib/ui/filter/widgets.dart                | 1 +
 filcnaplo_premium/lib/providers/share_provider.dart | 5 +++--
 4 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/filcnaplo/lib/api/client.dart b/filcnaplo/lib/api/client.dart
index 36ef6e9..9921580 100644
--- a/filcnaplo/lib/api/client.dart
+++ b/filcnaplo/lib/api/client.dart
@@ -40,8 +40,8 @@ class FilcAPI {
   static const allThemes = "$themeGet/all";
   static const themeByID = "$themeGet/";
 
-  static const gradeColorsShare = "$baseUrl/v2/shared/theme/add";
-  static const gradeColorsGet = "$baseUrl/v2/shared/theme/get";
+  static const gradeColorsShare = "$baseUrl/v2/shared/grade-colors/add";
+  static const gradeColorsGet = "$baseUrl/v2/shared/grade-colors/get";
   static const allGradeColors = "$gradeColorsGet/all";
   static const gradeColorsByID = "$gradeColorsGet/";
 
@@ -214,6 +214,9 @@ class FilcAPI {
       theme.json['panels_color'] = theme.panelsColor.value.toString();
       theme.json['accent_color'] = theme.accentColor.value.toString();
 
+      // set linked grade colors
+      theme.json['grade_colors_id'] = theme.gradeColors.id;
+
       http.Response res = await http.post(
         Uri.parse(themeShare),
         body: theme.json,
diff --git a/filcnaplo/lib/models/shared_theme.dart b/filcnaplo/lib/models/shared_theme.dart
index 0784fcc..e983729 100644
--- a/filcnaplo/lib/models/shared_theme.dart
+++ b/filcnaplo/lib/models/shared_theme.dart
@@ -21,7 +21,7 @@ class SharedTheme {
     required this.gradeColors,
   });
 
-  factory SharedTheme.fromJson(Map json, Map gradeColorsJson) {
+  factory SharedTheme.fromJson(Map json, SharedGradeColors gradeColors) {
     return SharedTheme(
       json: json,
       id: json['public_id'],
@@ -30,7 +30,7 @@ class SharedTheme {
       backgroundColor: Color(json['background_color']),
       panelsColor: Color(json['panels_color']),
       accentColor: Color(json['accent_color']),
-      gradeColors: SharedGradeColors.fromJson(gradeColorsJson),
+      gradeColors: gradeColors,
     );
   }
 }
@@ -45,7 +45,6 @@ class SharedGradeColors {
   Color threeColor;
   Color twoColor;
   Color oneColor;
-  String linkedThemeId;
 
   SharedGradeColors({
     required this.json,
@@ -57,7 +56,6 @@ class SharedGradeColors {
     required this.threeColor,
     required this.twoColor,
     required this.oneColor,
-    required this.linkedThemeId,
   });
 
   factory SharedGradeColors.fromJson(Map json) {
@@ -71,7 +69,6 @@ class SharedGradeColors {
       threeColor: Color(json['three_color']),
       twoColor: Color(json['two_color']),
       oneColor: Color(json['one_color']),
-      linkedThemeId: json['linked_theme_id'],
     );
   }
 }
diff --git a/filcnaplo/lib/ui/filter/widgets.dart b/filcnaplo/lib/ui/filter/widgets.dart
index ec354a4..4986c34 100644
--- a/filcnaplo/lib/ui/filter/widgets.dart
+++ b/filcnaplo/lib/ui/filter/widgets.dart
@@ -101,6 +101,7 @@ Future<List<DateWidget>> getFilterWidgets(FilterType activeData,
           gradeProvider.grades, gradeProvider.lastSeenDate);
       if (settingsProvider.gradeOpeningFun) {
         items.addAll(
+            // ignore: use_build_context_synchronously
             await getFilterWidgets(FilterType.newGrades, context: context));
       }
       break;
diff --git a/filcnaplo_premium/lib/providers/share_provider.dart b/filcnaplo_premium/lib/providers/share_provider.dart
index 1fbf2c2..54a52bf 100644
--- a/filcnaplo_premium/lib/providers/share_provider.dart
+++ b/filcnaplo_premium/lib/providers/share_provider.dart
@@ -42,7 +42,7 @@ class ShareProvider extends ChangeNotifier {
           const Color(0xFF3D7BF4).value,
     };
 
-    SharedTheme theme = SharedTheme.fromJson(themeJson, gradeColors.json);
+    SharedTheme theme = SharedTheme.fromJson(themeJson, gradeColors);
     FilcAPI.addSharedTheme(theme);
 
     return theme;
@@ -57,7 +57,8 @@ class ShareProvider extends ChangeNotifier {
           await FilcAPI.getSharedGradeColors(themeJson['grade_colors_id']);
 
       if (gradeColorsJson != null) {
-        SharedTheme theme = SharedTheme.fromJson(themeJson, gradeColorsJson);
+        SharedTheme theme = SharedTheme.fromJson(
+            themeJson, SharedGradeColors.fromJson(gradeColorsJson));
         return theme;
       }
     }

From 24a6393aca8cb9a01bdcdd03d631dfe25a7a4550 Mon Sep 17 00:00:00 2001
From: Kima <kimavideos97@gmail.com>
Date: Wed, 27 Sep 2023 23:04:21 +0200
Subject: [PATCH 5/5] changed version number

---
 filcnaplo/pubspec.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/filcnaplo/pubspec.yaml b/filcnaplo/pubspec.yaml
index 031486d..d873a73 100644
--- a/filcnaplo/pubspec.yaml
+++ b/filcnaplo/pubspec.yaml
@@ -3,7 +3,7 @@ description: "Nem hivatalos e-napló alkalmazás az e-Kréta rendszerhez"
 homepage: https://refilc.hu
 publish_to: "none"
 
-version: 4.2.5+225
+version: 4.3.0+226
 
 environment:
   sdk: ">=2.17.0 <3.0.0"