@@ -415,6 +415,13 @@ def __init__(self):
415415 "4" : {"desc" : "Execute GraphQL query" , "key" : "query_garmin_graphql" },
416416 },
417417 },
418+ "b" : {
419+ "name" : "📅 Training Plans" ,
420+ "options" : {
421+ "1" : {"desc" : "Get training plans" , "key" : "get_training_plans" },
422+ "2" : {"desc" : "Get training plan by ID" , "key" : "get_training_plan_by_id" },
423+ },
424+ },
418425}
419426
420427current_category = None
@@ -1763,6 +1770,35 @@ def get_activity_exercise_sets_data(api: Garmin) -> None:
17631770 print ("ℹ️ No activity exercise sets available" )
17641771
17651772
1773+ def get_training_plan_by_id_data (api : Garmin ) -> None :
1774+ """Get training plan by ID. adaptive plans are not supported. use get_adaptive_training_plan_by_id instead"""
1775+ try :
1776+ training_plans = api .get_training_plans ()["trainingPlanList" ]
1777+ if training_plans :
1778+ plan_id = training_plans [- 1 ]["trainingPlanId" ]
1779+ plan_name = training_plans [- 1 ]["name" ]
1780+ plan_category = training_plans [- 1 ]["trainingPlanCategory" ]
1781+
1782+ if plan_category == "FBT_ADAPTIVE" :
1783+ call_and_display (
1784+ api .get_adaptive_training_plan_by_id ,
1785+ plan_id ,
1786+ method_name = "get_adaptive_training_plan_by_id" ,
1787+ api_call_desc = f"api.get_adaptive_training_plan_by_id({ plan_id } ) - { plan_name } " ,
1788+ )
1789+ else :
1790+ call_and_display (
1791+ api .get_training_plan_by_id ,
1792+ plan_id ,
1793+ method_name = "get_training_plan_by_id" ,
1794+ api_call_desc = f"api.get_training_plan_by_id({ plan_id } ) - { plan_name } " ,
1795+ )
1796+ else :
1797+ print ("ℹ️ No training plans found" )
1798+ except Exception as e :
1799+ print (f"❌ Error getting plan by ID: { e } " )
1800+
1801+
17661802def get_workout_by_id_data (api : Garmin ) -> None :
17671803 """Get workout by ID for the last workout."""
17681804 try :
@@ -3123,6 +3159,12 @@ def execute_api_call(api: Garmin, key: str) -> None:
31233159 method_name = "get_workouts" ,
31243160 api_call_desc = "api.get_workouts()" ,
31253161 ),
3162+ "get_training_plan_by_id" : lambda : get_training_plan_by_id_data (api ),
3163+ "get_training_plans" : lambda : call_and_display (
3164+ api .get_training_plans ,
3165+ method_name = "get_training_plans" ,
3166+ api_call_desc = "api.get_training_plans()" ,
3167+ ),
31263168 "upload_activity" : lambda : upload_activity_file (api ),
31273169 "download_activities" : lambda : download_activities_by_date (api ),
31283170 "get_activity_splits" : lambda : get_activity_splits_data (api ),
0 commit comments