From 4d14c42690e99c2d01ab1327e566df3f7debc755 Mon Sep 17 00:00:00 2001 From: Jiawei Xiao Date: Sat, 27 Dec 2025 20:39:32 +0800 Subject: [PATCH] fix #90: strip actionSummary metadata from running course activities Running course activities include an 'actionSummary' JSON block at the end of the raw telemetry data in the 'attribute' field. This non-CSV content causes the HiTrack parser to fail. This commit adds a regex filter to remove this metadata block before saving/parsing the HiTrack data. --- Hitrava.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Hitrava.py b/Hitrava.py index bee72b6..045c6d5 100644 --- a/Hitrava.py +++ b/Hitrava.py @@ -1342,10 +1342,20 @@ def parse(self, from_date: datetime.date = datetime.date(1970, 1, 1)) -> list: def _parse_activity(self, activity_dict: dict) -> Optional[HiActivity]: # Create a HiTrack file from the HiTrack data + # Note: Huawei includes a training metadata block called 'actionSummary' at + # the end of the raw data between 'HW_EXT_TRACK_DETAIL@is' and + # '&&HW_EXT_TRACK_SIMPLIFY@is' within the JSON 'attribute' field. + ''' + tp=rp;k=5430;gct=272;gia=-1;sa=-1;ee=-101;fsp=-1;wsp=-1;hsp=-1;aht=-1;htr=-1;ap=-1;vo=8.7;gtb=49.5;vr=-1; + + actionSummary=[{"actionTargetType":1,"actionName":"跑步","actionId":"RD002","finishedAct":300,"finishRate":100,"targetValue":300,"actType":"run_time","theoryAct":300},{"actionTargetType":1,"actionName":"跑步","actionId":"RD002","finishedAct":300,"finishRate":100,"targetValue":300,"actType":"run_time","theoryAct":300}] + + ''' hitrack_data = activity_dict['attribute'] # Strip prefix and suffix from raw HiTrack data hitrack_data = re.sub('HW_EXT_TRACK_DETAIL@is', '', hitrack_data) hitrack_data = re.sub('&&HW_EXT_TRACK_SIMPLIFY@is(.*)', '', hitrack_data, flags=re.DOTALL) + hitrack_data = re.sub(r'\n+actionSummary=.*', '', hitrack_data, flags=re.DOTALL) # Get additional activity detail data activity_detail_data = activity_dict['attribute']