@@ -67,8 +67,8 @@ def __init__(
6767 "/personalrecord-service/personalrecord/prs"
6868 )
6969 self .garmin_connect_earned_badges_url = "/badge-service/badge/earned"
70- self .garmin_connect_adhoc_challenges_url = (
71- "/adhocchallenge -service/adHocChallenge/historical "
70+ self .garmin_connect_available_badges_url = (
71+ "/badge -service/badge/available?showExclusiveBadge=true "
7272 )
7373 self .garmin_connect_adhoc_challenges_url = (
7474 "/adhocchallenge-service/adHocChallenge/historical"
@@ -716,14 +716,56 @@ def get_personal_record(self) -> Dict[str, Any]:
716716
717717 return self .connectapi (url )
718718
719- def get_earned_badges (self ) -> Dict [str , Any ]:
719+ def get_earned_badges (self ) -> List [ Dict [str , Any ] ]:
720720 """Return earned badges for current user."""
721721
722722 url = self .garmin_connect_earned_badges_url
723723 logger .debug ("Requesting earned badges for user" )
724724
725725 return self .connectapi (url )
726726
727+ def get_available_badges (self ) -> List [Dict [str , Any ]]:
728+ """Return available badges for current user."""
729+
730+ url = self .garmin_connect_available_badges_url
731+ logger .debug ("Requesting available badges for user" )
732+
733+ return self .connectapi (url )
734+
735+ def get_in_progress_badges (self ) -> List [Dict [str , Any ]]:
736+ """Return in progress badges for current user."""
737+
738+ logger .debug ("Requesting in progress badges for user" )
739+
740+ earned_badges = self .get_earned_badges ()
741+ available_badges = self .get_available_badges ()
742+
743+ # Filter out badges that are not in progress
744+ def badge_in_progress (badge ):
745+ """Return True if the badge is in progress."""
746+ if "badgeProgressValue" not in badge :
747+ return False
748+ if badge ["badgeProgressValue" ] is None :
749+ return False
750+ if badge ["badgeProgressValue" ] == 0 :
751+ return False
752+ if badge ["badgeProgressValue" ] == badge ["badgeTargetValue" ]:
753+ if (
754+ "badgeLimitCount" not in badge
755+ or badge ["badgeLimitCount" ] is None
756+ ):
757+ return False
758+ return badge ["badgeEarnedNumber" ] < badge ["badgeLimitCount" ]
759+ return True
760+
761+ earned_in_progress_badges = list (
762+ filter (badge_in_progress , earned_badges )
763+ )
764+ available_in_progress_badges = list (
765+ filter (badge_in_progress , available_badges )
766+ )
767+ return earned_in_progress_badges + available_in_progress_badges
768+
727769 def get_adhoc_challenges (self , start , limit ) -> Dict [str , Any ]:
728770 """Return adhoc challenges for current user."""
729771
0 commit comments