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