Skip to content

Commit a2d7536

Browse files
authored
Fixes around non standard format of grade symbols (#63)
* Fix grade symbol to color converter for non standard grade formats * Fix new grade notification for non standard grade formats
1 parent 4a131a9 commit a2d7536

3 files changed

Lines changed: 26 additions & 5 deletions

File tree

StudentUsos/Converters/GradeSymbolToColorConverter.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Globalization;
1+
using StudentUsos.Features.Grades.Helpers;
2+
using System.Globalization;
23

34
namespace StudentUsos.Converters;
45

@@ -14,6 +15,7 @@ public object Convert(object? value, Type targetType, object? parameter, Culture
1415
{
1516
if (value == null) return Colors.Transparent;
1617
string grade = value.ToString()!;
18+
grade = GradesHelper.GetGradeFromNonStandardGradeString(grade);
1719
if (grade.Length == 0) return Colors.Transparent;
1820
if (grade[0] == '5' || grade == "ZAL") return GradeColor1;
1921
if (grade[0] == '4') return GradeColor2;

StudentUsos/Features/Grades/Helpers/GradesHelper.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,15 +79,31 @@ public static List<FinalGrade> UngroupGrades(IEnumerable<FinalGradeGroup> finalG
7979

8080
/// <summary>
8181
/// Some univeristies have weird formats for grade symbols e.g. instead of doing only "4.5"
82-
/// they will add something more e.g. "4.5 (bd)" which won't work with normal float.TryParse.
82+
/// they will add something more e.g. "4.5 (bd)", this returns only the "4.5" part.
8383
/// </summary>
8484
/// <param name="gradeString">Non standard grade string</param>
8585
/// <returns></returns>
86-
static bool TryParseGradeFromNonStandardGradeString(string gradeString, out float parsed)
86+
public static string GetGradeFromNonStandardGradeString(string gradeString)
8787
{
8888
gradeString = gradeString.Replace(',', '.');
8989
var match = Regex.Match(gradeString, @"[-+]?\d*\.?\d+");
90-
if (match.Success && float.TryParse(match.Value, NumberStyles.Float, CultureInfo.InvariantCulture, out float parseResult))
90+
if (match.Success)
91+
{
92+
return match.Value;
93+
}
94+
return string.Empty;
95+
}
96+
97+
/// <summary>
98+
/// Some univeristies have weird formats for grade symbols e.g. instead of doing only "4.5"
99+
/// they will add something more e.g. "4.5 (bd)" which won't work with normal float.TryParse.
100+
/// </summary>
101+
/// <param name="gradeString">Non standard grade string</param>
102+
/// <returns></returns>
103+
public static bool TryParseGradeFromNonStandardGradeString(string gradeString, out float parsed)
104+
{
105+
string extracted = GetGradeFromNonStandardGradeString(gradeString);
106+
if (float.TryParse(extracted, NumberStyles.Float, CultureInfo.InvariantCulture, out float parseResult))
91107
{
92108
parsed = parseResult;
93109
return true;

StudentUsos/Platforms/Android/CustomNotificationBuilder.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Plugin.FirebasePushNotifications;
33
using Plugin.FirebasePushNotifications.Platforms;
44
using StudentUsos.Features.Authorization.Services;
5+
using StudentUsos.Features.Grades.Helpers;
56
using StudentUsos.Resources.LocalizedStrings;
67
using StudentUsos.Services.ServerConnection;
78
using System.Globalization;
@@ -114,7 +115,9 @@ async Task HandleNewGradeNotificationAsync(IDictionary<string, object> data)
114115
}
115116
}
116117
data["title"] = LocalizedStrings.PushNotifications_UsosNewGrade_InterpretedTitle;
117-
data["large_icon"] = $"notification_new_grade_{deserialized.ValueSymbol.Replace(".", "").ToLowerInvariant()}";
118+
119+
string gradeNormalized = GradesHelper.GetGradeFromNonStandardGradeString(deserialized.ValueSymbol);
120+
data["large_icon"] = $"notification_new_grade_{gradeNormalized.Replace(".", "").ToLowerInvariant()}";
118121
}
119122
catch (Exception ex) { data["body"] += ex.Message; }
120123
}

0 commit comments

Comments
 (0)