diff --git a/gpx2html/__init__.py b/gpx2html/__init__.py index 0ac831e..b7c6e68 100755 --- a/gpx2html/__init__.py +++ b/gpx2html/__init__.py @@ -86,6 +86,25 @@ def generate_date_list(start_date, end_date): r = (end_date + datetime.timedelta(days=1) - start_date).days return[start_date + datetime.timedelta(days=i) for i in range(r)] +def get_distance_by_date(tracks, date): + '''Return accumulated distances [km] by date. + + Args: + tracks (list(Track)): List of tracks to be evaluated. + date (datetine.datetime): Date to be evaluated. + + Return (float): Accumulated distance [km] for date. + ''' + distance = 0 + for track in tracks: + if track.start_time.year == date.year and \ + track.start_time.month == date.month and \ + track.start_time.day == date.day: + distance += track.distance + if distance > 0: + distance /= 1000 + return distance + class Gpx2Html(object): def __init__(self, infolder, outfolder, logger): @@ -132,20 +151,13 @@ class Gpx2Html(object): end_date = now tracks = self.tracks.tracks(start_date, end_date) for date in generate_date_list(start_date, end_date): - for track in tracks: - if track.start_time.month == date.month and track.start_time.day == date.day: - if len(acc_year_dist) < date.timetuple().tm_yday: - acc_year_dist.append(track.distance / 1000) - else: - acc_year_dist.append(track.distance / 1000 + acc_year_dist[-1]) - elif len(acc_year_dist) < date.timetuple().tm_yday: - if len(acc_year_dist) > 0: - acc_year_dist.append(acc_year_dist[-1]) - else: - acc_year_dist.append(0) - if len(acc_year_dist) == 365: - acc_year_dist.append(acc_year_dist[-1]) + date_distance = get_distance_by_date(tracks, date) + try: + acc_year_dist.append(date_distance + acc_year_dist[-1]) + except IndexError: + acc_year_dist.append(date_distance) accumulated_distance[year] = acc_year_dist + plot_line_chart(accumulated_distance, MONTH_LABELS, "Accumulated Distance", 'Month', 'km', os.path.join(self.outfolder, 'acc_dist.png'))