Skip to content

Commit

Permalink
feat: filedef add new messages in Activity File (#419)
Browse files Browse the repository at this point in the history
  • Loading branch information
muktihari committed Sep 12, 2024
1 parent 3e5a59e commit 2a825d2
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 29 deletions.
57 changes: 41 additions & 16 deletions profile/filedef/activity.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,20 @@ type Activity struct {
Records []*mesgdef.Record // required fields: timestamp

// Optional Messages
UserProfile *mesgdef.UserProfile
DeviceInfos []*mesgdef.DeviceInfo // required fields: timestamp
Events []*mesgdef.Event
Lengths []*mesgdef.Length // required fields: timestamp, event, event_type
SegmentLaps []*mesgdef.SegmentLap
ZonesTargets []*mesgdef.ZonesTarget
Workouts []*mesgdef.Workout
WorkoutSteps []*mesgdef.WorkoutStep
HRs []*mesgdef.Hr
HRVs []*mesgdef.Hrv // required fields: time
UserProfile *mesgdef.UserProfile
DeviceInfos []*mesgdef.DeviceInfo // required fields: timestamp
Events []*mesgdef.Event
Lengths []*mesgdef.Length // required fields: timestamp, event, event_type
SegmentLaps []*mesgdef.SegmentLap
ZonesTargets []*mesgdef.ZonesTarget
Workouts []*mesgdef.Workout
WorkoutSteps []*mesgdef.WorkoutStep
HRs []*mesgdef.Hr
HRVs []*mesgdef.Hrv // required fields: time
GpsMetadatas []*mesgdef.GpsMetadata
TimeInZones []*mesgdef.TimeInZone
Splits []*mesgdef.Split
SplitSummaries []*mesgdef.SplitSummary // entries must be unique within each split_type

// Messages not related to Activity
UnrelatedMessages []proto.Message
Expand Down Expand Up @@ -73,10 +77,10 @@ func (f *Activity) Add(mesg proto.Message) {
f.Laps = append(f.Laps, mesgdef.NewLap(&mesg))
case mesgnum.Record:
f.Records = append(f.Records, mesgdef.NewRecord(&mesg))
case mesgnum.DeviceInfo:
f.DeviceInfos = append(f.DeviceInfos, mesgdef.NewDeviceInfo(&mesg))
case mesgnum.UserProfile:
f.UserProfile = mesgdef.NewUserProfile(&mesg)
case mesgnum.DeviceInfo:
f.DeviceInfos = append(f.DeviceInfos, mesgdef.NewDeviceInfo(&mesg))
case mesgnum.Event:
f.Events = append(f.Events, mesgdef.NewEvent(&mesg))
case mesgnum.Length:
Expand All @@ -93,6 +97,14 @@ func (f *Activity) Add(mesg proto.Message) {
f.HRs = append(f.HRs, mesgdef.NewHr(&mesg))
case mesgnum.Hrv:
f.HRVs = append(f.HRVs, mesgdef.NewHrv(&mesg))
case mesgnum.GpsMetadata:
f.GpsMetadatas = append(f.GpsMetadatas, mesgdef.NewGpsMetadata(&mesg))
case mesgnum.TimeInZone:
f.TimeInZones = append(f.TimeInZones, mesgdef.NewTimeInZone(&mesg))
case mesgnum.Split:
f.Splits = append(f.Splits, mesgdef.NewSplit(&mesg))
case mesgnum.SplitSummary:
f.SplitSummaries = append(f.SplitSummaries, mesgdef.NewSplitSummary(&mesg))
default:
mesg.Fields = append(mesg.Fields[:0:0], mesg.Fields...)
f.UnrelatedMessages = append(f.UnrelatedMessages, mesg)
Expand All @@ -103,10 +115,11 @@ func (f *Activity) Add(mesg proto.Message) {
func (f *Activity) ToFIT(options *mesgdef.Options) proto.FIT {
var size = 3 // non slice fields

size += len(f.Sessions) + len(f.Laps) + len(f.Records) + len(f.DeviceInfos) +
len(f.Events) + len(f.Lengths) + len(f.SegmentLaps) + len(f.ZonesTargets) +
len(f.Workouts) + len(f.WorkoutSteps) + len(f.HRs) + len(f.HRVs) +
len(f.DeveloperDataIds) + len(f.FieldDescriptions) + len(f.UnrelatedMessages)
size += len(f.DeveloperDataIds) + len(f.FieldDescriptions) + len(f.Sessions) +
len(f.Laps) + len(f.Records) + len(f.DeviceInfos) + len(f.Events) +
len(f.Lengths) + len(f.SegmentLaps) + len(f.ZonesTargets) + len(f.Workouts) +
len(f.WorkoutSteps) + len(f.HRs) + len(f.HRVs) + len(f.GpsMetadatas) +
len(f.TimeInZones) + len(f.Splits) + len(f.SplitSummaries) + len(f.UnrelatedMessages)

fit := proto.FIT{
Messages: make([]proto.Message, 0, size),
Expand Down Expand Up @@ -164,6 +177,18 @@ func (f *Activity) ToFIT(options *mesgdef.Options) proto.FIT {
for i := range f.HRVs {
fit.Messages = append(fit.Messages, f.HRVs[i].ToMesg(options))
}
for i := range f.GpsMetadatas {
fit.Messages = append(fit.Messages, f.GpsMetadatas[i].ToMesg(options))
}
for i := range f.TimeInZones {
fit.Messages = append(fit.Messages, f.TimeInZones[i].ToMesg(options))
}
for i := range f.Splits {
fit.Messages = append(fit.Messages, f.Splits[i].ToMesg(options))
}
for i := range f.SplitSummaries {
fit.Messages = append(fit.Messages, f.SplitSummaries[i].ToMesg(options))
}

fit.Messages = append(fit.Messages, f.UnrelatedMessages...)

Expand Down
42 changes: 29 additions & 13 deletions profile/filedef/activity_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,18 @@ func newActivityMessagesWithExpectedOrder(now time.Time) (mesgs []proto.Message,
23: {Num: mesgnum.Set, Fields: []proto.Field{
factory.CreateField(mesgnum.Set, fieldnum.SetTimestamp).WithValue(datetime.ToUint32(incrementSecond(&now))),
}},
24: {Num: mesgnum.GpsMetadata, Fields: []proto.Field{
factory.CreateField(mesgnum.GpsMetadata, fieldnum.GpsMetadataTimestamp).WithValue(datetime.ToUint32(incrementSecond(&now))),
}},
25: {Num: mesgnum.TimeInZone, Fields: []proto.Field{
factory.CreateField(mesgnum.TimeInZone, fieldnum.TimeInZoneTimestamp).WithValue(datetime.ToUint32(incrementSecond(&now))),
}},
26: {Num: mesgnum.Split, Fields: []proto.Field{
factory.CreateField(mesgnum.Split, fieldnum.SplitTotalDistance).WithValue(uint32(10000)),
}},
27: {Num: mesgnum.SplitSummary, Fields: []proto.Field{
factory.CreateField(mesgnum.SplitSummary, fieldnum.SplitSummarySplitType).WithValue(typedef.SplitTypeAscentSplit.Byte()),
}},
}

ordered = []proto.Message{
Expand All @@ -161,19 +173,23 @@ func newActivityMessagesWithExpectedOrder(now time.Time) (mesgs []proto.Message,
8: mesgs[17],
9: mesgs[18],
10: mesgs[20],
11: mesgs[5],
12: mesgs[6],
13: mesgs[7],
14: mesgs[8],
15: mesgs[9],
16: mesgs[10],
17: mesgs[11],
18: mesgs[12],
19: mesgs[13],
20: mesgs[19],
21: mesgs[21],
22: mesgs[22],
23: mesgs[23],
11: mesgs[26],
12: mesgs[27],
13: mesgs[5],
14: mesgs[6],
15: mesgs[7],
16: mesgs[8],
17: mesgs[9],
18: mesgs[10],
19: mesgs[11],
20: mesgs[12],
21: mesgs[13],
22: mesgs[19],
23: mesgs[21],
24: mesgs[22],
25: mesgs[23],
26: mesgs[24],
27: mesgs[25],
}
return
}
Expand Down

0 comments on commit 2a825d2

Please sign in to comment.