import now behaving
This commit is contained in:
@@ -1572,6 +1572,13 @@ def new_workout_from_file(r, f2,
|
||||
# Get workout type from fit & tcx
|
||||
if (fileformat == 'fit'): # pragma: no cover
|
||||
workouttype = get_workouttype_from_fit(f2, workouttype=workouttype)
|
||||
new_title = get_title_from_fit(f2)
|
||||
if new_title:
|
||||
title = new_title
|
||||
new_notes = get_notes_from_fit(f2)
|
||||
if new_notes:
|
||||
notes = new_notes
|
||||
|
||||
# if (fileformat == 'tcx'):
|
||||
# workouttype_from_tcx = get_workouttype_from_tcx(f2,workouttype=workouttype)
|
||||
# if workouttype != 'rower' and workouttype_from_tcx not in mytypes.otwtypes:
|
||||
|
||||
@@ -1350,6 +1350,39 @@ def handle_nonpainsled(f2, fileformat, summary='', startdatetime='', empowerfirm
|
||||
# Create new workout from file and store it in the database
|
||||
# This routine should be used everywhere in views.py
|
||||
|
||||
def get_notes_from_fit(filename):
|
||||
try:
|
||||
fitfile = FitFile(filename, check_crc=False)
|
||||
except FitHeaderError: # pragma: no cover
|
||||
return ''
|
||||
|
||||
records = fitfile.messages
|
||||
notes = ''
|
||||
for record in records:
|
||||
if record.name == 'session':
|
||||
try:
|
||||
notes = ' '.join(record.get_values()['description'].split())
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
return notes
|
||||
|
||||
def get_title_from_fit(filename):
|
||||
try:
|
||||
fitfile = FitFile(filename, check_crc=False)
|
||||
except FitHeaderError: # pragma: no cover
|
||||
return ''
|
||||
|
||||
records = fitfile.messages
|
||||
title = ''
|
||||
for record in records:
|
||||
if record.name == 'workout':
|
||||
try:
|
||||
title = ' '.join(record.get_values()['wkt_name'].split())
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
return title
|
||||
|
||||
def get_workouttype_from_fit(filename, workouttype='water'):
|
||||
try:
|
||||
@@ -1359,17 +1392,27 @@ def get_workouttype_from_fit(filename, workouttype='water'):
|
||||
|
||||
records = fitfile.messages
|
||||
fittype = 'rowing'
|
||||
subsporttype = ''
|
||||
for record in records:
|
||||
if record.name in ['sport', 'lap']:
|
||||
if record.name in ['sport', 'lap','session']:
|
||||
try:
|
||||
fittype = record.get_values()['sport'].lower()
|
||||
try:
|
||||
subsporttype = record.get_values()['sub_sport'].lower()
|
||||
except KeyError:
|
||||
subsporttype = ''
|
||||
except (KeyError, AttributeError): # pragma: no cover
|
||||
return 'water'
|
||||
pass
|
||||
if subsporttype:
|
||||
try:
|
||||
workouttype = mytypes.fitmappinginv[subsporttype]
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
try:
|
||||
workouttype = mytypes.fitmappinginv[fittype]
|
||||
return workouttype
|
||||
except KeyError: # pragma: no cover
|
||||
return workouttype
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
return workouttype
|
||||
|
||||
|
||||
@@ -107,8 +107,20 @@ class IntervalsIntegration(SyncIntegration):
|
||||
|
||||
def get_workout_list(self, *args, **kwargs) -> int:
|
||||
url = self.oauth_data['base_url'] + 'athlete/0/activities?'
|
||||
startdate = timezone.now() - timedelta(days=365)
|
||||
startdate = timezone.now() - timedelta(days=30)
|
||||
enddate = timezone.now() + timedelta(days=1)
|
||||
startdatestring = kwargs.get("startdate","")
|
||||
enddatestring = kwargs.get("enddate","")
|
||||
|
||||
try:
|
||||
startdate = arrow.get(startdatestring).datetime
|
||||
except:
|
||||
pass
|
||||
try:
|
||||
enddate = arrow.get(enddatestring).datetime
|
||||
except:
|
||||
pass
|
||||
|
||||
url += 'oldest=' + startdate.strftime('%Y-%m-%d') + '&newest=' + enddate.strftime('%Y-%m-%d')
|
||||
headers = {
|
||||
'accept': '*/*',
|
||||
@@ -122,7 +134,6 @@ class IntervalsIntegration(SyncIntegration):
|
||||
|
||||
data = response.json()
|
||||
known_interval_ids = get_known_ids(self.rower, 'intervalsid')
|
||||
|
||||
workouts = []
|
||||
|
||||
for item in data:
|
||||
|
||||
@@ -3697,7 +3697,7 @@ class Workout(models.Model):
|
||||
uploadedtogarmin = models.BigIntegerField(default=0)
|
||||
uploadedtorp3 = models.BigIntegerField(default=0)
|
||||
uploadedtonk = models.BigIntegerField(default=0)
|
||||
uploadedtointervals = models.BigIntegerField(default=0)
|
||||
uploadedtointervals = models.CharField(default=None,null=True, max_length=100)
|
||||
forceunit = models.CharField(default='lbs',
|
||||
choices=(
|
||||
('lbs', 'lbs'),
|
||||
@@ -3829,7 +3829,7 @@ class TombStone(models.Model):
|
||||
uploadedtosporttracks = models.BigIntegerField(default=0)
|
||||
uploadedtotp = models.BigIntegerField(default=0)
|
||||
uploadedtonk = models.BigIntegerField(default=0)
|
||||
uploadedtointervals = models.BigIntegerField(default=0)
|
||||
uploadedtointervals = models.CharField(default=None,null=True, max_length=100)
|
||||
|
||||
@receiver(models.signals.pre_delete, sender=Workout)
|
||||
def create_tombstone_on_delete(sender, instance, **kwargs):
|
||||
@@ -3855,7 +3855,7 @@ class SyncRecord(models.Model):
|
||||
c2id = models.BigIntegerField(unique=True,null=True,default=None)
|
||||
tpid = models.BigIntegerField(unique=True,null=True,default=None)
|
||||
rp3id = models.BigIntegerField(unique=True,null=True,default=None)
|
||||
intervalsid = models.BigIntegerField(unique=True, null=True, default=None)
|
||||
intervalsid = models.CharField(unique=True, null=True, default=None, max_length=100)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if self.workout:
|
||||
|
||||
@@ -148,6 +148,7 @@ garminmapping = {key: value for key, value in Reverse(garmincollection)}
|
||||
fitcollection = (
|
||||
('water', 'rowing'),
|
||||
('rower', 'rowing'),
|
||||
('rower', 'indoor_rowing'),
|
||||
('skierg', 'cross_country_skiing'),
|
||||
('bike', 'cycling'),
|
||||
('bikeerg', 'cycling'),
|
||||
|
||||
@@ -3543,7 +3543,7 @@ def handle_intervals_getworkout(rower, intervalstoken, workoutid, debug=False, *
|
||||
'boattype': '1x',
|
||||
'workouttype': workouttype,
|
||||
'file': fit_filename,
|
||||
'intervalsid': intervalsid,
|
||||
'intervalsid': workoutid,
|
||||
'title': title,
|
||||
'rpe': 0,
|
||||
'notes': '',
|
||||
|
||||
@@ -471,7 +471,10 @@ def workout_import_view(request, source='c2'):
|
||||
try:
|
||||
tdict = dict(request.POST.lists())
|
||||
ids = tdict['workoutid']
|
||||
try:
|
||||
nkids = [int(id) for id in ids]
|
||||
except ValueError:
|
||||
nkids = ids
|
||||
for nkid in nkids:
|
||||
try:
|
||||
_ = integration.get_workout(nkid, startdate=startdate, enddate=enddate)
|
||||
|
||||
Reference in New Issue
Block a user