Compare commits

...

1758 Commits

Author SHA1 Message Date
Alejandro Martinez
a4e5157d40 Revert "Add ANT+ product info (#3307)" (#3309)
This reverts commit d7fce1565c.
2020-01-24 18:09:56 -03:00
thebaron06
d7fce1565c Add ANT+ product info (#3307)
Add the identification of Garmins HRM-Tri and their Powermeter Vector 3.
2020-01-24 18:03:55 -03:00
Mark Liversedge
525fcb0a66 3.5 BUILD INCREMENT
.. re-issue of 3.5 binaries with Strava API guideline compliance, as
   part of the 'rate limit' requirements.
2020-01-17 20:16:54 +00:00
Mark Liversedge
dc3ce7e365 Connect with Strava
.. the authorise button on the add cloud wizard now
   shows a 'Connect with Strava' icon

.. all other services continue to have a button that
   is labelled 'Authorise'

.. this is needed to comply with the Strava API application
   guidelines.
2020-01-17 17:42:40 +00:00
Mark Liversedge
3133cdab3b Compatible with Strava
.. logo added to the about box, only tested on hi-dpi display
   (may need scaling applied for lower resolution displays).
2020-01-17 17:42:23 +00:00
Mark Liversedge
cc91520e76 View on Strava
.. when data is downloaded from strava we now set the metadata
   tag "StravaID" to the id of the activity on Strava.

.. On RideSummary a link is added at the bottom to view the activity
   on Strava if the "StravaID" is set.

.. if the user clicks on the link the summary is replaced with the
   strava page for the ride:
      e.g. https://www.strava.com/activities/962515512

.. this is part of a couple of updates to comply with the Strava
   guidelines for consumption of the Strava v3 API, see:
      https://developers.strava.com/guidelines/
2020-01-17 17:42:12 +00:00
Mark Liversedge
372dd5c144 SEGV on Overview Chart
.. when no rides available on new user.

Fixes #3295
2020-01-13 20:24:44 +00:00
Mark Liversedge
435e8e9bd5 VERSION 3.5 RELEASE
.. version and build number.
2020-01-10 16:51:47 +00:00
Mark Liversedge
9df093cff6 Overview to defaul layout 2020-01-10 16:38:42 +00:00
Ale Martinez
a35e09fd0a Withings download - disable debug
In preparation for v3.5 release
2020-01-09 20:31:43 -03:00
Ale Martinez
cd9f130b4b Add Body Measures Download screen capture for the wiki
[skip ci]
2020-01-09 20:30:58 -03:00
Alejandro Martinez
a5b9409789 Merge pull request #2837 from peterbrant14/Fix_RLV_Sync
Improve RLV Syncronization
2020-01-08 16:10:02 -03:00
peterbrant14
7cce47526f Allow for RLV files with no final speed indicator
Some older (Tacx) RLVs do not have a sync point at the end of the course.
This work-around calculates the total distance of the course and sets a final sync point
if one does not already exist.
2020-01-07 17:48:57 +00:00
peterbrant14
49bc592a56 Improve RLV video syncronization.
Revised code in VideoSyncFile::parseTacx to build syncpoint list with correct distances
	when speed varies between two points

	Revised code in VideoWindow::telemetryUpdate to interpolate position between 2 sync points.
	Also do not update video if paused or not running.

	Revised code in VideoWindow::startPlayback to set a minimal rate to start if video is
	controlled by syncfile.	This avoids the initial "rush" that otherwise happened and
	makes for a smoother start.
	Also reset distance to 0 on start.

	As the rlv length now more accurately matches the workout length, we also need a check in
	TrainSidebar::guiUpdate that will terminate the workout if the end of the video is reached.
2020-01-07 17:48:57 +00:00
peterbrant14
3f177cae9e Fix truncation of Workouts with respect to pgmf file and corresponding rlv
Add a final point to the ErgFilePoint list to terminate the last section of the ride
2020-01-07 17:48:56 +00:00
peterbrant14
721cd2646b Fix error in RLV distance calculation when using ffwd or rwd
In guiUpdate, don't add manualOffset from VideoSyncFile.cpp when updating displayWorkoutDistance
as its already been included in the km value.
2020-01-07 17:48:56 +00:00
Ale Martinez
24fad147d0 Workout Wizard - Save distance in km since header indicates METRIC
Conversion is required when imperial units are used
Also fixed cumulative distance in Gradient case
Fixes #3288
2020-01-07 13:46:12 -03:00
Joern
db2de2be1f Merge pull request #3287 from Joern-R/tp
Today'sPlan Integration
2020-01-06 14:44:29 +01:00
Ale Martinez
744f6c79d4 Fix LTMPlot behaviour when there is only one group in date range
Fixes #3281
2020-01-06 10:14:12 -03:00
Joern
3728615c09 Today'sPlan Integration
... also synchronize Swim and Run activities
2020-01-06 13:45:44 +01:00
Ale Martinez
9e16d1dbf0 Map newlines to html <br> tags on CloudDB chart descriptions
When displayed on tableWidget, newlines are already preserved
across cloudDB interactions.
Fixes #3286
2020-01-05 13:41:33 -03:00
Ale Martinez
f385831d5e Enable Qt5 video for macOS travis-ci builds
Experimental build until #2242 is implemented
2020-01-05 12:22:55 -03:00
Ale Martinez
0887acdc89 travis-ci don't remove qt5 since it is required by other software
This error prevented to upload the generated dmg
2020-01-02 19:34:55 -03:00
Ale Martinez
8d6ea4fa72 Strava Download - Map VirtualRun and VirtualRide to Run and Ride
Use SubSport to preserve the original type when Sport is mapped.
Fixes #3278
2020-01-01 15:07:40 -03:00
Ale Martinez
4b53b24669 Fix previous commit
load instead of target
2019-12-31 13:14:52 -03:00
Alejandro Martinez
9524d56966 Video Overlays - Move HRM units from code to config file
To give more flexibility to users willing to use circular meters for HRM
2019-12-31 09:36:26 -03:00
Ale Martinez
29d28c93f4 Veloclinic Chart - Refresh when CP changes in Trends View
Fixes #3277
2019-12-30 15:01:25 -03:00
Jan Dvořák
edb2340b35 Czech translation (#3276)
Translate to Czech - Part 2
2019-12-30 08:18:01 -03:00
Ale Martinez
5ee004f355 Added Python Fixes Screen Captures for the wiki
[skip ci]
2019-12-29 10:14:55 -03:00
Ale Martinez
6eea504796 Fix travis-ci macOS builds 2019-12-28 14:31:19 -03:00
ericchristoffersen
4eae552846 Fix Issue 3273: Busy Hang in FixDeriveDistance (#3275)
Fix #3273: Busy Hang in FixDeriveDistance
Init goodii to 0 so tolerate no valid points.
2019-12-28 05:17:07 -03:00
Ale Martinez
26723b2755 Add missing QMap include to PowerProfile.h
Some toolchains report an error
Fixes #3270
2019-12-23 23:46:53 -03:00
Ale Martinez
b0d3e08ef9 Update default charts to remove remaining TSS and IF references
Replaced by BikeStress and BikeIntensity
2019-12-23 10:25:18 -03:00
Ale Martinez
f0482bf00c Revert "Plot R-R from Xdata"
This code has problems when distance is used on x-axis (#2842)
and it is redundant since there is a general mechanism to plot
any XData series as User Data in Activitiy chart.
This reverts commit f095416c5c.
2019-12-20 18:00:30 -03:00
riccioclista
9f1187390f Python data processors (#2951)
* Initial implementation of Python data processors
* Add RideEditor to PyFIx script editor
* Enable write-access to activity data for python fixes
* Add GC.deleteActivitySample method
* Add GC.deleteSeries method
* Check for python fix for changes before close
* Build python fixes menu dynamically
* Make python fixes first class data processors
* Add GC.postProcess method
* Check GC_WANT_PYTHON and "Enable Python" setting for python fixes
* Add GC.createXDataSeries method
* Clean up ScriptContext ctor mess
* Support editing xdata series
* PDP: Implement xdata append/remove methods
2019-12-19 22:05:51 -03:00
Ale Martinez
a3e6ab8e09 Video Overlays - Load is target power or Slope according to mode
Similar to DialWindow
Added to sample video-layout.xml and adjust positions
2019-12-15 17:20:06 -03:00
Ale Martinez
e06c93ca0e CPPlot - Show as percentage only applies to ride curve
Fixes #3260
2019-12-15 10:26:04 -03:00
Alejandro Martinez
edb53806d8 Video Overlays - Add Distance as source
honoring metric/imperial setting.
Fixes error on Speed when imperial units are used.
Adds Distance to video-layout.xml and adjusts widget positions.
2019-12-15 00:08:49 -03:00
Ale Martinez
145d5ccae6 Fix travis-ci Linux builds
Fix libpulse-dev install and change python3.6 source
2019-12-14 23:05:57 -03:00
Ale Martinez
a2a94b3b41 Video Overlays - Speed widget honors metric/imperial setting 2019-12-14 21:13:45 -03:00
Ale Martinez
5fa59d1cf8 get Strava description
Save to Notes if Notes is not already used for name.
Complements d1e0e13ce1
2019-12-14 21:11:25 -03:00
Ale Martinez
c0889179da Remove deprecated CFBundleGetInfoString from info.plist
Fixes #2938
2019-12-11 14:34:52 -03:00
Ale Martinez
bc6ca7fee1 Added CFBundleVersion and CFBundleShortVersionString to Info.plist
Also updated values for the comming v3.5 release.
Fixes #2938
2019-12-11 12:49:04 -03:00
Quentin Heath
96b36aef0d fix am/pm time for HRV 2019-12-09 17:56:19 -03:00
ericchristoffersen
03e8da2c92 Issue 3241: Fix variance control in FixPowerSpikes (#3253)
Fixes #3241
2019-12-09 17:12:03 -03:00
Stranger
5420d92cc1 Update Russian translation (#3252) 2019-12-09 16:47:01 -03:00
Quentin Heath
d1e0e13ce1 add Strava description
direct copy from `Notes` (with UTF8 charset, as for the Strava title),
except if `Notes` was already used for the title
2019-12-09 16:15:46 -03:00
Quentin Heath
c978d6eb80 fix Strava title encoding
the website appears to expect UTF8 by default, so let's send a UTF8
title (plus an explicit header)

tokens and boundaries are supposed to be ASCII, so they can keep their
latin1 encoding
2019-12-09 16:15:46 -03:00
Jan Dvořák
5df46eebc7 Translate to Czech, part 1, 2725/5426 2019-12-08 21:17:57 -03:00
Ale Martinez
2cb9bc113e Export Chart Image as SVG
Add .svg as an alternative format for high resolution printing.
Fixes #3246
2019-12-08 20:07:06 -03:00
Ale Martinez
0009c280a8 Fix Export Chart Image in Tiled mode
Use rect instead of geometry to grab the complete widget.
Tested on Windows and Linux
Fixes #3055
2019-12-08 20:07:06 -03:00
Ale Martinez
715dc15133 Enable travis-ci tagged builds
To have binaries with version string set automatically and remove
the temporary hacks.
[skip ci]
2019-12-08 11:59:52 -03:00
Ale Martinez
657bb70d23 Define version string for travis-ci builds
To restore lupdate for OSX and to force new build with version strings
since tag builds are rejected. This will be fixed in next commit.
2019-12-08 10:16:50 -03:00
Mark Liversedge
feac0e86db VERSION 3.5 RELEASE CANDIDATE 2X
.. fix save ridecache
.. regenerate on first run to fix
2019-12-08 08:40:34 +00:00
Alejandro Martinez
c39b01279a Fix Travis-ci Linux builds
The ppa for vlc 2.2.8 is no longer available, fallback to vlc 2.2.2
2019-12-07 23:38:17 -03:00
Ale Martinez
9fec594d41 RideCach::save uses item instead of intervals to access interval metrics
This error was introduced in fa9a59d60c
Fixes #3244
2019-12-07 19:44:25 -03:00
Ale Martinez
14ee925645 travis-ci - define GC version string only for tagged builds
Commplements previous commit used to get binaries with version strings
once the tag was already set.
2019-12-06 12:10:54 -03:00
Ale Martinez
c2f3f2b8e2 Define GC version string for travis-ci builds
Next commit will do this only for tagged builds
2019-12-06 10:31:58 -03:00
Mark Liversedge
b818486aac VERSION 3.5 RELEASE CANDIDATE 2 2019-12-05 20:19:55 +00:00
Stranger
afdc860676 Add Garmin GPSMap 66 device (#3240)
GPSMap 66 can use ANT+ sensors, store in FIT format, synchronization with Garmin Connect and relevant to use with long-term activities (walk/hiking/ski).
2019-12-05 10:21:24 -03:00
Stranger
1e2ef61b89 Update Russian translation (#3238) 2019-12-05 08:21:55 -03:00
Stranger
0aa24acd3d Fix non translatable strings in code (#3239) 2019-12-05 08:21:26 -03:00
Ale Martinez
43ab7d4afc Recognize Eric Christoffersen
Very useful contributions for v3.5 release
https://github.com/GoldenCheetah/GoldenCheetah/commits?author=ericchristoffersen
2019-12-04 17:49:16 -03:00
Ale Martinez
5bd4404279 Avoid endless loop on FIT files unknown type and negative size
Includes a test file to reproduce the issue.
Fixes #3229
2019-12-03 14:45:47 -03:00
Ale Martinez
4ed6927626 Merge branch 'ericchristoffersen-StartupSpeedup'
Closes #3235
2019-12-02 19:58:11 -03:00
Eric Christoffersen
fa9a59d60c Speedup critical string handling in RideCache Save 2019-12-02 19:54:48 -03:00
Eric Christoffersen
c13b24251e Speedup RideCache Load Time
Implement regex/hash based string substitution object to perform multiple
substitutions in 2 passes. Speeds up athlete data load by 2x.
Use QStringRef to avoid copy
Fixes #3234
2019-12-02 19:54:30 -03:00
Alejandro Martinez
b3a4b4a84e Update INSTALL-LINUX
Based on recent forum questions updated Qt version for v3.5, lupdate path and libz requirements.
2019-11-29 14:26:17 -03:00
Alejandro Martinez
cc633a7802 Add support for Device symbol on filters but disable set/unset/isset (#3233)
Currently Device does not work on filters and set/unset/isset fail silently,
with this change Device can be used in filters as standard metadata and
the attempt to use in set/unset/isset reports an appropriate error.
We could enable these operations in the future but they require special casing.
2019-11-29 14:14:29 -03:00
ericchristoffersen
2b291f28b7 Issue 3230: Train mode compute altitude from slope (#3231)
Implements #3230
2019-11-27 21:49:13 -03:00
ericchristoffersen
2017d9162f 3227: Further optimize trends tracker table display (#3228)
Further speedups for trends tracking
Fixes #3227
2019-11-26 18:37:16 -03:00
Ale Martinez
6210d0a28d Fix QtWebEngineProcess deploy for travis-ci MacOS builds
This is a workaround for a bug in the homebrew version of macdeployqt
not present in Qt official binary distributions
2019-11-25 11:40:15 -03:00
Ale Martinez
fa7684a88d Fix Python deploy in MacOS travis-ci builds
Copy python framework and change path in binary
2019-11-24 17:31:33 -03:00
Ale Martinez
675cbcbe58 Add Tacx Neo Bike Trainer to ANT IDs
Contributed by Pavel Vasilyev
Fixes #3221
2019-11-24 09:21:38 -03:00
Ale Martinez
54b756b0ec Fix travis-ci MacOS builds 2019-11-24 09:21:38 -03:00
Joern
01490a64d1 Merge pull request #3226 from Joern-R/tp
Today's Plan Download
2019-11-23 20:16:16 +01:00
Joern
5db9440adb Today's Plan Download
... distance to be shown in sync. list is "double"
2019-11-23 19:28:32 +01:00
ericchristoffersen
6ca8e49a52 Fix 3222: Row append more efficient. (#3224) 2019-11-23 09:30:13 -03:00
Ale Martinez
7606697512 Added Note about qmake reporting missing translation files on first build
Similar to the one existing on INSTALL-WIN32
Fixes #3220
2019-11-22 11:54:11 -03:00
Ale Martinez
5da74f1136 Tag Multisport activities from FIT files correctly
Also remove unused Workout Code Tag
Partially fix #3211
2019-11-22 11:47:49 -03:00
Ale Martinez
45e73f7d34 Added Navicoach O-Synce sample FIT files
These uses non-interleaved mode for session records, we need to do
regression tests on these files for solutions to #3211
2019-11-21 13:05:05 -03:00
Ale Martinez
5383430b19 FitRideFile - Handle resync when HRM is unbucled
Fixes #3059
2019-11-21 09:41:34 -03:00
Ale Martinez
5cb0ed5b35 Added sample fit file for #3059 2019-11-21 09:37:13 -03:00
Henrik
43cabb2567 Swedish translation update (#3218) 2019-11-20 20:32:28 -03:00
Joern
5a4411f359 Merge pull request #3217 from Joern-R/DE
Update Translation DE
2019-11-20 15:30:25 +01:00
Joern
b4e82bb323 Update Translation DE 2019-11-20 14:43:24 +01:00
Ale Martinez
9536ed343b Enable Python for MacOS travis-ci builds
Using the Python version installed by Hombrew, currently 3.7.5
2019-11-18 20:55:32 -03:00
Ale Martinez
575a2b1c0b Fix path error on upload in previous commit 2019-11-18 13:04:24 -03:00
Ale Martinez
893f2a9b28 Upload travis-ci MacOS build results to transfer.sh
To allow user testing, similar to linux builds.
Includes some minor fixes:
-Avoid compiler warnings for deprecated declarations to reduce the log size
-Patch GoldenCheetah.dmg to include missing libicudata.64.dylib
-fix command line error in mackdeployqt -fs option
2019-11-17 23:09:29 -03:00
Ale Martinez
94eef9b6e0 Added secrets.h to Strava.cpp
Missing in bef37ea49c
The reason AppVeyor builds are failing
2019-11-16 09:06:34 -03:00
Ale Martinez
f5bcea85f0 Spanish Translation Update 2019-11-15 21:18:55 -03:00
Ale Martinez
bef37ea49c Strava OAuth Update - Handle Refresh Token
Complements ab18468a98
Fixes #3199
2019-11-15 18:27:09 -03:00
Ale Martinez
32ae63a2b5 Added Video Overlays Initialization on Windows builds with VLC
If video config file is not present copy a default one to be used as a model
by the user. An empty video-layout.xml file disables video overlays
Fixes #2525
2019-11-15 10:27:30 -03:00
Alejandro Martinez
921765f9ef Add new sources for video-layout.xml meters (#3215)
Load, Time, LapTime, LapTimeRemaining and ErgTimeRemaining
Fixes #3213
2019-11-15 09:23:24 -03:00
grauser
8e46c5d2b6 lupdated 2019-11-14 13:56:13 +01:00
grauser
91d0ac1639 FitFile : QuickFix FloatValue can be Multi-Value
I probably have to refactor this code...

fix #3059
2019-11-14 13:54:05 +01:00
Alejandro Martinez
03516fb0cd Fix double fd close on RawRideFile (#3214)
Most of the time it is harmless, until it is not.
Fixes #2325
2019-11-13 20:40:51 -03:00
Michal
bf9b42d517 Add Garmin Edge 830 screenshot for extending the HRV Wiki page (#3206) 2019-11-12 08:38:02 -03:00
Alejandro Martinez
64ad946a1c Fixed BTLE Pair page in AddDeviceWizard to avoid ANT+ dependence (#3209)
AddPairBTLE depends on the presence of an ANT+ dongle and sensors
to support ANT+ for detection, it looks like a copy paste of AddPair.
This works for Dual (ANT+/BTLE) sensors with an ANT+ dongle since
the sensors are detected, although is misleading since it seems to
imply you can pair them selectively, which is not true for current
BT40 GC implementation.
When an ANT+ dongle is not present (see #2771) or the sensors only
support BTLE (see #2983), the wizzard informs no sensor is dectected.
This is misleading since BT40device will dectect and use automatically
any Hr/Power/CSC sensor present at device startup.
This change replaces AddPairBTLE code with a simpler version matching
current BT40 support: it just informs the user the sensor types supported
indicating they will be autodetected on device startup.
Fixes #2771
Fixes #2983
2019-11-12 08:37:34 -03:00
Ale Martinez
df4e1f2fd7 Fix typo in Dutch translation
Fixes #3208
2019-11-09 11:38:49 -03:00
Ale Martinez
cc1ebdd827 Avoid duplicate time records in Train Mode
Fixes #3205
2019-11-05 21:26:45 -03:00
Ale Martinez
ab18468a98 Strava OAuth Update
According to https://developers.strava.com/docs/oauth-updates
Fixes #3199
2019-11-04 11:47:24 -03:00
Ale Martinez
5c4f72da6c Added virtual power support for Tacx Magnetic T1820
Fixes #1521
2019-10-29 22:55:59 -03:00
Ale Martinez
5cf76dd95c Added virtual power support for Elite Crono Mag Elastogel
Fixes #1538
2019-10-29 21:32:29 -03:00
Ale Martinez
a6875c583a Added virtual power support for CycleOps JetFluid Pro
Fixes #1809
2019-10-29 20:28:31 -03:00
Ale Martinez
a68cc8d179 Added virtual power support for Elite Turbo Muin 2015
Fixes #1575
2019-10-29 20:28:00 -03:00
Ale Martinez
26b5218ff3 Added virtual power support for Elite Crono Fluid Elastogel
Fixes #2720
2019-10-29 14:15:46 -03:00
Ale Martinez
a3dc4bca2d set AutoDefault to false on Curve Settings Push Buttons
To enable filter syntax checking on Enter
Partially reverts 43ed80d547
Fixes #3202
2019-10-29 11:50:55 -03:00
Ale Martinez
b236c76976 Filter bogus estimates when there is not enough data to fit the model
Just added a reasonable upper limit for CP
Fixes #3180
2019-10-28 16:32:50 -03:00
jgpallero
5a93a2c62f Update LeftRightBalance.cpp (#3189)
Add parenthesis in order to evaluate correctly the L/R balance computation
2019-10-28 14:01:09 -03:00
Ale Martinez
43ed80d547 Set Default buttons on LTM and Interval dialogs
Color is not a good option
Fixes #3202
2019-10-27 23:01:09 -03:00
Ale Martinez
5bdad6199e Fix FSF address
Fixes #2689
2019-10-26 21:55:53 -03:00
Ale Martinez
77547bfe55 Fix German translation to avoid metric name duplicates
Fixes #3187
2019-10-24 09:51:33 -03:00
Ale Martinez
beac898601 Fix units of work in tooltips for AllPlot and CPPlot
Also change wrong label in PMC (Coggan)
Fixes #3194
2019-10-21 21:56:05 -03:00
Ale Martinez
f9694775d3 MergeActivityWizard - preserve XDATA series order on join
and add the remaining ones to the end
Fixes #3183
2019-10-16 10:21:24 -03:00
Mark Liversedge
d01fdf55a7 VERSION 3.5 RC1
.. marking up for release candidate.
2019-10-14 09:53:51 +01:00
Ale Martinez
a065d480cd Make isSwim true when there are lap swim specific XData series
Similar to isRun when there are run specific standard series only when
Sport is not explicitly set.
2019-10-11 11:40:42 -03:00
Alejandro Martinez
0b0f99889e Enable import of XDATA series from CSV files (#3179)
* Enable import of XDATA series from CSV files
Since XDATA series are preserved across merges this allows to add
arbitrary XDATA series to any activity.
Sample WEATHER file is included for testing.
Sample swim file is also included, once imported set Sport=Swim and use
Fix Lap Swim with pool length=25 to rebuild standard series and laps
Fixes #2010 item 4.

* FixLapSwim - Alternative way to store pauses in XData
Some devices s.t. Moov Now generates a CSV with REST field
after each length. FixLapSwim now can use this alternative
way to express pauses and to mark end of laps.
This is intended to be used together with XDATA csv import.
A Moov Now csv file modified to comply with our format is
added as an example to test folder.
2019-10-10 23:16:22 -03:00
Ale Martinez
8b8ddccb5b Session RPE should not depend on HR Zones
Copy&Paste error, fixes #3171
2019-10-05 10:30:08 -03:00
Henrik
322a2c5265 Updated Swedish Translation (#3174) 2019-10-02 18:08:15 -03:00
Ale Martinez
eff123e0e2 Enable libusb 1.0 for travis-ci builds 2019-09-29 20:11:01 -03:00
riccioclista
c284885f8b Add libusb 1.0 support (#2919)
To fix freezes in Ubuntu and to support USB-C to USB-A dongles on MacOS
2019-09-29 20:09:09 -03:00
Ale Martinez
bb6d2552c0 Enable More menu in Overview to allow remove
Also blocke upload to cloud
These are temporary hacks until we have a proper config for Overview
2019-09-25 16:53:12 -03:00
Ale Martinez
1f4d6d1648 Fix OSX travis-ci build
libusb-compat depends on a newer libusb version that the one previously
installed giving an error.
Removing explicit libusb install fixes the issue.
2019-09-23 17:46:11 -03:00
Ale Martinez
be43cde4e1 Set min-height for Scrollbar handle in RideNavigator
When there are lots of activities the handle becomes too small to be useful,
so min-height is set to the same value as width to avoid this.
Fixes #2756
2019-09-23 14:35:43 -03:00
Ale Martinez
29db9ebde2 Add Direct navigation to year/month on Diary Calendar
Fixes #2756
2019-09-21 18:02:16 -03:00
Ale Martinez
6f50bc74e3 Garmin Fenix 5/6 new firmware uses enhanced speed and altitud fields
This maps them to correspoding standard fields
Fixes #3161 and #3168
2019-09-20 17:16:55 -03:00
Ale Martinez
b47ddd13d5 Change np to isopower in LTMTool formula helper 2019-09-20 17:16:55 -03:00
sanfordhk
411e85843c lupdated and fixed zh-tw translation of 'match' (#3167) 2019-09-20 09:02:50 -03:00
sanfordhk
1dfdf952dd 100% zh-tw translation (#3153)
* Completed zh-tw translation
2019-08-28 09:06:33 -03:00
sanfordhk
7330e4326e partial translation zh-tw update (#3148) 2019-08-26 17:41:36 -03:00
Ale Martinez
a9bbe5dc5a Use double division to compute dpi factors
Fixes #2628
2019-08-25 14:21:18 -03:00
Ale Martinez
3e99394d39 Fixed order of operations in CoreTemp calculation to match MatLab code
Fixes #2885
2019-08-24 20:52:37 -03:00
Ale Martinez
a3d1c624e4 Fixed Estimate Power not including Bike Mass on Power required to accelerate
Reported by user Steve Short at the forum
2019-08-24 20:46:08 -03:00
Marcel Breij
f6559cd181 Updated Dutch Translation 2019-08-23 10:36:59 -03:00
Ale Martinez
223cd82cdc Spanish translation - minor updates and spell checking 2019-08-22 14:52:30 -03:00
Alejandro Martinez
600a9cfb43 Add Import Chart menu to Main Window and Chart Bar (#3146)
It allows to import .gchart files from menus as an alternative
to drag&drop, for completeness and to reduce end user questions.
2019-08-22 09:52:52 -03:00
sanfordhk
1a5978ac36 partial translation zh-tw update (#3147) 2019-08-22 09:51:45 -03:00
grauser
1d6d66f960 Translation : French update (1/3) 2019-08-21 11:46:51 +02:00
grauser
937b70e596 FitRideFile : Add Powertap/Powercal and Favero 2019-08-21 11:46:31 +02:00
Alejandro Martinez
39b01c2649 Preserve UTF-8 encoding when reading namedsearches.xml config file (#3145)
Fixes #3143
2019-08-20 13:23:00 -03:00
UgoBor
e68afa6aea Edit Italian Translation GC v3.5 2019-08-20 16:14:10 +02:00
sanfordhk
ff0a75bbc6 partial translation zh-tw update (#3142)
focused on translation of main functions and main UI clean-up. default zone names translated and will work only with UTF-8 reading fix for issue #2978
2019-08-19 12:26:59 -03:00
Ale Martinez
895d0d1cb6 Updated Spanish Translation 2019-08-17 21:07:19 -03:00
sanfordhk
ea8f11ac86 partial update of zh-tw translation (#3140) 2019-08-16 07:54:28 -03:00
Ale Martinez
85f471bd68 Partial Update of Spanish Translation 2019-08-13 21:52:52 -03:00
Ale Martinez
4b8f9cc8f0 Enable translation of "Peak X" interval names from Find Intervals 2019-08-13 19:38:12 -03:00
Joern
fc20b9c4d8 Merge pull request #3137 from Joern-R/DE
Update Translation DE
2019-08-09 18:59:22 +02:00
Joern
84fbfc464c Update Translation DE 2019-08-09 15:33:46 +02:00
Alejandro Martinez
3987833102 Allow Banister to use other performance metric besides Power Index (#3136)
* Allow Banister to use other performance metric besides Power Index
Performance metric can be selected from any Peak metric in LTM Charts
Datafilter now is banister(load_metric, perf_metric, ...)

* Travis-ci - R3.6 install update key
According to https://cloud.r-project.org/bin/linux/ubuntu/README
2019-08-04 18:01:09 -03:00
Sping Zhao
2babb9f9de zh-cn translation updated to date. (#3135) 2019-08-04 18:00:47 -03:00
gcoco
ee1d2b0ea6 Run make silently (#3133)
And force it to run again if it crashes so we can see what went wrong.
2019-07-24 16:49:46 -03:00
Ale Martinez
e1ddeffd7f Banister - fixed score accumulation for multiple activities per day
It was notable when a second activy has score=0, s.t. a transition
run, provoked the score for the day to go to zero.
2019-07-19 10:33:12 -03:00
Ale Martinez
f83a367796 CloudDB chart upload - allow digits and hyphen but not underscore in domains
Issue reported at the forum
2019-07-19 10:32:28 -03:00
Ale Martinez
dd755386d3 CloudDB chart upload - allow subdomains in email address 2019-07-18 10:36:15 -03:00
Ale Martinez
b66a668669 Fix Lap Swim from Length Data - Preserve HR data
It was discarded when present
2019-07-14 13:48:40 -03:00
Ale Martinez
e8a41b1228 Fix Speed from Distance - Raised moving average limit
To account for bad data in Open Water files
2019-07-07 19:22:19 -03:00
Mark Liversedge
7b659e69d8 Add CV alongside RMSE on CP Chart
.. seems silly to not do it, and its relatively useful when comparing
   the different model fits.
2019-07-07 13:33:17 +01:00
Ale Martinez
236f782e66 Fixed Remote Calendar authorization
We need to save the calendar type for older CalDAV code to work,
additionally Google calendar needs the calendar ID (tipically the same
as the email address), used the optional Key setting field for this.
2019-07-04 19:33:04 -03:00
Joern
a6b7993fa5 Merge pull request #3127 from qheath/translations
Translations
2019-07-03 17:00:41 +02:00
Joern
457a92a067 Merge pull request #3129 from mtbkeith/Lezyne_SuperGPS
Add Lezyne Super GPS
2019-07-03 16:27:14 +02:00
Keith Reynolds
1e1dceef73 Add Lezyne Super GPS 2019-07-02 15:53:47 -06:00
Quentin Heath
3a57fdb8a8 french translation
use proper French instead of mimicking English
2019-07-01 09:53:14 +09:00
Quentin Heath
35db3a6f03 fix translations
replace some mistaken "Today's Plan" by the appropriate "Polar Flow"
2019-07-01 09:42:29 +09:00
Ale Martinez
494422399f Change heading for direction in Power estimators
Missing part from 9f0c70391b
2019-06-11 18:06:04 -03:00
Frank Zschockelt
1dbe3c9be8 FitRideFile: Unify handling of invalid product id 2019-06-07 20:06:09 +02:00
Benedikt Stegmaier
f334097f30 FIT : Add Hammerhead as manufacturer 2019-06-07 19:52:30 +02:00
grauser
27e044f763 Fit : Power phases - limit to 360
fix #3030
2019-06-02 22:11:34 +02:00
grauser
330b5cbe71 Translation : lupdate and french update (1/2) 2019-06-01 12:20:29 +02:00
Ale Martinez
385d5234de LTM Table - Format Pace and Best times minutes in Sexagesimal format
Same logic as LTM Plot in commit b7ced302ad
2019-05-31 23:00:23 -03:00
ericchristoffersen
6e175dfb91 Raise slope limit to +-40. (#3092) 2019-05-28 08:06:43 +01:00
Hennadiy (Gena) Verkh
70f465f914 Fix estimator not running for runs, if there are no bike rides (#3110) 2019-05-26 22:16:16 -03:00
grauser
a8ca30ccd7 FIT : Add Respiration Rate 2019-05-23 22:36:43 +02:00
grauser
44026a1838 Fit : Add some Garmin models 2019-05-23 22:22:00 +02:00
grauser
8820817d0f CSV : iBike remove debug line 2019-05-23 21:54:01 +02:00
Oleksiy Mishchenko
08a704ec1b No reason to skip a datapoint if DFPM is null 2019-05-23 21:51:59 +02:00
Oleksiy Mishchenko
fbb6f68f81 iBike CSV: If Timestamp stream is present, take the first one as the
activity start time.

It is out of sync when merged with external GPS data.
2019-05-23 21:51:59 +02:00
oleksiy
eec18940ae CSV : ibike, import recorded Air Density as Rho XDATA series
Signed-off-by: oleksiy <oleksiy@oleksiy-macbookpro3.lan>
Signed-off-by: oleksiy <amishchenko@gmail.com>
2019-05-23 21:51:59 +02:00
Ale Martinez
d2c2085741 Fixes R GC.activity when the data frames list don't match the activities list
The names attribute length must be equal to the vector size
Fixes #2542
2019-05-21 20:36:17 -03:00
Ale Martinez
9c9d1e52e9 Cosmetic change in the name of found intervals
- When there is no power don't add (0w)
- Move the rounding to the format method to avoid Pace issues (Fixes #3106)
- Pending: make the rounding dependent on the series.
2019-05-21 13:15:32 -03:00
Ale Martinez
23049b4277 Changed Time in Zone counts to fix percentages aggregation
This solves the issue when activities not having all the data
channels available are aggregated.
Forces a metric recomputation to account for these changes.
2019-05-20 17:14:56 -03:00
Ale Martinez
794e097f8f Changed RideDB to save metrics with aggregateZero even when value is zero
Since counts are relevant for averaging them between different rides.
Required to fix the issues when aggregating Time in Zones Percentages.
The previous solution worked until you exit GC since when the RideDB
was reloaded the counts with zero values were lost.
2019-05-20 17:14:56 -03:00
Alejandro Martinez
c02714ecc8 Merge pull request #3104 from jgpallero/patch-3
Update AvgLTE, AvgRTE, AvgLPS, and AvgRPS in BasicRideMetrics.cpp to fix #3102
2019-05-20 17:11:28 -03:00
Ale Martinez
9a0f291057 Added AggregateZero to Time in Zone Percentage metrics
So it aggregate properly in Metric Trends Charts, currently
when one of the rides to be aggregated has 0 percent in one of
the zones the aggregate is distorted and it can be higher than 100%
which is particularly notable when the bars are stacked.
This has been reported several times at the forum.
2019-05-16 22:59:43 -03:00
jgpallero
91c9d2d770 Update AvgLTE, AvgRTE, AvgLPS, and AvgRPS in BasicRideMetrics.cpp
As for the L/R balance (see https://github.com/GoldenCheetah/GoldenCheetah/pull/3098) there are issues in the Torque Effectiveness and Pedal Smoothness computation when using Favero Assioma DUO pedals. In some cases, values for LTE, RTE, LPS, and/or RPS are stored in the file while the power and/or cadence data shows that the correspondent stroke was either void or no power generating (see the attached image in https://github.com/GoldenCheetah/GoldenCheetah/issues/3102). This was not taken into account in the code, as the only check was the existence of LTE, RTE, LPS, and RPS data greater than zero. I've made the necessary changes in order to check if the stroke was a power generator by verifying if the cadence, power and lrbalance values are valid (it is SUPPOSED that all files that contain LTE, RTE, LPS, and /or RPS contain also power, cadence, and lrbalance data, as they are necessary for the LTE, RTE, LPS, and RPS values computation)
2019-05-16 16:59:41 +02:00
Alejandro Martinez
3421523768 Merge pull request #3101 from amtriathlon/master
Added Time Recording and use it for Time in Zone Percentages
2019-05-15 17:42:57 -03:00
Alejandro Martinez
f7e318e959 Merge pull request #3098 from jgpallero/patch-1
Update LeftRightBalance.cpp fixes #2955
2019-05-15 17:41:15 -03:00
Ale Martinez
75146af6fe Added Time Recording and use it for Time in Zone Percentages
Fixes #2745 which requests this metric plus it allows to fix the issue with
Time in Zone Percentages which don't add to 100% nor aggregate properly
when there are gaps in recording, tipically due to pauses.
When there are no gaps Time Recording equals Duration and Time in Zone
Percentages don't change.
2019-05-14 20:50:19 -03:00
grauser
3f4b7a64e3 CSV : ibike note can have ","
fix #868
2019-05-14 22:31:51 +02:00
grauser
7cb72490a8 CVS : ibike convert temperature for english
temperature in english (imperial) ibike file is in degF
2019-05-14 22:01:13 +02:00
grauser
09acc4700e CSV : ibike change metric/imperial determination
Use info on first line
2019-05-14 21:51:19 +02:00
jgpallero
439a7f6e12 Update LeftRightBalance.cpp
Add additional checks in order to differentiate between cycling and running
2019-05-14 12:17:10 +02:00
Ale Martinez
3316f41502 Fix Lap Swim from Length - Ignore Garmin Smart Recording disabled
The user is requesting explicitly the length expansion so, to avoid
confusion, we should ignore this setting, which was badly handled
to make things worse.
Fixes #2892
2019-05-13 21:41:53 -03:00
grauser
c45bd52edd CSV : Convert total weight to metric (if needed) 2019-05-13 22:06:11 +02:00
grauser
20d6d80ded CSV : ibike keep original weight, CdA and Crr for aerolab 2019-05-13 22:01:55 +02:00
grauser
523be2bc0a FIT : Add Lezyne Micro-GPS
Thank you Claus Assmann
2019-05-13 18:12:56 +02:00
grauser
d27b4a639b Strava : Correct commit for indoor lap.
Keep last lap seconds
2019-05-13 18:10:17 +02:00
Frank Zschockelt
73e5d0bd4d FitRideFile: Add Lezyne MegaXL 2019-05-13 08:25:35 +02:00
jgpallero
04d4403844 Update LeftRightBalance.cpp
Change in order to manage correctly the Left/Right balance due to the issues detected with the Favero Assioma DUO pedals, as it was explained here: https://github.com/GoldenCheetah/GoldenCheetah/issues/2955

But after I detected the issue, this file was modified in order to accomplish the proportion of Ground Contact Time from each leg for runs, and a new check was added to the code (point->cad || point->rcad), while in the original code only the point->cad was tested. I'm not sure if the addition of my new checks, specially the (point->watts > 0.0f) one, are safe for the running part of the function
2019-05-12 20:27:06 +02:00
Ale Martinez
9796d9044f RR from txt files - filter and record HR for each second
Fixes #3095
2019-05-11 21:01:29 -03:00
Ale Martinez
8c995a5339 HRV import from text file - fix discard of last line
Fixes #3094
2019-05-11 11:32:04 -03:00
Alejandro Martinez
4ca3cbcffe Merge pull request #3087 from amtriathlon/BanisterRun
Add Banister and Performance for Running Power
2019-05-04 13:41:13 -03:00
ericchristoffersen
bff9cfe1d0 Issue 3057:VirtualCalc incomplete, produces NaN (#3064) 2019-05-04 07:51:20 +01:00
grauser
72ac997a84 Interval : Add a message box "Are you sure you want to delete selected interval?" 2019-05-02 23:06:24 +02:00
grauser
7409c719b3 Strava : Correct last commit for indoor trainer ride 2019-05-02 21:52:58 +02:00
grauser
fa9d32dbf0 WorkoutWizard : Change max slope to 20%
Many new trainers can simulate slope >14% and
KICKR CLIMB max incline is 13%

fix #3082
2019-05-02 21:18:42 +02:00
grauser
c5d57af45f Strava : It seems in some case (indoor file?) we don't have start_index for laps
fix #3010
2019-05-02 17:13:10 +02:00
grauser
0e08a7b8bc ErgDB : download from ergdb.org 2019-04-30 22:05:33 +02:00
Alejandro Martinez
2987e110a2 Merge pull request #2914 from cyberfuzzie/fix-gpx-decimal
Change GPX decimal separator to dot
2019-04-27 18:29:26 -03:00
Joern
d698dbd942 Merge pull request #3090 from Joern-R/GchartImport
Chart Import Dialog
2019-04-27 19:24:26 +02:00
Joern
b743440246 Chart Import Dialog
... allow column header to get translated
2019-04-27 18:13:19 +02:00
Ale Martinez
b30497692a Fix Elevation - Add explanation to Network Error 4
Closes #3089
Closes #3068
2019-04-27 12:48:44 -03:00
Ale Martinez
27c15f9d20 Fix crash on distribution chart
close #3085
2019-04-27 12:22:31 -03:00
Ale Martinez
00aea878bd Rename Segment uses RenameIntervalDialog instead of EditIntervalDialog
Fixes #3061
2019-04-27 11:28:13 -03:00
Ale Martinez
c00efb94e5 Set sync on startup and import to false when a cloud account is deleted
Fixes #2936
2019-04-25 17:30:04 -03:00
Ale Martinez
93ec3246cf Travis-ci - change from trusty to xenial for Linux builds
Trusty reaches end of life on april 2019
2019-04-25 14:35:59 -03:00
Ale Martinez
8facce909a Add Banister and Performance for Running Power
- Performances are computed independently for Rides and Runs in Estimator
- Running Performances are shown in LTM Charts When all selected activities
  are runs for a Performance curve
- Banister models uses Performances from activities were score > 0
  and for the same date with matching sport, so a Banister model based
  on BikeScore/BikeStress will include only rides while one based on
  GOVSS will include only runs
- Banister (Run) chart based on GOVSS metric added for testing
2019-04-23 18:22:36 -03:00
Ale Martinez
44d17a606b Added PowerInWatts extension to GPX Parser
Fixes #3084
2019-04-23 12:13:30 -03:00
Alejandro Martinez
15e70f9e9d Change remaining TSS to BikeStress
Reported at the forum
2019-04-19 17:23:48 -03:00
Alejandro Martinez
009d77aa22 Merge pull request #3080 from amtriathlon/RunEstimates
Add CP Model Estimates for Running Power
2019-04-16 12:34:57 -03:00
Ale Martinez
ff0b32989f Add CP Models for Running Power
- PDEstimate now has a run flag, Estimator has 2 passes: rides and runs
  MultiModel and WSModel are disabled for the same reason they were disabled
  in CP chart, and to lower the performance impact.
- Show CP Models Estimates for Running in RideSummary when the involved
  activities are all runs.
- DataFilter estimate function uses Bike or Run models based on activity type
- Metrics Trends charts Estimate allow Bike vs Run selection
2019-04-15 15:26:35 -03:00
Mark Liversedge
fc9fb7ba24 Import Workouts from WebPageWindow
.. so we can open ergdb as a chart window and browse and
   select workouts to import.
2019-04-15 08:31:22 +01:00
riccioclista
4083be3744 xdata: Fix min/max of spinbox in xdata editor (#2995) 2019-04-15 07:46:59 +01:00
Chris Cleeland
b8c2bd35b7 Fix issue #3007 by specifying HFS+ for fs type (#3015) 2019-04-15 07:46:00 +01:00
ericchristoffersen
d20291031a Fix divide by zero in slerp, also center spline length arc points (#3072) 2019-04-15 07:44:17 +01:00
ericchristoffersen
a1f3a98f79 Issue 3065: Uncombine the printing of lat and long telemetry. (#3066) 2019-04-15 07:43:06 +01:00
ericchristoffersen
72bc73ceac Issue 3058: Buffer overrun by 1. (#3063) 2019-04-15 07:38:58 +01:00
Alejandro Martinez
41ac0dc1cd Create ISSUE_TEMPLATE.md
Another attempt to minimize the use of issue tracker as a help desk.
Additionally we could use the new templates feature for bugs and features, but I don't have permissions to change repository settings.
2019-04-14 20:45:10 -03:00
Ale Martinez
e1949c59f1 Activity Manual Entry - Metadata entry fields mimic RideMetadata behavior
Changed Notes format to preserve columns and
Sport/Workout Code completers to honor retrieve previous values on "*"
2019-04-11 20:18:35 -03:00
Ale Martinez
f817692659 Pad missing altitude in FIT file records with previous value
Previous behavior is to pad with zeroes which inflates Elevation Gain
Fixes #3070
Fixes #3067
Includes test file
2019-04-05 20:48:13 -03:00
Ale Martinez
cefb1b3f12 Added Mac Preferences image for the wiki 2019-04-05 11:35:41 -03:00
Ale Martinez
f77cf6d934 Read Zones files using UTF-8 Codec
Fixes #2978 for Windows builds
2019-04-05 10:52:52 -03:00
Alejandro Martinez
7e788aa50c Added Windows High DPI Settings Image for the Wiki 2019-04-04 21:09:45 -03:00
Ale Martinez
cce26607ea FitRideFile - Rename record field 90 as PERFORMANCECONDITION
It is not docummented but it seems to match the observed values in GC
2019-03-29 19:33:52 -03:00
Alejandro Martinez
74349879b7 Merge pull request #3060 from amtriathlon/master
Additional Running Dynamics support
2019-03-29 18:17:48 -03:00
Ale Martinez
81bf4a0b48 Additional Running Dynamics support
-Extra data fields renamed and scaled according to spec: stance_time_percent,
activity_type, vertical_ratio and step_length
-Average metrics for the new fields: Average Stance Time Percent,
Average Vertical Ratio and Average Step Length
-Tested using Garmin 935 with Running Dynamics Pod
2019-03-29 17:21:32 -03:00
Alejandro Martinez
cea2c09ea6 Merge pull request #3056 from amtriathlon/master
Double-click on LTMPopup ride list selects Activity and Activities view
2019-03-25 11:51:42 -03:00
Ale Martinez
5b6c1f5a5b Travis-ci upgrade to xcode10.1 for osx builds
Fix issues building libsamplerate
2019-03-25 09:59:07 -03:00
Ale Martinez
f8d530db4c Double-click on LTMPopup ride list selects Activity and Activities view
Fixes #922
2019-03-24 19:51:16 -03:00
ericchristoffersen
8e0c303759 Teach fixgps to use cubic splines instead of linear interpolation (#3044) 2019-03-19 09:30:26 +00:00
ericchristoffersen
c299a7237e Issue 3048: Teach fix distance to use length on spline path (#3049)
* Issue 3048: Teach fix distance to use length on spline path

* Remove debug pragma
2019-03-19 09:29:50 +00:00
Mark Liversedge
681f87a432 Curve fill colored zones (AllPlot) 2/2
.. UserData series now have a zone string that
   can be used to define upper values and associated
   colors for shading a curve.

.. the format is: lim,colorname;lim,colorname;

   where lim is an upper value and colorname is
   either a #rgb string or any color name such
   as red,green, blue etc from the list of SVG
   color keyword names provided by the World Wide
   Web Consortium.

   e.g:  200,green;300,yellow;9999,red
   which will shade points <200 green, <300 will be
   yellow and then <9999 will be red.

   The zones must be listed in ascending order.
2019-03-12 22:06:45 +00:00
Mark Liversedge
d2a8951c93 Downgrade to GPL-V2 License
.. there are too many incompatibilities between the
   V3 license and other codebases we wish to work with
   that are based upon the GPL-V2 license.

.. this downgrade is to ensure we are compatible and
   can align with contributions from other parties in
   the future.

.. a notification will be sent to the mailing list to
   inform all users.
2019-03-12 19:16:22 +00:00
Mark Liversedge
95901aa1e2 Curve fill colored zones (QWT) 1/2
.. updated the QwtPlotCurve to fill using zones.

.. next commit to update user data curves in AllPlot
   to let the user set zones and colors.

.. added as part of updates for Humon collaboration.
2019-03-12 18:20:32 +00:00
Ale Martinez
cae7e0b6b6 Fix vlc playback in travis-ci generated AppImage 2019-03-10 13:10:41 -03:00
Ale Martinez
9fb21af373 Enable OPENDATA for Travis-ci builds
Change OPENDATA_DISABLE and fix GC_CLOUD_OPENDATA_SECRET default
Escaping special chars with travis secure is tricky...
2019-03-08 21:25:04 -03:00
Ale Martinez
e2ff21e244 Fix Travis-ci Linux builds
Add qt59translations and use linuxdeployqt release 6
2019-03-08 18:43:31 -03:00
Ale Martinez
1c762c1d00 Add Whithings/Nokia, OpenData and SportTracks secrets for Travis-ci builds
Also removed lmfit since it is in the repo from f5055aa0e3
2019-03-08 14:42:10 -03:00
Joern
5b28c67fdf Merge pull request #3037 from Joern-R/VC2017
VC2017/Qt 5.12.1 - Fix 64Bit Build Problem
2019-03-06 14:25:42 +01:00
Joern
c9600248c6 Proper Fix for the VS2017 / Qt 5.12.x Problem
... provided by Eric
2019-03-06 12:03:15 +01:00
Joern
629a5d9446 VC2017/Qt 5.12.1 - Fix 64Bit Build Problem
... with windows / VC2017 / 64Bit the code does not build / cannot resolve a overwritten function when using QT 5.12.1
... adding the newly introduced function similar to the other function resolves the compile problem
2019-03-03 11:46:09 +01:00
Mark Liversedge
d93404fe77 Fixup script on Mac use backwards copatible dmg format
.. creates a JHFS+ UDBZ format DMG
2019-02-25 13:41:52 +00:00
Mark Liversedge
30e0cec696 DEVELOPMENT BUILD 1903
.. markup a new development build to get Strava fixups out.
2019-02-22 09:38:21 +00:00
grauser
030a1bee02 Strava : Use 64bit for Strava ID
fix #3019
2019-02-19 15:35:35 +01:00
Eric Christoffersen
7d2d7627ad Disable 'calculator' acting on crs_loc. 2019-02-18 15:24:15 +00:00
Eric Christoffersen
1402f6ad6a Ride GPX files in Train View
.. ErgFile now supports gpx format as well as .erg,.mrc et al
.. Location data is include in realtime data and passed through
.. the CSV file format has been fixed to record GPS with higher precision

Fixes #3021
Fixes #3024
2019-02-18 08:01:21 +00:00
Joern
356069339f Merge pull request #3018 from Joern-R/Ignore
Ignore MSVC2017 build artifacts
2019-02-10 17:29:27 +01:00
Joern
68b42549e8 Ignore MSVC2017 build artifacts 2019-02-10 16:18:51 +01:00
Joern
095344156c Merge pull request #3016 from Joern-R/DE
Translation Fix
2019-02-10 15:26:23 +01:00
Joern
a4c78a769a Translation Fix 2019-02-10 14:43:42 +01:00
riccioclista
20ffbb39f5 Prevent GC from crashing if Bindings method return NULL PythonDataSeries (#3014) 2019-02-09 09:53:31 +00:00
Mark Liversedge
8836252cdf CP plot show ride as power index
.. similar to showing as a percent of athlete best, this
   scales the ride mmp to percent of the average athlete.
2019-02-03 11:46:23 +00:00
Ale Martinez
ba8946d8bc LocationInterpolation - Fix compilation errors and warning on Linux/Mac
Errors described in https://web.archive.org/web/20130423054841/http://www.agapow.net/programming/cpp/no-arguments-that-depend-on-a-template-parameter
Warning was initialization reorder
2019-01-30 13:03:00 -03:00
Eric Christoffersen
82aff2f40a Add missing 'public' 2019-01-30 09:00:38 +00:00
Eric Christoffersen
cd9b03e484 Merge Activity by Distance
.. code originally developed by Eric Christoffersen
   for merging data from virtual rides where distance is
   recorded on a trainer, so the GPS and altitude data
   can be merged in to the data.
2019-01-29 13:59:53 +00:00
Ale Martinez
63019965b7 Change LTMPlot to use GappedCurve for Measures
Better handling when HRV data is not present
2019-01-28 16:40:16 -03:00
Mark Liversedge
9138a2890e Add Device Wizard bigger window
.. too small to cram all the devices in there now.
2019-01-27 12:59:03 +00:00
Pascal Obry
04b6bab3e5 Minor typo fixes in comment. 2019-01-27 10:25:21 +01:00
Pascal Obry
c0cf875f1b Minor typo fix. 2019-01-27 10:25:21 +01:00
grauser
80e99d1159 Fit : Be sure only on cad point used 2019-01-27 10:18:48 +01:00
grauser
3b33e65a6d translations : lupdate and update french translation 2019-01-27 10:15:32 +01:00
Hennadiy Verkh
867e86e185 Set the type of activity to Ride, Run or Swim, instead of always Ride.
If exporting a Run, use rcad instead of cad
Lrbalance was never exported - fixed it.
2019-01-27 10:13:41 +01:00
Ale Martinez
4886a8dee1 Force BikeScore to zero for runs and swims
Even when it is considered not relevant for runs and swims the metric
code computes the value if power data is present which may produce
unwanted results as reported at the users forum.
2019-01-26 20:47:09 -03:00
Ale Martinez
e8fe5906c8 Upgrade to VLC 2.2.8 for Travis-ci Linux builds 2019-01-21 14:11:07 -03:00
Ale Martinez
046840513f Upgrade Qt to 5.9.7 for Travis-ci Linux builds 2019-01-20 20:16:00 -03:00
Alejandro Martinez
543c4a6dab Merge pull request #3004 from probonopd/patch-1
Add "Categories=Science;Sports;" on the script used by Travis-ci
2019-01-19 20:28:43 -03:00
probonopd
021bbeb2fa Add "Categories=Science;Sports;" here, too
https://github.com/GoldenCheetah/GoldenCheetah/pull/3003 reloaded
2019-01-19 21:50:50 +00:00
Alejandro Martinez
993eec8946 Merge pull request #3003 from probonopd/patch-1
Add XDG categories
2019-01-19 15:14:03 -03:00
probonopd
fa4ce91b80 Add XDG categories
Sports is not a standalone category as per https://standards.freedesktop.org/menu-spec/latest/apas02.html
2019-01-19 11:38:22 +00:00
Ale Martinez
b5c9651357 Fixed Linux CI upload
linuxdeployqt changed the output name
2019-01-18 19:17:11 -03:00
Mark Liversedge
60dbc5d2e6 DEVELOPMENT BUILD 1901
.. markup a new development build.
2019-01-18 17:07:48 +00:00
Joern
b374ceb4dc Merge pull request #3000 from Joern-R/DE
Update Translation DE
2019-01-17 20:15:12 +01:00
Joern
5105669402 Merge pull request #3001 from Joern-R/FixCI
Fix Windows CI
2019-01-17 20:14:47 +01:00
Joern
dff632f7fd Fix Windows CI
... in the WinCI Configuration the Constants are not referenced through other includes
2019-01-17 19:23:49 +01:00
Joern
1042f0f5b8 Update Translation DE 2019-01-17 18:27:29 +01:00
Mark Liversedge
89068ede1e Banister datafilter
.. banister(metric, nte|pte|perf|cp)

   so you can filter rides where predicted cp is over
   300 with "banister(BikeScore, cp) > 300".

.. of course the real value is being able to access
   banister data in metrics and formulas.
2019-01-16 10:41:13 +00:00
Mark Liversedge
5a66c1342a Banister fixups
.. don't show helper in data table or compare mode.

.. always extend out banister date range to at least
   a year from the current date. To make sure the
   decay is calculated well into the future.
2019-01-15 16:12:25 +00:00
Mark Liversedge
fb83864f83 Banister Windows Contiguous
.. so we compute decay on the curves in periods between
   seasons and in the future.
2019-01-15 07:43:58 +00:00
Mark Liversedge
1148e3aa69 Banister fitting windows
.. split if no gaps in seasons and combine if seasons
   are too short.

.. this way we get fairly stable fits (2yr window size)
   but also get to see parameters reflect aging, so
   p0 declines and k1/k2 fit better.

.. still need to think how t1/t2 should adjust...
2019-01-14 10:46:54 +00:00
grauser
05a8c49053 FitRide : Correct doubled interval duration 2019-01-13 22:27:35 +01:00
grauser
1841faa596 Add media folder 2019-01-13 21:35:32 +01:00
Joern
a2fe09a65e Merge pull request #2997 from Joern-R/WithingsAgain
Re-Introduce connection to Withings
2019-01-13 19:49:11 +01:00
Mark Liversedge
68c5ded23c Enable decay adjustment in Banister Helper
.. can refit to see affect of adjusting parameters.

.. doesn't "remember" them, need to think about what
   that should mean (config in chart, season or athlete?)

.. also made t1/t2 fixed in the fit process so we have
   fewer parameters and need less data to fit.
2019-01-13 15:52:24 +00:00
Mark Liversedge
9b9b6f13fe Banister Model Helper on LTM
.. added a banister helper like on the CP plot

.. you can't adjust T1 and T2 yet, thats coming
   in the next commit

.. also a few fixups related to submax filtering
   of performances and some wip regarding how
   the model fit works (windows, t1+t2 fixed etc).

.. Banister implementation is still under some
   development, testing and validation but is in
   good enough shape to try with your data.
2019-01-12 20:20:54 +00:00
Joern
25f13f4683 Re-Introduce connection to Withings
... remove Nokia from Screens
... access Withings APIs
2019-01-12 19:09:27 +01:00
Hennadiy (Gena) Verkh
5022dba8f3 Allow precise adjustment of the time slider with a keyboard. (#2990) 2019-01-11 14:36:25 +00:00
Mark Liversedge
9871d1e53f Banister Data Managed in Athlete
.. so we retrieve past ones and reuse rather than refresh
   and refit every time we plot it.
2019-01-11 12:45:26 +00:00
Mark Liversedge
a205e7bb73 LTM plot banister with gapped curves
.. we only have banister curves where there is data
   so if there are gaps between seasons we should not
   plot any data.

.. as a result also fixed bug that the qwt gapped
   curve would always plot first zero in a curve.
2019-01-10 18:34:30 +00:00
Mark Liversedge
5cc2e057c8 Fix Banister Windows Build
.. missing header.
2019-01-10 16:02:21 +00:00
Mark Liversedge
0fe714566a Banister Modeling Resources
.. references for the papers it is based upon

.. added a contributed spreadsheet implementation of Banister.
2019-01-10 15:10:11 +00:00
Mark Liversedge
2aa4779df9 Banister Modelling
.. Banister model fitting using LM

.. can plot Banister curves on trends plots;
   - Performance curve (NTE+PTE)
   - Predicted CP curve (Performance curve scaled)
   - Negative Training Effect
   - Positive Training Effect

.. the code is sub-optimal and needs to be refactored
   to cache and refresh less frequently (using the same
   pattern as PMC most likely).

.. the model fitting can fail and needs to be made a
   lot more robust, along with ensuring the samples
   we fit to are appropriate.
2019-01-10 14:55:25 +00:00
grauser
c9581079da Fit : Interval use total_elapsed_time if no time info
fix #2982
2019-01-08 23:00:41 +01:00
Mark Liversedge
971cd4df4b Banister Performances Update
.. filter out submax performances

.. plot performances on LTMplot;
   * tests - marked as TTEs by user
   * weekly performances - found by algorithm
   * submaximal performances - filtered out by algorithm

.. we now have the neccessary data to introduce the
   Banister NTE/PTE and Performance curves in the next commit.
2019-01-08 14:32:31 +00:00
Mark Liversedge
cdfff8f4ed LTMPlot/Tool add banister settings
.. just the chart config, will add curve data and fitting
   code in a later commit.
2019-01-06 17:50:43 +00:00
Mark Liversedge
ae3320d2ec Show performances on LTM plot
.. show weekly best performances (ready for banister curves)
.. show performance tests (also used by banister if present)
.. can toggle which ones to show.
2019-01-05 17:38:27 +00:00
Mark Liversedge
a89607e8b5 Weekly Best Performances for Banister IR
.. extracted when resolving model estimates

.. creates a weekly best performance but only looks for efforts
   between 3 and 20 minutes.
2019-01-04 17:07:18 +00:00
Mark Liversedge
efb1a648f6 CP MMP Filter improvement
.. use powerIndex to select points when t > 120s. This has resulted
   in a much higher hit rate at finding performance tests in MMP
   data (almost 99% of the time).
2019-01-04 13:27:28 +00:00
Mark Liversedge
46abc66484 Banister modeling - PowerIndex performance metric
.. As part of a series of commits to add Banister IR modeling
   this first one introduces a Power Index metric that can be
   used to normalise TTEs of a different duration to a single
   score.

.. This is so we can use performance tests of differing durations
   when fitting Banister model curves to estimate k1 and k2.

.. The average power for an interval/ride is compared directly
   with a power estimate for the same duration using the Morton
   3-parameter model and mean values derived using opendata (where
   CP=261, W'=15.5kJ and Pmax=1100w)

.. For the equivalence to be valid test must be in the 2-20 minute
   range when used in banister modeling, but the index value is
   valid as a comparison to the average athlete for all durations.
2019-01-04 12:31:57 +00:00
Alejandro Martinez
b128bee62d Merge pull request #2968 from riccioclista/python_console_print_expr
PythonConsole: Print expression value when executing simple statements
2019-01-02 12:42:19 -03:00
Hennadiy Verkh
807ea685d6 Added method decodePhysiologicalMetrics to decode garmin/firstbeat specific activity metrics
Added additional metrics to the metadata.xml
2019-01-01 22:05:20 +01:00
grauser
9bb0aebe46 Add test files for Firstbeat/Garmin session metrics Pull request #2986 2019-01-01 22:02:08 +01:00
grauser
49bc27b020 RideMap : Use user custom tiles 2018-12-31 17:46:07 +01:00
Ale Martinez
1ad52086e6 Updated French Translation
Contributed by Arnaud Leclere
2018-12-31 17:32:18 +01:00
Joern
d4afe27f4e Merge pull request #2985 from Joern-R/CCResize
Column Chooser Popup - Text Length
2018-12-31 11:41:29 +01:00
Joern
ef22b59064 Column Chooser Popup - Text Length
... determine widget size for button based on text length (since fixed sizes may not fit for translated texts).
2018-12-29 19:41:30 +01:00
Ale Martinez
679a9bd7c3 Allow to select .gz files on Import
Similar to .zip files
Fixes #2969
2018-12-19 11:58:06 -03:00
Mark Liversedge
61dc7f59f8 Move Google Map API key to chart settings
.. no need to clutter up general settings
2018-12-19 13:50:25 +00:00
Mark Liversedge
8299011181 Fix compile error rDir not found
.. R support is optional, so the reference to rDir
   in cut and paste code fails if R is not enabled.
2018-12-19 13:10:01 +00:00
Mikael Grønfeldt
7cf678307e Support for x-Trainer (http://www.x-trainer.dk) added.
Committer: Mikael Grønfeldt <mikael@gronfeldt.dk>

Signed-off-by: grauser <Damien.Grauser@gmail.com>
2018-12-18 22:01:29 +01:00
grauser
e91b4e998e Sporttracks.mobi : read laps
fix #2981
2018-12-18 21:39:00 +01:00
grauser
ad46bf9b32 FIT : Add debug logs 2018-12-17 23:52:20 +01:00
grauser
39e37073ad RideMapWindow : Add running markers 2018-12-17 23:52:20 +01:00
grauser
d1f255f73d RideMapWindow : Let user with Google API key use the Google Map 2018-12-17 23:52:13 +01:00
Michael Beaulieu
ca9b5b27bb RideMapWindow: 4/4 Display interval markers and draw AvgPwr color paths on OSM 2018-12-17 23:52:12 +01:00
grauser
4eca780a57 RideMapWindow : Remove the google option
Still to do restore the drawShadedRoute (color from powerzone)
2018-12-17 23:52:12 +01:00
Joern
cc22129ae6 Merge pull request #2980 from Joern-R/GroupBy
LTM Reveal Window
2018-12-17 17:07:24 +01:00
Joern
3633a1e73e LTM Reveal Window
- avoid "cut off" text for translated period strings
2018-12-16 15:48:05 +01:00
Ale Martinez
101b82597b Fixes R issue when Home is set on Linux
name was left uninitialized when Home is specified by the user
Reported at the forum.
2018-12-13 18:47:19 -03:00
Ale Martinez
feed0c7635 Save Zones files using UTF-8 for cross platform compatibility
Fixes #2978
2018-12-13 12:01:21 -03:00
Alejandro Martinez
914531edf7 Merge pull request #2979 from MaksVasilev/master
Update Russian translation
2018-12-13 11:37:46 -03:00
Maks Vasilev
f681597a32 Update Russian translation 2018-12-13 17:26:29 +03:00
Ale Martinez
f7d2431e81 Remove references to QwtPlot3d and kQOauth
They are not used anymore
2018-12-11 14:10:53 -03:00
Ale Martinez
7073fb0d09 CP Plot Tests honor sport settings
In Activities view we filter bests (and now tests) to match the
selected activity sport.
2018-12-04 15:49:47 -03:00
Mark Liversedge
a64c6f06d6 CP Plot Tests honor filter settings
.. when finding performance tests the filter settings for the
   chart need to be honored.
2018-12-02 10:12:15 +00:00
Antonius Riha
d817541708 PythonConsole: Print expr value when executing simple statements 2018-12-01 11:20:24 +01:00
Mark Liversedge
0b4d46666d Model CP and W' decay in Morton Model
.. add option to apply a decay factor to CP and W' when plotting
   the model curve in CP Plot.

.. since we always fit to observations <20mins the mostly submax
   points at longer durations in the general population do not
   impact the fit at all.

.. the decay factors for w' and cp have been fit to the results of:

   Effects of Two Hours of Heavy-Intensity Exercise on the Power-
Duration Relationship
   Clark IE, Vanhatalo A, Bailey SJ, Wylie LJ, Kirby BS, Wilkins BW,
Jones AM.
   https://europepmc.org/abstract/med/29521722
2018-11-30 15:56:52 +00:00
Ale Martinez
1a5034514c Fixes Measures FingerPrint to detect changes in decimals
Weight updates via UI involving only decimals were undetected and not saved
2018-11-29 17:00:26 -03:00
Mark Liversedge
ea5c07db0e CP Explainer Deck Updates
.. forgot to commit earlier in the year.
2018-11-27 15:13:32 +00:00
Ale Martinez
0c668c0d0b Fixed error message in Train Library when workouts cannot be copied
The existing message is misleading and it's a source of users
complains when they have the Library set to a read only folder.
Fixes #2945
2018-11-25 20:48:56 -03:00
Ale Martinez
aae62438d3 Changed Notes to Calendar Text in LTMPopup
It shows more context information than notes and allows user customization.
2018-11-19 21:50:31 -03:00
Ale Martinez
d51080ef42 LTM Charts - Changed default precision from 0 to 1 for table view
To match the default used in LTMPlot, useful to export measures s.t. Weight.
2018-11-19 16:30:13 -03:00
Ale Martinez
3f8446b9cf Travis-ci - Added qt59networkauth-no-lgpl to Linux before_install
Trying to solve CloudDb issue
2018-11-13 21:35:08 -03:00
grauser
5ed9890149 RideMap : 3/4 draw interval on OSM 2018-11-13 23:25:39 +01:00
grauser
f6ebdeab8d Fix AeroPod : AeroPod record CdA in the HR series 2018-11-13 21:06:32 +01:00
grauser
ee5e93be43 FitRideFile: Add ibike in manu 2018-11-13 21:05:25 +01:00
grauser
a7844fb6ad CsvRideFile : ibike correct ride time for pause
add XData for calculated power
2018-11-13 21:05:25 +01:00
Mark Liversedge
5f3486ebe5 CP Plot PD Profile W/KG
.. now need to tidy up chart labels.
2018-11-13 18:48:37 +00:00
Mark Liversedge
f60e28e801 CP Plot Power Profile Lines (watts only)
.. need a follow up for w/kg
2018-11-13 17:49:49 +00:00
Alejandro Martinez
5bec0878a3 Merge pull request #2957 from amtriathlon/master
Travis-ci enable Linux build to generate AppImage
2018-11-13 11:48:47 -03:00
Ale Martinez
83d4490031 Travis-ci - Install and enable Python 3.6 and SIP on Linux builds 2018-11-12 17:34:06 -03:00
Ale Martinez
6749574600 Travis-ci enable Linux build to generate AppImage
Existing code for OSX was migrated to scripts on travis/osx without changes.
New scrtps for Linux were added to travis/linux based on previous work
by gcoco and LyzardKing
Install linux dependencies similar to OSX version, including samplerate,
vlc, ical, kml, d2xx, srmio, libusb-compat/libusb1.0 and R 3.5
Enable CloudDB and Cloud services using shared secrets with OSX version
Generate AppImage and set src/$FINAL_NAME to enable automatic deploy
Optionally upload the AppImage to transfer.sh for testing
2018-11-11 13:42:14 -03:00
Ale Martinez
44ea4d4dc3 Better error handling in Fix Elevation
A common error ("Gateway Timeout") is explicitly reported
On error the LUW is terminated to allow the user to undo partial changes.
2018-11-06 17:26:43 -03:00
Ale Martinez
a854b9db24 Fixed Typo in Spanish translation
Fix #2953
2018-11-06 11:11:44 -03:00
thebaron06
edb0444b9f Add support for Daum realtime devices (#2952)
* train: add support for serial daum devices

Add support for daum devices connected via serial port.
Such device could be:
   - Daum Vital
   - Daum ergo_bike series
       * ergo_bike_2002
       * ergo_bike 4004 TRS
       * ergo_bike cardio
       * ergo_bike vita
       * ergo_bike fitness
The only device I own is a Daum Vital, therfore this is the only device
that is known to work correctly.

The default behaviour is to send the load to the device only once to
allow the user to interact with the device. The profile field is used
to pass a _force_ flag in form of a string containing the word _force_.
Doing so will cause the implementation to send the load to the device
every _poll interval_ (default 1s), except the training is paused.

Signed-off-by: Florian Nairz <nairz.florian@gmail.com>

* train: daum: fix unsigned/signed compare mismatch and add return value
2018-11-05 12:46:28 +00:00
Mark Liversedge
b5ed04b7c1 CP Plot show w/kg percentiles
.. should also add 3,7,12,20 concrete percentiles so can review
   regardless of model fit.
2018-11-03 19:21:27 +00:00
Ale Martinez
c5802596dc Remove kQOAuth from travis-ci
It was deprecated on #2881
2018-11-01 19:28:05 -03:00
Ale Martinez
acad616d12 Fixed Precision of Rest HF/LF metrics
Tipically imported values show as zero on Summary
2018-11-01 17:36:30 -03:00
Alejandro Martinez
47cb7c91ef Merge pull request #2949 from gcoco/d2xx-download
Use https for download D2XX1.2.2.dmg
Redirection was breaking the download.
2018-10-29 19:07:06 -03:00
Joern
7a3d4f45e9 Merge pull request #2948 from Joern-R/Translation-DE
Translation
2018-10-29 11:07:56 +01:00
gcoco
aead637786 Enable libusb and libusb-compat (#2950)
Re-enable libusb and libusb-compat for Travis builds
Note there is still an issue with hdiutil.
2018-10-29 08:04:11 +00:00
gcoco
af8e59eea4 Use https for download 2018-10-28 22:53:48 -04:00
Joern
9e8aa07521 Translation
- Update Translation DE
- Enable one more text for translation
2018-10-28 19:43:08 +01:00
Mark Liversedge
50f77a3391 Parameter percentile off by one
.. if you're better than 10% of folks you're not in the 10% percentile.
2018-10-27 12:31:22 +01:00
Mark Liversedge
9fb73099a9 CP Plot Percentiles for CP, W' and Pmax Estimates
.. using analysis from the opendata proejct we have now
   got a normal distribution for CP, W' and Pmax parameters.

.. so we can now plot the percentiles on the CP plot that the
   user's values sit in.
2018-10-27 11:47:15 +01:00
Ale Martinez
5c5b4e1856 Fix CPV units in ScatterPlot
Crank length is converted to meters so CPV is computed in m/s,
but displayed in cm/s
Fixes #2942
2018-10-25 11:26:27 -03:00
Ale Martinez
4c870c7825 AppImage - added libssl.so/libcrypto.so and excluded libxcb-dri3.so.0
Fixes #2915 and #2920
2018-10-24 13:16:54 -03:00
Ale Martinez
2787870c2c CPPlot force refresh when filters change, even if Date Range is the same
Previous behavior was annoying: filters s.t. sport were not applied
until date range changed.
2018-10-23 21:03:11 -03:00
Alejandro Martinez
e032358e69 Merge pull request #2946 from ianmartin/build-without-ical
Build without ical
2018-10-21 10:55:03 -03:00
Ian Martin
2707e3b402 Only include CalDAV.h if have ical library 2018-10-20 23:08:26 +01:00
Ian Martin
3f95d11b98 Only try and build CalDAVCloud if ical is present
CalDAVCloud requires ical so do not add to build unless
ical is present.
2018-10-20 18:22:29 +01:00
Mark Liversedge
aebc5dc388 Crr and CdA Regression Explainer
An explainer from Robert Chung for a regression method to estimate CdA and Crr from field data.

The key point being the generation of additional laps from a multi-lap run -- e.g. 3 x 18s laps of a velodrome
would normally be considered as 3 laps to fit against. Robert's approach is to create 36 laps from this data (!).
The first lap starts at 0s and lasts for 18s, the second lap at 1s ... up to the 36th lap starting at 37s.

We would then be able to get 36 estimates of Crr/CdA and calculate a mean and confidence interval (!).

The document committed explains how that regression would work mathematically, and how we
would adapt for working in the field (we need really good altitude data).
2018-10-06 09:44:51 +01:00
Mark Liversedge
6f59d09cb2 HiDPI: Aerolab lineedits for Cda,Crr etc
.. fixed widths needed *dpiXFactor
2018-10-05 08:36:00 +01:00
Mark Liversedge
e264405302 Fix Aerolab crash on no ride selected
.. when no ride available or last ride deleted lots of crashes. None
   of the slot functions check for null, so lots of crashes.
2018-10-04 09:58:31 +01:00
Mark Liversedge
475288d427 aerolab tests rename directory 2018-10-03 22:03:10 +01:00
Mark Liversedge
5ce7b3b054 Aerolab Test Files
Contributed by:
  * Nate Lesniewski
  * Tom Anhalt
  * Juan Benjumea
2018-10-03 18:55:57 +01:00
grauser
f7f2ca1d65 RideMapWindow : Use leaflet instead of googlemap api for OSM 2/4
Trace ride, intervals and markers
2018-10-03 13:39:00 +02:00
grauser
2068221324 Remove google.api for openstreetmap mode 1/4
This first commit breaks the openstreetmap display
2018-10-03 13:38:35 +02:00
Mark Liversedge
3c822fcc61 DEVELOPMENT RELEASE 3.5 DEV1810 2018-09-27 09:00:55 +01:00
Mark Liversedge
672a16d6fd R2 label use superscript (its squared not 2) 2018-09-25 10:38:34 +01:00
Mark Liversedge
61cf324fa7 Fix units on CP plot work/time
.. performance test markers said "Unknown" for units when
   plotting work / time.
2018-09-23 11:01:17 +01:00
Mark Liversedge
1a8f4bd177 Overview metric for HRV needs to be displayed
.. its rMSSD, without the name the value is meaningless.
2018-09-22 11:55:07 +01:00
Erik Botö
1b2ef12383 ANT: HRV measurement improvements (#2935)
Improved handling of data page 4 for ANT+ HR.
2018-09-22 11:32:31 +01:00
Mark Liversedge
322b774387 HRV R-R data in Train View 3 of 3
.. reads .rr file when processing csv and adds the XDATA
   series "HRV".

NOTE: the HRV processing data added by Leif Warland will
      process the data and calculate SDANN/SDNN and friends
      since we use the same convention as for Polar HRV.
2018-09-22 11:30:51 +01:00
Mark Liversedge
332184fa92 HRV R-R data in Train View 2 of 3
.. record hrv R-R data to .rr file in the "records" folder when
   R-R data is available in train view.

.. next commit needs to read it in and save to XDATA
2018-09-21 19:04:49 +01:00
Mark Liversedge
3a31f5d131 HRV R-R data in Train View 1 of 3
.. collect R-R data from ANT+ devices and deliver to
   the train sidebar.

.. commit 2 needs to save to a file when recording a
   workout in train view

.. commit 3 needs to import the R-R data into XDATA when
   importing a train view CSV file
2018-09-20 15:48:35 +01:00
Mark Liversedge
e87d3b9dec Fix Overview Window steal focus MacOS
.. mousepad touch events require focus, so we disable
   touch events to stop the overview window from
   stealing focus from the ride list when scrolling
   through rides.
2018-09-12 08:52:34 +01:00
Mark Liversedge
143c10d9c0 CP Plot Helper Title for Work/Time
.. add "Work/Time" to model name when using an LR fit
   since we convert to joules.
2018-09-05 07:47:19 +01:00
Mark Liversedge
74fe950fc2 CP Plot Helper show model name
.. set the model overlay title to the full name of the
   model being used.
2018-09-04 21:55:51 +01:00
Mark Liversedge
dd4ff86da7 Fix last commit
.. it converted CPPlot::filterpower to work which
   of course then broke model fitting.
2018-09-01 18:53:02 +01:00
Mark Liversedge
6e91261502 CP plot filter best in Work/Time plot
.. not just when plotting power or w/kg
2018-09-01 18:22:17 +01:00
vlcvboyer
1191b8bd51 fix missing break in switch/case statement (#2918) 2018-08-29 09:52:56 +01:00
Sascha Riemer
9588c9c00b Change GPX decimal separator to dot 2018-08-27 19:19:05 +02:00
Mark Liversedge
2a6083071f LR Model Fit calculate R2
.. lots of folks understand what R2 means for a linear
   regression so calculate it alongside RMSE when we
   are performing a linear regression.
2018-08-25 07:47:23 +01:00
Mark Liversedge
9e5242a782 CP Plot fix y-axis for higher values of PMax
.. when model estimates for Pmax are higher than
   the bests data (e.g. when fitting to perf tests)
   then we need to adjust the y-axis to fit.
2018-08-23 19:33:29 +01:00
Mark Liversedge
bb4a8606a6 Add Last 24 hours to date ranges
.. particularly useful when modelling with a test protocol from a
   single ride e.g. 12-7-3 CP single session test.
2018-08-23 10:20:44 +01:00
Mark Liversedge
1721064184 CP Chart Plots the Linear Work Time Model
.. so you can see how the parameter estimates look when plotted
   in work time.

.. this means parameter estimation and model visualisation are
   separated -- you can estimate CP/W' using the extended model
   and an envelope fit but visualise with the linear work model.
2018-08-23 09:10:32 +01:00
Ale Martinez
8b2473d715 Fixes Last 6 weeks season duration
It is current day plus 41 previous ones, like existing -x days seasons
2018-08-22 21:01:22 -03:00
Alejandro Martinez
ee966c0a76 Merge pull request #2905 from DRiKE/ifdef-fix
missing ifdef GC_HAVE_ICAL
2018-08-21 21:24:55 -03:00
Luuk Hendriks
6979d665d7 missing ifdef GC_HAVE_ICAL 2018-08-22 00:54:43 +02:00
Mark Liversedge
95fd240577 Update to commit 39269cb5ca on CP2 search intervals
.. CP2 search interval mismatch betweem gui options and
   the PDModel definitions.

.. CP2 always needs 12m+ value.
2018-08-19 19:40:10 +01:00
Mark Liversedge
8a64b65ebb Linear Regress for Work/Time Model Fit
.. add fitting option to fit CP2 model to points using
   a linear regress.

.. kinda ironic that the most common and straight forward
   method for estimating CP/W' is added so late.
2018-08-17 18:39:16 +01:00
Mark Liversedge
4f19f75ed1 Tidy Up CP Plot Overlay
.. remove FTP

.. CP first, then W' and Pmax
2018-08-17 10:15:57 +01:00
Mark Liversedge
39269cb5ca Extended CP Model Search Intervals
.. slight tweak to aerobic interval to match the 7-20min
   interval used by CP2/CP3 and to reflect best practice.
2018-08-12 15:57:41 +01:00
Mark Liversedge
9208bfa617 CP window fit options
.. when model changes set the fit type to the best practice
   we would recommend with that model (and in the case of
   multimodels disable unsupported fits)

   * CP2/CP3 - LMA and Performance Tests
   * Extednded CP - Envelope and all MMP
2018-08-12 12:27:06 +01:00
Mark Liversedge
5046fe689c Hi-DPI Interval Sidebar
.. color block.
2018-08-10 22:39:22 +01:00
Mark Liversedge
c66a9d15f6 CP Plot refresh on intervals changed
.. to account for intervals being converted to performance tests
   or vice versa.
2018-08-10 15:26:17 +01:00
Mark Liversedge
3384114bdc CP 2/3p model interval defaults
.. change the default intervals within the models - these
   are used when estimating automatically via envelope and
   were too long.

.. truncated the data used by the models to avoid using
   MMP data beyond 20 minutes for 2/3p model.

.. results in much more robust estimates in CP History.
2018-08-09 15:59:32 +01:00
Mark Liversedge
34c402a3d2 Add LevMar lib to version dialog
.. in source tree, but may change.
2018-08-08 16:04:28 +01:00
Mark Liversedge
d9b12d63f7 Alternative Levenberg-Marquardt algorithm
.. allows constrained fits

.. this is a GPL lib that is included into the
   source tree to avoid adding another painful
   deendency.

.. for details of the lib please see:
   http://users.ics.forth.gr/~lourakis/levmar/
2018-08-08 14:34:35 +01:00
Mark Liversedge
7ff5a970df Disable WS/Velo models
.. the fit is wrong and need to look at that
   more closely.

.. in the meantime disabled in CPPlot.
2018-08-07 16:23:55 +01:00
Mark Liversedge
22ce1dc041 3 Param CP model env fit settings
.. default interval settings for search were way too high !
2018-08-06 15:05:32 +01:00
Mark Liversedge
e07c8494f1 Text Labels on CP plot for Performance Tests
.. tooltips getting too tricky with so much being plotted
   and since there are so few perf tests a label should be ok.
2018-08-06 09:25:19 +01:00
Mark Liversedge
73366fd582 Add tests() data filter function
.. returns the number of performance test intervals for the ride.

.. can be used to filter for only rides with tests, or even multiple
   tests in the same ride (e.g. 3,7,12 tests).

.. may add additional paramaters later to e.g. filter by duration or
   average power etc.
2018-08-06 07:48:22 +01:00
Mark Liversedge
9cedf54cd5 Performance Test Intervals Bold Text
.. in the interval sidebar.

.. maybe too subtle?
2018-08-06 00:10:19 +01:00
Mark Liversedge
5455714a47 CP Plot Performance Test Aesthetics
.. honour interval color selected by user when plotting
   performance tests on the CP plot

.. performance test symbol size is enlarged if the test is
   within the currently selected ride (in activity view).
2018-08-05 23:01:42 +01:00
Mark Liversedge
3aab662642 Interval sidebar helper for performance tests
.. right click options to
   * mark a user interval as a performance test
   * create a performance test interval from a disovered interval

.. this way when interval discovery finds a hard effort that you
   want to clone as a performance test, you can do it with one
   click.
2018-08-05 21:55:39 +01:00
Mark Liversedge
778fa11b7b CP Model Explainer Deck
.. will maintain versions here in the GC repo.
2018-08-05 18:59:39 +01:00
Mark Liversedge
a1635f075c Support Performance Tests for watts and watts/kg
.. in the CP plot and associated modelling functions.
2018-08-05 13:15:44 +01:00
Mark Liversedge
d4cb586850 CP Chart Modelling Improvements
.. CP plot modelling will fallback when insufficient data
   is available to model reliably, with a precedence:

      1. Performance tests
      2. Filtered MMP
      3. All MMP

.. when modelling for a single ride collect bests/performance
   data for the period up to that ride.

   This is so as you select older rides the model reflects the
   training status at that ride, not for the current period.

.. add adhoc season for 'Last 6 weeks' since it is a common
   timeframe to use when tracking impact of training
2018-08-05 12:31:11 +01:00
Mark Liversedge
c79565cbdd Better CP Plot Fit Summary
.. tell user what fit or data was used as there is a cascade back
   depending on the model selected and the availability of data.

.. the summary is also now in grey to indicate it is supplementary.
2018-08-03 12:14:39 +01:00
Mark Liversedge
54b161261e CP plot show info about fit
.. RMSE for now, just to get a basic sense

.. what type of fit was performed (since there is a fallback)

.. how many datapoints were used in the fit and RMSE calculation.
2018-08-02 21:30:24 +01:00
Ale Martinez
beb5b376b8 Replace NP for IsoPower in DataFilter validation and syntax helpers
Issue reported at the forum
2018-07-31 13:20:10 -03:00
Mark Liversedge
1a7839d051 RideFile::watts is sufficient
.. don't need to fully quality RideFile::SeriesType::watts
2018-07-30 14:53:21 +01:00
Mark Liversedge
4437e94c9a CP fit to performances
.. add option to CP chart to fit model to marked performances.

.. works, but very crude UI - no warnings if not enough data and
   no constraints on combinations of model, fit and fit data that
   can be selected.

.. will tidy up over the next few days.
2018-07-30 13:22:21 +01:00
Mark Liversedge
061df5fc8d Plot performance tests on CP chart
.. as a first pass lets show the performance tests on the CP
   plot to get a sense of how any bests / models align to the
   results of our tests

.. we will look to fit to the tests using LMA in another commit.
2018-07-30 11:01:21 +01:00
Mark Liversedge
649d3ee014 Fix Interval Color bug
.. editing a user interval color never worked properly.
   the color wasn't changed or remembered at all.

.. lots of independent bugs conspired to cause this but
   mostly it was because the interval color was not
   recorded in the ride file.

NOTE: files created with this release will not be
      backwards compatible with earlier releases.
2018-07-29 22:01:49 +01:00
Mark Liversedge
a45fe546f9 Mark Performance Tests
.. allow the user to set a flag "Performance Test" against an interval
   within an activity.

.. the distinction is needed to highlight the section of an activity
   that was a test (as opposed to the entire activity containing
   test efforts.

.. this is so we can fit them to PD and IR models in the future
   avoiding the need to use algorithms to extract TTE type efforts.

.. the update was surprisingly complex since we need to update the
   ridefile to record this with the interval and also update the
   ride cache as well as adding the bool to all the interval helper
   functions.

.. along the way it became clear why user specified colors for
   intervals were getting lost (they are not in the ridefile) and
   will fix this in another post.

.. NOTE: ridefiles created with this version will not be backward
         compatible with earlier versions because they contain a
         new field for intervals marked as performance tests.
2018-07-29 16:08:19 +01:00
Ale Martinez
0953c0d3dc Removed local instance of SpecialFields from RideMetadata
Access SpecialFields::isMetric() via context->specialFields
Avoids duplication and fixes #2894 since the context->specialFields
is updated in RideCache when user metrics definitions are loaded.
2018-07-28 18:20:40 -03:00
Ale Martinez
bbe8056c45 Add Hrv4Training sample file with 12h time format
Also fix PM times
2018-07-25 11:10:00 -03:00
Ale Martinez
4667bce7da Parse Hrv4Training files using 12hr format
Fixes #2891
2018-07-24 19:24:34 -03:00
Ale Martinez
600c416f06 Changed Hrv measures to return zero when no record for date
Fixes #2896
2018-07-23 20:16:40 -03:00
Ale Martinez
5b4e754d0a Refresh PMC data when Seasons change
To consider possible changes on Starting LTS
2018-07-23 15:35:04 -03:00
grauser
55ec3973c3 FIT : Change the time_offset reference
Bryton files were impacted

fix #2029
2018-07-17 22:21:37 +02:00
Ale Martinez
e0a4330d30 Show model parameters on CPPlot for aPower and aPowerKg
Curve fitting was already enabled but parameters were not displayed
2018-07-06 20:14:49 -03:00
Ale Martinez
28e5ef66d0 Notify when data processors are running on import
Some processors s.t. Fix Altitude can take a while and
users assume the saving hanged as reported on the forum.
2018-06-30 12:56:11 -03:00
Mark Liversedge
a86b0e9b74 Update build id for development release 2018-06-08 18:24:57 +01:00
Mark Liversedge
555ec8116c Fix Version Dialog
.. no longer need kqoauth version
.. lmfit is local and v7.0
2018-06-02 12:06:01 +01:00
Mark Liversedge
e75cc607f1 Remove QTSOAP and KQOAUTH from gcconfig.pri
.. they're not required anymore.
2018-06-02 11:13:46 +01:00
Mark Liversedge
cdd99da9c9 Deprecate KQOauth
.. its dead (not updated for 5 years)

.. it introduces dependency issues with openssl/crypto/icu
   on Linux distros

.. we don't need it, since OAuthDialog does the heavy
   lifting we need (ok, its not pretty but it works).

.. old code moved into the deprecated folder

Fixes #2881
2018-06-02 11:01:43 +01:00
Mark Liversedge
9e21ececff Fix OAuthDialog 'code' parse url
.. the code to parse the redirect url and exract
   the query item 'code' was fragile -- and got
   broken when Strava added a new query item to
   the returned URL.

.. we now use QUrlQuery to extract in a more
   robust and future proof way

Fixes #2879
2018-05-31 21:13:24 +01:00
Alejandro Martinez
aad45092ae Fix Windows CI Builds
Qt 5.9.4 was replaced by Qt 5.9.5 on May 16 (https://www.appveyor.com/updates/2018/05/16/), test the change to 5.9 symlink to avoid future problems.
2018-05-30 12:40:12 -03:00
qheath
c8523a2716 various minor bugfixes + warningfixes (#2878)
* fix unclosed file descriptors

* remove various compiler warnings

sometimes it was only ambiguous indentation, sometimes bugs were fixed:

- forgotten `break;` instructions or `fallthrough` annotations:
  - src/ANT/ANTChannel.cpp
  - src/Charts/CriticalPowerWindow.cpp
  - src/Charts/MUPlot.cpp
  - src/Core/DataFilter.cpp
  - src/FileIO/RideFileCache.cpp
  - src/FileIO/RideFileCommand.cpp
  - src/Train/DialWindow.cpp
- forgotten braces:
  - lmfit/lmmin.c
  - src/FileIO/XDataDialog.cpp
- test on the wrong variables:
  - src/Gui/Pages.cpp
- wrong parenthesis
  - src/Charts/CPPlot.cpp
- missing macro argument
  - src/Cloud/WithingsDownload.cpp
- missing `return;` statement
  - src/Cloud/Xert.cpp
- unused variables
  - src/Gui/DiarySidebar.cpp
- unclear indentation
  - src/Core/RideItem.cpp
  - src/FileIO/BinRideFile.cpp
  - src/Metrics/PaceZones.cpp
  - src/Metrics/RideMetadata.cpp
  - src/Metrics/Zones.cpp

* remove unnecessary Leaf::Parameters enum value from data filters

lists of parameters don't exist as such outside of the parser, and have
no business using the same type `Leaf` as complete terms anyway

* remove unnecessary argument

`leaf1.print(leaf2,...)` would print `leaf2` and completely ignore
`leaf1`, so now `leaf2.print(...)` is used instead
2018-05-30 13:33:02 +01:00
Mark Liversedge
4bda57919c Workout Editor more complete effort search
.. when looking for efforts in a workout that are at or
   above the limit of the athlete we stopped as soon as
   we found a section that was too hard.

.. we now keep looking for impossible sections since there
   are often multiple hard efforts hidden within a longer
   section.

.. there does not seem to be any considerable performance
   overhead with this approach.
2018-05-28 10:00:51 +01:00
Mark Liversedge
2b64b663e1 Workout Editor Warning use 3-param CP model
.. when warning if sections of a workout TTE is longer
   than athlete ability use the 3-param model not the 2
   param model.

.. this will check intervals shorter than 2 mins.

.. was supposed to do this originally, but got lost in
   other fixups and development.
2018-05-27 12:45:20 +01:00
Mark Liversedge
3e417f8912 Minor LMFIT fixups
.. add the copyright and disclaimer for lmfit source
.. remove references to LMFIT from gcconfig.pri
2018-05-24 18:26:29 +01:00
Mark Liversedge
f5055aa0e3 Add LMFIT source to repo
.. makes compilation easier and removes a dependency
   for what is effectively 2 C-source files.

.. additionally, getting the lmfit lib to compile
   on windows with cmake was frought with issues.

.. also fix a debug message left behind by previous
   commit.
2018-05-23 11:24:04 +01:00
mark-inderhees
73ef4ff03f Add telemetry for time to next erg point (#2867)
* Add telemetry for time to next erg point

* Remove nextPoint. Instead use rightPoint.
2018-05-22 07:30:18 +01:00
Mark Liversedge
ba9bab3993 Add Least-Squares fit to CP Chart - 1 of 2
.. adding an option to select least squares fit to the cp
   chart, in addition to the existing envelope fit.

.. additionally, if filter bests option has been selected
   the least squares fit will use these points rather than
   all the points (since well over 95% will be submaximal).

.. It requires the lmfit library to be available - and this
   has been an non-optional install for over a year - we
   just haven't used it prior to this commit.

.. Each PD model needs to implement three functions to enable
   the least squares fit to work:

   * int nparms() - returns the number of parameters
   * double f(double t, double *parms) - parametric function
   * bool setParms(double *parms) - set the parameters post fit

.. This commit implements it for CP derivatives;
   * Classic CP - 2 parameter model
   * Morton 3 Parameter - 3 parameter model
   * GC Extended CP model - the extended model

   BUT: it is implemented and disabled for eCP for now until
        we can set parameter constraints correctly.

.. A second commit is needed for the remaining models from
   Ward Smith and Mike P. This should also show which of the
   filtered points have been used for curve fitting on the
   chart (maybe a different color)
2018-05-20 18:40:51 +01:00
Mark Liversedge
b4a6690d6b Turing SIG Talk
Make available for download.
2018-05-16 14:41:49 +01:00
Mark Liversedge
973e38b782 Train view negative watts not allowed
Fixes #2868
2018-05-16 09:32:39 +01:00
Mark Liversedge
191ca89cef User Survey
Should have placed into the repo a long time ago.
2018-05-08 22:27:24 +01:00
Ale Martinez
b274aee402 Add Peak Hr and Hr Zone Metrics
Fixes #2863
2018-05-06 19:01:17 -03:00
Ale Martinez
5c9a233e96 Changed Python XData access points for consistency
xdataNames, xdataSeries and xdata refer to low level functions
activityXdata is a wrapper to obtain XData series by name without interpolation
activity includes all XData series interpolated
2018-05-05 13:09:02 -03:00
Ale Martinez
efabcf84e3 Add XData series to Python GC.activity(activity=None, join="repeat") 2018-05-05 12:29:58 -03:00
Ale Martinez
3902405feb R activityXData - no need to recompute derived series 2018-05-04 17:17:33 -03:00
Ale Martinez
434c15ad50 Add R GC.activity.xdata(name="", compare=FALSE)
When name="" returns a list of XData series names present
When name is an XData series present return a dataframe with vectors for:
time, distance and each valuename
with a row for each XData sample.
Implements #2847
2018-05-04 16:21:36 -03:00
Ale Martinez
e1da05d00f Python activityXdataSeries result name changed to name_series 2018-05-04 14:22:58 -03:00
Ale Martinez
119b889cb4 Add activityXdataNames(name="", activity=None)
When name="" it returns XData names
When name is one of the names for the activity it returns valuenames
To dinamically obtain names/series for activityXdata and activityXdataSeries
2018-05-02 21:02:32 -03:00
Ale Martinez
ead2650f15 Add Python activityXdataSeries(name, series, activity)
To retrieve XData series without resampling, series can be
"secs", "km" or a valuename for the requested XData name.
Fixes #2847
2018-05-02 19:40:57 -03:00
Ale Martinez
c9d3088aa1 RChart - Run script when intervals/selections change
On Activities view, last part of #2848
2018-05-01 09:51:42 -03:00
Ale Martinez
17dbb48fc4 Add R activity.intervals
Fixes #2848
2018-04-30 23:25:30 -03:00
Ale Martinez
cba2d1122d Fix Python activityIntervals start and stop
Changed from Int to Float since they may be not integer
2018-04-30 17:20:13 -03:00
Ale Martinez
bdf88cae98 Python seasonIntervals time offset by start seconds
Fixes #2860
2018-04-30 16:59:28 -03:00
Mark Liversedge
4e3b8d0548 Merge pull request #2859 from bwalding/patch-1
Correct the link to the user list
2018-04-29 14:49:24 +01:00
Ben Walding
1e53e857aa Correct the link to the user list 2018-04-29 21:49:07 +10:00
Mark Liversedge
d7613e9cc1 Merge pull request #2858 from bwalding/raise-after-oauth
Ensure the Cloud Service wizard on top after the OAuth modal dialog closes
2018-04-29 12:40:16 +01:00
Ben Walding
cf64c25d61 Ensure the ordering of windows after the OAuth modal dialog closes 2018-04-29 21:30:18 +10:00
Mark Liversedge
ce4d3eb108 Merge pull request #2856 from bwalding/lap-distance
Add Lap Distance and Lap Distance Remaining dials and telemetry
2018-04-29 10:37:25 +01:00
Ben Walding
5a065ca07c Add Lap Distance and Lap Distance Remaining dials and telemetry 2018-04-29 14:24:13 +10:00
Ale Martinez
5ea8903edc Add Python activityIntervals
Python half of #2848
2018-04-27 21:09:35 -03:00
Ale Martinez
ab3ce3b242 Remove datafilter debug 2018-04-27 21:07:27 -03:00
Mark Liversedge
cf9de7354d Compatibility Metrics and Metric Overrides
.. if metadata is setup to use TSS, NP, IF then they
   don't override the base metrics coggan_{tss,np,if}
   this is because the symbol being used is for the
   compatibility metrics which is one level of
   abstraction away from the underlying metric.

.. instead we now handle the symbols within the
   RideMetadata class, which maps TSS, NP, IF to
   the coggan_tss, coggan_np and coggan_if symbols.

Fixes #2852
2018-04-25 09:56:17 +01:00
Ale Martinez
1f094f5712 Always expand lap swim Fit and Tcx files
Even if Garmin Smart Recording is not enabled, make users life simpler
Since otherwise the datais useless and the original lenght-by-length
data is preserved as XData.
2018-04-24 13:51:14 -03:00
Mark Liversedge
eb363c3fab Fix Swim FIT parse crash
.. not checking timeIndex() for out of bounds
   when secs goes negative during parsing.

.. also, enable interpolation for swim laps by
   default to ensure no data loss (i.e. don't
   insist on garmin smart recording setting).

Fixes #2953
2018-04-24 10:10:02 +01:00
Alejandro Martinez
8f0fef686b Merge pull request #2850 from amtriathlon/TriScore
TriScore - On zero fallback to TRIMP Zonal Points for HR base score
2018-04-23 20:02:38 -03:00
Ale Martinez
db6eec5029 TriScore - On zero fallback to TRIMP Zonal Points for HR base score
New users comming from Strava, TP, etc. expect this behavior by default
This doesn't affect single sport metrics, only the global score.
TRIMP Zonal Points are a reazonable proxy and they are configurable
via trimp-k coefficients in HR Zones.
2018-04-21 19:04:17 -03:00
Ale Martinez
55e9c5ed45 Fix copy paste error in previous commit 2018-04-20 18:46:55 -03:00
Ale Martinez
8b10ebc96e CloudDB Download - Warn the user dowloading a Python chart if Python inactive
Same logic as the one existing for R charts
2018-04-20 15:05:21 -03:00
Ale Martinez
72a78e36ce Remove references to PYTHON3_VERSION from gcconfig.pri.in
No need for it after #43d264e3cb929fb0d2094a9071c4dd67891b9613
2018-04-20 11:19:32 -03:00
Mark Liversedge
43d264e3cb PYTHON3_VERSION set from PY_MINOR_VERSION
.. so we don't have to remember !
2018-04-20 08:38:37 +01:00
Ale Martinez
9751876703 Check the python3 version used to build matches the one found at runtime
To avoid crashes on Py_Initialize when 3.6 build finds 3.5 or vice-versa
Python integration is disabled and the used is notified if it was enabled.
2018-04-19 12:40:18 -03:00
Ale Martinez
1cc8f15dba Add deploy.sh script to generate Linux AppImage
To be run after starndard Linux build
2018-04-19 12:30:49 -03:00
Ale Martinez
8a9b775ff7 Add support for ISO8601 extended date time format with milliseconds
Fixes #2750
2018-04-11 20:29:45 -03:00
Mark Liversedge
2c690b2ff0 VERSION 3.5 DEVELOPMENT BUILD 1804
.. update version numbers for dev-1804
2018-04-10 21:49:27 +01:00
Alejandro Martinez
be22ebfbac Merge pull request #2844 from amtriathlon/Seasons-Phases-Events
Seasons, phases and events enhancements
2018-04-10 13:19:45 -03:00
Ale Martinez
5e43ec9368 Sync Events with Calendar if remote is configured
upload new Events to remote calendar and download to update the local calendar
Updates or deletes are not implemented
Fixes #1979
2018-04-10 10:57:10 -03:00
Ale Martinez
c667f96510 Show Season/Event label in stacked LTM Charts for each 4 charts
Fixes #1943
2018-04-10 10:57:10 -03:00
Ale Martinez
11a3c9afe0 Refresh LTM charts when seasons change
So season boundaries and event markers are updated accordingly
2018-04-10 10:57:10 -03:00
Ale Martinez
52b63b61ef Add Description to Season Event
Fixes #2617
2018-04-10 10:57:10 -03:00
Ale Martinez
d0e0a1b449 Add priority to Season Events
Fixes #1724
2018-04-10 10:57:10 -03:00
Ale Martinez
0f7990a894 Enable Event drag&drop in LTMSidebar to allow reordering
Fixes #565
2018-04-10 10:57:10 -03:00
Ale Martinez
982d357a7b Some Consistency checks for editing Seasons-Phases-Events
Names must be not empty
Phases must be fully included in the corresponding season
Events must belong to the corresponding season
2018-04-10 10:57:10 -03:00
Mark Liversedge
ea8df0e3ec Calendar Cloud Services Configuration
.. configuring calendar access was lost when
   refactoring the cloud account config.

.. we use the cloud service framework for the
   config steps (Oauth/user+pass etc).

.. existing code for interacting with the
   service in CalendarDownload.cpp and
   CalDAV.cpp is left untouched for now since
   it isn't used in many places.
2018-04-10 14:04:25 +01:00
Mark Liversedge
8f4f979d7a R default location on Fedora
.. is /usr/lib64/R

.. so when we look in "the usual places" on Linux for
   R_HOME we now look here too.
2018-04-09 13:26:26 +01:00
Mark Liversedge
d9349150f6 Deprecate R scripts in DataFilter/UserMetric
.. since the R interpreter doesn't support multithreading* and this
   is needed for metric computation

   * we could get around this with IPC/signals but decide it was not
     worth the coding effort and maintenance overhead.
2018-04-08 17:09:49 +01:00
Alejandro Martinez
352c10e734 Merge pull request #2843 from amtriathlon/PythonScripts
Added ScriptContext for Python APIs called from DataFilter scripts
2018-04-08 11:48:36 -03:00
Ale Martinez
698ea4eb0b Added ScriptContext for Python APIs called from DataFilter scripts
Carry RideItem, Specification and Metrics to consider the cases when
the script is part of a UserMetric or an LTMPlot formula
Python series, activityWbal and activityXdata honor RideItem and Specification
Python activityMetrics honors ScriptContext RideItem and Metrics
Python activityMeanMax honors ScriptContext RideItem
Force recomputation of metrics just in case Python Scripts were used before
2018-04-08 10:59:43 -03:00
Mark Liversedge
db2ebb63fa Disable OpenData if Secret not defined
.. developer builds will try and post and continue to try to
   post despite the fact it will never work.
2018-04-07 09:29:22 +01:00
Mark Liversedge
efc61b16b1 Remove config tab from about dialog
.. it serves no real purpose since its only visible on
   developer builds and in some respects is "undesirable".
2018-04-06 11:47:20 +01:00
grauser
9e483826be SportTracks : Estimate speed from distance
fix #2512
2018-04-05 23:50:54 +02:00
grauser
dccc7c183c SportTracks : repeated data are omited 2018-04-05 23:43:44 +02:00
grauser
1d4fd41404 Translation : French translation improvement provided by 00livier
fix #2839
2018-04-04 07:37:53 +02:00
Mark Liversedge
8f2c0d10bd Import OpenData zip ignore JSON summary
.. just set it to error and import all the rest.
2018-04-03 19:24:32 +01:00
Mark Liversedge
b0c6a5b3b1 OpenData CSV support
.. enables import of an opendata.zip file to get all the workouts
   imported in one step.
2018-04-03 15:59:47 +01:00
Mark Liversedge
a6a16124db Fix Compatibility metrics
.. were skipped when writing the ridecache file, so lost on restart!!

.. also now fix a refresh with new user metric version, almost certainly
   not needed but better to be safe than sorry.
2018-04-02 21:12:46 +01:00
Mark Liversedge
7482b35ca9 Diary Show Week & Refresh
.. removal of summary pane in diary sidebar broke refreshing
   when selecting a ride and no longer set the date range
   appropriately.

.. the diary pane needs overhauling in v4 alongside planning
   this is just a temporary hack.
2018-04-02 14:37:14 +01:00
Mark Liversedge
050a26d638 OpenData Dialog reference OSF.io project
.. we are not going to publish via an S3 bucket, instead there
   is now an OSF.io project to host and share the data collected.
2018-04-02 14:00:39 +01:00
Ale Martinez
4af583917a Remove dangling reference to setSummary from LTMSidebar
Related to commit 094307f6f8
2018-04-01 17:11:51 -03:00
Mark Liversedge
9436806879 Deprecate Summary in Diary View
.. remove another webview dependency.
2018-04-01 16:31:27 +01:00
Mark Liversedge
094307f6f8 Remove Summary from Trends Sidebar
.. slowly removing the summary widget and webview dependencies.
2018-04-01 16:25:00 +01:00
Mark Liversedge
b84ddb5127 RideNavigator::setRide() check for NULL
.. fixes SEGV edge case.
2018-04-01 15:44:46 +01:00
Mark Liversedge
f8af6334fb Estimator lazy refresh
.. Refresh model estimates when rides added, deleted, saved.

.. Lazy refresh will cancel any pending or running threads and
   trigger a new one in 15 secs time.

.. This strategy allows us to call a lazy refresh even when importing
   large number of rides, since the start will be delayed and cancelled
   by the next ride added etc.

.. The thread stop() function is also called by the destructor to stop
   when the user exits and avoiding delay/SEGV on exit.
2018-04-01 14:46:30 +01:00
Mark Liversedge
6e6db666c5 Refactor PD Estimates fix numerous SEGV
.. new Estimator class to refresh model estimates in a thread.

.. localised all data access to the new class to resolve issues
   with thread safety.

.. RideSummary and LTMPlot do not trigger refresh of the estimates

.. added a QMutex around access in Athlete::getPDEstimates and the
   code in Estimator::run that updates them.

NOTE:

   will still need a follow-up commit to resolve estimate refresh
   e.g. after ride saved, or rides imported or rides downloaded from
   a cloud service. This is a challenging problem since refreshes
   need to be 'very lazy' to avoid wasted cycles.

Fixes #2820
2018-04-01 12:41:56 +01:00
Mark Liversedge
3aefdf1813 Fix OpenData post success diag message
.. needed to read response data before debug output.
2018-03-31 17:28:20 +01:00
Mark Liversedge
12c81c2888 OpenData Fix Error Handling SEGV
.. quit() in QThread::run() is a NOOP, should use return instead.
2018-03-31 17:18:33 +01:00
Mark Liversedge
48c9e060d3 CI Travis fails on libusb
.. looking to fix that.
2018-03-31 12:44:47 +01:00
Mark Liversedge
54ca96ffd9 OpenData uses sample data
.. after a long discussion about the relative merits of collecting
   aggregate data with ML and Stats experts we concluded that it
   was far better to collect sample data.

.. this means a typical opendata zip file is now roughly 30x the
   size, so what was 1mb is now more likely to be 30mb.

.. as a result the files will be published via an AWS S3 bucket
   since we would hit limits at github very quickly.

.. the opendata code has been updated to:

   * ask permission now lists sample data that is collected
   * we include csv files for all workouts in the zip that is sent
   * we resend when the version of the file format changes

.. additionally the config dialog now allows users to change
   their opt-in/out for sharing with opendata.
2018-03-31 12:18:43 +01:00
Ale Martinez
b17c62c314 Fixed Anomaly detection and FixGaps to deal with 1 sec. gaps
Currently 1 sec gaps go undetected in Editor and
they are not fixed by FixGaps with tolerance=1
Related to #2838
2018-03-30 20:02:49 -03:00
Ale Martinez
900d59c795 Fixed interpolation of streams downloaded from Strava
Fixed #2838
Fix Gaps and Anomaly detection also have the same problem: 1 sample gaps
go undetected
2018-03-30 18:04:36 -03:00
Joern
12545a4f3f Merge pull request #2825 from Joern-R/Sync2
Cloud Upload/Sync - check for unsaved activities
2018-03-19 18:37:37 +01:00
Ale Martinez
bebbd220d7 New Event date defaults to season end date 2018-03-18 21:35:54 -03:00
Alejandro Martinez
cac45a7f60 Merge pull request #2827 from amtriathlon/SeasonEvents
Fixed crashes on edit/delete events when a phase is selected
2018-03-18 19:32:38 -03:00
Ale Martinez
2f38661276 Fixed crashes on edit/delete events when a phase is selected 2018-03-18 17:53:11 -03:00
Mark Liversedge
84e6cc5769 Merge pull request #2826 from amtriathlon/SeasonEvents
Fixed LTM Chart to show Events on Phases and Season end date
2018-03-18 20:43:10 +00:00
Mark Liversedge
12b91b2998 Fix last commit on Windows
.. need includes for QScrollArea and QPushButton
2018-03-18 20:40:54 +00:00
Mark Liversedge
0860fe771f OpenData prompt for permission and post
.. at startup we ask the user for permission to share

.. once permission is granted the upload is performed and
   re-done every year, so long as > 100 workouts have been
   collected since the last time.
2018-03-18 19:51:45 +00:00
Ale Martinez
07b18e6d5c Fixed LTM Chart to show Events on Phases and Season end date
Events ocurring on Season end date were not showing
Seasons ending, but not starting, on chart date range were not considered when looking for events
Fixes #2620
2018-03-18 15:30:41 -03:00
Mark Liversedge
afff2c92bc OpenData new class to post to service
.. Will prepare and post data to an OpenData server running
   in a background thread:

   * will find servers from www.goldencheetah.org
   * uses first server it finds that is running
   * prepares and sends data

.. need to write the code to get explicit permission from
   the user to do it, then send data when worthwhile.

.. thinking this is annually, but only if > 100 new workouts.
2018-03-18 17:05:46 +00:00
Antonius Riha
ecd5b1568d FilterHRV: Calculate rest HR from AVNN #2797
This ensures the filter used for all the other HRV metrics is also applied to rest HR . The previously used "average_hr" metric is calculated without the filter, which leads to skewed results due to the relatively short timespan and data point count of an HRV measurement.
2018-03-18 12:40:58 -03:00
Joern
701b6b721e Cloud Upload/Sync - check for unsaved activities
... check for unsaved activities and allow saving before starting sync/upload
2018-03-18 15:09:10 +01:00
Joern
ac3dce897c Merge pull request #2824 from Joern-R/Sync
Cloud Sync Dialog
2018-03-18 15:06:24 +01:00
Joern
0a3846b447 Cloud Sync Dialog
... auto-adjust columns width to header and content size (to show all contents)
2018-03-18 12:43:02 +01:00
Mark Liversedge
40819711bc Fix last commit on windows builds
.. appsettings is declared in Settings.h
2018-03-18 11:25:38 +00:00
Mark Liversedge
ef0c97c405 Add athlete info to opendata file
.. no PII info

.. just Year of Birth, Gender and unique id

.. the identity of the unique id is ONLY known by the contributor
2018-03-18 09:39:21 +00:00
Mark Liversedge
48d0d05c6f Merge branch 'master' of ssh://github.com/GoldenCheetah/GoldenCheetah 2018-03-18 09:24:00 +00:00
Joern
e1fbe54b09 Merge pull request #2804 from riccioclista/allow_override_global_conf_file_name
Settings: Allow using different global conf file name
2018-03-17 18:32:27 +01:00
Joern
4022821b82 Merge pull request #2784 from Walibu/master
Allow slope up to 40% instead of only 20% and remove rounding effect from smoothing
2018-03-17 18:28:34 +01:00
Joern
e6770edfc3 Merge pull request #2805 from riccioclista/select_last_used_phase_on_gc_start
LTMSidebar: Load most recently selected phase on GC start
2018-03-17 18:15:58 +01:00
Joern
ed18178d73 Merge pull request #2823 from Joern-R/ci
Fix CI-Build for Windows
2018-03-17 17:41:28 +01:00
Joern
80e535e48e Merge pull request #2822 from Joern-R/Translation-DE3
Update Translation DE - Part 3
2018-03-17 16:53:23 +01:00
Joern
de9c467a84 Fix CI-Build for Windows
... update to Qt 5.9.4 since 5.9.3 is not longer supported by AppVeyor
2018-03-17 16:38:36 +01:00
Joern
7e23285e94 Update Translation DE - Part 3
... update texts
2018-03-17 15:45:41 +01:00
Mark Liversedge
f1819ecd00 Merge branch 'master' of ssh://github.com/GoldenCheetah/GoldenCheetah 2018-03-15 19:33:55 +00:00
Joern
f49b58c4c0 Merge pull request #2821 from Joern-R/BM-Import
Body & HRV Measures - MacOS
2018-03-12 19:29:00 +01:00
Joern
a2ace2e008 Body & HRV Measures - MacOS
... add Popup when download is complete, since QProgressBar does not show % values (following some Mac Style Guidelines)
... since Windows/Linux UI shows 100% in progress bar, the additional Popup is only displayed on Mac
2018-03-12 18:12:11 +01:00
Joern
95ce30a9a5 Merge pull request #2815 from Joern-R/TCX-Export-Format
TCX Export
2018-03-12 17:02:13 +01:00
Mark Liversedge
96a32697b7 Fix comment 2018-03-11 21:15:16 +00:00
Mark Liversedge
fd16a3e156 Fix 3.x upgrade process for compatibility metrics 2018-03-11 19:22:15 +00:00
Mark Liversedge
357ad396cb Fix last commit for Windows build
.. function must return a value in setup_mmp_durations()
2018-03-11 16:06:46 +00:00
Mark Liversedge
254fcc969e OpenData project file writing
.. the ride cache writer will write opendata format files
   when passed the right parameters.

.. the file does not contain PII or user metadata or sample
   level data.

.. instead it contains metrics as well as distribution and
   mmp summary level info for Power, HR, Cadence and Speed.
2018-03-11 12:36:35 +00:00
Joern
5fd4370f8d TCX Export
... adjust so that Strava, Garmin Connect are able to import the file
... add special treatment for "Zwift" activities - so that Strava handles them correctly as "virtual rides"
2018-03-11 11:50:46 +01:00
Alejandro Martinez
22921af218 Merge pull request #2812 from amtriathlon/RideMap
Deprecate Bing Map and set default tile server URL for new OSM maps
2018-03-10 12:40:18 -03:00
Ale Martinez
bcdf49a7be Set default tile server URL for new OSM maps
New OSM maps had a blank default tile server URL and they are the new default.
Also include minor change to use an existing method and to avoid currentData.
2018-03-10 10:24:33 -03:00
Ale Martinez
2af9db0f66 Deprecate Bing Map
Remove Bing code
Make OSM the default map type and use it for existing Bing maps
Fix #2717
2018-03-10 10:24:33 -03:00
grauser
a57766fdcd Withings/Nokia use OAth2 for authorisation 2018-03-07 00:08:22 +01:00
grauser
85cad4d2e0 Withings/Nokia : Reset GC_NOKIA_REFRESH_TOKEN 2018-03-05 21:31:25 +01:00
Ale Martinez
0e906347f2 Remove 8-bit characters and simplify TSB series description 2018-03-05 16:15:57 -03:00
Mark Liversedge
3af7569a00 Merge pull request #2794 from amtriathlon/Tooltips
Added Tooltips with metrics descriptions to RideSummary
2018-03-05 15:26:21 +00:00
Ale Martinez
f018dbd528 Fix 8-bit characters in PMC series descriptions 2018-03-05 09:31:09 -03:00
Mark Liversedge
6bed8fc55d Fix compat metric TSS zero value in DataFilter
.. phew! this was a subtle bug.

.. the SpecialFields class tells the data filter what
   type of thing each symbol equates to.

.. it was saying TSS was metadata not a metric.

.. this is becuase SpecialFields is setup before the
   user metrics are loaded, so it only saw it as a
   metadata field.

.. we now refresh context.specialFields after the
   user metrics are loaded. So this will not just
   fix TSS but ALL user metrics that have an override
   defined in metadata.
2018-03-05 12:05:41 +00:00
Ale Martinez
e075008689 Added Tooltips with metrics descriptions to RideSummary
CSS probably would need some enhancements
2018-03-04 22:27:18 -03:00
Ale Martinez
0c18f2a2be Add PMC series and PDModel estimates descriptions 2018-03-04 22:25:09 -03:00
Mark Liversedge
c21ad85f5f Merge pull request #2806 from peterbrant14/imagic_extended
Imagic extended
2018-03-04 12:14:47 +00:00
Mark Liversedge
92820c7239 Hide compatibility metrics in ColumnChooser
.. so can't add them to the ride list.
2018-03-03 21:15:40 +00:00
Mark Liversedge
b0a3a8b807 Overview Title
.. color adjusts to match luminance of card background.
2018-03-03 10:48:44 +00:00
Mark Liversedge
d0f2a928df Overview honours themes
.. so light themes match colors

.. need to look at making foreground colors customisable
   as white backgrounds look washed out.
2018-03-03 10:25:14 +00:00
peterbrant14
39e84a04b7 Fix EzUsb.c to allow Tacx firmware load on Windows
Previously, the call to usb_control_msg was suppressed for windows platforms in order to prevent
GoldenCheetah from failing when libusb was not available. This change allows usb_control_msg
to be explicitly linked at run time in the same way as other libusb functions within LibUsb.cpp

LibUsb.cpp will now resolve the usb_control_msg function in the same way it does other libusb references.

The 2 load functions ezusb_load_ram and ezusb_load_ram_imagic will now accept an extra argument.
For WIN32, the new argument will be a pointer to the usb_control_msg function in libusb0.
For other platforms, the new argument will be NULL.

For WIN32, EzUsb will now use the supplied pointer rather than defining its own reference
to usb_control_msg.

This should allow us to still start up OK when libusb is not available, but still be
able to load firmware when it is.
2018-03-01 18:26:08 +00:00
peterbrant14
5641f977dc Extended Tacx Imagic support
Support use of Imagic steering frame to scroll training display

Implemented as an optional extra as it is slightly less
self-contained than the basic device support.
2018-02-28 14:22:41 +00:00
peterbrant14
3c648216f5 Basic support for Tacx Imagic
Add support for the old Tacx Imagic trainer
(The one with the green handlebar controller).
2018-02-28 14:21:27 +00:00
Antonius Riha
8c8402b8e6 Settings: Allow using different global conf file name 2018-02-28 09:46:59 +01:00
Antonius Riha
f8e1a6c4d4 LTMSidebar: Expand season containing last phase being loaded 2018-02-28 09:46:39 +01:00
Antonius Riha
c4fb6340a5 LTMSidebar: Save most recently selected phases too
If a phase is being selected, save its ID, so that GC can load it on next start
2018-02-28 09:46:39 +01:00
Mark Liversedge
7bc826895f Fix ErgDB download
.. use https not http

Fixes #2803
2018-02-27 10:48:40 +00:00
Ale Martinez
70cf92a110 Disable microcaching for vector formulas
Tested using formula count(Duration[[Date-120:Date]]) in LTM chart.
Fixed #2751
2018-02-22 15:20:32 -03:00
grauser
8357b4c959 Withings/Nokia Declare GC_NOKIA_CLIENT_ID/GC_NOKIA_CLIENT_SECRET 2018-02-21 22:38:30 +01:00
grauser
5aac5fd7da Withings/Nokia Get Measure using OAuth2.0 2018-02-21 22:20:28 +01:00
grauser
34726ce7b8 Withings/Nokia : Correct error on measures fetching 2018-02-20 22:22:34 +01:00
Mark Liversedge
f789238000 Fix Font Metrics on Compare Pane
.. was using a fixed height, needed to take
   into account the font selection on hi-dpi.

Fixes #2487
2018-02-20 17:20:04 +00:00
Mark Liversedge
390a088749 Hide Compatibility Metrics in Chart Config
.. users can no longer use metrics called TSS, IF and
   NP to configure new charts.

.. existing charts will continue to work, but they are
   using compatibility metrics only.
2018-02-18 12:41:00 +00:00
Mark Liversedge
90f30c0965 Delete User Metric fixup offset
.. to take into account the compatibility metrics.
2018-02-18 10:32:02 +00:00
Joern
8aa1288a44 Merge pull request #2788 from Joern-R/Withings
Withings and Others
2018-02-18 10:57:46 +01:00
Mark Liversedge
39520043c1 RideImportWizard namespace
.. use of enums
2018-02-18 09:51:57 +00:00
Mark Liversedge
71c3dbd2ae Fix UserMetric EDIT offset
.. didn't take into account first 3 user metrics are
   compatibility metrics and not for user editing.
2018-02-17 21:56:52 +00:00
Mark Liversedge
57f6dedcc5 Hide Compatibility Metrics in Config
.. no user maintenance or selection

.. if they choose to create their own versions then the
   compatibility metrics will be removed and they will
   be able to select their own.
2018-02-17 21:03:04 +00:00
Mark Liversedge
dfdd0e0a18 Fix Compatibility Metric
.. should have used BikeStress not Bikecore for TSS.
2018-02-17 20:44:58 +00:00
Mark Liversedge
615dec8a6a Rename Archive.h to ArchiveFile.h
.. stops compiler errors on MacOS
2018-02-17 20:40:42 +00:00
Mark Liversedge
a7e17e378c Create TrainingPeaks Compatibility Metrics
.. as usermetrics that alias the old metric name to
   the renamed metric.

.. need to follow up with restrictions on the use of
   the compatibility metrics.
2018-02-17 18:49:14 +00:00
Joern
f180242c53 Withings and Others
... Fix ability to authorize the Cloud Service
2018-02-17 14:52:34 +01:00
Mark Liversedge
49d78e6c7b Remove TrainingPeaks Trademarks
.. renaming the 3 metrics they trademarked in 2013:

   TSS => BikeStress
   IF => BikeIntensity
   NP => IsoPower

.. this will break data filters, user formula and
   R and Python charts.

.. in the next commit will add user metrics to ensure
   backward compatibility.
2018-02-17 11:12:50 +00:00
Mark Liversedge
d4504f46cd Deprecate TrainingPeaks - Import Data
.. enable auto expansion of .zip files to enable
   users to download a batch export of their data
   from TrainingPeaks in a web chart and import in
   a single hit.
2018-02-16 19:55:39 +00:00
Mark Liversedge
f6576150dc Merge pull request #2760 from arunh/osx-search-cosmetic-fix
Cosmetic fix for search box icon on OSX
2018-02-15 19:43:35 +00:00
Mark Liversedge
4a3e27c36b V3.5 DEV 1802
.. marked up for build.
2018-02-15 16:32:24 +00:00
TuxedoFish
1dc00b8bd3 Setenv PYTHONHOME not Py_SetPythonHome
.. what a clusterfuck the Python embedding API is. If you set PYTHONHOME
   it loses PYTHONPATH. But only on a Mac. Go figure.

.. so we just set the environment to the user defined value in prefs.
2018-02-15 15:57:02 +00:00
TuxedoFish
f19cb68108 Add MacOS util/bundle_fixup.sh
.. used to put Python framework into app bundle for release binaries.
2018-02-15 15:25:54 +00:00
Mark Liversedge
ef68066f7f Don't bug user if R/Python not compatible
.. most users don't care and will freak out.

.. also set PYTHONHOME if user specified (this helps users on
   MacOS use their local modules).
2018-02-15 15:10:30 +00:00
Mark Liversedge
6ede8cc527 Merge branch 'master' of ssh://github.com/GoldenCheetah/GoldenCheetah 2018-02-15 15:04:06 +00:00
Joern
eae009e734 Merge pull request #2785 from Joern-R/Translation-DE2
Update Translation DE - Part 2
2018-02-15 15:49:20 +01:00
Joern
4399f1e183 Update Translation DE - Part 2
- update texts
2018-02-15 14:15:14 +01:00
Mark Liversedge
e914090e02 Merge pull request #2667 from mtbkeith/GC-KR-003_ImportEnums
Clarify import wizard headers.
2018-02-15 09:36:41 +00:00
Mark Liversedge
5a5685d434 Remove Twitter from Secrets.h
.. it was deprecated previously and the header needed to be updated
   to reflect this.
2018-02-15 09:08:03 +00:00
Keith Reynolds
c12d149620 Clarify import wizard headers.
Use enum to clarify wizard header values.
2018-02-14 22:52:21 -07:00
Walter
1c18df171d Allow slope up to 40% instead of only 20% and remove rounding effect from smoothing 2018-02-12 20:14:49 +01:00
Ale Martinez
a9ba3d80be Removed references to qwtplot3d in gcconfig and travis
For clarity sake and to speedup ci
2018-02-12 15:03:52 -03:00
Mark Liversedge
2e21157a0d Add Cloud Wizard Font Size
.. fixup to honor prefs instead of fixed to 12pt.
2018-02-12 16:26:12 +00:00
Joern
2140b854dd Merge pull request #2783 from Joern-R/Translation-DE
Update Translation DE (Part 1)
2018-02-12 16:24:18 +01:00
Mark Liversedge
4575881110 CI Travis Video None
.. till we fixup use of AVKit as QuickTime deprecated.
2018-02-12 14:46:36 +00:00
Mark Liversedge
88098f216d CI Travis QuickTime no longer supported
.. until we fixup AVKit support in videowindow lets not try
   and build with QuickTime since its fully deprecated now
   and breaks the Mac based Travis build.
2018-02-12 14:12:08 +00:00
Mark Liversedge
09f71f7451 Deprecate 3D chart
.. deprecate 3D chart as QwtPlot3d has very questionable support
   and the chart is not widely used.
2018-02-12 13:44:32 +00:00
Ale Martinez
15acadbf44 Fixed unmatched quote in .travis.yml
Also forced directory removal
2018-02-11 18:41:23 -03:00
Joern
b7356b4309 Fix GCC problem in Travis for R
-- duplicate installation of C++ causes Travis to stop
2018-02-11 20:12:23 +01:00
Joern
729d8aa0ac Fix CI-Build for Mac OS
... remove deprecated homebrew tap dependency
2018-02-11 19:55:40 +01:00
Joern
0e77cb7536 Update Windows CI Build to Qt 5.9.3
... 5.9.2 ist not longer support by CI tool
... 5.9.x is LTS - and will be used for release 3.5
2018-02-11 18:41:03 +01:00
TuxedoFish
47f439d1bc Fixup Python search for Mac
.. PYTHONHOME/bin/python3 not PYTHONHOME/python3 on MacOS when installed
   within the framework directory.
2018-02-11 17:06:29 +00:00
Joern
752fdebbce Update Translation DE
-- Update of texts
-- fix some minor "translatebility" issues
-- change service naming "Withings" to "Nokia Health (Withings)"
2018-02-11 18:01:11 +01:00
Mark Liversedge
baf71b79ad Minor hidpi nits
.. progress line when computing metrics way too thin
.. import chart dialog too small
2018-02-11 14:51:40 +00:00
TuxedoFish
d4154ca105 gcconfig.pri.in update for Python on MacOS
.. an example for devs on MacOS
2018-02-10 23:01:12 +00:00
Mark Liversedge
b50c034f4e Python Startup 2 of 2
.. honour PYTHONHOME environment variable

.. allow user to set PYTHONHOME in preferences, and check its a decent
   value before setting it.
2018-02-10 20:39:40 +00:00
Mark Liversedge
6d78bd165c Python Startup 1 of 2 Windows Fixups
.. fixup trivial issues like PATHSEP and separators in general.

.. it seems that Py_SetProgramName will drive the initialisation of the
   Python interpreter to set sys.path, sys.prefix and sys.exec_prefix.

.. rather than trying to fixup these directly instead we set the program
   name to the python installed binary (full path).

.. you still need python in your path, will fixup in part 2.

.. lastly, also added a 'printd' macro to embed debug info, which can
   be enabled in gcconfig.pri via DEFINES += PYTHON_DEBUG=true
2018-02-10 10:16:24 +00:00
Ale Martinez
f215e2b433 Bugfix in DanielsPoints: Segmentation fault if paceZoneRange < 0
Copy paste error, detected by Walibu
2018-02-09 19:09:38 -03:00
Mark Liversedge
710cddf664 Python Startup 1 of 2
.. look for python in path and check version and module path, then
   use this when initialising to ensure the installed modules
   are used, not the local copy.

.. needs testing on Windows and need to enable the user to specify
   the location of Python so users don't need to modify PATH.
2018-02-09 19:30:35 +00:00
Ale Martinez
be5df09024 Daniels Points based on GAP updates
- Check for Zones/PaceZones availability
- make it relevant when there is power or for runs/swims
- Daniels Equivalent Power is relevan only when there is power data
- increment DBSchema to force metrics recomputation
Fixes #2681
2018-02-07 21:01:40 -03:00
Walter
0d94e0200e Added DanielPoints for running, with GAP grade adjusted speed
When there is no power data
2018-02-07 20:10:26 -03:00
Mark Liversedge
954570fe16 Python Embedding is optional and check install
.. make python embedding optional, if it's not installed then
   disable in preferences (new checkbox similar to R).
2018-02-05 16:27:00 +00:00
Mark Liversedge
8e5e95bfe4 R setup graphics device before install routines
.. because we also call par() to get the default
   settings for the graphics device and when none
   exists it creates a default one.
2018-02-05 13:18:54 +00:00
Mark Liversedge
56335c13ef R check version before loading
.. If built with R > 3.4 we need >3.4 installed
.. If built with R < 3.4 we need <3.4 installed
.. will also disable in prefs if can't load
2018-02-05 12:00:44 +00:00
Mark Liversedge
d34147d975 GC_CHROME should default to "Flat"
.. we've pretty much deprecated it now, so don't default
   to mac, default to flat.

.. this is only noticeable with new athletes setup after
   GC_CHROME was deprecated.
2018-02-04 14:52:41 +00:00
Mark Liversedge
5ac6813846 Metric config pic for WIKI
.. documenting how metrics work, so needed a screenshot for the wiki page
2018-02-04 14:01:20 +00:00
Mark Liversedge
4ce070f4c9 R Don't create GreaphicsDevice till all initialised
.. trying to reduce the number of crashes.
2018-02-04 09:48:01 +00:00
Mark Liversedge
29f734405b Fix Compile error in DataFilter without Python/R
.. recent commits to add scripting to datafilter using
   Python or R code didn't honor the fact that both
   are optional at compile time.

Fixes #2775
2018-02-03 10:14:23 +00:00
Ale Martinez
b99e8f54f8 Fixes MeanSquareRoot aggregation in RideCache
In LTMPlot it is Ok
Fixes #2762
2018-01-31 20:52:20 -03:00
Mark Liversedge
d734f1c485 Fix Kent University Study Double Upload
.. button to finish was also button to upload !

.. D'oh !!
2018-01-29 17:21:04 +00:00
Mark Liversedge
a82c3b93a6 DataFilter embed R Scripts
.. similarly to embedding python when computing metrics

.. exactly the same semantics, although R isn't fussy
   about whitespace.

.. and example metric might be:

   {
        value { %%R GC.result(19) %%; }
   }

.. the interpreter is protected with a mutex which means
   R programs will never run in multiple threads. This has
   a performance penalty, but then using R for metrics is
   likely to be rather specialised anyway.
2018-01-29 14:05:49 +00:00
Mark Liversedge
8e3a170d94 DataFilter Embed Python Scripts
.. allow the user to embed a python script into a datafilter.

.. this is primarily to enable the use of python when writing
   user metrics.

.. the syntax is basically "%%python script %%" and it is
   evaluated as an expresssion so the results can be assigned
   to a variable or returned as a value.

.. additionally GC.result(double) has been added to the python
   API to enable a return value to be set by the script.

.. since Python is really sensitive about white space its going
   to be best practice to embed python scripts without honoring
   any of the data filter spacing, for example:

{
   value {
      t <-

%%python
GC.result(100)
%%;

   }
}

  .. is likely to be a sensible way to use this.

  .. also notice how the ; is needed after the expression. This
     is because %%python ... %% is a numeric expression with the
     same semantics as "1 + 2"
2018-01-29 10:03:41 +00:00
Mark Liversedge
a78ea56090 Merge pull request #2768 from arunh/workout-save-as-filetype-select
Adding file type selection when saving workout (#2767)
2018-01-29 09:08:58 +00:00
arunh
3714525538 Adding file type selection when saving workout (#2767) 2018-01-29 09:02:15 +00:00
Mark Liversedge
5d9b42a57d Merge pull request #2765 from arunh/withings-api-use-json-parser
Use Qt Json Parser for Withings API (Fixes Issue #2764)
2018-01-26 17:45:48 +00:00
arunh
62c79ce9a5 Use Qt Json Parser for Withings API (Fixes Issue #2764) 2018-01-26 15:36:08 +00:00
Alejandro Martinez
8a3db53a90 Rename some Python entry points to match the wiki
zones => athleteZones
wbal => activityWbal
xdataseries => activityXdata
pmc => seasonPmc
measures => seasonMeasures
2018-01-23 17:56:24 -03:00
Alejandro Martinez
0c4ffcf93f Add Python seasonPeaks(series, duration, all=False, filter="", compare=False)
Similar to R season.peaks but for one series/duration at a time
2018-01-23 17:24:11 -03:00
Alejandro Martinez
b293d5374b Add Python seasonIntervals(type="", compare=False)
Get metrics for intervals in a season, similar to
R GC.season.intervals
2018-01-22 21:46:23 -03:00
arunh
301194000f Cosmetic fix for search box on OSX 2018-01-22 19:10:06 +00:00
Mark Liversedge
d9d5ed752b CI Travis no longer build using QT 5.5.1
.. we don't support it anymore anyway.
2018-01-21 10:25:13 +00:00
Mark Liversedge
dcf248f167 Merge pull request #2758 from sisao/fix-travis-build-qt-5.5.1
attempt to fix travis build (changed qt 5.5.1 mirror download location)
2018-01-21 10:19:13 +00:00
Stefan Lorenz
46e7cd017e fix url 2018-01-21 08:12:33 +01:00
Stefan Lorenz
15361f6f1d attempt to fix travis build (changed qt 5.5.1 mirror download location) 2018-01-20 19:42:53 +01:00
Alejandro Martinez
9d00f78e4c Add Python zones(date, sport)
To retrieve athletes zones info, similar to R athlete.zones,
just returning a dict instead of a data frame
2018-01-20 15:05:34 -03:00
Alejandro Martinez
9e193c7e9f Changed Python athlete to return a dict
Similar to the R counterpart it includes name, home, dob,
weight, height and gender
2018-01-19 20:41:21 -03:00
Alejandro Martinez
90a18303c4 Add Python xdataseries(name, series, join="repeat", activity=None)
Similar to series but used to retrieve an XData series, like the R
activity.xdata counterpart, for example: GC.xdataseries("SWIM", "STROKES")
NB: I reserved xdata(name) to retrive a whole group of series by name
with its own sampling, not implemented in this commit.
2018-01-18 15:41:48 -03:00
Alejandro Martinez
6df60d819b Add Python wbal similar to series
Optional parameter is activity datetime, current activity if not provided.
2018-01-17 14:55:16 -03:00
Alejandro Martinez
410c850556 Merge pull request #2721 from sisao/pythonChartCursorMoveHome
Move cursor in PythonChart to correct start point
2018-01-12 10:55:27 -03:00
Alejandro Martinez
6ee8b22563 Merge pull request #2741 from riccioclista/fix_measures_symbol
LTMTool: Set symbol for measure metrics
2018-01-12 10:55:04 -03:00
Alejandro Martinez
b1d83dd3fa Merge pull request #2742 from henolo/trans_sv
sv translation
2018-01-12 10:36:52 -03:00
Alejandro Martinez
ced9eba360 Merge branch 'Walibu-master' 2018-01-12 10:33:06 -03:00
Alejandro Martinez
6b1f3f41aa CriticalPowerWindow - refresh after Linear scale option change 2018-01-12 10:25:31 -03:00
Mark Liversedge
b65dfc90ac Athlete ID on About box
.. since we will use it to share data via CloudDB and users must have
   a mechanism for requesting their data is deleted.

.. since the GUID is used to anonymise the data the user must use it
   to request the deletion, so we show on the about box.
2018-01-12 13:13:11 +00:00
Henrik Johansson
08107f349d sv translation 2018-01-03 20:32:17 +01:00
riccioclista
d58309686d LTMTool: Set symbol for measure metrics
When adding measures to an LTMPlot with other metrics, those measures
are not cleaned up properly on replot, because they don't have a symbol.
LTMPlot uses the symbol to store them in a 'curves' dictionary. All
metrics without a symbol are then identified by the default metric
symbol value, which is: "".
2018-01-02 15:18:10 +01:00
Walter
7db994606b Use logarithmic scale for speed chart, like CS 2017-12-29 18:28:49 +01:00
Mark Liversedge
a7f91fd6ec Fix Xert tagline 2017-12-27 15:27:37 +00:00
Mark Liversedge
068dcf0fb2 Fix Huge Fonts on R chart
.. when on a hidpi display
2017-12-27 15:27:37 +00:00
grauser
80029cbdcc Cloud : Xert download
First version : only classic series
2017-12-27 00:01:00 +01:00
Mark Liversedge
6314033b93 Xert tagline copy/paste fixup 2017-12-24 11:11:00 +00:00
Mark Liversedge
b1e0a567fb rideFileCacheMeanmax just fix first date. 2017-12-24 11:11:00 +00:00
grauser
2d845d03d1 Download : Select Joule Device for Joule Port
I will make some test before adding other devices
2017-12-23 23:17:16 +01:00
grauser
e4ca3f8069 Cloud correct OAuthManager 2017-12-23 23:04:58 +01:00
grauser
2ccf4239eb Add OAuthManager for OAuth and UserPass Scheme
First only for Xert
2017-12-23 22:42:14 +01:00
Joern
a7d45944f1 Merge pull request #2735 from Joern-R/Fix
Cloud - XErt - Fix
2017-12-23 13:37:03 +01:00
Joern
ff56385727 Cloud - XErt - Fix
... compile error (cut&paste typo)
2017-12-23 13:36:20 +01:00
grauser
5b12503824 Cloud : Add Xert as a new service
First : Upload only
2017-12-23 12:15:05 +01:00
Joern
5e28aa58de Merge pull request #2734 from Joern-R/export
Fix error exporting activity without data points to .FIT
2017-12-22 14:05:14 +01:00
Joern
bb06f898f4 Fix error exporting activity without data points to .FIT
... GC closes without message/ SIGSEGV when exporting e.g. manual acvities as .FIT files
2017-12-22 13:14:05 +01:00
Mark Liversedge
caaae569a8 Merge pull request #2733 from sebastinas/vlc
Remove unnecessary linking against libvlccore
2017-12-21 21:12:57 +00:00
Sebastian Ramacher
3dd20804e9 Remove unnecessary linking against libvlccore
libvlccore is for plugins, but GoldenCheetah does not build a plugin. It
requires only functions available from libvlc.

Signed-off-by: Sebastian Ramacher <sramacher@debian.org>
2017-12-21 20:39:11 +01:00
Joern
a9a88e6103 Merge pull request #2732 from Joern-R/combine
Merge Activity Wizard - Size Cosmetics
2017-12-21 20:03:18 +01:00
Alejandro Martinez
cc2f56c7a3 Python season(all=False, compare=False)
Similar to R season(), retuns a dict with name, from, to and color lists.
2017-12-21 15:19:14 -03:00
Joern
73ab008fa5 Merge Activity Wizard - Size Cosmetics
... allow re-sizing of Widget (with a minimum size) (e.g. for Translations)
... show header of both "Target" and "Source of additional data series)
2017-12-21 18:14:10 +01:00
Mark Liversedge
3304e6c72e Fix Linux SEGV for symbol conflict
.. mad conflict .. where scipy.stats.linregress conflicts
   with a sndfile and crashes when calling sf_check_fpe

.. see fix stolen from here: https://github.com/scipy/scipy/issues/8130
2017-12-21 16:42:08 +00:00
Alejandro Martinez
9599060768 Python rideFileCacheMeanmax() remove dangling code
To precompute the number of series was necessary for R but not for Python
2017-12-20 18:27:36 -03:00
Mark Liversedge
6495fe8505 Python rideFileCacheMeanmax() fixups
.. check for valid date
.. always add power_date (to match logic at start)
2017-12-20 09:56:33 +00:00
Joern
e79c6626a2 Merge pull request #2731 from Joern-R/fixsmo2
Fix SmO2 / tHB Tool changes
2017-12-19 19:52:04 +01:00
Mark Liversedge
a30fcbda4e GC.SERIES_* constants
.. for use with GC.series().
2017-12-19 17:26:32 +00:00
Joern
aaf35a620f Fix SmO2 / tHB Tool changes
... add options to either fix SmO2 or tHb or both data series
... add options to define max. value for tHb

... remove LTMOutliers (since the variance feature is not used)
2017-12-19 12:10:30 +01:00
Mark Liversedge
0a8d803233 Add --no-python command line option
.. just in case.
2017-12-19 10:59:02 +00:00
Alejandro Martinez
5d94ce2167 Python activity, series and seriesPresent optional datetime parameter
It can be used to get data from other than current selected activiy,
identified by datetime, s.t. the items returned by activities(filter)
2017-12-18 20:55:42 -03:00
Joern
fe1313bac1 Merge pull request #2728 from Joern-R/suffix
Ride File Naming with "." allowed
2017-12-18 09:54:14 +01:00
Alejandro Martinez
6b7d1b794c Python activities(filter="")
Returns a list of DateTime for activities passing the filter
2017-12-17 17:57:55 -03:00
Joern
a147165a45 Ride File Naming with "." allowed
... fix regression allowing multiple "." in Ride File names (since some services are creating such names)
2017-12-17 19:57:32 +01:00
Alejandro Martinez
f47607d725 Python measures(all=False, group="Body")
Similar to R measures returning a dict with a list for each
measure field in the requested group (Body or Hrv).
2017-12-17 13:00:17 -03:00
Alejandro Martinez
bbfc4e44fe Python pmc(all=False, metric="TSS")
Similar to R pmc, returns a dict with a list for: date, stress, lts, sts, sb, rr
2017-12-17 11:28:16 -03:00
Alejandro Martinez
33b86235e9 Enable compare mode for Python activityMeanmax and seasonMeanmax
Usage is similar to the R versions
2017-12-16 18:44:45 -03:00
Alejandro Martinez
1aa1ab41d1 Python activityMeanmax and seasonMeanmax
Both return a dict with a list for each supported series from cache
Next step is to support compare mode
2017-12-16 17:43:03 -03:00
Alejandro Martinez
be73ab9749 Enable keyword arguments in Python wrappers generated by SIP
For example:
>>> GC.metrics("Pace", filter="isRun<>0")
is equivalent to:
>>> GC.metrics("Pace", False, "isRun<>0")
as expected by Python users
2017-12-15 19:42:25 -03:00
Alejandro Martinez
ae6d00103e Python metrics(metric, all, filter)
A more efficient way to obtain a metric series for a large number
of activities, it can be converted to numpy array without copy:
import numpy as np
nparray = np.asarray(GC.metrics("Average_Power", True, "isRun=0 && isSwim=0")
2017-12-15 11:56:55 -03:00
Mark Liversedge
147d3b83d9 Python Trends / Activity Chart
.. update the registry to support both independently. This is
   to get the ridesummary bool set to trigger refresh when the
   user selects a season on trend view.
2017-12-15 09:40:52 +00:00
Alejandro Martinez
eae7f1d9ed Add Python seasonMetrics(all, filter, compare)
Similar to R API season.metrics
2017-12-14 17:30:32 -03:00
Alejandro Martinez
9a48237543 Make PythonDataSeries independent of RideFile
To reuse it for other double series s.t. metrics or mean maximal data
2017-12-13 11:52:08 -03:00
Alejandro Martinez
d7579beed1 Add Color to Python activityMetrics
Using name "color" and renamed "date"/"time" for compatibility with R API
2017-12-13 09:30:29 -03:00
Alejandro Martinez
a3e23fd6de Enabled compare for Python activiyMetrics
activityMetrics(True) returns a list of 2 element tuples with
metrics&metadata dict as first element and color name as second one.
2017-12-12 21:29:39 -03:00
Mark Liversedge
5fb1c00cf9 Python Screenshot for Wiki
Uploaded via github manually
2017-12-12 18:25:23 +00:00
Alejandro Martinez
da6db1eb6b Add Date and Time to Python activityMetrics
PyDateTime_IMPORT needs to be called in the same module where
datetime macros are used to avoid a crash.
2017-12-12 13:52:18 -03:00
Mark Liversedge
2352b4f0c9 Python Don't Steal Focus
.. qwebengine's favourite trick (aside from screwing
   up qt rendering and geometry).
2017-12-12 16:31:50 +00:00
Alejandro Martinez
6727c4636e Merge pull request #2725 from amtriathlon/Python
Python activityMetrics
2017-12-12 10:27:49 -02:00
Alejandro Martinez
a15bcfc102 Python activityMetrics
Returns a Python dict with metrics and metadata fields.
It doesn't implement compare mode yet.
2017-12-12 08:35:06 -03:00
Mark Liversedge
dd112d6d81 Python Webpage load via slots
.. to communicated across threads and avoid a crash.
2017-12-11 21:17:34 +00:00
Mark Liversedge
7eb926b33a Python Web Display
.. instead of an opengl canvas lets start with a Web canvas.

.. we might have options to use QtCharts or OpenGL later.

.. not working - committed to save WIP.
2017-12-11 18:58:59 +00:00
Mark Liversedge
a7981ff302 Python fixup ConvertTo_QString
.. missing in original code. will be needed for APIs that
   want to pass names etc to C++ from Python.
2017-12-11 12:32:33 +00:00
Joern
92880c112e Merge pull request #2724 from Joern-R/bm-settings
BodyMeasures - Download Properties
2017-12-10 19:27:19 +01:00
Joern
8e336caaab BodyMeasures - Download Properties
... store/re-store last selected download properties (for next use)
2017-12-10 18:49:56 +01:00
Joern
0d8485a75a Merge pull request #2723 from Joern-R/osm
OSM - Tile Server Handling Changed
2017-12-10 16:40:31 +01:00
Joern
3597287aeb OSM - Tile Server Handling Changed
... all Tile Servers are configurable by the user - there is only a default for the "standard" OSM Tile Server, but even this default can be overwritten
... there are no dedicated Tile Servers Sources named / hard-coded, but in addition to the default OSM server 3 additional options are available for the user to configure

Why:
... tile servers either change their URL or their T&C - which happened for some of the "hard-coded" once recently - since this may happen
again in future the recent change de-couples the code from the Tile Server URL - and the availability of certain organisations providing
free tile servers
2017-12-10 16:04:26 +01:00
slorenz
80e786c4c0 Python Use UTF8 and untranslated Series Names
.. With german translation activated GC.activity() complains about
   some utf-8 decoding stuff and returns error.

   First I thought came from the real activity json file, but it's
   from translation: Altitude -> Höhenmeter.

   Is it necessary to use toLatin1() in goldencheetah.sip? With
   toUtf8() it works and you get delta symbols instead of question marks.

.. With R the series names are always in english and use a naming
   convention derived from the R trackR package -- we now follow the
   same in Python bindings to ensure charts created in one locale
   will continue to work in another.
2017-12-10 10:16:57 +00:00
Alejandro Martinez
b3680c0dd1 Enabled sequence behavior on PythonDataSeries
Adding __getitem__ makes it to behave like a sequence enabling indexing
and iteration,for example:
s = GC.series(6)
print(s[0], s[-1])
for v in s: print(s)
l = list(s)
print(l.count(0))
2017-12-09 20:36:03 -03:00
slorenz
e01b110c54 Move cursor in PythonChart to correct start point 2017-12-09 22:10:36 +01:00
Mark Liversedge
385b56ee47 Python GC.activity()
.. very basic API as we develop out, it just returns a dict
   for now. Need to expand to enable returning a list if
   compare mode is active (like R).

.. implemented in a new source file Resources/python/library.py
   which is loaded directly after the interpreter is loaded at
   startup.

.. also updated src.pro to add library.py and goldencheetah.sip
   to OTHER_FILES so they can be edited easily in QtCreator.
2017-12-09 19:52:59 +00:00
Mark Liversedge
76eaecab5a Fixup Py_ssize_t on Windows VS build
.. Py_ssize_t is not always a long, so lets use the python
   type in our bindings to keep the buffer code simple.
2017-12-09 19:08:00 +00:00
Mark Liversedge
2a5fcfe5db Python DataSeries functions
.. start of API to work with ride data, exposing the raw
   sample data via the buffer protocol python api and SIP

.. adds utility functions that will ultimately be wrapped
   inside a python class/function:

   GC.series(n) - return series data as a python array
   GC.seriesName(n) - return string describing series data
   GC.seriesLast() - returns int for last series type
   GC.seriesPresent(n) - returns True if series in ride

.. example of using these functions in python to create a
   dict object collecting all available data:

   activity = {}
   for x in range(0, GC.seriesLast()):
      if (GC.seriesPresent(x)):
         activity[GC.seriesName(x)] = GC.series(x)
2017-12-09 16:50:29 +00:00
Joern
c343b93dd7 Merge pull request #2693 from riccioclista/fix_events_and_seasons
Fix crashes when adding events/phases
2017-12-08 17:39:51 +01:00
Mark Liversedge
99f6ac48a9 Merge pull request #2714 from sisao/fixPythonChartPrompt
Fix for left and delete keypress events
2017-12-06 08:27:53 +00:00
Mark Liversedge
3a534e1ff4 Python GC.build() and GC.version()
.. simple examples, lots of generated code changes which is
   not very helpful.

.. but the only files that were edited by hand are goldencheetah.sip
   Bindings.h and Bindings.cpp
2017-12-05 19:23:38 +00:00
Joern
655a7c4f21 Merge pull request #2715 from Joern-R/streetview
Train View - StreeView
2017-12-05 09:03:01 +01:00
Joern
99d90dea32 Train View - StreeView
... remove StreetView and Train/MapWindow from list of available Views
... both rely on WebKit - and have issues (they have already been reported to be de-precated)
2017-12-04 20:13:55 +01:00
Stefan
a0cbf55a97 Fix for left and delete keypress events 2017-12-04 18:47:18 +01:00
Mark Liversedge
db3d119f7d Python GC.athlete()
Basic proof of concept for CPP binding using SIP but with
our own type conversion (to avoid overhead of SIP lib/deploy).
Its far from perfect but will serve as a starting point.

.. needed to fixup type conversion in goldencheetah.sip to
   convert returning QString as PyUnicode

.. needed to fixup passing context when multi-threaded

.. needed to fixup Bindings.h/cpp to offer new API
2017-12-04 15:20:43 +00:00
Mark Liversedge
6d9731e1ed Fixup SIP Makefile
.. to add API header to the dependency
2017-12-04 15:20:43 +00:00
Joern
53e6b9887f Merge pull request #2713 from Joern-R/zwo
Fixes parsing Zwift Workouts
2017-12-03 19:31:46 +01:00
Joern
85f7ad124b Fixes parsing Zwift Workouts
... support "Power" Tag - in cases where no Low/High Power is given
... support Duration provided as Float number (not only Integer)
2017-12-03 18:46:35 +01:00
Mark Liversedge
29558420b6 remove debug
.. sigh
2017-12-02 20:09:30 +00:00
Mark Liversedge
acafb668dc Python Console prompt is >>> not >
.. make it more familiar to python regulars.
2017-12-02 19:54:57 +00:00
Mark Liversedge
124308225b Fixup PythonChart
.. PYTHONHEADER no longer defined.
2017-12-02 16:38:29 +00:00
Mark Liversedge
00144effd8 Python Module Framework
.. Using SIP thats used in PyQt et al we have a module
   called `goldencheetah' which includes bindings.

   Currently there is only a single method `getValue()'
   that returns 1. It's to get the basic plumbing in place.

   src/Python/SIP contains all the files related to the
   module. The cpp files are generated by the `sip' utility
   which will need to be available if you want to work on the
   bindings. Run make -f Makefile.hack to regenerate the cpp
   files if you edit them.

   I prefer to distribute the generated files at this point
   whilst development occurs. We may change that at a later
   date.

.. Please note that the gcconfig.pri.in file has changed as
   we now include the python include path rather than set a
   macro for the include directive (See PYTHONINCLUDES in
   gcconfig.pri.in)

.. lastly, to test this is working in a python chart console:
   > print(GC.getValue())
   1
   >
2017-12-02 16:33:54 +00:00
grauser
18c43fcebd FIT : Use recIntSecs 2017-11-29 17:19:54 +01:00
grauser
ac04d20edd FIT : Export : Correct file duration 2017-11-26 23:46:34 +01:00
grauser
f573b5c48f FIT : Small addition and correction for expor
hardware_version and lap start_time had incorrect field_num
2017-11-26 22:38:50 +01:00
Mark Liversedge
14e27e9486 Python Editor Syntax Highlighter
.. basic stuff for now.
2017-11-25 08:59:56 +00:00
Mark Liversedge
843180fa98 Qt 5.8 is suficient for Python
.. also add examples in gcconfig.pri.in for Windows builds
2017-11-24 20:57:12 +00:00
Mark Liversedge
ab82ea004f ESC or ^C to stop long running Python script
.. when a chart script gets caught in a runaway loop let the
   user interrupt it with the ESC or ^C key.
2017-11-24 19:32:07 +00:00
Claus Assmann
27696e5486 src.pro fix for 4.8 + tidy
.. don't add concurrent to the qt modules list unless we
   are building with Qt 5.

.. don't add ./R and ./Python to the INCLUDEPATH unless
   we are building with them enabled

.. fixup comment regarding officially support versions of
   QT - we now support 5.8 or higher and strongly recommend
   5.9.2 or higher for crucial fixes to Qt Charts and QtOpenGL
2017-11-24 08:57:56 +00:00
Mark Liversedge
0662a41ebb Python Script Exec
.. runs in thread to avoid blocking GUI actions but GUI
   will still wait for script to complete. ESC is trapped,
   but mechanism to stop script not implemented yet.
2017-11-23 22:51:41 +00:00
Alejandro Martinez
f0b2d37da2 Changed RideFile::fillInIntervals to match the fix of interval duration
The generated intervals were 1 sample longer, now the base problem
is fixed in bb3c33bc16, this is no longer necessary.
2017-11-22 21:39:21 -03:00
Alejandro Martinez
e3f48beae4 Added new Garmin Devices from Fit SDK Release 20.50.00 2017-11-22 19:59:55 -03:00
grauser
bb3c33bc16 RideFile : Interval duration is 1 secs shorter 2017-11-22 23:33:58 +01:00
grauser
b0d676cef6 FIT : Add Rouvy and The Sufferfest
Trainer Apps for Winter...
2017-11-22 23:33:58 +01:00
Mark Liversedge
82c06b4b29 Python Chart Console
.. issue commands and have them run in the python interpreter.
.. output and errors are captured
2017-11-22 21:13:59 +00:00
Mark Liversedge
1874ddaaeb Python Chart
.. added a python chart type, it doesn't execute code
   yet. Just a reimplementation of the RChart UX

.. next we need to trap output and run code on selection
   before proceeding to setting an API for Data and Charting
2017-11-22 18:20:00 +00:00
Mark Liversedge
0a2ac3aa6b Start Python Embedding
.. just bootstrapping, so Python is loaded and version
   number made available in the about box.

.. see gcconfig.pri.in and src.pro for settings needed

.. not considering threading etc at this point
2017-11-22 15:50:22 +00:00
Alejandro Martinez
7f6e3efbdf Fixed LTMPlot RunningTotal for multiple activities per day
Fixes #2707
2017-11-22 12:23:56 -03:00
Joern
744dab6fd7 Merge pull request #2706 from Joern-R/Train-CyclingDynamics
Fix Copy/Paste error ANTChannel
2017-11-22 13:52:15 +01:00
Joern
e51ba52218 Fix Copy/Paste error ANTChannel
... use "rightPedalSmoothness"
2017-11-22 12:03:54 +01:00
Alejandro Martinez
bc2c0fbf41 Merge pull request #2699 from amtriathlon/Measures
Measures
2017-11-21 18:54:30 -02:00
Joern
b282299d25 Merge pull request #2631 from stschake/feature/garmin-service
Detect Garmin Express blocking ANT stick
2017-11-21 19:50:57 +01:00
Joern
a5ee8e3689 Appveyor use QT 5.9.2
... renaming of spec file by Qt
2017-11-21 14:21:47 +01:00
Joern
819031b38b Update to QT 5.9.2 2017-11-21 13:29:39 +01:00
Joern
1202d234fb Merge pull request #2668 from mtbkeith/GC-KR-004_MacBuildInfo
Add XCode project creation directions
2017-11-21 13:19:45 +01:00
Joern
ce4edaa0f8 Merge pull request #2686 from cdknight/rework-readme
added 1st section to README
2017-11-21 13:18:17 +01:00
Alejandro Martinez
f9ffdb423a Add comment to HrvMeasure and import Hrv4Training note 2017-11-20 18:33:26 -03:00
Alejandro Martinez
77e99c12fd Move BodyMeasure and HrvMeasure common code to base class Measure 2017-11-20 14:47:55 -03:00
Alejandro Martinez
83340aa148 Access to Measures from REST API
Part 4 of #2588
2017-11-19 00:14:26 -03:00
Alejandro Martinez
b984c340ba Refactor Measures
Part 5 of #2588
- BodyMeasures code in Athlete was moved to BodyMeasures class in Core
- HrvMeasures code in Athlete was moved to HrvMeasures class in Core
- Both implement the Abstract Base Class MeasuresGroup which provides uniform
  access to measures
- Class Measures consolidate access to Body/Hrv Measures
- Body/Hrv measures file is accessed for only one place
- Names/Symbols for Body/Hrv measures are defined only once
2017-11-19 00:14:26 -03:00
Alejandro Martinez
6237096871 Merge pull request #2685 from amtriathlon/RMeasures
Access to Daily Measures from R
2017-11-19 01:01:03 -02:00
Mark Liversedge
96f34aabb2 Fix off by one ride duration on import 2017-11-13 22:20:25 +00:00
riccioclista
83bbe93b7d Don't allow the creation of nested phases. Fixes #2692 2017-11-12 17:54:08 +01:00
riccioclista
8b79278777 Don't crash when adding event/phase if phase is selected. Fixes #2691 2017-11-12 17:48:48 +01:00
cdknight
83d87d5499 added 1st section to README
I added an "ABOUT" section to README and updated the rest a tiny bit.
2017-11-07 21:38:24 -05:00
Alejandro Martinez
646c3ca1ad Access to Daily Measures from R
measures(all=FALSE, group="Body"), returns a data frame with the fields
of the specified measures group (currently "Body" and "Hrv" are supported)
and a row for each day on the current selected date range if all=FALSE or
the whole range of available data if all=TRUE.
Part 3 of #2588
2017-11-06 15:47:09 -03:00
Alejandro Martinez
fd2f54dea9 Merge pull request #2682 from amtriathlon/Measures
Access to Measure by days in Formulas
2017-11-06 10:18:58 -02:00
Alejandro Martinez
c7d4f33ce6 Autocompleter for measure builtin with all the options
To avoid the user the need to RTFM
2017-11-05 18:36:00 -03:00
Alejandro Martinez
e26a672755 Access to Measure by days in Formulas
Eg. measure(Date-1, "Hrv", "RMSSD") to get the RMSSD
measure from Hrv group the day before the activity date.
Part 2 of #2588
2017-11-03 16:28:34 -03:00
Alejandro Martinez
fd090e6104 Merge pull request #2679 from amtriathlon/Measures
LTMPlot - Access to Measures by days
2017-11-02 21:01:50 -02:00
Alejandro Martinez
316983e7da LTMPlot - Access to Measures by days
Added Daily Measure to curve config, settings and plot
Added API for common access to Body/Hrv Measures.
Part 1 of #2588
2017-11-02 14:24:56 -03:00
Joern
dfc27ffa82 Merge pull request #2676 from Joern-R/tp-enhancements
TodaysPlan WO Download
2017-11-01 18:45:44 +01:00
Joern
5e6a6e85a9 TodaysPlan WO Download
... remove whitespaces from the generated filename
2017-11-01 16:51:34 +01:00
Mark Liversedge
69ac33fe66 Merge pull request #2673 from riccioclista/fix_cp_history
Handle gaps in estimate data in LTMPlot #2534
2017-11-01 13:28:02 +00:00
riccioclista
8f6cb27385 Add debug output for estimate data aggregation in LTMPlot 2017-11-01 13:36:23 +01:00
riccioclista
8e4b36e855 Use QwtPlotGappedCurve for estimate curves in LTMPlot 2017-10-31 19:50:42 +01:00
riccioclista
91828692b8 Handle gaps in estimate data in LTMPlot #2534 2017-10-31 19:50:23 +01:00
Mark Liversedge
a771b9629a libical 2 compatibility
.. isUTC no longer present (and was never needed anyway).
2017-10-29 15:03:44 +00:00
Mark Liversedge
7bb78f5eb0 Merge pull request #2672 from cdknight/update-INSTALL-LINUX
updated INSTALL-LINUX
2017-10-28 10:52:06 +01:00
cdknight
f2afbdc0f8 updated INSTALL-LINUX
I updated INSTALL-LINUX with arch linux instructions, removed some old version numbers, like Ubuntu 11.04 on amd-64, and slightly cleaned this up. This will have to be checked for accuracy and installation success later on.
2017-10-27 20:32:21 -04:00
Alejandro Martinez
0ff2a3088c Fixed HRV CSV import from Android Hrv4Training on DST
DateTime with 0 hr is not valid when the time is advanced,
changed to check only the date. Reported by Potuz at the forum.
2017-10-27 20:07:26 -03:00
Mark Liversedge
038860a4ec FitRideFile compiler error
- implicit conversion from char to QString wasn't supported.
2017-10-26 16:22:42 +01:00
Mark Liversedge
0232238326 Merge pull request #2670 from mtbkeith/GC-KR-006_FixZwiftImport
Fixes ZWIFT files which are not reporting local timestamp.
2017-10-26 11:18:13 +01:00
Keith Reynolds
58a49b6576 Fixes ZWIFT files which are not reporting local timestamp.
Secondary fix for regular expression which did not catch the ZWIFT file naming convention using dashes rather than underscores.
2017-10-25 23:32:11 -06:00
Keith Reynolds
c68765f5e4 Add XCode project creation directions 2017-10-24 01:18:45 -06:00
Alejandro Martinez
167165ca15 Added references to Developers Guide and Guidelines for Translators 2017-10-22 16:12:22 -03:00
Alejandro Martinez
684b44598d Merge pull request #2664 from amtriathlon/master
Fixes imperial conversion error on Trends Histogram
2017-10-21 12:42:28 -02:00
Alejandro Martinez
a634ea04a5 Fixes imperial conversion error on Trends Histogram
Unit conversion was applied to histogram counts instead of to
speed/torque indices for Date Ranges and compare Date Ranges
Fixes #2658
2017-10-21 10:38:24 -03:00
Alejandro Martinez
c62d80dcd6 Merge pull request #2656 from amtriathlon/master
Fixed malformed JSON file due to empty metric overrides
2017-10-19 10:39:05 -02:00
Alejandro Martinez
c7068929ee Avoid the creation of empty overrides on RideMetadata
When the override checkbox is unchecked
Fixes #2654
2017-10-18 19:58:22 -03:00
Alejandro Martinez
f38d4b1498 Fixed malformed JSON file due to empty metric overrides
When the user check/uncheck a metric override checkbox
on RideMetadata an empty metric override is generated,
the line removed on JsonRideFile.y produces an extra ","
with errors reported at the forum
2017-10-18 11:22:04 -03:00
Alejandro Martinez
dc0b0c6237 Added guidelines for contributing 2017-10-17 20:56:24 -03:00
grauser
5cb3f07437 FIT : Add temperature and lrbalance in export 2017-10-13 22:43:59 +02:00
grauser
36b16a558f FIT : Add the local_msg_type
in write_message_definition to prepare adding temp and lrbalance
2017-10-11 23:07:11 +02:00
grauser
98f54da285 FIT : Add Quarq as Manu/Prod
Add Powertap P1
      Add Powertap C1
2017-10-11 07:46:44 +02:00
Mark Liversedge
871a188944 Kent University Software Instructions 2017-10-08 12:33:38 +01:00
Mark Liversedge
43c73bd3d4 Merge pull request #2646 from stschake/fix/strava-temp
Fix Strava temperature series import
2017-10-06 07:20:40 +01:00
Stefan Schake
955b42689b Remove superfluous series_type parameter
Strava API docs indicate this parameter is only relevant when also sending the resolution parameter

In any case, parameter need to be sent as POST data, not in the URL

This was mangling the temp series name. With this commit, Strava requests will also include the temp series
2017-10-06 02:20:23 +02:00
Alejandro Martinez
a313378cba Merge pull request #2644 from amtriathlon/HRV
HRV Measures - Direct import from HRV4Training for Android
2017-10-04 18:33:09 -03:00
Alejandro Martinez
5733d821bf HRV Measures - Direct import from HRV4Training for Android
Android version generates date and time instead of a combined timestamp
of measurement, even worse date is not in ISO 8061 format in the contributed
files... Let's hope it does not change with locale.
2017-10-04 16:12:37 -03:00
Mark Liversedge
71bc82be7a Kent Study Docs 2017-10-03 09:25:42 +01:00
Alejandro Martinez
6c3d2f1ce7 Merge pull request #2641 from amtriathlon/HRV
HRV Measures - Direct import from EliteHRV CSV files
2017-10-02 23:43:12 -03:00
Alejandro Martinez
7d9aab2e41 HRV Measures - Direct import from EliteHRV CSV files
Test file contributed by Martin Wifling
2017-10-02 22:16:34 -03:00
Mark Liversedge
f2099f9be6 VERSION 3.5 DEV-1710
.. latest development build.
2017-10-02 13:55:23 +01:00
Mark Liversedge
21125ff403 Kent University Part 3 of 3
.. Upload dialog asks for RPE, ROF, test, notes and reason
   for missing any workouts.

.. Uploads a .txt file with metadata in it, as well as the
   .csv of the time series data

.. ROF, RPE and Notes metadata is updated with the values
   selected during the upload.
2017-10-02 13:53:30 +01:00
Alejandro Martinez
857ee8cf1e Merge pull request #2639 from amtriathlon/Strava
Fix Strava lap swims and expand Smart Recording
2017-10-01 20:18:53 -03:00
Alejandro Martinez
81b7259e7d Fix Strava lap swims and expand Smart Recording
Lap swims synced from Strava don't have pool length nor precise
length by length information nor stroke rate (cadence), we use
distance and time information from the informed laps to fill the
gaps and fix distance for users unable or unwilling to import the
original file, which is the recommended approach.
For all activities expand Smart Recording if enabled.
Changed default FixGap stop parameter to work with open water swims
and runs with Smart Recording, in the future we could expand during
import like we do for other file formats.
Fixes #2605
2017-10-01 18:46:22 -03:00
Joern
0d0f5686b1 Merge pull request #2633 from leifwar/master
Remove trailing whitespace from "Lap StartTime" in tcx files

Thanks.
Joern
2017-10-01 18:06:29 +02:00
Leif Warland
beb1b2df34 Remove trailing whitespace from "Lap StartTime" in tcx files 2017-09-27 16:17:24 +02:00
Mark Liversedge
011d097cd3 Fix QTextEdit in KentUniversity.h
.. previous commit was to wrong header.
2017-09-27 13:47:55 +01:00
Mark Liversedge
dd0b677077 Fix QMessageBox header on MSVC 2017-09-27 12:11:42 +01:00
Mark Liversedge
8943c28f63 Fix QTextEdit unknown Type in KentUniversity.h 2017-09-27 12:02:46 +01:00
Stefan Schake
45ddb5a14c MacOS build fixes 2017-09-26 23:23:11 +02:00
Stefan Schake
737e779968 Wait same time for ANT stick to be released in MacOS handler 2017-09-26 22:41:25 +02:00
Stefan Schake
0178aa1693 Cppify the Garmin Service Helper for Windows 2017-09-26 22:41:25 +02:00
Stefan Schake
1f28da4f99 Fix event loop misbehaving and calling connect over and over 2017-09-26 22:41:24 +02:00
Stefan Schake
aa86f54eea Trigger on release so we avoid calling it twice 2017-09-26 22:41:24 +02:00
Stefan Schake
a2292fdae3 Fail fast when we couldn't open an ANT stick 2017-09-26 22:41:23 +02:00
Stefan Schake
fb14081f0f GarminServiceHelper implementation for MacOS 2017-09-26 22:41:23 +02:00
Stefan Schake
0fd5e3afd7 Synchronize setup() correctly
This speeds up the ANT+ connection.
2017-09-26 22:41:23 +02:00
Stefan Schake
24b739a7c9 Wait long enough to make subsequent ANT+ connection possible 2017-09-26 22:41:22 +02:00
Stefan Schake
8b63dcffa4 Integrate Garmin Service warning 2017-09-26 22:41:22 +02:00
Stefan Schake
dab0698932 Implement Garmin service detection/stopping for Windows 2017-09-26 22:41:21 +02:00
Mark Liversedge
caaf674ad1 Complying with DMCA takedown for WASP Packet Protocol 2017-09-26 16:48:33 +01:00
Mark Liversedge
dc21935508 AddCloudWizard Consent Page + GoogleDrive refresh bug
.. the KentUniversity service has a consent page which is
   now added to the add cloud wizard as an option.

.. in testing this also found that the refresh of the google
   drive access token in MaybeRefreshCredentials() updated
   the value in app settings but not in the cloud service
   configuration settings. This is also fixed now for both
   the google drive and kent uni cloud services.
2017-09-23 15:59:07 +01:00
Mark Liversedge
243361e7d1 AddCloudWizard Folder read-only
.. bit of a catch 22 scenario with folder being selected
   without opening the service by manually editing the
   folder name.

.. this causes problems when open is then called and the
   folder is invalid - especially when we're in the middle
   of configuring the service anyway.

.. to avoid this, the folder widget is now read-only and
   you must select the folder using the browse function.
2017-09-23 10:02:02 +01:00
Mark Liversedge
bd06ec2458 KentUniversity Fix CSV file format
.. use GC CSV (full data) instead of the PowerAgent format.
2017-09-22 18:05:38 +01:00
Mark Liversedge
36e6487568 Kent University Part 2b of 3
.. update to the uploader to force the user to set key metadata

.. 3rd part will handle upload of metadata files to associate
   with the CSV files and correct the CSV format from PT format.
2017-09-22 14:57:30 +01:00
Mark Liversedge
07d4aeef4e Fix MSVC build error KentUniversity
.. left in a reference to GOOGLE_DRIVE_DEBUG by accident.
2017-09-22 12:42:01 +01:00
Mark Liversedge
fc04c1ceea remove qdebug
.. becoming a dumb habit, sorry.
2017-09-22 12:35:28 +01:00
Mark Liversedge
9130a719f7 Fix GoogleDrive FOLDER_ID setting
.. it was lost during the refactor and means it is not possible
   to set the folder to use (!)

.. fix applied to KentUniversity as well since they use
   GoogleDrive to share files.
2017-09-22 12:32:10 +01:00
Mark Liversedge
f54b4ebbb1 Kent University Part 2 of 3
.. custom uploader, using CSV.

.. requires updating to support custom fields like RPE/ROF
   but committing whilst trying to resolve a bug related
   to the FOLDER_ID configuration setting.
2017-09-22 11:49:21 +01:00
Alejandro Martinez
0f05572890 Merge pull request #2630 from amtriathlon/DropBox
Migrate to Dropbox API v2 - Use list_folder/continue
2017-09-21 19:08:22 -03:00
Alejandro Martinez
5374af8cdb Migrate to Dropbox API v2 - Use list_folder/continue
Once a cursor has been retrieved from list_folder,
use this to paginate through all files.
2017-09-21 14:59:07 -03:00
Mark Liversedge
cf41bd1b17 remove qdebug 2017-09-21 17:59:27 +01:00
Mark Liversedge
0910bb7aa6 University of Kent Support 1 of 3
.. just add as a Google Drive service

.. need to do upload dialog and file formats as subsequent
   commits.

NOTE: this is a variant of Google Drive, not just subclassed
      at this point. We may simplify this later to avoid two
      classes that need bug fixes / changes as the Google API
      changes over time.
2017-09-21 17:56:57 +01:00
Mark Liversedge
6f39a59c38 Compile error on major(dev_t)
Fixes #2627
2017-09-18 19:06:34 +01:00
Joern
ac515b633b Merge pull request #2626 from Joern-R/Dropbox_API_V2
Migrate to Dropbox API v2 - Part 2 of 2
2017-09-17 13:47:06 +02:00
Joern
4fa3e5bea8 Migrate to Dropbox API v2 - Part 2 of 2
... updates the upload, download, file list endpoints
2017-09-16 18:46:49 +02:00
Alejandro Martinez
f70660dd24 Merge pull request #2612 from riccioclista/fix_build_with_withings
Fix Withings API related defines
2017-09-11 10:45:01 -03:00
Alejandro Martinez
438622c92d Merge pull request #2616 from amtriathlon/XData
Preserve XData on Activity Split&Combine
2017-09-11 10:43:52 -03:00
Alejandro Martinez
528e062140 Preserve XData on Combine Activities (Merge)
Part 3 of #2406
Just preserve XData from first ride and add XData from the second,
if not already present, in the future we could let the user to
choose, like for standard series
2017-09-10 13:04:06 -03:00
Alejandro Martinez
ebdc42c692 Fix integer division on pNNx HRV Metrics
Value was always zero
2017-09-10 12:21:55 -03:00
Alejandro Martinez
71176bd0dd Preserve XData on Combine Activities (Join)
Part 2 of #2406
2017-09-09 22:08:02 -03:00
Alejandro Martinez
12d44e9c03 Preserve XData on Activity Split
Part 1 of #2406
2017-09-09 11:39:27 -03:00
Alejandro Martinez
bc783ed4a7 Preserve XData on Activity Split
Part 1 of #2406
2017-09-08 19:45:49 -03:00
Alejandro Martinez
0d30428f47 Merge pull request #2614 from amtriathlon/HRV
Add support for R-R txt files import (HRV)
2017-09-05 19:29:57 -03:00
Alejandro Martinez
c5cf5e102e Add support for R-R txt files import (HRV)
Fixes #2613
Test files contributed by forum users Mike and Ron
2017-09-05 17:14:16 -03:00
riccioclista
f54303a192 Fix Withings API related defines 2017-09-03 21:51:03 +02:00
Mark Liversedge
f70ab21104 QT >= 5.8 stop ride summary stealing focus
.. its annoying!
2017-09-01 12:20:21 +01:00
Joern
2139fb41ee Merge pull request #2608 from Joern-R/FixPowerAbs
FixPower
2017-08-27 11:47:44 +02:00
Joern
2c62390740 FixPower
... allow fix power value to be added/subtracted in addition to percentage values
2017-08-27 11:08:31 +02:00
Alejandro Martinez
429de11137 Merge pull request #2602 from amtriathlon/HRV
More flexible HRV CSV file parsing
2017-08-20 20:03:56 -03:00
Alejandro Martinez
12fe082518 More flexible HRV CSV file parsing
-Allow lines ending in CR as generated by HRV4Training iPhone app.
-Allow ";" additionally to "," as separator.
-Skip unsupported columns.
-Skip empty lines and values.
-Recognize the alternative names generated by HRV4Training when
orthostatic test is selected.
2017-08-20 18:40:31 -03:00
Alejandro Martinez
e97dbf2312 BikeScore is relevant only for rides
Fixes #2329
2017-08-17 10:37:02 -03:00
Alejandro Martinez
b668cb4ed0 Honour Sport tag even when run specific data are present
Fixes 2367
2017-08-15 15:08:13 -03:00
Alejandro Martinez
87adf87d5c Merge pull request #2599 from lumanz/master
zh-cn translation update
2017-08-13 10:31:50 -03:00
sping
eb67f17446 zh-cn translation update 2017-08-13 15:47:58 +08:00
Alejandro Martinez
cb52390603 Increased precision for HRV Recovery Points 2017-08-12 10:30:21 -03:00
Alejandro Martinez
ccb30c7d8a Added unmatched suffix to Unknown file type error on import
Fixed #2596
2017-08-12 10:20:21 -03:00
grauser
e06ce3ebe8 Fit : Device info - display manufacturer when no product number 2017-08-09 23:51:24 +02:00
grauser
fe737f67c0 Strava : Correct lap start end index
fix #2505
2017-08-09 23:22:14 +02:00
grauser
14459cb9b8 Joule : Correct log 2017-08-09 18:59:32 +02:00
Mark Liversedge
f55e470950 Merge pull request #2590 from dresco/trainview
Fix for trainview crash
2017-08-04 13:41:30 +01:00
Jon Escombe
8c79fc4641 Fix for trainview crash
Don't try to read lap position if no file loaded (manual mode)
2017-08-04 13:01:24 +01:00
Alejandro Martinez
2b47ca5fc7 HRV screen captures for the Wiki 2017-08-03 14:33:04 -03:00
Mark Liversedge
b45c312bc7 V3.5 1708 Development Release
.. August 2017
2017-08-03 07:51:21 +01:00
Alejandro Martinez
17cc490e19 Merge pull request #2587 from amtriathlon/HRV
HRV Measures - Part 3
2017-08-02 19:20:10 -03:00
Alejandro Martinez
c1de1def02 HRV Measures - Part 3
Added HRV Measure fingerprint to RideItem fingerprint
to detect changes in HRV Measures potentially affecting
ride metrics.
2017-08-02 18:19:14 -03:00
Alejandro Martinez
a34a0a901c Merge pull request #2586 from amtriathlon/HRV
HRV Measures - Part 2
2017-08-01 18:57:30 -03:00
Alejandro Martinez
5097bae874 HRV Measures - Part 2
Adds an option to FilterHRV dataprocessor to set HRV measures from
computed HRV metrics. Implements #2568 part 5.
2017-08-01 17:13:05 -03:00
Alejandro Martinez
577f70620d Merge pull request #2581 from amtriathlon/master
Allow negative numbers in double metadata fields
2017-07-31 14:44:20 -03:00
Alejandro Martinez
f939a88618 Allow negative numbers in double metadata fields
Fixes #2578
2017-07-31 12:12:46 -03:00
Alejandro Martinez
97659f27d6 Merge pull request #2575 from amtriathlon/HRV
HRV Measures
2017-07-28 11:10:25 -03:00
Alejandro Martinez
8a29e8a350 HRV Measures example file and format doc 2017-07-28 11:02:16 -03:00
Alejandro Martinez
623f0b9a79 Edit HRV Measures
Implements #2568 Part 6
2017-07-27 20:44:18 -03:00
Alejandro Martinez
2888b27e16 Adds HRV Measures - Part 1
Implements #2568 part 1, 2, 3, and 4
2017-07-26 17:17:21 -03:00
Alejandro Martinez
9d8377f640 Merge pull request #2569 from UgoBor/master
Edit Italian Translation
2017-07-22 20:27:03 -03:00
UgoBor
a8b4bda555 Edit Italian Translation 2017-07-22 16:07:44 +02:00
Alejandro Martinez
23abbbd056 Merge pull request #2567 from amtriathlon/master
Changed completion in formulas to replace the whole word
2017-07-21 10:46:24 -03:00
Alejandro Martinez
096911d1fa Changed completion in formulas to replace the whole word
To avoid problems due to case insensitive prefix match
Fixes #2566
2017-07-19 15:57:52 -03:00
Alejandro Martinez
deacf59700 Merge pull request #2563 from amtriathlon/master
Changed LTMPlot to use name to retrieve metadata fields
2017-07-18 19:53:07 -03:00
Alejandro Martinez
728e5038d4 Changed LTMPlot to use name to retrieve metadata fields
Instead of symbol which has spaces replaced by underscores so getText fails.
Fixes #2561
2017-07-18 17:35:02 -03:00
Joern
c8ab53d401 Merge pull request #2565 from Joern-R/VCCompileError
Fix MSVC Compile Error
2017-07-18 19:47:51 +02:00
Mark Liversedge
def02b4954 Reformat BT40Device.cpp Code
.. inconsistent use of tabs, didn't follow coding conventions
   used across the rest of GC

.. tbh, I found the code impenetrable and impossible to read.
2017-07-18 17:38:34 +01:00
Mark Liversedge
7e81be0aa6 Fix compiler warning for csc_service uninitialised 2017-07-18 17:22:58 +01:00
Mark Liversedge
c8767a5e4f Merge pull request #2434 from viiru-/bt40_pwr_sc_fix
Bt40 power and speed and cadence combination support
2017-07-18 17:17:41 +01:00
Joern
51eb386ad5 Fix MSVC Compile Error
... default settings in MSVC2015 do not support "not" operator - so change to "!"
... since this is only a single occurance in overall code
2017-07-18 16:49:27 +02:00
Mark Liversedge
6da51b47d6 Recognise Andre Heider
.. recent fixups for FitRideFile
2017-07-18 08:34:18 +01:00
Mark Liversedge
4ecab4f201 Fix FitRideFile unused lap_trigger compiler warning 2017-07-18 06:38:26 +01:00
Mark Liversedge
44a52bb972 Merge pull request #2562 from dhewg/pr/parser
TCX and FIT parser improvements
2017-07-18 06:35:11 +01:00
grauser
a0f89c4fa5 Fit : lap name for trigger 2017-07-17 22:41:42 +02:00
Andre Heider
f7c87eb04d FIT: respect the time zone the ride was recorded in
The "activity" message contains data to determine the time zone the
ride was recorded in. Parse this and adjust the start time accordingly.

This also fixes e.g. Strava synchroniziation. Rides recorded in
time zones different to the box GC runs on now properly match.
2017-07-17 12:11:32 +02:00
Andre Heider
4467eb5096 FIT: enable decodeDeviceInfo()
Enable parsing and saving of all attached devices.
2017-07-17 12:11:32 +02:00
Andre Heider
c3ee9ed685 FIT: remove duplicates from the device infos
There're scenarios where the attached devices get added again, e.g.
a power cycle. Filter out the duplicates so each member only gets listed
once.
2017-07-17 12:11:32 +02:00
Andre Heider
dc8c9d7f64 FIT: fix out of bounds access in decodeDeviceInfo() 2017-07-17 12:11:32 +02:00
Andre Heider
e3d1df34b1 FIT: add BATTERY_SOC to XDATA
Identify the battery level properly instead of using "FIELD_81".
2017-07-17 12:11:32 +02:00
Andre Heider
fdc8af2d34 FIT: let getScaleForExtraNative() return a float directly
The caller wants a float anyway, so get rid of the cast and allow non
integral values.
2017-07-17 12:11:32 +02:00
Andre Heider
5d2729e39d FIT: add Wahoo ELEMNT BOLT to product list
Properly identify files created by this device.
2017-07-17 12:11:32 +02:00
Andre Heider
3a87010b98 FIT: set file format info 2017-07-17 12:11:32 +02:00
Andre Heider
cc84c98df7 TCX: create precise and more detailed intervals
Create named intervals using the provided "StartTime" attribute.
This creates the usual "Lap x" intervals when manually pressing the
associated button.

But for automatically created intervals we use the "TriggerMethod"
reason to name the interval in more detail, currently "Distance x",
"Location x", "Time x" or "HeartRate x".
2017-07-17 12:11:32 +02:00
Andre Heider
8e22ea92a1 TCX: use the Creator/Name attribute as device type
Use the name of the recording device just as the FIT import does.
Tested with a Polar V800.
2017-07-17 12:11:32 +02:00
Mark Liversedge
c3576eac71 GCC 6.0 compiled fixup
.. adding QMAKE_CFLAGS_ISYSTEM= to src.pro
2017-07-17 09:17:06 +01:00
Mark Liversedge
94d6a21f0a Fix merge error
.. my mistake when resolving conflicts via the github ui
2017-07-16 11:02:07 +01:00
Mark Liversedge
fb770eda28 Merge pull request #2458 from mtbkeith/kr-warnings-2017-0418
Fix minor warnings & reduce header includes.
2017-07-16 10:10:34 +01:00
Mark Liversedge
e9b8ee64cb Merge branch 'master' into kr-warnings-2017-0418 2017-07-16 10:10:07 +01:00
Mark Liversedge
ec2d7ced6b Merge pull request #2527 from reustonium/master
Fix incorrect prompt for Wind Heading
2017-07-16 10:07:17 +01:00
Mark Liversedge
701b06cfa3 Merge pull request #2540 from vlcvboyer/GearRatio
GearRatio: derive value from sensors when DI2 not connected
2017-07-16 10:06:37 +01:00
Mark Liversedge
0014f2009f Merge pull request #2558 from dresco/trainview
Extend lap alert to cover CRS files
2017-07-16 10:05:34 +01:00
Jon Escombe
ddb9892645 Extend lap alert to cover CRS files
As course based workouts don't know seconds remaining to the
end of a lap, alert is triggered on remaining distance.
2017-07-09 10:49:14 +01:00
Alejandro Martinez
a1162deee6 Merge pull request #2546 from amtriathlon/EstimatePower
Changed FixDerivePower to include CdA and DraftM parameters
2017-07-03 11:57:06 -03:00
Mark Liversedge
90e4a16842 Fix GoogleDrive Upload Crash
.. uploader needs to open the store before calling writefile

.. in googledrive::open() needs to pre-fetch home() as writefile
   assumes the cache is up-to-date.
2017-06-26 10:51:46 +01:00
Mark Liversedge
0faf4aa617 Unset QT_SCALE_FACTOR on Linux
.. there are so many QT bugs related to this with opengl and
   other aspects of scaling we should just unset it. This is
   because we now have native support for Hi-DPI so this setting
   should not be needed anyway.
2017-06-25 12:05:47 +01:00
Alejandro Martinez
f9a73a4ec6 Changed FixDerivePower to include CdA and DraftM parameters
The objective is to enable fine tunning when a better estimate of CdA
and Drafting multiplier are available.
Using default CdA=0 and DraftM=1 the previous behavior is preserved
2017-06-15 11:24:37 -03:00
Vianney BOYER
58a2e88833 GearRatio: derive value from sensors when DI2 not connected 2017-06-06 20:38:44 +02:00
Joern
1664fa3d9e Merge pull request #2538 from Joern-R/fixelevation
Enhance Error handling in "Fix Elevation Data"
2017-06-06 18:10:00 +02:00
Joern
a8261ff218 Fix Build Errors in CI 2017-06-05 19:56:49 +02:00
Joern
fa5dbf90d9 Enhance Error handling in "Fix Elevation Data"
... check new API usage exceeded error
... check general QNetwork Errors
... inform User about what happened
2017-06-05 19:17:19 +02:00
Alejandro Martinez
4bde63bca2 Added Open Water Garming 920xt test file
Contributed by JulianM forum user
2017-05-29 14:23:33 -03:00
Alejandro Martinez
a47df8442f Merge pull request #2531 from amtriathlon/master
Escape special characters in Season/Phase/Event names
2017-05-25 12:16:04 -03:00
Mark Liversedge
2fc93992e3 Migrate to Dropbox API v2 - Part 1 of 2
.. updates to use OAuth2 endpoints
2017-05-25 11:24:52 +01:00
Alejandro Martinez
2d4e2cff0d Escape special characters in Season/Phase/Event names
Fixes #2530
2017-05-24 20:53:36 -03:00
reustonium
9f0c70391b Fix incorrect prompt for Wind Heading
This patch closes #2216 which incorrectly prompts for 'Wind Heading
(origin)' when estimating power.  The correct term for origin of wind is
'Wind Direction'.
2017-05-23 13:29:51 -04:00
Mark Liversedge
bce4e5a8fe Merge pull request #2518 from erikboto/disable-edit-while-training
WorkoutWidget: disable editing while recording
2017-05-20 19:03:00 +01:00
Mark Liversedge
d32e2b99f5 Merge pull request #2523 from sisao/master
Enable powerzones for "run" in R.
2017-05-20 18:15:26 +01:00
Joern
7a9d84457e Merge pull request #2524 from Joern-R/GearXData
Calculate Gear Ratio serios from XData
2017-05-20 19:02:59 +02:00
Joern
b60baee616 Calculate Gear Ratio serios from XData
... if "GEARS" are available as a XData series
2017-05-20 17:48:02 +02:00
Joern
31f8f45e01 Merge pull request #2520 from vlcvboyer/fix-gearratio
Fix gear ratio calculation when no power meter is present
2017-05-20 17:06:08 +02:00
Joern
e9c2459c5c Merge pull request #2519 from vlcvboyer/master
DI2 ANT+ messages used to populate dedicated XData serie
2017-05-20 17:05:15 +02:00
slorenz
efb2a3c2e2 Enable powerzones for "run" in R.
This resolves #2521
2017-05-20 13:37:01 +02:00
Mark Liversedge
1a1570d4f0 Fixup AddCloudWizard raise() on ConfigDialog
.. preferences pane was getting lost behind the mainwindow.

.. a bit of a hack but better than adding a gazillion
   parameter passes or updating context.
2017-05-20 11:53:22 +01:00
Mark Liversedge
a404c859b8 Fix Webpage Download Intercept Duplicates
.. only process the download request if we are visible.

.. otherwise you get an import wizard for every active
   WebPageWindow (!).
2017-05-20 11:34:37 +01:00
Vianney BOYER
100e26eab8 DI2 ANT+ messages used to populate dedicated XData serie 2017-05-18 22:37:33 +02:00
Erik Botö
228bf1a613 WorkoutWidget: disable editing while recording 2017-05-18 21:14:29 +02:00
Vianney BOYER
baa53fbbd6 fix gear ratio when no power meter 2017-05-17 11:38:04 +02:00
Mark Liversedge
2d27523fc0 Merge pull request #2516 from eticre/master
add support for Kettler Racer new request
2017-05-14 18:35:50 +01:00
alberto
608e18ac5c kettler racer 2017-05-14 18:12:33 +02:00
Joern
fca223af7a Merge pull request #2515 from Joern-R/cloud-id2
CloudService - Fix Translation related problem (Part 2 of 2)
2017-05-14 13:03:06 +02:00
Joern
29dde46244 CloudService - Fix Translation related problem (Part 2 of 2)
... fix QT build error (QAction signature changes)
2017-05-14 11:40:00 +02:00
Joern
2df01a0a45 CloudService - Fix Translation related problem (Part 2 of 2)
... introduce translatable "uiName" for each CloudService
... differentiate between "id" and "uiName" where needed
2017-05-14 10:19:15 +02:00
Joern
3f79f266ad Merge pull request #2514 from Joern-R/cloud-id1
CloudService - Fix Translation related problem (Part 1 of 2)
2017-05-13 18:37:13 +02:00
Joern
502688ed56 CloudService - Fix Translation related problem (Part 1 of 2)
... rename "name" to "id"
... remove translatebility of the "id" text from all service
2017-05-13 17:59:14 +02:00
Mark Liversedge
81ceb65ddd Hi-DPI Support some nits
.. ride navigator color

.. column chooser button size and fonts.
2017-05-11 17:58:11 +01:00
Mark Liversedge
c28966a1bc Fix Compare Rides across Athletes Bug
.. when comparing metrics/W'bal they were always being computed
   using the context of the compare pane, not the file.

.. so when you drag from one athlete window to another it was
   using the wrong athlete's settings etc.
2017-05-10 15:14:26 +01:00
Mark Liversedge
72106e7a97 Row Perfect 3 quoted data in CSV file
.. curve data is embedded using quote delimeters but our
   parser was lazy and just split on commas.

.. updated to handle quote delimeted data, but only for RP3
   format files (don't want to break anything else!)
2017-05-10 11:35:34 +01:00
Mark Liversedge
7266dee6d1 CyclingAnalytics send as FIT format
.. saves all other data and you can pass the Notes field
   as part of the call.

.. also fixed a crash in writeFile in CloudService that passed
   a NULL context to writeRideFile.
2017-05-10 09:53:55 +01:00
Mark Liversedge
0aaf9f3e5a Share Menu Again
.. check looks at autoimport too (e.g. when checking a
   directory that is mounted when connecting device).

.. changed the titles to make it clearer which are about
   activities and which are about measurements.
2017-05-10 09:18:15 +01:00
grauser
1bf6fd9b77 FIT : Add Combined Pedal Smoothness in 'EXTRA' XDATA 2017-05-09 23:12:02 +02:00
grauser
dae428e308 Strava : Download laps 2017-05-09 22:35:57 +02:00
grauser
186a33898d Today's Plan : Finalise RPE, TQR and LQS sync 2017-05-08 23:13:46 +02:00
grauser
2f5b3e708d Today's Plan : send RPE 2017-05-08 22:45:04 +02:00
Henrik
13cd6b5f9b Updated Swedish Translation
Contributed by https://github.com/henolo
2017-05-08 10:29:47 -03:00
Joern
76f3f83ff9 Merge pull request #2510 from Joern-R/Texts
Improve Texts
2017-05-07 20:08:04 +02:00
Joern
7b09dd3a92 Merge pull request #2511 from Joern-R/share
Share Menu
2017-05-07 20:07:49 +02:00
Joern
0246d7c57c Share Menu
... move "Body Measurement Download" from "Tools" to "Share"
... enable "Check for New Data" menu action
2017-05-07 19:26:19 +02:00
Joern
5d7452741b Improve Texts
... CloudDB - Version - better formatting + differentiate single version and multiple new versions
... Compare Pane - enable translatibility
2017-05-07 19:22:16 +02:00
Mark Liversedge
e1dcd0dd68 Share menu manually check for new data
.. sometimes we just want to get the data that was
   just posted without having to restart.
2017-05-07 16:25:14 +01:00
Mark Liversedge
e3a4883c85 Fix OSM tile server bug
.. no need to store data in a separate class variable
   since its maintained in the settings widgets

.. the bug was caused by only setting the unneccessary
   QString when settings were selected in the settings
   pane

.. cleaned up some debug too.

Fixes #2403
2017-05-07 10:44:06 +01:00
Mark Liversedge
940ef5820b CP Plot Filter using Linear Regression
.. slightly improved filter that uses a linear regress
   against MMP from 2m-20min to identify likely max
   efforts for each effort.
2017-05-06 12:01:04 +01:00
Joern
f06d36c76d Merge pull request #2509 from amtriathlon/Weight
Fixed first row alignment in Body Measures config page
2017-05-06 09:31:25 +02:00
Alejandro Martinez
ce9f83cb1c Fixed first row alignment in Body Measures config page 2017-05-05 21:04:39 -03:00
Alejandro Martinez
fbd2b09f3b Changed TSS per hour count to seconds
Fixed #2508
2017-05-05 12:09:54 -03:00
Mark Liversedge
c3c5a958b6 CP Chart Filter Unique MMP
.. another option for the CP plot to filter out MMP
   data points that are not from distinct efforts.

.. at present we keep the first point on the MMP curve
   not neccessarily the maximal point.

.. this is to indicate how sparse the data is that the
   model is being fitted to.

.. we can revisit the filter to potentially keep the
   maximal point from a power-duration perspective --
   but not clear how to do this without using a PD
   model (or if there is anything wrong with that).
2017-05-05 10:31:20 +01:00
Joern
16e9cc3faf Merge pull request #2494 from bwalding/master
Fix the Zwift activity extension since it is not added by Zwift durin…
2017-05-04 18:14:20 +02:00
Alejandro Martinez
57a00cebb9 Merge pull request #2506 from stschake/fix/strava-activity-name
Strava upload: always set activityNamePart body
2017-05-03 20:47:29 -03:00
Stefan Schake
010c731229 Set activityNamePart body 2017-05-04 00:43:23 +02:00
Mark Liversedge
f3f2462ff4 Fix R Embed Version 3.4 Crash
.. the call methods structure changed at v3.4.0 of R
   which means when you register routines you should
   pass the correct structure.

.. this can only be determined at runtime when the R
   dynamic library is loaded.
2017-05-03 13:20:29 +01:00
Mark Liversedge
2c23120e3a Strava use metadata config on readFile
.. populate the metadata field on read as well as
   on write (previously saved to Notes).
2017-05-03 09:13:10 +01:00
Mark Liversedge
47a50c92a7 Merge pull request #2504 from stschake/fix/strava-activity-name
Strava upload: don't use filename as fallback for activity name
2017-05-03 07:03:30 +01:00
Mark Liversedge
b6543d7597 Merge pull request #2503 from stschake/fix/tcx-hr
TCX export: don't write bogus HR values
2017-05-03 07:00:16 +01:00
Stefan Schake
5cba391d1d Strava upload: don't use filename as fallback for activity name 2017-05-03 02:29:51 +02:00
Stefan Schake
1e06188bbc TCX export: write creator if present 2017-05-03 01:55:39 +02:00
Stefan Schake
012412b809 TCX export: write notes if present 2017-05-03 01:39:21 +02:00
Stefan Schake
f8ed257ce3 TCX export: only write HR data when it is present in the ride 2017-05-03 01:23:24 +02:00
Mark Liversedge
884f99436d Hi-DPI Webpage Window
.. set zoom so its not super tiny.
2017-05-02 20:41:22 +01:00
Mark Liversedge
e0d95cc08e RideFile::openRideFile() supports .zip and .gz
.. to support importing rides on download from a
   web page, we now support files that are compressed
   using gzip or zip.

.. the file name will still need to have the correct
   file format encoded in the suffix but will be
   deflated before being passed to the readers.

.. for example files downloaded from TrainingPeaks
   via their webapp will likely end in .wko.gz.
2017-05-02 20:28:35 +01:00
Mark Liversedge
6c08e22061 Add OpenGL for OverviewWindow
.. since its used on Linux.
2017-05-02 09:55:15 +01:00
Mark Liversedge
25daa8655f Merge pull request #2500 from amtriathlon/OpenGL
Disabled Linux OpenGL acceleration if OpenGL lower than 2.0
2017-05-02 09:49:10 +01:00
Alejandro Martinez
9d712454d2 Disabled Linux OpenGL acceleration if OpenGL lower than 2.0
It doesn't work on older hardware
2017-05-01 18:58:32 -03:00
Mark Liversedge
0a29828e50 Overview use OpenGL on Linux
.. since we shifted to hi-dpi support we can use opengl acceleration
   on the overview chart, should make it a bit smoother under load.
2017-05-01 09:01:06 +01:00
Mark Liversedge
ed21fb7d8a Embedded R Tweaks
.. Hi-dpi support fixes use of OpenGL acceleration
.. Added a bit of debug on startup (when GC_WANT_ALLDEBUG is set)
2017-05-01 08:40:06 +01:00
Mark Liversedge
725f4ef806 DEVELOPMENT BUILD 1705
.. updates version numbers.
2017-04-29 13:11:59 +01:00
Mark Liversedge
f65b9d8132 Code Formatting and remove Debug 2017-04-29 09:59:35 +01:00
Ben Walding
9732ad0619 Fix the Zwift activity extension since it is not added by Zwift during automatic upload. 2017-04-29 14:38:43 +10:00
Tria-Andy
7022c66530 Fixed mixed variable on RideSummary causing a crash
Fixes #2491
2017-04-28 12:15:34 -03:00
Mark Liversedge
38bac19424 Merge pull request #2490 from dresco/trainview
Support for SRM manual zero offset calibration
2017-04-28 16:04:28 +02:00
Jon Escombe
dbf3bab104 Support for SRM manual zero offset calibration
As there is no notification of calibration completion in the SRM profile,
we progress the calibration state on to completion five seconds after we
start receiving calibration messages.

Temporarily removes support for auto-zero, as was not used, and current
code did not follow the standards set in the ANT+ documentation.
2017-04-28 12:31:47 +01:00
Joern
645f01b9b9 Merge pull request #2476 from Joern-R/Weight
BodyMeasures / Use of Weight
2017-04-26 15:27:13 +02:00
Mark Liversedge
c22be82de4 Merge pull request #2477 from amtriathlon/BodyMeasures
Changed Date to DateTime on BodyMeasures GUI
2017-04-26 14:17:42 +02:00
Mark Liversedge
1311e48815 Merge pull request #2478 from stschake/fix/api-listen-ip
Only listen on localhost for API calls
2017-04-26 07:46:18 +02:00
Stefan Schake
72ffe0db24 Only listen on localhost 2017-04-26 00:04:18 +02:00
Alejandro Martinez
530f35ced0 Changed Date to DateTime on BodyMeasures GUI
The main purpose is to fix editing when there are multiple records per day,
additionally it allows to enter more than one manual record per day which
may not be that useful but I think is more consistent.
2017-04-25 18:06:23 -03:00
grauser
9d13b7cc3e Strava : Correct Manual distance 2017-04-25 21:39:46 +02:00
grauser
fb8489ef2c Strava : Remove debug trace 2017-04-25 21:34:22 +02:00
grauser
5f3158baa6 Strava : handle manual entry 2017-04-25 21:32:56 +02:00
Alejandro Martinez
2340b04196 Added test chart using vector formulas
Tanda marathon prediction and Acute/Chronic mileage ratio formulas
use the new syntax for date rantes [[Date_From:Date_To]]
2017-04-25 13:52:59 -03:00
Joern
44156c15fa BodyMeasures / Use of Weight
... no fix use of GC_WEIGHT - but depending avaialility use weight from BodyMeasures, Ride, GC_WEIGHT (default)
2017-04-25 18:32:38 +02:00
Alejandro Martinez
afa75ec5b1 Merge pull request #2468 from amtriathlon/Vectors
Re-introduced vector expressions
2017-04-25 10:16:27 -03:00
Mark Liversedge
f645df8040 Deprecate ShareDialog and Friends
.. they are now replaced via CloudService.
2017-04-24 20:32:37 +01:00
Mark Liversedge
616de4966f Deprecate Twitter support
.. move the twitter dialog into the deprecated folder
.. remove all remaining references to twitter
2017-04-24 20:19:50 +01:00
Mark Liversedge
3fd026b392 Cloud Refactor - OAuthDialog cleanup
.. remove twitter and google calendar

.. add comments to show where the basic OAUTH steps are
   processed for implementors of future services

.. tidy up code formatting to be consistent with GC style
2017-04-24 20:06:51 +01:00
Mark Liversedge
349df6576d Strava and Cycling Analytics Description
.. should now mention we sync with them.
2017-04-24 16:23:04 +01:00
Mark Liversedge
e30d0e1b52 Cycling Analytics Sync - Download
.. CA now supports download, and will reconstruct the ride
   from the streams of data.
2017-04-24 16:15:28 +01:00
Joern
9f4d1dfb79 Merge pull request #2472 from Joern-R/Weight2
Default Weight vs. BodyMeasurements
2017-04-24 09:11:45 +02:00
Mark Liversedge
8650045ca9 Cycling Analytics Sync - Readdir
.. updated Cycling Analytics cloud service to support sync
   with a readdir function.

.. need to sort out the download (which will need to combine
   data streams like Strava/SportTracks).

.. upload seems to be failing (?)
2017-04-23 19:40:07 +01:00
Joern
28d26d18f3 Merge pull request #2474 from Joern-R/DE
Update Translation DE
2017-04-23 19:13:57 +02:00
Joern
c9c9255544 Update Translation DE
,,, + small text fix in original
2017-04-23 18:57:32 +02:00
Joern
c412dd6b8d Default Weight vs. BodyMeasurements
... separate (single) default weight stored in GC_WEIGHT from time-dependent body measurements on UI
... To Do - analyse and if necessary adjust use of GC_WEIGHT vs. use of time-dependent body measurement
2017-04-23 12:53:52 +02:00
Mark Liversedge
05b3ed0d56 Wiki CloudServiceDialog screenshot
Added a screenshot of the cloudservicedialog for the wiki whilst documenting the CloudService API.
2017-04-23 10:42:35 +02:00
Joern
e5a6eb1010 Merge pull request #2470 from Joern-R/TE
Fix Terminology
2017-04-23 10:07:05 +02:00
Alejandro Martinez
2345fec490 Re-introduced vector expressions
Using [[Date_From:Date_To]] instead of [Date_From:Date_To] to
avoid conflicts with array indexing
Fixes #2278
2017-04-22 20:18:12 -03:00
Mark Liversedge
f0d6692c65 R 3.4.0 Support
.. the C runtime declarations changed in R-base which broke
   the RTool.cpp build.

.. fixed up to support 3.4.0 onwards with new structure whilst
   still working for earlier versions.
2017-04-22 22:37:30 +01:00
Mark Liversedge
0965185564 Strava : Choose metadata field for activity name
.. includes new Metadata1 type field in the CloudService
   settings types with support in AddCloudWizard.

.. also fixed a bug in CloudServiceFactory::saveSettings
   which failed for Combo1 (and now Metadata1) config.

.. user gets a drop down of metadata fields to use as the
   source for the name of the activity when posting to
   strava.

.. if the field is blank then the activity name is posted.
2017-04-22 21:48:16 +01:00
Joern
319c1f6702 Fix Terminology
... "measurements" (noun) not "measures" (verb) - thanks Mark
2017-04-22 19:44:45 +02:00
Joern
6033e9e538 Rename FileName (which PR did not do) 2017-04-22 14:38:12 +02:00
Joern
178419de0e Rename FileName (which PR did not do) 2017-04-22 14:37:36 +02:00
Joern
fd79d50742 Merge pull request #2469 from Joern-R/ServiceName
Rename "TraingStageBuch" to "TrainingsTageBuch"
2017-04-22 14:34:00 +02:00
Joern
abccf84199 Rename "TraingStageBuch" to "TrainingsTageBuch" 2017-04-22 13:55:35 +02:00
Mark Liversedge
1e06d44d5c Strava : Include from/to in date range
.. Strava API returns rides after/before the from/to dates but
   we want to include rides *on* those days.
2017-04-22 11:18:49 +01:00
Mark Liversedge
f3539a12fc Strava : Debug steals response data
.. writeFileCompleted debug statement was stealing the response
   readAll data so when it was being requested to process there
   was no data to receive.

.. changed the debug to be unobtrusive and output the data
   using local variables instead.

.. this bug is only noticeable if you have enabled Strava
   debug in gcconfig.pri
2017-04-22 10:27:10 +01:00
grauser
02ea7e0ed4 Strva : Use remotename 2017-04-22 10:22:53 +02:00
grauser
7a0bc047b2 Strava : use local start date 2017-04-22 09:57:23 +02:00
grauser
c1d6390fdc Strava : add pagination on query
result seems limited to 30 activities
2017-04-21 22:50:48 +02:00
grauser
d2b81f5f17 Strava : Refactor Stream reading
Like Mark did with SportTracks
2017-04-21 22:23:54 +02:00
grauser
44d90f0f2f Strava : Adjust streams call 2017-04-21 17:25:59 +02:00
grauser
769a7d19e0 Strava : Read Streams 2017-04-21 17:02:58 +02:00
Joern
bf1b739414 Merge pull request #2466 from Joern-R/TP-RPE
Today's Plan RPE - fixes
2017-04-21 09:24:26 +02:00
Alejandro Martinez
3e65902367 Fix download regression
.. Athlete::addRide() changes broke DownloadRideDialog
2017-04-20 19:05:42 -03:00
Joern
48debe15d5 Today's Plan RPE - fixes
... "name" does not always contain the real file name and is editable - use our filename instead
... RPE may be double (e.g. when set in TP)  - round to int for Overview Widget
2017-04-20 19:36:44 +02:00
Joern
797ee2d197 Merge pull request #2465 from Joern-R/FixDT
Fix Regression DataTable
2017-04-20 15:33:26 +02:00
Joern
b50b684e1e Fix Regression DataTable
... if a column has no data - just do not try to add the missing rows
2017-04-20 14:47:14 +02:00
Joern
e5ee3b588d Merge pull request #2461 from Joern-R/Fix-Plot
Fix "Shadow" Tmp-Exhaustion Marker
2017-04-20 12:16:21 +02:00
Mark Liversedge
56fc9411c2 Merge pull request #2462 from mtbkeith/kr-SwimRunPace
Use units specified in zone settings for run/swim/default.
2017-04-20 05:10:01 +01:00
Keith Reynolds
0b289b9fbc Use units specified in zone settings for run/swim/default.
Using Preferences->Athlete->Zones->Pace Zones for both Run/Swim to override Preferences->General->unit.
Simplify some code with if/else blocks.
Reorganize Tooltip variable argument order to match placement in text.
Still several problems around kph being used in chart y-value despite settings.
Use const when appropriate.
2017-04-19 21:09:28 -06:00
Joern
f2239a8246 Fix "Shadow" Tmp-Exhaustion Marker
... which appears only when plot is "zoomed in"
2017-04-19 20:19:21 +02:00
Mark Liversedge
f5f7d42116 Merge pull request #2459 from mtbkeith/kr-fix-cvUnits
Use correct units for CV hover dialog.
2017-04-19 17:26:42 +01:00
Keith Reynolds
5a664f8a9c Fix CP chart to add in y-value.
Adds y-value into ‘units2’; as kph, mph has done.
Re-order heat curve creation into if/else area.
Put string args on separate lines.
2017-04-19 09:56:46 -06:00
Keith Reynolds
cd485c27df Use correct units for CV hover dialog. 2017-04-19 01:30:27 -06:00
Keith Reynolds
cd8afbb297 Fix minor warnings & reduce header includes. 2017-04-18 23:22:27 -06:00
Mark Liversedge
5269566c4c Merge pull request #2457 from stschake/bug/cloud-default-url
Fix variant check to ensure default URL is used in Cloud Service wizard
2017-04-19 05:24:18 +01:00
Stefan Schake
3c3a9bc8ff Fix variant check to ensure default URL is used 2017-04-18 23:19:34 +02:00
Mark Liversedge
59e843ddfd Cloud Auto Download - Better info
.. tell the user how many and where data is being downloaded

.. tell the user when checking we only look 30 days in the past
2017-04-17 11:05:14 +01:00
Mark Liversedge
7d80a2cc69 Fix import regression
.. Athlete::addRide() changes broke RideImportWizard
2017-04-16 19:32:28 +01:00
Mark Liversedge
a459723ea8 Merge pull request #2454 from sisao/master
Screenshot for RChart wiki page.
2017-04-16 18:23:45 +01:00
slorenz
15cd1ce4b4 Screenshot for RChart wiki page. 2017-04-16 16:34:54 +02:00
Mark Liversedge
869b218a96 Hi-DPI Support - Cosmetic Fixups
.. some overlooked symbols, fonts and editbox sizes
2017-04-16 11:11:57 +01:00
Mark Liversedge
5457ea0cc6 Merge pull request #2451 from sisao/AddZonesLowToR
Provide zoneslow and zonescolor in GC.athlete.zones().
2017-04-15 20:59:56 +01:00
Mark Liversedge
135af75fc2 Fix auto download flicker
.. if no auto download services are selected then there is
   no need to show the auto download progress.
2017-04-15 18:41:52 +01:00
slorenz
ef55c7c4c1 Provide zoneslow and zonescolor in GC.athlete.zones(). 2017-04-15 19:22:36 +02:00
Mark Liversedge
70593976cb Cloud Auto Download - 3 of 3
.. Gui notifications of background activity

.. a small notification area at the bottom of the analysis
   sidebar shows checking and download status.

.. also fixed up the ride list to not select them, since that
   is irritating if your in the middle of doing something.
2017-04-15 17:52:04 +01:00
Mark Liversedge
8c12cefa8a SixCycle - Support Compressed Download
.. where file name is e.g. tcx_*.gz to indicate a TCX file
   using gzip compression.
2017-04-15 11:13:21 +01:00
Joern
5ecaf64c76 Merge pull request #2449 from Joern-R/BM-Metrics
RideMetrics - add missing Body Measures
2017-04-15 08:56:03 +02:00
Mark Liversedge
b55173643d Cloud Auto Download - 2 of 3
.. background download management, adds to the ride list
.. next commit needs to fixup GUI notifications etc.
2017-04-14 19:37:39 +01:00
Joern
7d354f28cf RideMetrics - add missing Body Measures
... Athlete Bones
... Athlete Muscles
2017-04-14 20:03:34 +02:00
Mark Liversedge
ccbba3e0a2 Cloud Auto Download - 1 of 3
.. initial plumbing to get the auto downloader integrated
   into context, athlete and ridecache refresh.

.. part 2 will need to perform the download functions

.. part 3 to add the GUI / notification of progress
2017-04-14 15:40:49 +01:00
Mark Liversedge
2b4759c16d Fix train view select ERG crash
.. regression introduced by c187bda7
2017-04-14 14:47:51 +01:00
Alejandro Martinez
0ed9fbc1b5 Updated translation files
To help translators working with development builds
2017-04-13 16:33:44 -03:00
Mark Liversedge
3397116130 Strava Upload Only for Dev Build
.. disable as it is a WIP.
2017-04-13 15:48:06 +01:00
Mark Liversedge
2566f1096e SportTracks download preserve gaps
.. the code to combine ST streams added blanks when there
   was a gap in recording, it is better to preserve such
   gaps and let the user manage with the 'fix gaps' tool.
2017-04-13 15:28:50 +01:00
Mark Liversedge
8098513474 Merge pull request #2448 from bwalding/master
Vertically align cells in the upload / download / synchronise table
2017-04-13 13:58:47 +01:00
Ben Walding
75a7863829 Vertically align cells in the upload / download / synchronise table 2017-04-13 22:09:02 +10:00
Mark Liversedge
20ccf87d86 SportTracks - Part 4 Upload
.. last part, upload isn't compressed, we can fix that
   up later. It is supposed to be supported.
2017-04-12 19:34:59 +01:00
Mark Liversedge
002e90e3d1 SportTracks - Part 3 readFile
.. needs to combine streams of data into a newly created
   ridefile, which is painful, but done.

.. we may need to review the resolution of the data and
   derivation of missing series in a later refining update
2017-04-12 18:20:15 +01:00
Mark Liversedge
99476d9ccb SportTracks Fixups
.. Secrets.h for appveyor CI build

.. duration/distance in readdir

.. beginnings of readFile, need to write a parser for
   the SportTracks format (streams not samples). sigh.
2017-04-12 14:36:57 +01:00
Mark Liversedge
274427faf4 SportTracks - Part 2 Refresh token and readdir()
.. also fixed up saveSettings in CloudServiceFactory to
   support saving of the refresh token in open().
2017-04-12 11:17:18 +01:00
Mark Liversedge
7e6954ec20 SportTracks OAuth Fixup
.. set raw headers when I shouldn't.

.. added when trying to resolve issues earlier and didnt
   remove them when they had no effect.

.. SportTracks OAuth config now works.
2017-04-12 08:00:18 +01:00
Joern
1964043976 Merge pull request #2447 from Joern-R/CI
Update CI (Windows) Build environment to Qt 5.8
2017-04-11 19:43:01 +02:00
Joern
30b735e034 Update CI (Windows) Build environment to Qt 5.8 2017-04-11 19:41:32 +02:00
Mark Liversedge
5613cd3db7 SportTracks.mobi - Part 1 of 4
.. CloudService and OAuthDialog.

.. Still needs:
   2) readdir
   3) readFile
   4) writeFile
2017-04-11 17:20:11 +01:00
Mark Liversedge
15f9d9d961 PolarFlow Integration On Hold
.. API compatibility issues with desktop applications.
2017-04-11 14:23:23 +01:00
Mark Liversedge
f9ea914464 TodaysPlan less debug
.. reduced the amount of debug data output when downloading
   data. It now only shows first 500 bytes of received
   file instead of the whole thing.
2017-04-11 10:55:30 +01:00
Mark Liversedge
aff60e3205 TodaysPlan - rename response when converting
.. because we convert the file to json in the response
   when adding RPE data we need to update the name used
   in the notifyReadComplete.

.. this fixes a bug where downloaded FIT files are
   converted to JSON but the sync tool tries to parse
   the returned data as FIT and fails.
2017-04-11 10:13:52 +01:00
Mark Liversedge
3b7a1e648f TodaysPlan - Resolve Memory Leak
.. resolve a memory leak re-allocating the storage
   for the returned byte array.

.. couple of other minor tidyups that were vestiges
   from my refactor of the code.

.. their is a bug downloading FIT files now -- the
   response is always converted to JSON, so we should
   not list as .FIT in readdir.
2017-04-11 09:55:55 +01:00
grauser
22e9038235 Today's Plan : Correction for Fetch RPE 2017-04-11 00:03:34 +02:00
grauser
c137b09881 Strava : Correct readdir parameters 2017-04-10 22:41:36 +02:00
Mark Liversedge
13ee0a5bdf CloudService - Sorted List
.. when working with the factory get a sorted list of
   service names so they can be offered in order

.. the addcloudwizard now list in alphabetical order

.. fixed up CloudService::type() to const
2017-04-10 17:19:20 +01:00
Alejandro Martinez
0d1016a79f Merge pull request #2445 from amtriathlon/PeakPaceHr
Adds Peak Pace Hr metrics
2017-04-10 11:18:56 -03:00
Mark Liversedge
43c772ff9d PolarFlow Cloud Service - 3 of 6
.. configuration dialog complete

.. will always attempt to bind user to service, if
   that has already occurred it fails, so we always
   ignore the response.
2017-04-10 15:00:53 +01:00
Alejandro Martinez
2d00b69ff1 Adds Peak Pace Hr metrics
Useful to track Pace to Hr relationships for running, similar
to Peak Power Hr metrics, both used in a Sample chart based on
https://alancouzens.com/blog/VO2Scores.html
2017-04-10 08:48:45 -03:00
Mark Liversedge
d3276341ff Fix Qt4 build error
.. and remove a couple of c++11 extension warnings.
2017-04-10 10:44:05 +01:00
Mark Liversedge
0cf9ca59fd Disable TodaysPlan RPE file I/O
.. lets find a better solution to updating the ride
   after it is received from TodaysPlan.
2017-04-10 09:55:02 +01:00
grauser
37ab293326 Strava : Sync (1/4)
Just list files
2017-04-09 22:58:19 +02:00
grauser
3603a7d8b2 Today's Plan : fetch RPE 2017-04-09 21:45:29 +02:00
Mark Liversedge
1601fe3e9a Need QT5.6 for QWebEngineCookieStore 2017-04-09 19:38:14 +01:00
Mark Liversedge
9fcc66dad1 OAuthDialog - Clear Cookies
.. since login screens often examine cookies to 'auto' login
   which is unhelpful when setting up accounts.
2017-04-09 18:56:20 +01:00
Mark Liversedge
deaa5d9972 Hi-DPI Support - OAuthDialog Scaling
.. the QWebView embedded in OAuthDialog needs to be zoomed
   so you can see the fonts.

.. the QT recomendation is to set the application wide
   scaling (!) to scale QWebEngine on hi-dpi screens obvs
   thats a really shit solution we ignore.
2017-04-08 21:19:58 +01:00
Joern
b0ce0bcc76 Merge pull request #2444 from Joern-R/cloudconfig
CloudWizard - Fix
2017-04-08 19:31:05 +02:00
Mark Liversedge
92867e2210 PolarFlow Cloud Service - 2 of 6
.. OAuthDialog updated to get authorization token
2017-04-08 17:41:50 +01:00
Joern
ece7b01a26 Merge pull request #2443 from Joern-R/bmcsv
Improve BodyMeasures - CSV Import
2017-04-08 18:17:21 +02:00
Joern
82020b476a CloudWizard - Fix
... settings for syncOnStartup
2017-04-08 18:16:40 +02:00
Joern
f1a4f82552 Improve BodyMeasures - CSV Import
... allow "date" in ISO8601 as an alternative to "ts" timestamp from Epoch
... update documentation / provide sample files
2017-04-08 17:40:18 +02:00
Mark Liversedge
514f24535d PolarFlow Cloud Service - 1 of 6
.. add template code and definition. This is not a functional
   update, it is to get the basics in place and run through
   CI to check for cross-platform issues.

.. part 2 to implement oauth

.. part 3 to implement configuration

.. part 4 to implement readdir()

.. part 5 to implement readFile()

.. part 6 to update CloudSyncDialog for download only services
2017-04-08 09:47:21 +01:00
Mark Liversedge
2197cfebb1 BodyMeasures Handle ',' embedded in string
.. needs to be tested !
2017-04-07 10:58:38 +01:00
Mark Liversedge
d74a84bd78 Cloud Refactor - Remove Upload to Calendar 2017-04-06 22:11:51 +01:00
Mark Liversedge
b1545a15eb Minor tidy up 2017-04-06 21:46:30 +01:00
Mark Liversedge
57276cd8c2 Simplify Share Menu
.. adding a manage accounts option is overkill and confusing
2017-04-04 18:40:12 +01:00
Mark Liversedge
987051d6e1 Cloud Refactor - Athlete > Accounts
.. remove the old "passwords" tab in the config pane.

.. added a new "accounts" tab in the athlete page and
   consolidated the zones tabs to a new "zones" tab

.. edit/add actions use the wizard, delete sets the
   service to inactive (but doesn't scrub settings).
2017-04-04 18:35:27 +01:00
Mark Liversedge
c1dc7b06f3 AddAccountWizard screenshot for wiki 2017-04-03 17:58:51 +01:00
Mark Liversedge
54c35ba117 Merge pull request #2438 from mtbkeith/fix2433_CrashingCompares
Fix crash of comparison rides
2017-04-03 08:05:23 +01:00
Keith Reynolds
3ead6e2fc8 Remove this as it is not necessary and causing comparisons to crash.
Xcode reported this as a leak, however ownership of the curve is by this class and will be deleted by the Qt framework as the parent is deleted.
2017-04-02 19:57:00 -06:00
Mark Liversedge
cd16ad36a6 Merge pull request #2435 from Joern-R/Cloud
CloudService - Fix Error Reading Files
2017-04-02 18:37:20 +01:00
Mark Liversedge
9343cbb4ae Cloud Refactor - CloudService list/select Athlete
.. add list/select athlete to the service semantics
.. implemented exemplar with Today's Plan service.
2017-04-02 18:33:57 +01:00
Joern
2a49a558cf CloudService - Fix Error Reading Files
... when asynchronously reading Files, "data" object needs to survive as it it referenced in the "buffers_" QMap
    (this is a quick fix - I suspect there are better ways to handle this)
2017-04-02 17:47:13 +02:00
Mark Liversedge
cf8c766106 Cloud Refactor - Combo (e.g. Google Drive Scope)
.. enable auth settings to have a combo that is defined by the
   service and user selectable.

.. Syntax:

   settingname::name::val1::va12::val3

   In the first example we used it to set the google drive scope
   for authorisation, so in this case it is defined:

   "<athlete-private>google_drive/
           auth_scope::Scope::drive::drive.appdata::drive.file"

   Which results in a user selectable combo box labelled "Scope"
   from which they can select from the values drive, drive.appdata
   and drive.file. The value is used to update the auth_scope
   setting in config/athlete-private.ini

.. We can add more of these later if they are needed, perhaps on
   the setting screen for settings not related to authorisation.

.. A "SettingCombo" widget has been created to simplify the way
   a QComboBox is setup and queried.
2017-04-02 10:46:43 +01:00
Mark Liversedge
2c1197a653 Cloud Refactor - Withings in AddCloudWizard
.. a stub cloud service to enable the configuration
   addcloudwizard to set it up.
2017-04-02 09:15:26 +01:00
Arto Jantunen
0039fcbab1 BT40Device: Ignore the CSC service for devices which also provide power
The power service also provides speed and cadence readings, connecting to
both isn't needed and causes problems since we only keep one each of the
relevant variables (prevCrankStaleness, prevCrankTime, prevCrankRevs,
prevWheelTime and prevWheelRevs).
2017-04-02 10:36:38 +03:00
Arto Jantunen
fe6a25af7c BT40Device: Refactor, connect to services after service scan completes 2017-04-02 10:12:45 +03:00
Mark Liversedge
8153d5a5b2 Merge pull request #2152 from antoniusriha/handle_log_redirect_properly
Close and free log file object after duplicating it
2017-04-01 22:06:58 +01:00
Mark Liversedge
4817adf5d5 Merge pull request #2267 from dresco/ANT
Change variable name for clarity
2017-04-01 22:00:54 +01:00
Mark Liversedge
f6d1444e18 Merge pull request #2272 from viiru-/bt40-reconnect
Bt40 reconnect
2017-04-01 21:59:18 +01:00
Mark Liversedge
e0eafdae7b Merge pull request #2391 from leifwar/master
Fixed use of metric reported in #2387
2017-04-01 21:58:23 +01:00
Mark Liversedge
f2081c978f Merge pull request #2411 from MaksVasilev/ru_translate
Russian translation Monthly update
2017-04-01 21:57:53 +01:00
Mark Liversedge
2412ad4fb3 Merge pull request #2431 from mtbkeith/kr-GearRatio-Precision
Change gear ratio precision to hundredths.
2017-04-01 21:56:35 +01:00
Mark Liversedge
6e42e594c5 Cloud Refactor - AddCloudWizard uses OAuthDialog
.. AddCloudWizard is now feature complete.

.. HOWEVER, OAuthDialog is written to support AddCloudWizard
   *and* Pages.cpp:CredentialsPage -- this is a hack whilst we
   convert all services to use CloudService (Withings/Calendar)

.. HOWEVER, Google Drive Scope and Today's Plan Athlete selection
   need to be handled in a generic way too.
2017-04-01 21:28:23 +01:00
Keith Reynolds
0e733f2fa6 Change gear ratio precision to hundredths.
Tooltip in ‘Ride’ view will now show hundredths due to precision selection.
Fix comparison of headers which simply used ‘contains’ rather than equals and would cause a problem if translation is in effect.
Fix rounding of gear ratio in derived series.
2017-04-01 12:02:33 -06:00
Mark Liversedge
bac3f65aeb Cloud Refactor - AddCloudWizard use injected config
.. maintain within the instantiated service and then write
   it to appsettings.

.. this means folder selection now uses config as maintained
   by the wizard.
2017-04-01 18:43:24 +01:00
Mark Liversedge
006c06c085 Cloud Refactor - CloudService Configuration Injection
.. configuration is injected into the CloudService by the
   CloudServiceFactory.

.. next steps are to include this into the AddCloudWizard
   and OAuthDialog and ConfigDialog's Pages code.

.. cloud services should still be working fully after this
   commit -- so long as config is performed via Options and
   not via the AddCloudWizard (although its close to complete).
2017-04-01 17:56:27 +01:00
Mark Liversedge
173eb8d582 Merge pull request #2423 from dresco/trainview
Train view ANT & USB nits
2017-04-01 13:40:50 +01:00
Mark Liversedge
8c0be7f2e8 Recognise Ben Walding
.. in the about contributors
2017-04-01 13:00:32 +01:00
Mark Liversedge
4183c8debd Merge pull request #2429 from bwalding/Issue-2421
Issue #2421 - debounce the calibrate button on the Computrainer HBC
2017-04-01 12:58:42 +01:00
Mark Liversedge
61a565a4d4 Cloud Refactor - WIP Fixups
.. Strava and CA both use OAuthTokens

.. AddCloudWizard wasn't setting the right config to mark a
   service as active (!)
2017-04-01 12:03:33 +01:00
Ben Walding
084789b175 Issue #2421 - debounce the calibrate button on the Computrainer HBC 2017-04-01 20:42:11 +10:00
Mark Liversedge
38000991b2 Cloud Refactor - Simplify Menu Options
.. share menu is now much simpler since:

   * twitter and calendar removed
   * individual upload/sync options removed
   * only shows sync/upload for configured accounts
2017-04-01 11:26:13 +01:00
Mark Liversedge
393dd8f10a Hi-DPI Support - Finer granularity in Font scaling
.. the most common scaling of fonts will be at or around
   x1.0, so added 0.9 and 1.1 to give slightly finer control
   over font scaling.
2017-04-01 10:11:08 +01:00
Mark Liversedge
092e396009 Merge pull request #2425 from mtbkeith/fixWarnings2
Fix warnings2
2017-04-01 09:52:23 +01:00
Mark Liversedge
77d3788262 Merge pull request #2427 from mtbkeith/kr-fix-member-access
Move members to private and correctly use method externally.
2017-04-01 09:48:08 +01:00
Mark Liversedge
9af3fa4a73 Merge pull request #2428 from mtbkeith/kr-fix-csv-latlon-precision2
Fix precision of Lat/Lon when exporting to CSV.
2017-04-01 09:46:54 +01:00
Keith Reynolds
9ba5f2e348 Fix precision of Lat/Lon when exporting to CSV.
Set precision to 8 decimal places.
2017-03-31 22:12:46 -06:00
Keith Reynolds
902314363e Move members to private and correctly use method externally. 2017-03-31 21:25:03 -06:00
Keith Reynolds
c2b3886272 Merge branch 'master' of https://github.com/GoldenCheetah/GoldenCheetah into fixWarnings2 2017-03-31 14:34:27 -06:00
Mark Liversedge
3ba69016e0 Merge pull request #2426 from mtbkeith/fixBrokenHeader
Fix broken build on MAC in AddCloudWizard.cpp
2017-03-31 21:32:24 +01:00
Keith Reynolds
2983614505 Fix broken build on MAC with Qt5.8.0 2017-03-31 14:26:15 -06:00
Keith Reynolds
7d3b2e779e Put back to correct number of MS for WKO format 2017-03-31 14:00:43 -06:00
Keith Reynolds
a386fbcc91 Merge branch 'master' of https://github.com/GoldenCheetah/GoldenCheetah into fixWarnings2 2017-03-31 13:59:20 -06:00
Mark Liversedge
82b50680a5 Cloud Refactor - AddCloudWizard < Qt5.8 fixes
.. fix builds on earlier versions of QT
2017-03-31 20:55:18 +01:00
Keith Reynolds
a388561f9f Merge branch 'master' of https://github.com/GoldenCheetah/GoldenCheetah into fixWarnings2 2017-03-31 12:31:59 -06:00
Mark Liversedge
bf8d8a8f95 Cloud Refactor - Add Account Wizard Part 1 of 4
.. full wizard now done, will write appsettings.

.. need to now look at how OAuth can be call mid-config as
   a refactor if OAuthDialog in part 2

.. need to also look at how folder selection can be called using
   "in-progress" config in part 3

.. need to tidy up special topics in Part 4, such as google drive
   id and todays plan handling coach/athlete selection.
2017-03-31 17:34:53 +01:00
Joern
08f6137518 Merge pull request #2422 from Joern-R/DT
Fix - Data Table
2017-03-31 18:31:16 +02:00
Keith Reynolds
9e9131bedb Remove comment 2017-03-31 10:11:53 -06:00
Keith Reynolds
cd016f3d6a Fix bug on calculating hours/minutes. Was incorrectly using 6 minutes instead of 60 minutes worth of milliseconds as calculation (missing a 0). 2017-03-31 10:10:53 -06:00
Keith Reynolds
5dc6e8eb1a Use defines for units
Fix precision loss issues
Remove unused variables
2017-03-31 10:09:35 -06:00
Keith Reynolds
3f5f341168 Updates to use defines 2017-03-31 09:47:58 -06:00
Keith Reynolds
b593f8322d Use pre-existing define 2017-03-31 09:43:17 -06:00
Keith Reynolds
7eb3cafedd Standardize some numbers using existing defines. 2017-03-31 09:39:51 -06:00
Keith Reynolds
f7deb13e8b Use I/O kit to delay screensaver as UpdateSystemActivity deprecated.
'UpdateSystemActivity' is deprecated: first deprecated in macOS 10.8
Preventing sleep using I/O Kit available since 10.6
@see https://developer.apple.com/library/content/qa/qa1340/_index.html
2017-03-31 09:25:21 -06:00
Keith Reynolds
ee8ce1c7df Remove duplicate of virtual base method and mark as ‘using’ in derived class. 2017-03-31 09:06:19 -06:00
Mark Liversedge
1f8534abc5 Merge pull request #2424 from mtbkeith/forkdFixWarningsAndLeaks
Fix warnings, leaks and null pointer access
2017-03-31 11:57:08 +01:00
Keith Reynolds
915a59fa9e Fix to match virtual signature 2017-03-31 01:36:53 -06:00
Keith Reynolds
936b54291b Fix order of init in struct to match decl.
Remove double set of variable.
2017-03-31 00:30:44 -06:00
Keith Reynolds
d9f624530d Simple logic fix, last = point always set after if anyhow. 2017-03-31 00:26:43 -06:00
Keith Reynolds
27c549c7ec Fix potential memory leak 2017-03-31 00:24:17 -06:00
Keith Reynolds
8455be21ff Remove unused method. 2017-03-31 00:16:51 -06:00
Keith Reynolds
dfea04a22f Remove unused member variables.
Fix methods to prevent hiding of virtual methods with incorrect signature.
2017-03-31 00:15:26 -06:00
Keith Reynolds
cebcd9a73a Move variable into scope in which it is used. 2017-03-31 00:03:54 -06:00
Keith Reynolds
eeb3daef7c Mark unused variables 2017-03-31 00:02:40 -06:00
Keith Reynolds
47a3f04115 Prevent memory leak and short circuit if no ride found. 2017-03-30 23:51:26 -06:00
Keith Reynolds
09d4a56269 Prevent virtual method hiding by matching signatures. 2017-03-30 23:41:05 -06:00
Keith Reynolds
4fdeee1499 Delete new object to prevent memory leak.
Remove unnecessary assignment.
Prevent divide by zero
2017-03-30 23:39:58 -06:00
Keith Reynolds
1234330466 Prevent divide by zero
Prevent use of NULL pointer
Mark params as unused
Delete objects to prevent memory leak
Move new of object to prevent memory leak
2017-03-30 23:38:44 -06:00
Keith Reynolds
aba9dd4882 Prevent NULL pointer use
Mark params as unused to prevent compiler warnings
2017-03-30 23:33:55 -06:00
Keith Reynolds
75d3c02be7 Create default to prevent use of uninitialized value. 2017-03-30 23:29:47 -06:00
Keith Reynolds
9e65c1bbb9 prevent use of uninitialized value of point. 2017-03-30 23:29:03 -06:00
Keith Reynolds
647a4723c2 Simplify label additions. 2017-03-30 23:27:24 -06:00
Keith Reynolds
4cca22fc92 Use local variable. 2017-03-30 23:26:42 -06:00
Keith Reynolds
a81ce7d554 Enable options only if ride is available. 2017-03-30 23:25:57 -06:00
Keith Reynolds
3df396c91d Fix dereference of null pointer of chart
Remove unused values
2017-03-30 23:23:58 -06:00
Keith Reynolds
d8fc9434a6 Fix dereference of null pointer; pdmodel & zones 2017-03-30 23:22:48 -06:00
Keith Reynolds
80fcc94119 Fix unnecessary cast to float.
Fix dereference of null pointer of theCurve2.
Delete new’d objects.
2017-03-30 23:20:56 -06:00
Mark Liversedge
0f0f1edd02 Cloud Refactor - Add Account Wizard WIP
.. further updates, closer to being complete.
2017-03-30 19:45:48 +01:00
Jon Escombe
e86bdeb711 Support S&C sensors with single magnet
We see a few bug reports where people have combined speed
and cadence sensors, but only running one magnet (i.e. on
a direct drive trainer so no wheel magnet, or with a crank
based PM with no crank arm magnet). This interferes with
any valid speed and cadence data from other sensors (i.e
from a trainer or power meter).

This patch ignores the data from either the speed or cadence
side of the sensor, until at least one changed timestamp is
received on the channel for that data type. (The timestamps
never change if not triggered by the magnet).
2017-03-30 11:07:16 +01:00
Jon Escombe
5c39291e45 USB/ANT: Detect device removal
Handle "i/o error" and "no such device or address", so that we
recognise when the USB device has been removed..
2017-03-30 11:06:55 +01:00
Jon Escombe
239f4306dc USB/ANT/FORTIUS: Stricter error checking
Return an error if either usb_set_configuration() or
usb_claim_interface() fail. This should help in the case
where the device has insufficient permissions (Linux) or
is already in use by ANT Agent (Windows/MAC).

Note that Linux support is complicated by the fact that we
have to forcibly disconnect the usb_serial driver. Because
of this, we attempt to grab the first device regardless of
whether it was already in use. For other OS, this patch
should enable the use of multiple ANT sticks (for instance,
one for Zwift and one for GC).
2017-03-30 11:06:46 +01:00
Jon Escombe
d5eb58e886 USB/ANT: Display an error on failure to reset ANT device
This typically happens after Ctrl-C out of running
train mode activity.

Current behaviour on failure to reset is that the next
session will simply not receive any data, now will at
least error and require user to connect again.
2017-03-30 11:05:53 +01:00
Mark Liversedge
097f9ed94e Cloud Refactor - Add Account Wizard WIP
.. committing the work in progress

.. still needs to be completed, but for technical reasons I am
   pushing now to get into the master repository.
2017-03-29 20:56:55 +01:00
Leif Warland
e52a27d839 Fixed use of metric reported in #2387
... The setting of metric was inverted in b3f8f4c1
2017-03-28 00:22:38 +02:00
gcoco
ad97fbeadc Revert accidental commit
[ci skip]
2017-03-27 15:42:55 -04:00
Mark Liversedge
f96257fe2a Hi-DPI Support - About Athlete Wheelsize
.. was too small on hi-dpi displays
2017-03-27 20:24:49 +01:00
Mark Liversedge
d5dfa5e7b9 Cloud Refactor - Service Logos
.. now added to CloudService API
2017-03-27 19:48:39 +01:00
Mark Liversedge
ffaaa48977 Cloud Refactor - Service Icon Images
.. png with transparency

[ci skip]
2017-03-27 19:26:33 +01:00
Joern
84e409efd4 Fix - Data Table
... allow different starting X values per column (edge case)
2017-03-27 19:34:56 +02:00
gcoco
6c9bce8418 Update .travis.yml 2017-03-27 11:52:43 -04:00
Mark Liversedge
397b84d34d Cloud Refactor - Add Default URL to Settings
.. for services that let users change the URL, we offer up
   a default value.
2017-03-27 16:50:16 +01:00
Mark Liversedge
76a86e37ac Cloud Refactor - CloudService settings
.. added settings to the cloud service to inform the config
   pane the settings we need to be entered when adding an
   account for this type of service

.. includes:

   * OAuthToken - From OAuth 2.0 process
   * Key - Optional user key used during OAuth process
   * Username - Username
   * Password - Password (when not using OAuth)
   * Folder - Typically for storage like Google Drive, Dropbox
   * URL - Base URL for service (when offer private tenants)
2017-03-27 16:40:29 +01:00
Mark Liversedge
44df57434c Cloud Refactor - Selfloops
.. ShareDialog => CloudService
2017-03-27 15:02:51 +01:00
Mark Liversedge
18618d8b2e Cloud Refactor - Cycling Analytics file type
.. should be TCX.
2017-03-27 14:50:55 +01:00
Mark Liversedge
82db0bdc5d Cloud Refactor - Cycling Analytics
.. ShareDialog => CloudService
2017-03-27 14:42:24 +01:00
Mark Liversedge
87cfa9a575 Cloud Refactor - RideWithGPS
.. ShareDialog => CloudService
2017-03-27 13:16:36 +01:00
Mark Liversedge
84d353d5db Cloud Refactor - Strava
.. ShareDialog => CloudService
2017-03-27 11:51:16 +01:00
Mark Liversedge
f3083b0826 Cloud Refactor - Preserve Copyright
.. Damien was missed off by accident.
2017-03-27 11:25:11 +01:00
Mark Liversedge
f8108f546e Cloud Refactor - TrainingStageBuch
.. ShareDialog => CloudService
2017-03-27 10:59:17 +01:00
Joern
4fe423cbc1 Merge pull request #2419 from Joern-R/DataTable
Fix LTM - Data Table
2017-03-26 19:59:46 +02:00
Joern
b3d12ec7fe Fix LTM - Data Table
... combining Metrics with different starts on the X-Axis
    e.g. Stress Metrics and Ride Metrics in one chart
    causes shifts in the Data Table display
2017-03-26 19:13:04 +02:00
Mark Liversedge
938da204f9 Slightly larger preferences pane
.. was too small for hidpi on Windows
2017-03-26 15:10:28 +01:00
Mark Liversedge
08dcfeb4b0 Cloud Refactor - VeloHero
.. convert ShareDialog => CloudService
2017-03-26 14:15:35 +01:00
Joern
cfa660d2ed Merge pull request #2417 from Joern-R/BM
BodyMeasures
2017-03-26 13:44:41 +02:00
Joern
cb9b38dcc0 BodyMeasures
... add "source" and "originalSource"
... add "time" display for bodyMeasures read from cloud services
... store in /config not in /activities
... code clean-up (warnings, enum instead preprocessor constants)
2017-03-26 12:42:06 +02:00
Mark Liversedge
2c7d958253 Cloud Refactor - Copyright updated
.. to include original author for sport plus health.
2017-03-26 11:18:06 +01:00
Mark Liversedge
1cf0fdc9cc Cloud Refactor - SportsPlusHealth
.. cloud service include upload code from original
   share dialog uploader code.
2017-03-26 11:16:12 +01:00
Mark Liversedge
0efd2f03c2 Cloud Refactor - Uploaders => CloudService
.. creating the generic CloudService code for all the
   services currently implemented as "uploaders" via the
   share dialog.

.. the actual upload code and semantics need to be updated
   for each service individually in the next commit.
2017-03-26 10:24:27 +01:00
Mark Liversedge
d6830f8a15 Cloud Refactor - Add RideFile* to Upload API
.. some services want to look at metadata etc and make decisions
   about how/what to upload before calling the remote service.
2017-03-25 18:03:12 +00:00
Mark Liversedge
b16407dd9a Athlete Preferences - Model Parameters Tab
.. to clean up the About tab.
2017-03-25 17:27:46 +00:00
Mark Liversedge
d7e4151ffa Athlete Preferences - Backup tab
.. put backup options on its own tab.

.. need to do the same for model parameters next.
2017-03-25 17:10:14 +00:00
Mark Liversedge
46c1525dcf Merge pull request #2415 from amtriathlon/Weight
Body Measures UI at Options/Preferences
2017-03-25 14:30:00 +00:00
Joern
dc7ecdb3f1 Merge pull request #2410 from Joern-R/staticchecks
Fix Static Code Check results
2017-03-25 15:22:50 +01:00
Mark Liversedge
2ed8c8af90 RideNavigatorProxy Fixup for QT4
.. thanks to Claus Assmann
2017-03-25 13:19:22 +00:00
Alejandro Martinez
1d0239cf85 Body Measures UI at Options/Preferences
Moved Height, W'bal Tau, and PMC settings to About tab
Measures tab is a Zones like UI to Body Measures model
Added fingerprint to BodyMeasure to detect changes
Fixes #1954
2017-03-25 10:15:01 -03:00
Mark Liversedge
787d22da5c Cloud Refactor - Factory for TodaysPlan, Google et al
.. a CloudServiceFactory now has all full cloud services
   registered for service we currently support for sync
   including; Local File Store, Dropbox, Google Drive,
   Todays Plan and SixCycle.

.. need to now refactors all the other cloud services
   to use the CloudService base class: Strava, Cycling
   Analytics, Ride With GPS, Withings, Web Calendar,
   Training Stage Buch, Selfloops, Velo hero and Sports
   Plus Health.
2017-03-25 13:12:52 +00:00
Mark Liversedge
4ea278b4df Merge pull request #2413 from bwalding/Issue-2408
#2408 - Prevent infinite loop
2017-03-25 10:35:27 +00:00
Mark Liversedge
23fce48d71 Cloud Refactor - Rename FileStore to CloudService
.. since thats primarily what they do.
2017-03-25 10:19:21 +00:00
Ben Walding
a2af92a589 #2408 - Prevent infinite loop if the linked field has blank replacment value 2017-03-25 15:32:18 +10:00
Joern
82154e8114 Fix compile error on non-Windows systems 2017-03-24 16:43:22 +01:00
maksvasilev
396c1142fe Russian translation Monthly update 2017-03-24 13:51:26 +03:00
Mark Liversedge
c6fe020aa0 Fix Navigator refresh when data changes
.. fix ridenavigator refresh on item data changed e.g. metadata

.. needed to hack in a call to update() for the ride navigator since it
   appears to be ignoring data changes, but will repaint on mouse hover.
   This needs to be investigated further as its a symptom of some a slot
   and signal issue somewhere (or updates are disabled somewhere!).
2017-03-23 20:57:24 +00:00
Joern
dba6f6f1af Fix Static Code Check results
... incomplete class initialization
... duplicate if statements
... typos in objects names (copy&paste) (AllPlot)
... missing else (CPPlot)
... missing DELETEs for objects (only if obvious that object is not used somewhere else)
... copy&paste errors (e.g. ModelPlot)
... small floats instead of integer evaluating to 0
... potential SEGV since pointer is not checked for NULL
... misleading code formatting (hard to read) in *zones.cpp
2017-03-23 20:07:09 +01:00
Joern
7f83a080f4 Merge pull request #2409 from Joern-R/TP
Body Measures - Download
2017-03-23 19:52:03 +01:00
Joern
7f593a36b2 Body Measures - Download
... improve processing of partial downloads
2017-03-23 18:54:25 +01:00
Mark Liversedge
6498032cc1 Hi-DPI Support - Fixup Font Config
.. didn't respond to font family change and the example
   text wasn't scaled to the current user scale factor.
2017-03-20 21:10:05 +00:00
Mark Liversedge
122132e85c Hi-DPI Support - Configure Font and Scale
.. just let the user choose a font and a scale.
.. we work out the base font for the display resolution
2017-03-20 20:17:56 +00:00
Mark Liversedge
9cd267338c Hi-DPI Support - Deprecate Metallic Style
.. looks horrible anyway, only folks on old releases of
   MacOS will be affected, and frankly, they should have
   upgraded by now.
2017-03-20 18:10:01 +00:00
Mark Liversedge
6f90cd9992 Hi-DPI Support - Remove Unused Font Settings
.. just reduce to default and chartlabels which are the only
   font settings used across the codebase.

.. this is in preparation for overhauling the way fonts are
   set across GC.
2017-03-20 16:14:18 +00:00
Mark Liversedge
5d31f87c0f Fix compile when no kqoauth 2017-03-19 21:01:46 +00:00
grauser
ed15b61749 Today's Plan : Coach can access there own data (2) 2017-03-19 21:45:21 +01:00
grauser
2830bd1993 Revert last CPPlot change 2017-03-19 21:17:38 +01:00
grauser
4197a72a67 Today's Plan : Coach can access there own data... 2017-03-19 17:20:25 +01:00
grauser
3ec09e36bc CPPlot : Remove FTP+rank 2017-03-19 17:20:25 +01:00
grauser
207e99ae9a FIT : Add some minor fields 2017-03-19 17:20:25 +01:00
Joern
69e8f45a2e Merge pull request #2405 from Joern-R/feature/weightcsv
BodyMeasures - CSV Import
2017-03-19 12:23:25 +01:00
Joern
d210efb265 BodyMeasures - CSV Import
... add import from CSV file
... add example file and format description
2017-03-19 11:38:50 +01:00
Mark Liversedge
10c606113a Hi-DPI Support - Progress line
.. its 2px, should be 2px * dpiYFactor
2017-03-18 22:13:25 +00:00
Mark Liversedge
d363653c89 UserMetric Mutex for Ref Count in Constructor
.. as per last commit, need to ensure the increment also protected.
2017-03-18 21:52:04 +00:00
Mark Liversedge
7dc12579d5 UserMetric Destructor Mutex around Ref Count
.. in case there is a multithreding issue.
2017-03-18 21:45:24 +00:00
Mark Liversedge
127a4d937a Fix LTMSidebar V3.5 crash
.. temporary fix till we work out why its happening - introduces a
   memory leak on editing charts.
2017-03-18 21:24:07 +00:00
Mark Liversedge
6084e0ffe3 Merge pull request #2398 from Joern-R/feature/weight
Introduce BodyMeasures as generalization of current Withings Data
2017-03-18 14:28:06 +00:00
Joern
4b08e9647f Body Measures - Compile Error
... add missing <QMessageBox> include (it compiles locally without :-(
2017-03-18 14:53:51 +01:00
Joern
a6c8dc4394 Body Measures - compile error when Qt < 5.8
... do not use new QT 5.8 - SecsSinceEpoch methods / but 4.7 MSecsSinceEpoch instead
2017-03-18 14:36:11 +01:00
Joern
c6c2121784 Introduce BodyMeasures as generalization of current Withings Data
... body measures are weight/height data as provided by multiple fitness platform (one of the being the already support Withings platform)
... all access to Weight from external platforms is done through the body measures model - not direct use of Withings any more
... not all platform deliver all measures - but (hopefully) all are providing "weight in kg" as a minimum data

General Download Dialog for Body Measures
... allowing to select the source and the daterange for which data is downloaded (e.g. only the new data since last available measure)
... Support existing Withings Download
... Support new Today's Plan as data source (which is able to receive measures from other sits - e.g. Garmin Connect)
... Support CSV files as data source

Store Body Measures Data in one fix file under /activities (not in /cache like Withings) (so that e.g. backup works like before).

What's open:

... CSV File Import (Info Message on missing feature)
... Test of "old" Withings Download API (since I can't do this)
2017-03-18 13:42:36 +01:00
Mark Liversedge
643a273e7b Hi-DPI Support - Fix invisble cursor
.. when editing metadata fields and using the default color
   scheme on Linux (darkGray clashes).
2017-03-18 10:00:58 +00:00
Mark Liversedge
cf919dade8 Hi-DPI Support - FileStore Dialog Sizing
.. when browsing dropbox, google et al the dialog box
   needs to size with hi-dpi scale factors applied.
2017-03-17 17:16:33 +00:00
Mark Liversedge
d3c8e54ca7 Avoid c++0x dependency
.. don't add namespace to default return values in RideMetric.h
2017-03-16 20:00:21 +00:00
Mark Liversedge
87a1f81fdc RideMetric Taxonomy Updates
.. slight adjustment to the scheme (before working through
   303 different metrics)

.. added sport() which can return an OR'ed value of sports
   the metric is relevant for (e.g. Run|Bike) and added
   some shorthand values Triathlon == Run|Bike|Swim whilst
   any is 0xff (matches all).
2017-03-16 19:54:59 +00:00
Mark Liversedge
dd69877896 RideMetric Taxonomy
.. add classification and validity attributes to every
   ridemetric with a default of Unknown and None to get
   things started.

.. next step is to work through each and update based upon
   available evidence. This might be best performed in 2
   passes: first pass where criteria is beyond reasonable
   argument and is unlikely to be disputed, and a second
   pass where evidence has been identified.
2017-03-16 16:42:48 +00:00
Mark Liversedge
e2a7ee92b5 Hi-DPI Support - Overlay Positioning
.. needs to take into account dpi scaling
2017-03-16 07:43:34 +00:00
Mark Liversedge
850a2a7f69 Hi-DPI Support - Overlay Widget
.. border and titles

.. rendering in CP plot
2017-03-15 19:23:05 +00:00
Mark Liversedge
26b8b1dcdb Hi-DPI Support - Plot Symbols
.. on LTM, HRPW, Scatter and QA plots.
2017-03-15 19:02:24 +00:00
Mark Liversedge
24e1425f9f Hi-DPI Support - AllPlot
.. stack size
.. interval navigator
.. reveal controls
2017-03-15 18:41:25 +00:00
Mark Liversedge
514c64a722 AddDeviceWizard Size Fixup
.. when a robot is available we need a bigger dialog.
2017-03-14 22:37:53 +00:00
Mark Liversedge
81a7c6292c Hi-DPI Support - Default Font Pointsize fixup
.. should use device independent pixels !

.. VirtualBox, Windows and Linux all use different ratios
   of device pixels to device independent pixels so its
   important we stay device independent.
2017-03-14 20:44:06 +00:00
Mark Liversedge
fbbffe83fe Hi-DPI Support - Size/Space tweaking
.. various updates to make sizing more comfortable.
2017-03-14 19:33:39 +00:00
Mark Liversedge
b97efff9e5 Hi-DPI Support - Train View Telemetry
.. rescale fonts appropriately
2017-03-14 18:52:05 +00:00
Mark Liversedge
af91076718 Hi-DPI Support - LTM Data Table
.. font sizes ala changes prior for RideSummary
2017-03-14 18:03:14 +00:00
Mark Liversedge
62ec3972fa Hi-DPI Support - RideSummary Font *Pixels*
.. QtWebEngineSettings font size uses pixels not points.
2017-03-14 17:53:33 +00:00
Mark Liversedge
0c23b42c51 Hi-DPI Support - Summary Window Font Size
.. not sure it needs much more.
2017-03-14 17:40:59 +00:00
Mark Liversedge
b92bbcfd69 Hi-DPI Support - Default font use pt
.. since we re-use it in other places.
2017-03-14 16:48:28 +00:00
Mark Liversedge
1a624b52c1 Hi-DPI Support - Chart titles and reveals
.. some nasty bugs caused by QT losing contentsMargins when
   hidpi and not scaled. Really weird.

.. but now titles and reveal controls and More.. menu works
   as they would when not on hi-dpi screens
2017-03-14 12:42:06 +00:00
Mark Liversedge
a34732e76e Hi-DPI Support - Fix RideEditor Dialog Sizes
.. they were a bit titchy with hidpi screens.
2017-03-13 23:14:43 +00:00
Mark Liversedge
6586304362 Hi-DPI Support - Fix ColorButton
.. scaling / padding issues when in hi-dpi, the original
   code worked more by accident than design !
2017-03-13 21:05:14 +00:00
Mark Liversedge
6653c9a374 Hi-DPI Support - Preferences Size adjust
.. just a smidge not wide enough for athlete prefs, so
   increased width to 640px on standard dpi.
2017-03-13 20:30:07 +00:00
Mark Liversedge
29ba062d37 Hi-DPI Support - Code sweep for fixed sizing
.. run through the entire code base looking for calls to
   setColumnWidth, resizeColumns, setFixedSize and replace
   with calls that apply dpiXFactor/dpiYFactor
2017-03-13 20:16:41 +00:00
Mark Liversedge
c8fb7a564b Hi-DPI Support - Ride Import Wizard
.. seems pretty straight forward.
2017-03-13 19:33:11 +00:00
Mark Liversedge
903af7bc6c Hi-DPI Support - Merge Command Buttons
.. fix tiny font.
2017-03-13 19:01:21 +00:00
Mark Liversedge
1d8817ae73 Hi-DPI Support - Add Device Wizard 2017-03-13 18:57:03 +00:00
Mark Liversedge
5f786a8946 Hi-DPI Support - Editor
.. activity editor fixups for row and icon sizing and a weird
   fixup for stylesheets.
2017-03-13 18:35:37 +00:00
Mark Liversedge
24703a1546 Hi-DPI Support - Pushbuttons and Combos
.. the padding around pushbuttons and combo boxes is not scaled
   for hidpi displays, so we fix up with a global style sheet
   in main.cpp

.. it is only applied in hi-dpi for Windows and Linux.
2017-03-13 17:00:16 +00:00
Mark Liversedge
0a9aea9900 Hi-DPI Support - Workout Editor
.. chart marker font still outstanding, but applies to all
   charts and will be fixed independently of this.
2017-03-13 16:00:11 +00:00
Mark Liversedge
94052523e2 Hi-DPI Support - CloudDB Charts 2017-03-13 15:13:22 +00:00
Mark Liversedge
9117ec864a Hi-DPI Support - Dialog Sizing
.. QDialogs sizing either fixed or minimum size settings now
   take into account scaling for hi-dpi applying dpi[XY]Factor.
2017-03-13 14:11:18 +00:00
Mark Liversedge
74b4b87ba9 Hi-DPI Support - Requires QT5
.. but still compiles on QT4.8
2017-03-13 13:42:08 +00:00
Mark Liversedge
45a73cd42d Hi-DPI Support - Spacing
.. apply dpiXFactor to any spacing setting (typically it is set
   in pixels to 2,5,10) we multiply up for hi-dpi displays.
2017-03-13 09:47:05 +00:00
Mark Liversedge
f69b7b8e4a Hi-DPI Support - Preferences
.. bigger and higher resolution icons
.. resize the dialog
.. need to revisit and look at spacing/layout
2017-03-13 08:54:23 +00:00
Alejandro Martinez
540d312e09 Added #ifdef GC_HAVE_KQOAUTH to match class def in WithingsDownload 2017-03-12 19:35:45 -03:00
Mark Liversedge
ab2a0050c3 Hi-DPI Support - Overview
.. need to check on windows where font scaling seems to have
   a number of issues.
2017-03-12 22:27:07 +00:00
Mark Liversedge
5bd31561d0 Hi-DPI Support - Use Pixel Size for Font Selection
.. when selecting a font from screen dimensions in pixels.
2017-03-12 21:36:18 +00:00
Mark Liversedge
0e0cb25dc6 Hi-DPI Support - ChartBar
.. mostly just about scaling spacing around buttons.
2017-03-12 21:08:49 +00:00
Mark Liversedge
49cd05eb48 Hi-DPI Support - Compare Pane
.. can't quite sort the color button and checkbox sizing in the
   table view, might be a QT bug.
2017-03-12 20:45:55 +00:00
Mark Liversedge
52919c0beb Hi-DPI Support - Scope Bar
.. mostly ok, just needed better spacing.
2017-03-12 20:16:05 +00:00
Mark Liversedge
81e9e23aa1 Hi-DPI Support - Toolbar and Sidebar
.. not perfect, but to support this correctly the code will
   need to change and affect normal usage.

.. lets get it to a reasonable place, since all the mainwindow
   chrome will get replaced in v4.0 anyway

.. but might revisit the toolbar pushbutton icon size !
2017-03-12 20:04:19 +00:00
Mark Liversedge
ee586bd97a Hi-DPI Support - Stop MainWindow resetting font
.. MainWindow::ConfigChanged() was setting the application wide
   font back to the configured defaults.

.. this was fine, until we decided to override the config when
   running on hi-dpi displays, in which case it breaks things

.. we need to fixup the configuration dialog to stop users from
   setting font sizes and instead set them programmatically for
   hi-dpi and non-dpi displays

.. for now we just disable the reset in MainWindow - which means
   most widgetry now honours the default font (until it is changed
   in config, then you need to restart).
2017-03-12 18:53:59 +00:00
Mark Liversedge
a574ee2163 Hi-DPI Support - Scrollbars
.. css style sheets.
2017-03-12 18:27:22 +00:00
Mark Liversedge
785c8a6164 Hi-DPI Support - Startup
.. choose cyclist dialog
.. load progress
2017-03-12 18:10:30 +00:00
Mark Liversedge
e53b5279fb Hi-DPI support - set ratio and default font
.. Start of support for hi-dpi displays; only relevant if you
   are running on a hi-dpi display and have not chosen to set
   any 'auto' scaling.

.. it just sets a dialog box ratio (which is unused at this
   point) and sets the default font to something reasonable for
   the display size.

.. next steps are to check impact across Linux, Windows and
   MacOS hi-dpi displays and then work through and correct code
   that works with dialog boxes and sets widget sizes.

.. this will be a bit of a slog, but worth it for crisper
   rendering on those expensive 4k panels
2017-03-12 14:54:53 +00:00
Alejandro Martinez
8c54bd809e Merge pull request #2383 from amtriathlon/Overview
Overview - Multisport awareness for Sparkline & Up/Down
2017-03-09 16:24:31 -03:00
Alejandro Martinez
bbf734fa5b Overview - Only activities with equal sport tags for Sparkline & Up/Down
Comparisson across sports is usually meaningless
2017-03-09 10:32:25 -03:00
Mark Liversedge
c5edfe113d Merge pull request #2384 from leifwar/master
Added SDANN and SDNNIDX hrv metric
2017-03-09 10:12:03 +00:00
Leif Warland
0e452db599 RideMetric::count needs to be a double 2017-03-09 09:08:19 +01:00
Leif Warland
65bc8de3df Added SDANN and SDNNIDX hrv metric 2017-03-09 00:28:37 +01:00
Mark Liversedge
a1434df2da Merge pull request #2381 from lumanz/master
Update Simplified Chinese translation.
2017-03-08 21:52:03 +00:00
Mark Liversedge
78a1d2840e Merge pull request #2382 from stschake/bug/zones-mismatch
Fix zones set mismatch
2017-03-08 21:51:15 +00:00
Stefan Schake
ab09d1b1d7 Reference correct zone set 2017-03-08 21:42:21 +01:00
Alejandro Martinez
b457c1d148 Overview - Fixed Zones reset when there is no zones
Changing from a Run/Swim to a Ride shows the previous value(s) for
higher zones, changed iteration limit from 5 to dynamic to fix this.
2017-03-08 10:51:36 -03:00
lumanz
8397b9e05d Update Simplified Chinese translation. 2017-03-08 21:33:21 +08:00
Mark Liversedge
aa3389ac1d Fix compile error from last commit 2017-03-07 19:33:07 +00:00
Mark Liversedge
10fb43bc16 Overview BubbleViz Matching Fixups
.. noone will likely notice but the matching algorithm
   now matches for highest score across all matches instead
   of sequentially matching each new point to the old.
2017-03-07 18:07:23 +00:00
Mark Liversedge
6ade268db0 Overview Route Transition Animation
.. not geometrically accurate, but its just eye-candy
   so does enough for now.
2017-03-06 20:32:19 +00:00
Mark Liversedge
ee54154fdf BubbleViz hover paint error
.. radius size limits changed, but not updated for
   the code that paints the hover bubble.
2017-03-06 16:48:32 +00:00
Mark Liversedge
c9c72bf7d1 Test rides with HRV data
.. from "Pepe Lisbon" on the google group forum

[skip ci]
2017-03-06 12:09:04 +00:00
Mark Liversedge
2dc92d5ee5 Fix Bubble ArcTo NaN error
.. by filtering out points we don't want (note how
   the class member 'points' was masked by the parameter
   'points' in BubbleViz::setPoints() (!)

.. will wrap by own knuckles for bad practice.
2017-03-06 10:36:30 +00:00
Mark Liversedge
f79ea75f7b Merge pull request #2377 from leifwar/master
Fixed bug in HRV filter + added to reading of polar data
2017-03-06 09:30:34 +00:00
Leif Warland
5b965d2b8c Read ISO 8859-1 characters if present + handle all pdd versions.
... Check both hrm and pdd files for ReplacementCharacters in which
    case Codec ISO 8859-1 is used

... The number of rows in [ExerciseInfo] can be different, both for
    numbers and for text. Use the provided information in the PDD file
    to be sure.
2017-03-06 00:00:20 +01:00
Leif Warland
07df4aae9a Bugfix HRV filter
... Avoid crash when number of R-R samples is less than window hwin
2017-03-06 00:00:20 +01:00
Leif Warland
7779ace4db Extract sport from pdd file 2017-03-06 00:00:20 +01:00
Mark Liversedge
b0b32a632e Overview Bubble Transition CPU
.. only repaint if the transition has moved on, this
   reduces the number of paint operations by almost a
   factor of 4.
2017-03-05 21:37:38 +00:00
Mark Liversedge
fa05535c62 Fix Overview Bubble Size transition
.. use oldmean vs mean when calculating the radius of
   the bubble during intermmediate states.
2017-03-05 20:10:46 +00:00
Mark Liversedge
83a705f437 Overview Intervals Transition Segments
.. if labels match they are almost certainly found
   segments so they should score really highly.
2017-03-05 15:17:09 +00:00
Mark Liversedge
d2ae6b530e Overview Bubble animate transition
.. matching algorithm is pretty blunt for speed since
   its really eye candy rather than something where
   absolute accuracy is required.

.. can always improve the scoring mechanism and
   algorithm (it takes best match point by point in
   linear fashion rather than considering the quality
   of all matches across all points).

.. looks nice enough.
2017-03-05 15:04:04 +00:00
Joern
158ca7b21c Merge pull request #2376 from Joern-R/Win10SDK
Win10SDK error
2017-03-05 12:58:32 +01:00
Joern
75becc8082 Win10SDK
... does not like "near" or "far" as variable names (which seem to be a DOS legacy of near and far pointers)
... surprisingly the SDK version used in CI is fine with it

... renaming fixes the problem - so no further investigation if there are other ways to overcome this.
2017-03-05 12:18:49 +01:00
Mark Liversedge
6326ac71d6 Merge pull request #2374 from Joern-R/Translation
Add missing translatebility
2017-03-04 15:21:51 +00:00
Joern
43e0011eda Add missing translatebility
... for new Overview Windows
... for one special HRV Metric

Overview - PMC values
... Align Headers like in all other Cards (left justified, not centered)

Update Translation DE
.. to be complete and to test the fixes above
2017-03-04 15:38:34 +01:00
Mark Liversedge
d2fc6ce8f4 Overview Bubble Hover Interaction
.. hover on a bubble and see x,y and label.

.. need to think how to show z - possibly as label
   under the bubble (and units?)
2017-03-04 14:02:10 +00:00
Mark Liversedge
cac303a254 Fix Overview Sparkline Mean Calc
.. don't include zeroes, since most of the time they
   are because data is not present (e.g. HR, RPE) and
   the sparkline already ignores zeroes - so including
   them in the average is very misleading.
2017-03-04 09:11:41 +00:00
Mark Liversedge
057cec3fce Overview Basic Speed up for Dragging
.. try and make the processing overhead when dragging a
   card around a little less.

.. still need to look more closely at the event code.
2017-03-04 08:53:02 +00:00
Mark Liversedge
2b24222096 VERSION 3.5 DEVELOPMENT BUILD
.. February 2017
2017-03-03 19:14:41 +00:00
Mark Liversedge
d0719e5978 Overview Metric Up/Down vs Last 42 days
.. show an indicator if the metric being displayed is higher
   or lower than the mean for the last 42 days
2017-03-03 16:16:52 +00:00
Mark Liversedge
def737a668 Overview RPE card, initialise hover
.. it wasn't being set to false in the constructor.
2017-03-03 07:11:09 +00:00
grauser
07def42a28 FIT : Disabled debug traces 2017-03-02 18:36:03 +01:00
grauser
0a8e5f7e1d Add secret.h for Twitter and Withings 2017-03-02 18:34:20 +01:00
Alejandro Martinez
87c11968fe OverviewWindow - Added std scope to isfinite and isnan
It fails to compile on Ubuntu 16.04 with gcc 5.4
2017-03-02 11:01:41 -03:00
Mark Liversedge
9270c3e925 Overview Save/Load Setup
.. saves/loads user setup so users can move/resize the
   cards on the dashboard, but as yet still cannot add
   or remove them.
2017-03-02 12:46:38 +00:00
Mark Liversedge
c6904cb506 Overview HRV tile plots rMSSD
.. we don't have a normalised metric for it just yet
   but this is the main HRV metric most folks are used
   to anyway.
2017-03-02 09:26:24 +00:00
Mark Liversedge
7c47293b94 Overview Don't Plot when not Visible
.. same as the other charts, we only need to plot when
   the chart is visible.
2017-03-02 09:22:10 +00:00
grauser
e65ef941bc Withings : Use new API 2017-03-02 07:34:24 +01:00
grauser
676fc9acb8 FIT export : Add Start and Stop event 2017-03-02 07:34:24 +01:00
Mark Liversedge
4a99be7233 Overview Intervals Bubble Plot
.. the scatter plot in Qt Charts was a terrible
   memory leak (and wasn't a bubble chart as desired).

.. replaced with a very basic bubble chart viz that
   doesn't have any animation or interactivity - we
   can add some of that later.

.. also added an elapsed_time metric for interval
   based plots.
2017-03-01 19:49:45 +00:00
Mark Liversedge
764b21b422 Overview single click to set RPE
.. UX review with someone that knows what they're doing
   and now its simple and obvious

.. feel a bit stupid to be honest.
2017-03-01 08:11:09 +00:00
Mark Liversedge
685e230990 Overview Card BG Demo is horrible
.. don't think this is a good showcase.

.. maybe the PMC should st the color to reflect the
   current training balance.
2017-03-01 08:11:09 +00:00
Mark Liversedge
ada68efb8e Merge pull request #2369 from leifwar/master
Bugfix reading of Polar data
2017-03-01 06:08:37 +00:00
Leif Warland
b953305101 Bugfix reading of Polar data
.. GC crashed when reading a hrm file where pdd exist but does not
   contain the hrm file.
2017-02-28 23:39:24 +01:00
Mark Liversedge
88fca9a061 Merge pull request #2368 from leifwar/hrv_filter_and_metric
Hrv filter and metric
2017-02-28 18:40:01 +00:00
Leif Warland
f095416c5c Plot R-R from Xdata 2017-02-28 14:18:58 +01:00
Leif Warland
16e2451e90 Added HRV metric 2017-02-28 14:18:58 +01:00
Leif Warland
6ee411a3b9 Read hrm (including rr) files generated using Bipolar 2017-02-28 12:11:36 +01:00
Leif Warland
525dd7095c Added HRV filter 2017-02-28 11:43:57 +01:00
Mark Liversedge
b78dcbe49a Lipstick on pig
.. hacked in overview offends my taste, this is an
   almost pointless commit.
2017-02-27 20:47:34 +00:00
Mark Liversedge
5a45344e38 Overview Card Brush use RideItem::color
.. like the ride list, a color of 1,1,1,1 indicates
   to use the ride color from notes keywords.

.. should also add options to set the pen, as depending
   upon the user settings the colors could be quite
   bright (!)
2017-02-27 20:37:41 +00:00
Mark Liversedge
b78698abf9 Fix Cursor shape lost on click resize
.. event propagation bug into RPErating when clicked
   to start resizing a tile -- we needed to accept the
   event and stop it being propagated further.

.. fixes a bug introduced in commit 234fcf5001
2017-02-27 19:02:43 +00:00
Mark Liversedge
a206ba60ea Card color configurable
.. just set the top line to lighter as an example.

.. might be good for e.g. PMC card to use bg color to
   highlight current TSB good, bad, indifferent.
2017-02-27 16:25:18 +00:00
Mark Liversedge
d5ecb0bb86 RideMetric code clarity
.. just to make it super obvious that the computeMetrics
   method updates RideItem/IntervalItem directly (spooky
   action at a distance) because user metrics need it.

.. so added an if clause to limit it, and provide more
   clarity to future devs (including me!)
2017-02-27 12:49:03 +00:00
Mark Liversedge
dc7970c2db Merge pull request #2364 from erikboto/monark_fake_kp_rebased
Various Monark updates
2017-02-27 12:38:26 +00:00
Erik Botö
a7a4becf9e MonarkConnection: always empty read buffer before requesting a metric 2017-02-27 12:03:51 +01:00
Erik Botö
48833b80cc RealtimeData: Add Slope as viewable metric 2017-02-27 08:37:59 +01:00
Erik Botö
323562cdb2 Monark: Add possibility to fake kp-mode 2017-02-27 08:37:50 +01:00
Joern
fb71cd84fe Merge pull request #2362 from Joern-R/T
Athlete Backup
2017-02-26 19:57:09 +01:00
Mark Liversedge
4e19a305c4 Remove SOAP from src.pro
.. deprecated when we lost TrainingPeaks integrations.
2017-02-26 18:22:54 +00:00
Joern
90a1325b7d Athlete Backup
... enable translation (which was partly missing)
... provide Translation DE
2017-02-26 19:11:24 +01:00
Mark Liversedge
916d4cded5 Fix ride list focus on data change
.. whenever ride data is changed, metadata, ride data etc then shortly
   after making the change the ride list would lose focus and lose
   the current selection

.. this was caused by reseetting the ride list model when data changed.
   this was unneccessary and also time consuming.

.. it took 3 hours of debugging to comment out 1 offending line, I think
   that might be a record !
2017-02-26 11:47:02 +00:00
Mark Liversedge
428caafd90 Overview RPE fast edit on dashboard
.. click mouse click to set RPE
2017-02-25 20:12:56 +00:00
Joern
41a8e28db6 Merge pull request #2361 from Joern-R/TP-Workouts-Sorting
Today's Plan - Workout Download
2017-02-25 20:24:56 +01:00
Joern
607e142192 Today's Plan - Workout Download
... show workouts in proper order from "now" to "future"
2017-02-25 19:36:40 +01:00
Joern
c9ae98bcbe Merge pull request #2360 from Joern-R/WinDump2
Windows Crash Handler - small changes
2017-02-25 19:18:27 +01:00
Joern
c2bfddf6f5 Windows Crash Handler - small changes
... add copyright notice to file
... store .dbg and .log in Athlete Directory (if known) and in installation directory only as default
... unify handling of "win32-msvc*" specific qmake commands in src.pro
2017-02-25 18:28:37 +01:00
Joern
54a87da951 Merge pull request #2341 from stschake/feature/win-crash-reports
Add Windows crash handling
2017-02-25 17:57:45 +01:00
Mark Liversedge
e1d2cc6375 Overview RPE card
.. its not interactive (you can't set RPE with it yet).

.. uses the Foster CR10 scheme, anyhting else will need
   to use a basic metadata card instead.
2017-02-25 15:41:21 +00:00
Joern
495d411968 Merge pull request #2359 from Joern-R/WINBUILD
Build Instructions Windows
2017-02-25 14:10:33 +01:00
Joern
fe7a0ef81f Build Instructions Windows
... Update to build with Qt 5.8 and MSVC 2015
2017-02-25 14:07:54 +01:00
Mark Liversedge
4bf366af49 Overview Numeric META gets a sparkline
.. basically treat it like a metric.
2017-02-25 10:56:53 +00:00
grauser
2130bfa6a1 FIT : Add some info in FIT export 2017-02-25 11:53:21 +01:00
grauser
13372a847a FIT : Add lap (entire activity) 2017-02-25 11:53:21 +01:00
Joern
09f4cd33bf Merge pull request #2358 from Joern-R/DE
Translation DE
2017-02-24 18:11:57 +01:00
Joern
f0076882a5 Translation DE
... update
2017-02-24 18:11:02 +01:00
Joern
98634ea689 Merge pull request #2357 from x2764tech/patch-1
Add notice that the WIN32-INSTALL Instructions are deprecated
2017-02-23 12:34:36 +01:00
David Kemp
8611642201 Add notice that these instructions are deprecated 2017-02-23 09:07:41 +00:00
Mark Liversedge
9d0b0b9b27 HRV Support Add stdmean() and stdvariance() to RideMetric
.. Leif Warland is developing the HRV metric support
   and some of these are std deviations. When you
   aggregate std deviations the mean and variances
   are needed.

.. RideMetric::stdmean() and ::stdvariance() return
   a value that is stored in the RideDB if it is
   non-zero.

.. RideItem::getStdMeanForSymbol()
   RideItem::getStdVarianceForSymbol

   return the stored value for use when aggregating in
   the same way that RideItem::getCountForSymbol() does.
2017-02-22 09:45:48 +00:00
Alejandro Martinez
9729c0bbf4 Re-enabled Data Summary on LTM Charts
It is not very useful if Scrolling and copy of data are disabled
2017-02-21 13:15:58 -03:00
Mark Liversedge
3c97e76fc5 Re-enable scroll on IntervalSummaryWindow
.. it will steal focus
2017-02-21 14:39:31 +00:00
Mark Liversedge
a6caf5f07a RideItem::getCountForSymbol return 1 not zero
.. a count of zero makes no sense, so it returns 1
   whenever the value is unset. This fixes averaging
   for metrics that don't bother to set count.
2017-02-21 13:33:29 +00:00
Mark Liversedge
9a601c059b Don't disable RideSummaryWindow
.. users need to be able to scroll up and down the
   contents to see intervals etc.

.. but it means it will continue to steal focus.
2017-02-21 13:33:29 +00:00
Mark Liversedge
d5f77b1268 Merge pull request #2354 from leifwar/master
Fix QT < 5.4 build and QT < 5.0
2017-02-21 11:34:55 +00:00
Leif Warland
b9207d9e1a Fix QT < 5.4 build and QT < 5.0
Both SixCycle and TodaysPlan uses QByteArray::toStdString
(introduced in Qt 5.4), while in QJsonParseError (introduced in Qt
5.0) is used in TodaysPlanWorkoutDownload.
2017-02-21 12:20:43 +01:00
Mark Liversedge
fe619c5b4d Overview Fix Card Font size on MacOS
.. the font selections was incorrect on MacOS and
   caused the PMC card to be rendered incorrectly.
2017-02-21 08:19:39 +00:00
Mark Liversedge
eba373b3dd Overview Notes metadata
.. show texts in smaller fonts with spacing.

.. should revisit this and add a speech bubble around
   the text to make it more appeallng.
2017-02-20 19:51:00 +00:00
Mark Liversedge
a3be6bac46 LTMPlot aggregate metrics using count
.. don't fallback on workout_time, let the metrics supply
   the value to use.

Fixes #2353
2017-02-20 18:31:34 +00:00
Mark Liversedge
d4a1cbc250 RideCache stores count for each metric
.. the RideMetric::count() value is written to the ride
   cache (rideDB.json) if it is non-zero.

.. it is not used in the aggregation logic yet, but the
   rideDB version number has been incremented to force
   a rebuild on first run.
2017-02-20 17:50:46 +00:00
Mark Liversedge
ddf9be31a2 Overview basic layout update
.. to get all the basic cards on there.

.. still need to write the model card and add a course
   profile and start stop points on the route card.
2017-02-20 16:12:17 +00:00
Mark Liversedge
c30acdb56f Overview PMC card
.. as you make it bigger it shows more detail, can be
   configured to use any metric as an input.
2017-02-20 13:20:45 +00:00
Joern
39c8b4e941 Merge pull request #2351 from Joern-R/Curator
CloudDB - Chart Curation/User Editing
2017-02-19 18:57:11 +01:00
Joern
17f3a1576c CloudDB - Chart Curation/User Editing
... fix misleading text that only charts of the current view are editable, while in this modes all charts are editable.
2017-02-19 18:11:46 +01:00
Mark Liversedge
1aaa4a6678 Overview Rewrite Route visualisation
.. don't use a Map, instead paint the route

.. it just filters out the points to simplify, I tried to
   implement FastSTray but gave up and just arbitrarily
   filter out 95% of all points instead.

.. the paper here describes FastSTray if anyone fancies
   implementing it in a way that is quick:
   https://arxiv.org/pdf/1608.07338.pdf
2017-02-19 16:48:26 +00:00
grauser
050a913474 Correct total_elapsed_time in Session message
Thanks Aaron
2017-02-19 17:29:58 +01:00
Joern
fbecfc453b Merge pull request #2349 from Joern-R/FIT
FIT Importer
2017-02-19 12:01:42 +01:00
Joern
125549f37b FIT - add new Garmint devices to list 2017-02-19 11:07:26 +01:00
Joern
6c61b0e253 FIT - Fix Lap Starting time
... if lap data contains a developer field, lap starting time is corrupt, if field num of the developer field == 2
... since we don't store any lap specific developer fields, let's ignore them all
2017-02-19 11:07:26 +01:00
Mark Liversedge
df53369969 Overview Chart base code fixups
.. to tidy up embedding chart widgets in the dashboard

.. not so much about the web view for the map as fixing
   bugs that will impact embedding more interesting kinds
   of charts.

.. there is a really irritating bug related to setCursor()
   not working once the mouse has hovered over the
   QWebEngine window in the dashboard.

.. did I ever mention how much I hate QWebEngine ?
2017-02-18 22:28:51 +00:00
Mark Liversedge
0b8efca54e Overview Route Visualisation using Google Map
.. map is styled using "snazzymaps.com" css template

.. but it looks naff, loads slowly and adds a dependency
   on embedding a QWebEngineView, which is one of the
   reasons we're developing this in the first place (!)

.. it shows how to embed charts in the dashboard, so that
   proxy code will be useful in the future.

.. likely to replace the google map visualisation with a
   GPS route pixmap and route profile using altitude in
   the next commit or two.
2017-02-18 19:52:20 +00:00
Mark Liversedge
0d17d68803 Map Window show/hide overlay
.. its not that helpful, let users hide it

.. also don't want it when its on a dashboard
2017-02-18 17:09:05 +00:00
Joern
94d0535245 Merge pull request #2347 from Joern-R/TP-Download
TodaysPlan - Download of Workouts
2017-02-18 17:41:15 +01:00
Joern
ea4aacfe08 TodaysPlan - Download of Workouts
... allow download of future scheduled Workouts from TodaysPlan
2017-02-18 16:39:32 +01:00
Joern
9cafe2c1f1 Merge pull request #2346 from Joern-R/TP1
Today's Plan - Search Paging
2017-02-18 11:46:49 +01:00
Joern
8dd9a562d3 Today's Plan - Search Paging
... optimize performance by using "next" instead of doing a full search again for each page
2017-02-18 11:11:04 +01:00
Mark Liversedge
808daf92f5 Overview Significant Performance Issue Fixups
.. implement the sparkline using native painters since
   the Qt Chart had many regression issues that caused
   significant slow downs and memory leaks

.. delete the xyseries in the scatter chart for intervals
   every now and again to avoid another memory leak there

.. reduce the amount of animation in the chart to avoid
   another memory leak

.. in short, Qt Charts are very promising, but they are
   new and lack the maturity of QWT.
2017-02-17 20:49:39 +00:00
Joern
aec857dfd0 Merge pull request #2345 from Joern-R/ROX11
Rox 11 - SLF
2017-02-17 21:19:15 +01:00
Joern
79bdbf401f Rox 11 - SLF
... calculate samplingRate since Rox 11 does not deliver it in the XML data
2017-02-17 20:10:44 +01:00
Mark Liversedge
5cd135f90b Disable BTLE on Windows
.. since its not supported.
2017-02-17 09:31:05 +00:00
Joern
c33fe5b566 Merge pull request #2340 from Joern-R/RIW
RideImport
2017-02-16 17:43:25 +01:00
Mark Liversedge
aab4e887b1 Fix SEGV in Qt Charts when setData called quickly
.. if you scroll up and down the ride list whilst the
   overview is open Qt Charts will crash trying to
   complete an animation.

.. to fix this we disable animations before trying
   to update the chart (including setting animation
   options back on)
2017-02-16 16:04:10 +00:00
Mark Liversedge
a58fc51c76 Fix Overview SEGV
.. chart->isVisible() for META crashes, so check it
   isn't NULL first, will fixup when add charting
   numeric meta fields in a sparkline.
2017-02-16 15:35:44 +00:00
Mark Liversedge
dbd360d22c Fix Keyboard Focus loss on Ride list
.. QWebEnginePage::setHtml() steals keyboard focus (!)

.. to stop this behaviour setEnabled(false) stops it
   from trying to do that.

.. this obviously only happens when NOWEBKIT is defined.
2017-02-16 15:27:43 +00:00
Mark Liversedge
5e6dae602b Overview Interval Scatter Plot
.. an Interval plot plot on the dashboard is an xy
   scatterplot, good for time/power, hr/power etc

.. have also removed (temporarily) the drag animation
   that shrinks tiles since its a major performance
   overhead against Qt Charts.

.. there is still work to do tidying up the interval
   scatter plot and adding some kind of mouse hover
   feedback.
2017-02-16 11:15:11 +00:00
Mark Liversedge
373d0dd269 Fix Overview Metrics sparkline when time based
.. now shows the sparkline properly.
2017-02-15 17:28:55 +00:00
Mark Liversedge
d8714bc73d Ignore test files in github linguistics 2017-02-15 16:33:35 +00:00
Mark Liversedge
ef85dd2b83 Update .gitattributes for linguist stats in github
[ci skip]
2017-02-15 16:26:52 +00:00
Mark Liversedge
5d815d744f Overview Performance Issues on Drag
.. drag animation for tile shrink is very slow on my MBP. Trying to
   get to the bottom of why. It may be a HW issue with my PC.
2017-02-15 12:07:06 +00:00
Mark Liversedge
cc3cfda73b Overview Sparklines 14 days and Show Range
.. we only plot a sparkline for activities in the last 14 days
   and don't plot zero values.

.. alongside the sparkline the max and min are shown to provide
   context as the Y-axis is scaled to the data
2017-02-15 10:36:02 +00:00
Mark Liversedge
6415d48657 Merge pull request #2342 from gcoco/master
Enhancements to Travis Build
2017-02-15 06:10:21 +00:00
Stefan Schake
b801d082f0 Add Windows crash handling 2017-02-15 00:07:55 +01:00
gcoco
6c86cf7756 Enhancements to Travis Build
Build with QT5.5.1 and WEBKIT.
Build with latest brew QT and WEBENGINE.
Build with LMFIT installed.
2017-02-14 16:58:34 -05:00
Mark Liversedge
813d32f01a Overview Sparkline Y-axis Fixup
.. just use min/max -/+ 10% of difference between the 2
2017-02-14 21:13:08 +00:00
Mark Liversedge
7b4fc559cc Overview Sparkline Fixup
.. don't waste space

.. show hidden zone charts when dragging ends
2017-02-14 19:59:56 +00:00
Joern
dd88dd909d RideImport
... in addition to DateTime in the .json File name (which is in local Time), also check for duplicates using UTC from RideCache to avoid duplicate imports if user changes his PC TimeZone (e.g. when travelling)
... the problem e.g. occurs in Autoimport where the same files would be imported again, if the PC TimeZone changes
2017-02-14 22:02:50 +03:00
Mark Liversedge
90211801fb Overview Sparklines for Metrics
.. not quite working right - need to look at how
   the axis range can be set after the data has been
   modified as it seems to break things.

.. looks back 21 rides, but perhaps would be better to
   look back n days.

.. when looking for activities it doesn't filter so
   you see zero values for other sports e.g. power
   will be zero for a swim

.. needs refinement after real users get to try it
2017-02-14 12:44:31 +00:00
Mark Liversedge
06eb7e14aa Overview Animations Memory Leak
.. not really a memory leak, more a design flaw in
   the way QParallelAnimation works (it assumes you
   don't reuse it).

.. there may be other issues with the other animation
   groups but can look at those separately.
2017-02-14 08:53:45 +00:00
Mark Liversedge
aa612b926c Sixcycle upload compression
.. use TCX and upload compressed data using gzip.
2017-02-14 08:52:36 +00:00
Joern
60e2b00926 Merge pull request #2338 from Joern-R/QtWebEngine
QtWebEngine Cache in User Directory
2017-02-13 20:31:10 +01:00
Joern
3a9ea67752 QtWebEngine Cache in User Directory
... simplify code & remove redundant code based on proposal from Claus Assmann (thanks)
2017-02-13 18:15:36 +01:00
Mark Liversedge
10dcffbc5c Hide axis on Overview Card 2017-02-13 11:03:12 +00:00
Mark Liversedge
d54c15c5e7 Build Id Update for Dev builds 1702
.. in readiness for a development release at the end
   of February (and for private builds beng issued).
2017-02-13 11:03:11 +00:00
Mark Liversedge
73cc18d5f0 SixCycle Date Fixup
.. PwxWriteFile was not converting the date to UTC
   before writing the output.

.. Sixcycle upload should use TCX anyway (!)
2017-02-13 11:03:11 +00:00
Joern
02a1074d1b Merge pull request #2336 from Joern-R/Win-WebEngineCache
QtWebEngine Cache on Windows
2017-02-12 19:52:32 +01:00
Joern
33bbad4e01 QtWebEngine Cache on Windows
... Default directory for the WebEngine Profile and Cache is /AppData/Local/<AppName which is the same GC uses as Default for Athletes
    Changing the location for QtWebEngine needs to be done for EVERY QWebPage. Until the use of QtWebEngine is limited to a few locations
    the easier way is to filter out the Directories created by QtWebEngine (assuming that no-one will call their athletes either "cache" or "QtWebEngine".
... This is only done if build with QtWebEngine and for Windows (on other OS Qt uses a better location for cache data, not a user location).
2017-02-12 18:35:46 +01:00
Mark Liversedge
789bc6767f Overview Metadata Card
.. display metadata as well as metrics.
2017-02-12 16:21:59 +00:00
Joern
ecd1528803 Merge pull request #2335 from Joern-R/CDB-CuratorPaging
CloudDB - Curation/Editing
2017-02-12 15:34:31 +01:00
Joern
7fe1ccd274 CloudDB - Curation/Editing
... keep current position in paging through the list of charts if nothing has been changed
2017-02-12 15:01:16 +01:00
Mark Liversedge
f2f9ac8a37 Overview Pace Time In Zone
.. for swimmers and runners.
2017-02-12 11:21:16 +00:00
Mark Liversedge
e36644360d Overview and Qt Charts in QT 5.8
.. enforce use of QT 5.8 for building the Overview and
   use of Qt Charts.

.. Qt 5.7.x doesn't neccessarily come with Qt Charts as it
   was a technology preview (and breaks the current Appveyor
   builds)
2017-02-12 11:04:53 +00:00
Joern
77e8bdef67 Merge pull request #2334 from Joern-R/DE
Translation DE
2017-02-12 11:21:00 +01:00
Joern
18d5196539 Translation DE
... Update/Fixes
... Align Cycling Dynamics Terminology with Garmin Translation
2017-02-12 11:19:50 +01:00
Mark Liversedge
38cb13d5ee Merge pull request #2333 from Joern-R/TP
Today's Plan
2017-02-12 09:51:59 +00:00
Mark Liversedge
2245bbe3e1 Overview W'bal Time In Zone
.. 4 zone descriptions need thinking thru
2017-02-12 09:19:59 +00:00
Mark Liversedge
87edd118f6 Overview Power Time In Zone
.. and a bit of refactoring to tidy up some of the hacks. Still
   needs a bit more cleanup but getting better.
2017-02-12 08:47:08 +00:00
Mark Liversedge
b809102dc6 Overview Chart Animation tweak
.. only animate when setting, not on every geometry change.
2017-02-11 21:47:53 +00:00
Mark Liversedge
0e17baac90 Overview HR Time In Zone
.. hacked in a proof of concept, using Qt Charts

.. only does the time in zone for HR at present, but can now
   look to refactor to better code and then add in pace, power
   and w'bal time in zone too.

.. note that now we are using Qt Charts the overview will
   only be built with Qt >= 5.7
2017-02-11 21:05:46 +00:00
Joern
53bbad1f3b Today's Plan
... do paginated access to the Activities list instead for fixed limit to 100
2017-02-11 19:32:46 +01:00
Mark Liversedge
35e5753e07 Merge pull request #2332 from Joern-R/Translation-Enablement
FileStore
2017-02-11 16:34:31 +00:00
Joern
d9fd5530e1 FileStore
... Translation Enablement (partly missing)
... eliminate some compiler warnings
2017-02-11 16:48:57 +01:00
Mark Liversedge
bf974bc17a Overview base setup
.. although hacked in, at least we get a dashboard that looks
   like the real thing (till we have configuration code).

.. need to work on adding time in zones via Qt Charts next !
2017-02-11 12:23:10 +00:00
Mark Liversedge
d5dc72bff3 Overview add units to metric cards
.. only if non-blank and not units of time since the time
   format indicates units
2017-02-10 23:00:24 +00:00
Mark Liversedge
962d77553f Overview Display Metrics
.. hacked in a basic display of metrics when ride changes.
2017-02-10 21:14:07 +00:00
Mark Liversedge
ffc62e1fea Overview Card paint title
.. just a basic thing, gonna create some basic card types
   to show metrics etc before adding the set up code.
2017-02-10 15:55:03 +00:00
Mark Liversedge
ca086fd894 Don't use CPLOTGRID in Ride list
.. its fugly, especially with a white plot background.
2017-02-10 12:52:07 +00:00
Claus Assmann
8b5567389e Uninitialised count in calibration code 2017-02-10 10:39:07 +00:00
Mark Liversedge
5d3307cafa Fix FIT export SEGV on manual rides
.. or rides which contain no datapoints.
2017-02-10 09:33:41 +00:00
Mark Liversedge
4791acaf3c Fixup Github source stats
.. telling linguist to ignore translation files as
   if they are 'documentation'
2017-02-09 21:46:12 +00:00
Mark Liversedge
87650be170 SixCycle readdir() convert date to Local time
.. so it is matched and displayed in local time.
2017-02-09 18:02:08 +00:00
Mark Liversedge
17e11b389d Overview Design Decisions
.. modes for config and view scrapped - too confusing when you
   have config of layout vs config of individual cards

.. need to set a constraint on the size of each card to make
   it easier to design content and manage typefaces in a
   consistent manner across the cards

.. add / delete / modify will be made available at all times.
   add will need a '+' card to float at the end of the
   dashboard, whilst delete and modify can be on the card
   decoration.
2017-02-08 19:38:17 +00:00
grauser
8950b0bd75 CSV: Remove white space in header
fix #2330
2017-02-06 22:57:09 +01:00
Mark Liversedge
8095de588c Overview Drag Visualisation
.. the shrinking visual cue is on drag, not config.
2017-02-06 21:20:29 +00:00
Mark Liversedge
07796d3a94 Overview Page Configure Toggle
.. using a gear icon in the top right to switch between
   viewing an overview and configuring it.

.. now need to think about how cards react and are
   decorated and the main mechanisms for configuring
   the content on the page (not the layout).
2017-02-06 20:46:34 +00:00
grauser
c3b4f2057d Today's Plan : Select athlete 2017-02-05 23:29:15 +01:00
grauser
18470a780e FIT : No NaN in float values 2017-02-05 23:29:15 +01:00
Mark Liversedge
e04d9d149a Todays Plan Fix '..' in filename
.. when processing suffixes.
2017-02-05 21:43:55 +00:00
Mark Liversedge
a82335e863 Overview Tweaks
.. getting ready to add config/view modes
2017-02-05 21:30:58 +00:00
Mark Liversedge
db599e3998 R XDATA columns replace ' ' with '_'
.. as variables with a space in them are not very useful.
2017-02-05 21:30:58 +00:00
Joern
5e1995f394 Merge pull request #2328 from Joern-R/DE3
Translation DE
2017-02-05 13:19:07 +01:00
Joern
e4b2082adc Translation DE
... complete check/re-work
2017-02-05 13:04:28 +01:00
Mark Liversedge
a07f80a6c6 Overview Layout UX Tweaking
.. easing curve for autoscroll should be linear as it can
   be continuous and is jarring if speeds up and slows down

.. some of the animation durations were too slow and made the
   UI feel slow instead of snappy

.. getting ready to work on card aesthetics
2017-02-04 20:45:42 +00:00
Mark Liversedge
ad9ddd47ee Merge pull request #2326 from Joern-R/TP1
TodaysPlan - Synchronise
2017-02-04 18:24:47 +00:00
Joern
44ed77ccb1 TodaysPlan - Synchronise
... non .JSON files (e.g. .FIT) are not listed for download
2017-02-04 18:49:57 +01:00
Mark Liversedge
8312ed63c5 Overview fix Scrollbar jarring effects
.. when resizing or drag scrolling.
2017-02-04 15:12:08 +00:00
Mark Liversedge
2488880c3b Overview Fix SEGV on scrollbar hide
.. every project needs a 13yr old to test the
   edge cases and break code !
2017-02-04 14:10:49 +00:00
Mark Liversedge
369316948c Overview vertical scrollbar
.. reflects changes as they are made and can be
   used to scroll the view.

.. we manage this ourselves instead of letting the
   view manage it as we also want to diable it.

.. when a scrollbar is disabled it now makes the
   slider invisible.
2017-02-04 14:02:45 +00:00
Mark Liversedge
3952fd72c5 Overview Placement animation
.. just for a small piece of feedback to the
   user about the card being placed back into
   the scene.
2017-02-04 11:15:24 +00:00
Mark Liversedge
35ae6aa38c Better UX for edge scrolling
.. use boundaries of view so it doesn't 'suddenly' start
   scrolling - you force it by going to the edge or beyond.

.. make sure the mouse is moving in the right direction of
   the autoscroll so it stops when you move up/down against
   the direction of the autoscroll.
2017-02-04 09:38:48 +00:00
Mark Liversedge
7a79e7046d Overview Scroll using MouseWheel
.. rather than keys and dragging
2017-02-03 22:44:01 +00:00
Mark Liversedge
41c633660b Overview Fix Resize Y Scroll Constraint
.. when resizing on Y we should not constrain the
   to the size of the scene since we are in the
   process of increasing the size of the scene !
2017-02-03 16:02:47 +00:00
Mark Liversedge
d16dc83aba Drag and Resize Autoscroll
.. when dragging or resizing a tile automatically
   scroll in a way that doesn't disorientate the
   user of create a jarring effect
2017-02-03 15:03:34 +00:00
Mark Liversedge
c11dc5597c Overview Scrolling
.. you can scroll up and down with up/down arrow keys
   and page up/down.

.. the scroll is animated if the distance is far enough
   otherwise it just happens immediately.

.. need to add scrollbar scrolling, drag scrolling and
   mouse wheel / gesture scrolling next.
2017-02-03 10:31:26 +00:00
Mark Liversedge
11d5d8b5f3 Merge pull request #2323 from leifwar/HrvPolar
Read HRV into XDATA
2017-02-02 07:23:39 +00:00
Leif Warland
4279162e80 Read HRV into XDATA
Scan the pdd file, if it exist, for given exercise.
2017-02-01 23:41:47 +01:00
Mark Liversedge
5d7692b341 Merge pull request #2321 from amtriathlon/HrvSml
Store R-R data into XData for SML files
2017-01-30 05:22:51 +00:00
Alejandro Martinez
cba3d28520 Store R-R data into XData for SML files
In line with R-R data treatment for FIT files
Test file: test/rides/Ambit3-HRVbutNoHR.sml
2017-01-30 00:37:47 -03:00
Mark Liversedge
674f7fcd9e Merge pull request #2320 from leifwar/master
Read R-R data into Xdata
2017-01-29 19:59:26 +00:00
Leif Warland
cfe2a08e33 Added FIT file to test HRV reading. 2017-01-29 21:23:01 +01:00
Leif Warland
0cff7c2868 Read R-R data into Xdata 2017-01-29 21:01:05 +01:00
Mark Liversedge
383c401ad2 Overview tweakable parameters
.. for row height and spacing
2017-01-29 19:06:39 +00:00
Mark Liversedge
443d579d76 Overview Fix Y resize glitch
.. scene / view rectangles changing caused mouse move
   events to arrive with different co-ordinates which
   broke y-resize.

.. so we no longer adjust the view whilst resizing on
   the y-axis (already did that for the x-axis)
2017-01-29 18:01:39 +00:00
Mark Liversedge
30393dc6db Overview SEGV fix for drag right
.. dragging one tile in the last column to make a
   new column SEGV (incrementing itself)

.. bug bought to you via extensive testing from my
   13yr old son who takes great pride in breaking
   his Dad's code.
2017-01-29 15:57:39 +00:00
Mark Liversedge
a75b26ca70 Overview Animate View Transition
.. no more jarring fit to view transitions and it
   *finally* starts to feel like a polished UX

.. need to look at handling scrolling next.
2017-01-29 15:39:49 +00:00
Mark Liversedge
23031f7c8b Revert "HRV / R-R updates to RideFile and Allplot"
.. inadvertently committed alongside updates for sport tags.

.. these updates introduced a serious regression for the
   ridefile JSON format and backwards compatibility

.. reverts the following commits:
       b47cb733a2
       d432602b35
2017-01-29 13:00:19 +00:00
Mark Liversedge
eb81adf28a Overview Resize Column Widths
.. dragging the rhs of a card will make the column it is
   part of resize.

.. scaling paused whilst dragging and resize leads to a
   less jarring experience -- but scaling could also do
   with being animated to avoid the jumpy experience.
2017-01-29 12:27:24 +00:00
Mark Liversedge
e2068e2d67 Overview variable width columns
.. they're fixed for now, but resize is in the next commit.
2017-01-29 11:20:30 +00:00
Mark Liversedge
69d1c55d17 Merge pull request #1651 from leifwar/master
Add more "sport" tags + read weight from FIT file.
2017-01-29 09:28:24 +00:00
Leif Warland
e62d3c69d6 Added SubSport from Garmin FIT format.
Based on FIT.pm from http://pub.ks-and-ks.ne.jp/cycling/GarminFIT.shtml.
2017-01-28 18:42:09 +01:00
Leif Warland
6c8927d275 Added hrv to Allplot 2017-01-28 18:42:09 +01:00
Leif Warland
b7151e3d10 Added reading of R-R data from FIT files 2017-01-28 18:42:09 +01:00
Mark Liversedge
fe84df07b9 TodaysPlan Fix suffix handling
.. introduced a bug when fixing for download of
   FIT files etc
2017-01-28 15:48:28 +00:00
Joern
54830a3bc0 Merge pull request #2318 from Joern-R/GAE1
CloudDB - Ressource Reduction
2017-01-28 14:08:56 +01:00
Mark Liversedge
98d6b48501 Overview Fit to Page Width
.. resize and scale to fit as the layout changes.
2017-01-28 11:25:54 +00:00
Joern
1e89925aad CloudDB - Ressource Reduction
... usage update only every 25 starts of GC
... version check only every 10 days
2017-01-28 10:51:07 +01:00
Mark Liversedge
db0e0696c3 Overview fix cursor reset
.. when not hovering on a tile.
2017-01-27 19:04:31 +00:00
Mark Liversedge
b0c2a968a4 Overview resize tiles
.. we can now resize tiles by dragging them from the bottom.

.. need to sort out zooming, scrolling and 'fit in view' type
   problems next, before save/restore layout to chart settings.
2017-01-27 18:51:16 +00:00
Mark Liversedge
09f2e0aff8 Overview Drag Layout finished
.. now need to work on tile rezize.
2017-01-27 16:49:53 +00:00
Mark Liversedge
baaf288a5f Overview drag and drop cards with animation
.. now lets you rearrange things nicely .. might need to reuse this
   for the train view layout at some point.
2017-01-27 14:29:57 +00:00
Mark Liversedge
f21eeb94eb Tweaks to Overview
.. still hacking a prototype
2017-01-27 08:35:55 +00:00
Mark Liversedge
25edbe4a85 TCXParser ese MSecs not Secs for Time Deltas
.. secs is a double not an int, using secsTo lost fractions
   of a second, which for some sources can be important.
2017-01-27 08:35:55 +00:00
Alejandro Martinez
cf577b468f Merge pull request #2316 from amtriathlon/LapSwimXdata
Lap Swim XData for TCX and PWX files
2017-01-26 19:10:27 -03:00
Alejandro Martinez
3717c0af7b Added length-by-length XData to TCX lap swim files
Also fixed the case when DistanceMeters=0 is used as marker for no distance
2017-01-26 13:58:41 -03:00
Alejandro Martinez
74e105e8e2 Added length-by-length Swim XData for PWX lap swim files 2017-01-26 09:43:13 -03:00
Mark Liversedge
15cf2a028c OverviewWindow fix delete column 0 bug
.. if column 0 is empty the cards to the right didn't get
   moved to fill the space due to a fencepost error.
2017-01-26 11:40:41 +00:00
Mark Liversedge
300829da79 TodaysPlan can download non-JSON
.. don't assume the sync with TP is only using JSON files as
   the files are uploaded manually or synched from Garmin so
   they could be just about any type.

.. not that TodaysPlan support .act and .bdx files which we
   do not. So users with those (rare?) file formats will not
   be able to sync.
2017-01-26 11:22:02 +00:00
grauser
ea1ab203dc Train/CSV ; thb and smo2 are double 2017-01-25 18:59:19 +01:00
Mark Liversedge
67a888be38 Fix TodaysPlan start time
.. for activities that weren't uploaded by GoldenCheetah.
.. use the "startTs" field to get the activity start time.
2017-01-25 11:34:44 +00:00
Mark Liversedge
235ec23d18 Add FIT Support to FileStore
.. but not used yet
2017-01-25 07:24:34 +00:00
grauser
8c1fc46773 FIT: correct GPS data (export) 2017-01-25 07:55:29 +01:00
grauser
0721eb3a6d FIT : Add activity end message
disable (wrong) GPS data now
2017-01-24 23:47:17 +01:00
grauser
b1081a6927 FIT : Remove debug traces 2017-01-24 23:25:53 +01:00
grauser
20a97e203f FIT : export file 1/3
Basic record
2017-01-24 23:16:12 +01:00
Mark Liversedge
d45abde8ba Overview Re-arrange when a column is empty
.. just move the columns to the right across to fill
   the space vacated when a column is removed.
2017-01-24 20:23:01 +00:00
Mark Liversedge
76cf1e8c2d Overview Window Animated Layout
.. as the layout changes we animate.

.. in the prototype you click on a rectangle to remove it,
   which triggers the rest of the items to fall up into
   the space vacated.

.. now the animation is in place we can start working on
   the click to drag and relocate as we move the cursor
2017-01-24 20:13:52 +00:00
henolo
a5c30d5501 Updated Swedish Translation 2017-01-24 09:49:54 -03:00
Mark Liversedge
d183dcf3b9 Overview Prototyping
.. just saving away some hacky code as the overview is being
   prototyped. The code will evolve over time, the current
   focus is on drag and drop of cards with animation.

.. this code does very little, just populates a scene and
   tracks mouse movement within the scene.
2017-01-23 20:53:57 +00:00
Mark Liversedge
c0e4afcc81 Introduce Overview Page
.. widget to replace summary chart - but at this stage is
   just blank and need to work on drag and drop ui for
   managing cards before adding any content

.. also commented out the planning widget for 3.4.1
2017-01-23 15:36:59 +00:00
Mark Liversedge
b815550ca9 Fix FileStore build on QT 4.8 2017-01-23 15:35:47 +00:00
Mark Liversedge
3b34de6733 WebKit based WebPageWindow download import
.. the previous update for importing on download was only
   implemented for Qt WebEngine, this update adds it for
   WebKit based web pages too.
2017-01-23 12:40:25 +00:00
Mark Liversedge
d3a79be3a0 TodaysPlan add a bit more debug
.. want to confirm what is called.
2017-01-23 10:43:27 +00:00
Mark Liversedge
36133307bf Less Debug and Fix QT < 5.8 build
.. in the webpagewindow
2017-01-22 14:50:05 +00:00
Mark Liversedge
4fef38abe6 Webpage Download only with QWebEngine
.. fixes CI build error when NOWEBKIT isn't defined
2017-01-22 14:41:57 +00:00
Mark Liversedge
0ef25121a0 WebPage Download invokes Import
.. very simple hack to import any file that is
   downloaded from a webpage.

.. when working with e.g. TodaysPlan if you click
   on Download Original it will download and
   import it into GC.

.. nice way of getting data from web sites that
   offer a manual download but no sync api
2017-01-22 12:27:05 +00:00
Mark Liversedge
4db99102a5 Merge pull request #2309 from dresco/trainview
Trainview - notifications and calibration
2017-01-21 20:05:57 +00:00
Mark Liversedge
4002b9eb14 RChart honor change in background color
.. when it changes in options, rather than needing a restart
2017-01-21 19:11:02 +00:00
Joern
4d122216f3 Merge pull request #2308 from Joern-R/TDP
Todaysplan - Share Dialog
2017-01-21 19:40:30 +01:00
Jon Escombe
f771fd6f27 Add calibration support to train view
This extends the existing support for Computrainer calibration to
include ANT+ devices, and provides initial support for both zero
offset and spindown calibration.

A new button (with wrench graphic) is provided to invoke calibration.

Ongoing calibration status is fed back in the new notification area
of the bottom bar. Calibration will automatically exit on completion
or error, or can be cancelled though the calibration button.

Supports multiple devices, and will round-robin between them, this
applies to both multiple ANT+ sensors (i.e. power meter and trainer),
and also multiple GC device selections (i.e. CompuTrainer and ANT+
power meter).

If an ANT+ device has advertised that calibration is required (currently
just FE-C trainers), then it will be chosen for calibration in preference
to other ANT+ devices.

Patch has been tested against FE-C trainer (Tacx Vortex Smart) and
PowerTap hub. Support for SRM (crank torque frequency) devices will
require additional changes to process the different response messages.
2017-01-21 18:17:43 +00:00
Joern
17dceef115 Todaysplan - Share Dialog
... get URL from configuration, not fixed on Stage
2017-01-21 19:01:04 +01:00
Jon Escombe
91596d5d22 Add a basic text notification area to train view
Shuffle bottom bar around, with new icons and state tracking
for intensity adjustment.

Add a basic text notification area into bottom bar, using a
read-only QPlainTextEdit control (defeated by QLabel resizing
with the content). Include some basic notifications for button
events.

Support for setting and clearing notification text, with timer
support for auto-clearing.

Sizes the bottom bar for three lines of text, but don't clip the
buttons vertically if text is smaller.

TODO: reinstate auto-hide functionality (new settings checkbox
not in use), and extend to include new notifcations as trigger.
2017-01-21 17:57:43 +00:00
Joern
9fa3675426 Merge pull request #2307 from dresco/build
Minor build fix
2017-01-21 17:54:20 +01:00
Jon Escombe
171eba88ab Minor build fix 2017-01-21 16:05:10 +00:00
Joern
fd761c1ac1 Merge pull request #2306 from Joern-R/CDB-Tele
CloudDB - Version & Telemetry
2017-01-21 15:17:36 +01:00
Joern
97bc7e3502 CloudDB - Version & Telemetry
... improve Telemetry Dialog
... add more data to Telemetry Storage / including user counter
... do not show any network errors / lack of connection
... call all CloudDB functions asynchronously without blocking UI
... use an installer specific UUID as identifier - not IP address (as this is to volatile)
2017-01-21 12:51:49 +01:00
Mark Liversedge
2d7d52a389 Todays Plan Oauth can have private keys
.. let the user configure them in options.
2017-01-21 10:18:24 +00:00
Joern
2800da3e97 Merge pull request #2304 from Joern-R/CDB-Version-Fix
CloudDB - Version
2017-01-18 21:00:05 +01:00
Joern
b9ebfe7cef CloudDB - Version
... no user message in case of network problems
2017-01-18 20:58:21 +01:00
Mark Liversedge
820df34b61 Merge pull request #2276 from joekearney/kettler-serial-fixes-2
Kettler serial connection fixes
2017-01-18 19:54:02 +00:00
Mark Liversedge
6c5e3b0419 Merge pull request #2293 from dresco/trainview
Train view UI nits
2017-01-18 19:48:53 +00:00
Mark Liversedge
ce7605796e SixCycle Improvements
.. get distance/duration in SixCycle::readdir()

.. don't include 0 values in PWX export
2017-01-18 17:14:45 +00:00
Mark Liversedge
d0028e49cc Fix Stages Freemotion timestamps
.. using regexp based parsing of the timestamp since it is
   not a valid time format.
2017-01-18 08:23:28 +00:00
Alejandro Martinez
d8f4b01bb8 Fixed Running Power calculation in GOVSS
Added missing Mass factor in kinetic energy contribution, probably of little
effect in practice since it is a minor contribution in distance running.
Changed cAero to per kg to follow Skiba Paper, doesn't change the result.
Thanks Ramon Castañer for the heads up.
2017-01-17 20:32:26 -03:00
Mark Liversedge
805d0fe79d SixCycle now provides StartDateTime
.. so no need to jump through hoops to match a ride on the
   end date time.
2017-01-17 17:10:38 +00:00
Mark Liversedge
d4f9e7ba26 R GC.season.intervals() honour type=
.. the type parameter was being ignored (it wasn't
   implemented at all.

.. now you can do:

   hills <- GC.season.intervals(type="CLIMBING")
   peakpower <- GC.season.intervals(type="PEAK POWER")
   all <- GC.season.intervals()
2017-01-16 16:16:16 +00:00
Mark Liversedge
542c26e47c Sixcycle Fixes
.. SixCycle should be spelt as Sixcycle, this has
   been fixed across the user visible strings

.. Upload of PWX works, but not TCX, so switching
   to using PWX for now.
2017-01-16 10:25:33 +00:00
Mark Liversedge
bb70624514 Merge pull request #2237 from amtriathlon/DelRenIntervals
Changed Delete/Edit/Rename on sidebar interval context menu
2017-01-16 01:04:00 +00:00
Mark Liversedge
bafc374b21 Oops
.. SixCycle store wasn't renamed after cut/paste
   from code for Today's Plan.
2017-01-15 20:47:59 +00:00
Mark Liversedge
ed9724b920 R season intervals use short type desc
.. its easier to filter on short words !
2017-01-15 19:43:14 +00:00
Mark Liversedge
8fe88fc3ea Merge pull request #2189 from stschake/issue2148
Don't assume a perfect 1 second between every telemetry sample
2017-01-15 18:56:07 +00:00
Mark Liversedge
85f216d6b5 R GC.season.intervals(type=, compare=)
.. get a dataframe of intervals and their metrics for an entire season.
2017-01-15 18:45:25 +00:00
Mark Liversedge
8183c27143 Qt 5.5.1 build fix
.. QDateTime::toSecsSinceEpoch doesn't exist.
2017-01-15 17:39:39 +00:00
Mark Liversedge
d5634e3274 SixCycle Integration - Part 4 of 4
.. download now works.

.. need to look more closely at the upload process. But overall the main
   development is completed.
2017-01-15 17:03:01 +00:00
Mark Liversedge
c6dcbbe87e SixCycle Integration - Part 3 of 4
.. Query filestore now added.

.. You can query and upload using the API, but at present no files are
   being accepted (we send as TCX uncompressed).

.. Part 4 will include download then we can pass over to SixCycle for
   them to test and fixup.

.. note that SixCycle uses enddate (!?!) for their activity and not
   start time this requires a bit of gymnastics to match in syncdialog
   there are some pending fixups required for syncdialog download
   because of this.
2017-01-15 15:45:29 +00:00
Mark Liversedge
917d49290c Parking SixCycle Integration
.. partial update for readdir, but the API isn't working as
   described. Parking development whilst it is resolved.
2017-01-15 12:02:47 +00:00
Mark Liversedge
bb1f9994b6 Tag Up V3.4.1 development
.. Development builds starting for 3.4.1

.. Likely to release sometime 2017 Q2
2017-01-15 11:07:08 +00:00
Mark Liversedge
9d6ab2f5ab Recognise Arun Horne
.. in contributors, fixed travis deployment
2017-01-15 10:33:28 +00:00
Mark Liversedge
f37acd1549 CI Update Travis Secrets
.. updated the secure environment to include:

   * GC_DROPBOX_CLIENT_ID
   * GC_MAPQUESTAPI_KEY
   * GC_CLOUD_DB_BASIC_AUTH
   * GC_CLOUD_DB_APP_NAME
   * GC_GOOGLE_DRIVE_CLIENT_ID
   * GC_GOOGLE_DRIVE_CLIENT_SECRET
   * GC_GOOGLE_DRIVE_API_KEY
   * GC_TODAYSPLAN_CLIENT_SECRET

.. Since Arun has now fixed deployment its important that the
   builds include the keys.
2017-01-15 10:21:38 +00:00
Mark Liversedge
935c37b77b CI only deploy builds for tagged releases 2017-01-14 21:26:05 +00:00
Mark Liversedge
3c300fb825 CI Update deploy API key 2017-01-14 20:15:37 +00:00
Mark Liversedge
924880b238 CI arunh -> GoldenCheetah 2017-01-14 19:30:02 +00:00
Mark Liversedge
f2281c9914 Merge pull request #2301 from arunh/master
Travis CI Deploys to GitHub Releases
2017-01-14 19:26:09 +00:00
Mark Liversedge
c33baf6bb8 SixCycle Integration - Part 2 of 4
.. upload activities

.. need to work with tech support at SC to debug the call as we
   are posting multipart form data but its not being processed
   and we receive no error or confirmation response for call.
2017-01-14 18:03:15 +00:00
arunh
9a157722a6 Add credentials for this repo 2017-01-14 17:54:14 +00:00
arunh
2553b3860e Travis CI deploys to GitHub releases 2017-01-14 17:37:13 +00:00
arunh
a432b0b2d3 Travis CI deploys to GitHub releases 2017-01-14 17:25:49 +00:00
Joern
1f03d8957a Merge pull request #2300 from Joern-R/CI1
Appveyor CI - Windows
2017-01-14 14:52:50 +01:00
Joern
ef098e8838 Appveyor CI - Windows
... build with Qt 5.7.1
2017-01-14 14:51:47 +01:00
Mark Liversedge
0d15e00ceb Tidy up attributions
.. trademarks acknowledged in about, don't need to
   duplicate that in the summary

.. Peaksware have rescinded permissions, so we will
   need to remove use across the user visible and
   default setup.
2017-01-14 11:23:55 +00:00
Mark Liversedge
07ec22decf SixCycle timeout on no authentication response
.. if the instance goes down or there are network issues we
   should timeout rather than blocking indefinitely waiting
   for a response.
2017-01-14 11:09:57 +00:00
Mark Liversedge
94bedcd3f4 SixCycle Integration - Part 1 of 4
.. added SixCycle FileStore implementation

.. in this part the authentication mechanism is complete and extracts
   both the session token and session userid for subsequent requests.

.. follow up commits will need to implement readdir, writeFile readFile.
2017-01-14 10:39:21 +00:00
Mark Liversedge
0e6ce66d9f SixCycle Credentials
.. adding the credentials details to preferences for
   the SixCycle web service.
2017-01-14 08:47:53 +00:00
Mark Liversedge
ac1ab42a70 Merge branch 'master' of ssh://github.com/GoldenCheetah/GoldenCheetah 2017-01-14 07:40:05 +00:00
Mark Liversedge
c2fb434e75 Another typo in JsonRideFile.y 2017-01-14 07:39:02 +00:00
Alejandro Martinez
547d5cc4ba Fix XDATA regression in JsonRideFile.y
.. missing += causes XDATA to be recorded incorrectly.
2017-01-13 21:26:08 -03:00
grauser
57f0fb8482 TodaysPlan : download files 2017-01-12 23:58:31 +01:00
grauser
686b26d87a Today's Plan : correct include dateTo 2017-01-12 23:58:31 +01:00
Mark Liversedge
ab3491abd3 Merge pull request #2295 from arunh/master
Set toolbar height dynamically for optimal height / screen usage
2017-01-12 21:51:59 +00:00
grauser
070c6f9a95 Correct zip/gz extension 2017-01-12 20:41:16 +01:00
grauser
98cfb2e95f GoogleDrive : Turn off debug traces 2017-01-12 20:41:16 +01:00
Mark Liversedge
1ab2395254 Chart Settings Geometry FUBAR
.. don't set impossible limits.
2017-01-12 16:53:18 +00:00
Mark Liversedge
5a9db2ebb8 Today's Plan URL configuration
.. so you can switch between whats.todaysplan and staging or
   any private tenant you might have.
2017-01-12 16:35:05 +00:00
grauser
a96b79f87c FileStore : Add distance and duration for distant files too
If we have metadata with file (now only Today's Plan)
2017-01-11 23:28:38 +01:00
grauser
bbba354f9c Today's Plan : use staging site in debug 2017-01-11 22:10:02 +01:00
grauser
b4bc42bc6a VideoWindow : Correct typo in comment
Thanks Claus
2017-01-11 22:02:38 +01:00
arunh
ef20eee33c #2292 - Toolbar height is optimised 2017-01-11 21:00:07 +00:00
grauser
61b45cf9d4 GoogleDrive : add comment 2017-01-11 21:59:27 +01:00
grauser
9a1248b26c TodaysPlan only for Qt>5 2017-01-11 21:54:37 +01:00
Jon Escombe
814d3f2c15 Train view UI nits
Prevent stray lap alerts at start of workout with no laps
defined, or at start of manual mode workout.

Ensure buttons reflect current state when opening train view, regression
from move to bottom bar (likely that slot not yet connected when signal
is emitted in TrainSidebar constructor).
2017-01-11 17:41:40 +00:00
grauser
1d78bab879 Correct comment typo
(thanks Claus)
2017-01-11 08:06:56 +01:00
grauser
160ec6909b DropBox : Add slash for reading dir 2017-01-10 23:32:41 +01:00
grauser
3a719f14de Add a Today's Plan sync dialog (1/2)
Upload OK but Download not working
2017-01-10 23:32:41 +01:00
Mark Liversedge
5b24c30dab User metrics "before" and "after" functions
.. to work with data before or after an interval the
   before and after functions have been added to the
   user metric program.

.. as an example, to calculate kj of work done
   before the interval:

   init { work <- 0 }
   before { work <- work + (POWER*RECINTSECS); }
   value { work/1000 }

.. you can do the same for work done after using
   the after function name instead of before.
2017-01-10 14:17:47 +00:00
Mark Liversedge
fc11193316 Merge pull request #2285 from dresco/trainview
Train view
2017-01-09 17:16:27 +00:00
Joern
098e0c3c0c Merge pull request #2288 from Joern-R/CDB2
CloudDB - deactivate Telemetry
2017-01-09 18:03:18 +01:00
Joern
d8dd9e7274 CloudDB - deactivate Telemetry
... temporarily de-activate Telemetry collection
2017-01-09 17:20:26 +01:00
Jon Escombe
850c865625 Lap alert fixes
Ensure QtMultiMedia support is built for Qt5 (wasn't on OSX)

Only enforce Qt 5.6 onwards on Linux, as official builds are
using 5.5, and this Qt volume bug only affects systems using
pulseaudio
2017-01-08 22:42:38 +00:00
Mark Liversedge
39ef343b6f Merge pull request #2286 from Joern-R/CDB1
CloudDB - new features
2017-01-08 18:43:27 +00:00
Joern
caf4a521c3 CloudDB - add Version/Update Information
... check for new Versions of GoldenCheetah
... skip checks (on user decision) for new versions already presented
2017-01-08 19:03:28 +01:00
Jon Escombe
8ac66b71bf Initial implementation of a new lap sound
This provides a fixed bell sound, played 3s before the
start of each new lap. This feature can be enabled under
the new training preferences dialog.

See the following bug report - quite exciting under Linux -
https://bugreports.qt.io/browse/QTBUG-40823

Due to this, is only currently enabled for QT versions 5.6.0
and above, could make this a platform specific check if felt this
is overly restrictive?
2017-01-08 16:44:31 +00:00
Jon Escombe
0a4614dac5 Move train view options to new preferences tab
Note that the auto-hide option is not yet in use (and is
therefore greyed out)
2017-01-08 16:43:52 +00:00
Mark Liversedge
98129640d4 Default to curated only on chartDB download 2017-01-08 14:24:49 +00:00
Mark Liversedge
417ff99b30 Scale R chart on resize
.. to fit in view.
2017-01-08 13:50:36 +00:00
Mark Liversedge
73cc509d40 R Chart GC.size() and Default Page Size
.. you can query the window size with GC.size(), it will return a vector
   if 2 integers for width and height.

.. the default page size is no longer 500x500 instead it defaults to the
   size of the chart

.. if you do choose a size it is scaled to the window size, but keeps
   the original aspect ratio -- so setting the chart size can be
   useful to ensure the chart has a particular aspect ratio.
2017-01-08 13:34:06 +00:00
Mark Liversedge
f3d68a5831 Fix Linux menu bar on mainwindow colors
.. they need to match appearance settings.
2017-01-07 11:47:05 +00:00
Mark Liversedge
50d269a0e3 MRC Files format fixup
.. MINUTES FTP or MINUTES PERCENT are allowed
2017-01-06 16:30:40 +00:00
Joern
5a18bbb501 CloudDB - Telemetry
... add user permission dialog
... add telemetry update call
2017-01-04 19:48:58 +01:00
Joern
fa4f6fe672 CloudDB - Download Counter Statistik
... count charts downloaded from CloudDB
2017-01-03 18:13:39 +01:00
Mark Liversedge
4e97e04011 Fix XDATA regression in JsonRideFile.y
.. missing += causes XDATA to be recorded incorrectly.
2017-01-03 15:08:04 +00:00
Mark Liversedge
88f6e89e15 Merge pull request #2273 from Joern-R/TCX_Fitlog
Fix Regression (3.4) in TCX and FITLOG Export
2017-01-02 18:32:12 +00:00
Mark Liversedge
e98b1666c5 R GC.season.metrics() returns special fields
.. like workout_code and sport, which were ommitted
   previously and are rather useful!
2017-01-02 11:38:37 +00:00
Joe Kearney
29c52ee976 add device regex for Kettler serial over bluetooth 2017-01-02 00:10:39 +01:00
Joe Kearney
1c79072bf2 Fix commands sent to Kettler serial devices
Get-status is `ST` not `st`, and get-id is `ID` not `cd`.
2017-01-01 21:29:32 +01:00
Joe Kearney
ded112b73c fix docs in serial device selection regex
The docs do not reflect the regex for some devices with a prefix of `cu.`. This commit changes the doc and not the regex
2017-01-01 21:29:17 +01:00
Joern
fa48ea7def Fix Regression (3.4) in TCX and FITLOG Export
... summary metrics where not exported into the XML files
2016-12-31 21:39:54 +01:00
grauser
db9e297d04 ShareDialog : ignore ignoreSslErrors
to ignore handshake errors
2016-12-31 17:07:53 +01:00
Mark Liversedge
b4f5a06e82 Add LMFit to About > Version Dialog 2016-12-31 15:39:31 +00:00
Mark Liversedge
66daf444ae Add LMFit optional dependency
.. will be used for banister modelling.

.. can be downloaded from http://apps.jcns.fz-juelich.de/src/lmfit/
2016-12-31 15:25:39 +00:00
Arto Jantunen
c18eb17b37 BT40: Zero readings provided by a sensor that disconnected 2016-12-31 16:57:34 +02:00
Arto Jantunen
b10f8d20bc BT40: Try to reconnect if the connection to a device was inadvertently lost
Also keep track of the connection state of the device so that reconnection
is not attempted when the disconnect was intentional.
2016-12-31 16:56:40 +02:00
grauser
cd1d30c8a5 Today's Plan : stop using staging 2016-12-31 14:22:01 +01:00
grauser
0302f7936a Today's Plan support GC json !
use GoldenCheetah json (instead of tcx)
2016-12-31 10:59:48 +01:00
grauser
1a41493fa3 Today's Plan display error message 2016-12-30 23:52:27 +01:00
grauser
6ec97605b8 Today's Plan filename with extension 2016-12-30 23:13:57 +01:00
grauser
8db9d78ad4 Compress files for Today's Plan 2016-12-30 23:08:19 +01:00
grauser
06d1de3eb1 Add Today's Plan client id 2016-12-30 11:51:05 +01:00
grauser
63f388b4e1 Today's Plan integration (first part : auth + upload) 2016-12-30 11:18:52 +01:00
Mark Liversedge
3d2bc56c98 Merge pull request #2269 from erikboto/monark-updates
Monark updates
2016-12-29 12:37:36 +00:00
Erik Botö
f0d6ec11ef Monark: Fix issue on windows computer 2016-12-29 12:17:42 +01:00
Erik Botö
ede7975537 Monark: Add support for Monark 839E 2016-12-29 12:17:25 +01:00
Mark Liversedge
62c34eb227 Fix FileSyncDialog SEGV on Synchronise
.. if the "Download" text is translated then the code that checks
   if we're uploading or downloading doesn't translate the text
   leading to it continually trying to upload if the language
   selected is not English.
2016-12-28 22:09:45 +00:00
Joern
3c5835f1bb Merge pull request #2266 from Joern-R/CloudDB-Cache
CloudDB - Chart Caching
2016-12-28 18:00:50 +01:00
Jon Escombe
f132aef851 Change variable name for clarity
And removes warning message from old GCC version
2016-12-28 16:39:13 +00:00
Joern
9f90bccc0e CloudDB - Chart Caching
... create Caching Root Directory if not yet existing
2016-12-28 17:11:32 +01:00
Mark Liversedge
a4df6d00c6 Merge pull request #2263 from dresco/ANT
ANT+ updates
2016-12-26 19:41:53 +00:00
Jon Escombe
1d3c7db4b2 Ensure FE-C device is visible in pairing dialog 2016-12-26 14:24:27 +00:00
Jon Escombe
bd85b88522 Less FE-C debug noise 2016-12-26 12:24:31 +00:00
Jon Escombe
8cde0a53c0 Blacklist S&C sensor if also Tacx FE-C device
Due to poor quality data from Tacx simulated S&C channels, we
ignore any Speed & Cadence data from the same device_id as a
Tacx FE-C device.

The speed and cadence data is also provided over the FE-C channel,
so not losing anything except bad data.

Note that it can take ~33s to receive a manufacturer id
message and take effect.
2016-12-26 11:15:12 +00:00
Jon Escombe
8ee6084dcb Monotonic timer for ANT sensors
Use a monotonic timer for ANT sensor calculations, instead
of the wall clock time.
2016-12-26 10:20:08 +00:00
Mark Liversedge
d3a2bd77af More SSL handshaking with GoogleDrive
.. when interacting with the service instead of just
   when getting authorisation to access.
2016-12-25 14:30:40 +00:00
Mark Liversedge
4adab3f9d9 Ignore SSL errors during reply processing
.. in OAuth dialog
2016-12-24 13:23:48 +00:00
Mark Liversedge
c46a13ed65 OAUTH ignore handshake "errors"
.. when authorising via SSL we may get handshake "errors" as
   the protocol is established, this seems to occur with
   openssl on Sierra and Mavericks.

.. since the request is completed then some form of protocol was
   established so we ignore it in this instance.

.. even if there is a problem its likely the tokens will be blank
   and that will trigger another error, so fairly safe to ignore
2016-12-24 10:40:24 +00:00
Mark Liversedge
27f77a1847 Google Drive Auth - more diags
.. auth sometimes fails, give better reasons
2016-12-24 10:06:29 +00:00
Alejandro Martinez
860b3482ed Minor translation related fix on LTMPlot
Affects non english users using charts with units in english
2016-12-23 16:47:41 -03:00
grauser
5692c33b2d Deprecate GoogleMap and BingMap
We use RideMapWindow for several months
2016-12-23 19:27:54 +01:00
Mark Liversedge
9b3805dc3c WebPage add http:// if no scheme present
.. so users can set a url to news.bbc.co.uk without having to type
   out http:// first.
2016-12-23 12:06:50 +00:00
Mark Liversedge
144f13b566 Web Page Experiments to Fixup
.. connect.garmin.com still hangs the browser window

.. filesystem api isn't supported by qwebengine so trainingpeaks
   downloads don't trigger

.. still work to do!
2016-12-22 10:50:19 +00:00
Mark Liversedge
af13abeae5 Browser Download WIP
.. struggling to get any of the fitness websites to behave.

.. no new functionality, just trying to fixup for garmin/trainingpeaks

.. both have issues.. garmin sets cpu to 100% and is unresponsive !
2016-12-21 20:27:14 +00:00
Mark Liversedge
5c7583927f Update Web Browser Chart
.. now has reveal controls to change url

.. can be added to trends, activities and train view

.. needs testing with webkit and updating to intercept
   downloads to try and import as ride files.
2016-12-21 13:39:54 +00:00
grauser
1a4b3f79f0 Remove onError 2016-12-20 18:53:57 +01:00
grauser
8987a3bf47 Correct copy-paste 2016-12-20 14:10:33 +01:00
grauser
b1e96fca1c Correct page for win build 2016-12-20 12:59:47 +01:00
grauser
5e21ddb6fc CPPlot : Add aPower/Kg serie
Add zone for aPower and aPowerKg series
2016-12-20 12:57:27 +01:00
grauser
b4c38130ec RideFileCache : Add aPower/kg 2016-12-20 12:57:01 +01:00
grauser
34a2a9bf17 Train view : add web page (not enabled) 2016-12-19 21:06:04 +01:00
Alejandro Martinez
e99312e18b Save Start Date when HR/Pace Zones are updated
Fixes #2260
2016-12-19 16:10:47 -03:00
Mark Liversedge
70d8356481 TAU override ignored for integral method
.. since it should always be computed from ride data.
2016-12-18 10:53:40 +00:00
Mark Liversedge
4d19c170d7 Training Planning Development Starts
.. added coaching notes

.. added new planning widget to trends view (for now)

.. no functionality, just kicking off the next 2 weeks of coding.
2016-12-17 13:40:35 +00:00
Mark Liversedge
00bafe59e7 User Flow Doc Update 2016-12-17 12:13:44 +00:00
Mark Liversedge
0461de27bc Today's Plan API documentation
.. for upload / download
2016-12-14 14:53:56 +00:00
grauser
3e268b3bca Correction : Efficiency Factor by XPace if no Power 2016-12-11 19:08:19 +01:00
Mark Liversedge
ae88792ef4 Merge pull request #2244 from amtriathlon/master
Delayed preset charts loading to wait for custom metrics initialization
2016-12-11 10:06:20 +00:00
Alejandro Martinez
f4af9c2004 Delayed preset charts loading to wait for custom metrics initialization
Fixes #2230
2016-12-10 21:39:25 -03:00
Joern
b59d5d7567 Merge pull request #2243 from Joern-R/CDB-BlockCharts
CloudDB Upload/Download improvements
2016-12-10 13:42:08 +01:00
Joern
e1940607ba CloudDB Upload/Download improvements
... do not allow Upload of charts containing User Metrics (as they will not work for other users)
... do not allow Upload of trivial charts (without configuration) - as they do not provide any value for others
... when downloading "R" charts - check if R is active - if not, inform the user that he/she needs R for the chart to work
2016-12-10 13:09:58 +01:00
Mark Liversedge
aa2d973fec Small compile nit fix
.. implicit conversion fixed to explicit and get rid of gcc
   compiler warning
2016-12-09 14:16:17 +00:00
grauser
9e16fe04b3 CSV : No value for temperature is not 0° 2016-12-08 23:02:28 +01:00
grauser
c7c2237459 Train : Record load in XData TRAIN 2016-12-08 22:56:05 +01:00
Mark Liversedge
cc9c089e8f User Personas Document - Athlete
.. as a result of the user survey.
2016-12-08 13:15:42 +00:00
Mark Liversedge
15d2e1341a Merge pull request #2241 from bgrabow/issue#2192-Prevent-crash-when-combining-activities
Issue#2192 prevent crash when combining activities
2016-12-08 07:22:52 +00:00
Ben Grabow
d62612dbef Remove unused header reference. 2016-12-07 18:00:14 -06:00
Ben Grabow
c7b0a48550 Fix crash when merging activities.
We now place a reasonable upper limit on the number of ticks shown
on an AllPlot chart to prevent unbounded memory allocation and
crash when one of the activities to be merged has a wide data range
due to large anomalous data points.
2016-12-07 17:50:55 -06:00
Mark Liversedge
ea56ac96c3 Update User Flow UX4
.. two key personas coach/athlete now have their own dashboard

.. coaches can jump to athletes dashboard, but not vice versa
2016-12-07 19:26:31 +00:00
Mark Liversedge
5769f4b0ff R GC.season.MeanMax includes Dates
.. so you can cross reference the MMP data to other metrics
   by match/merge on date.
2016-12-07 01:01:14 +00:00
Mark Liversedge
dbedd2979f Updates to User Flow
.. flows between overviews and train view charts.
2016-12-06 16:44:59 +00:00
Alejandro Martinez
2e005a61ac Changed Delete/Edit/Rename on sidebar interval context menu
To have the same behavior as the hamburger menu
Fixes #2233
2016-12-06 13:41:56 -03:00
Mark Liversedge
61c6249884 Merge pull request #2236 from kootox/master
Fix typo
2016-12-06 13:28:07 +00:00
Jean Couteau
5b94ac659c Fix typo 2016-12-06 14:09:23 +01:00
Mark Liversedge
73fedf4374 Edraw Navigation Flow for UX4
.. first draft as a edraw diagram.
2016-12-06 12:46:48 +00:00
Mark Liversedge
46db89cba2 Update UX4 design doc
.. add training planning chart view

.. but not showing phases settings, workout selection or calendar view.
2016-12-05 16:57:23 +00:00
Alejandro Martinez
b91503e55f Udated Spanish Translation
Last updates plus some fixes
2016-12-05 10:31:07 -03:00
Mark Liversedge
6245f3752a Update UX4 design doc
.. now have chart and chart settings concepts.
2016-12-03 13:12:47 +00:00
Mark Liversedge
4858627403 Update UX4 Design Doc
.. to put into separate pages
2016-12-02 15:57:13 +00:00
Mark Liversedge
caf90020ca Axure Design Concepts for V4
Navigation concepts, still work to be done on aesthetics and completeness, but a start for discussion.
2016-12-02 14:47:25 +00:00
Alejandro Martinez
d3c5ffc9db Updated Swedish Translation
Contributed by Henrik Johansson
2016-11-30 18:16:51 -03:00
Mark Liversedge
e0741d18f3 Merge pull request #2221 from bgrabow/issue#2175
Preserve timing values on qwkcode -> ERG -> qwkcode round trip translation.
2016-11-29 11:20:48 +00:00
bgrabow
5fa68063b4 Fix display of fractional seconds in block hover cursor.
There are two paths to displaying the power/time overlay on a workout block:
* Hover over the block
* Select the qwkcode line corresponding to the block

Both of these paths had their own uniquely flawed method of calculating the block duration to display. The first path stored the previous time point as a truncated integer number of seconds, then subtracted it from the current, double precision time point. This resulted in occasional over-reported durations. The second path took the double precision difference between the current and previous time points, then truncated that difference for display. This resulted in occasional under-reported durations.

Both of these paths now consistently report the same value. The value shown will take the format ss.s for times less than 60s, or hh:mm:ss for times 60s or more.
2016-11-29 03:48:35 -06:00
bgrabow
f7f1b600f3 Fix creation of qwkcode from fractional seconds.
Qwkcode is limited to integer values of seconds. When a workout is specified in qwkcode then saved to an ERG file, the interval durations are rounded from integer seconds to fractional minutes with 2 decimal places of precision. When the ERG file is read, it is translated to a WWPoint object that stores time as double seconds. To accurately calculate the duration of a time interval defined by two WWPoints we should round the individual points first then take the integer difference. The table below demonstrates the consistency of rounding on both ends of the qwkcode -> ERG -> qwkcode round trip.

| qwkcode (original) | ERG time (rounded from qwkcode) | WWPoint time (precisely calculated from ERG time) | qwkcode (rounded from WWPoint) |
|--------------------|---------------------------------|---------------------------------------------------|--------------------------------|
|                  1 |                            0.02 |                                               1.2 |                              1 |
|                  2 |                            0.03 |                                               1.8 |                              2 |
|                  3 |                            0.05 |                                                 3 |                              3 |

(3 seconds is the smallest unit that fits evenly into a base ten fractional minute, so this pattern will repeat without loss of precision.)
2016-11-29 03:34:00 -06:00
Mark Liversedge
a74c2f9c38 Deprecate TrainingPeaks
.. from December 7th 2016 read access (for downloading
   from TrainingPeaks) has been revoked, even for paid
   up members.

.. write access (upload) is not revoked.

.. This is essentially anti-competitive behaviour and
   returns TrainingPeaks and their products, once again
   to that of a 'closed' product.

.. We will no longer support their service since we
   cannot and will not promote such behaviours now
   or ever.

.. We are now considering the best way to purge all
   other references to their trademarks and remove
   any indication that their products are endorsed.
2016-11-27 12:10:57 +00:00
Mark Liversedge
fb14bce879 Deprecate Mac Native Buttons
.. they were removed from code recently but still
   lingered harmlessly in the codebase.

.. now moving into the deprecated folder to stop
   them from being used again in the future.
2016-11-27 11:02:57 +00:00
grauser
450fa8dd6a Fit: Add Wahoo ELEMNT in Device Name
fix #2064
fix #2202
2016-11-26 23:33:43 +01:00
grauser
34df3c3e43 Aerolab: Save parameters in MetaData
fix #2177
2016-11-26 23:30:49 +01:00
Alejandro Martinez
4381a6e5fc Merge pull request #2217 from amtriathlon/master
Fixed metric formatting in Compare Pane
2016-11-26 12:51:32 -03:00
Alejandro Martinez
4b88b61098 Fixed metric formatting in Compare Pane
Fixes #2188
2016-11-26 10:54:41 -03:00
Mark Liversedge
0db7b78052 MainWindow showhideToolbar always on Mac now
.. #ifdef should have been removed when the Mac specific
   UI elements in MainWindow were removed.
2016-11-26 12:53:41 +00:00
Alejandro Martinez
d6a248bb82 Merge pull request #2212 from amtriathlon/Swedish
Added Swedish translation
2016-11-25 12:21:12 -03:00
Alejandro Martinez
a4ea714ef9 Added Swedish translation
Initial translation contributed by Henrik Johansson,
recognition added to contributors list.
Fixes #2201
2016-11-25 11:41:10 -03:00
Alejandro Martinez
ef4b8d55d3 Merge pull request #2206 from amtriathlon/SMLswimXdata
Added swim XData for SML lap swimming files
2016-11-25 10:21:35 -03:00
Alejandro Martinez
f5386d0b16 Added swim XData for SML lap swimming files
One record per length with the same conventions
used for FIT files
2016-11-24 20:07:01 -03:00
Damien Grauser
38adf9b24f Merge pull request #2205 from hunnymonster/patch-2
Cosmetic - adding/maintaining consistency
2016-11-24 21:18:21 +01:00
hunnymonster
f9fa21035d Cosmetic - adding/maintaining consistency
adding space to Fenix 2 & Fenix 3 devices (all other devices are name-space-model)
2016-11-24 17:12:28 +00:00
Alejandro Martinez
d8350b5545 Merge pull request #2203 from amtriathlon/master
Fixed SML lap swimming files import when using drill mode
2016-11-24 12:10:38 -03:00
Alejandro Martinez
7e10f64368 Fixed SML lap swimming files import when using drill mode
Fixes #2198
2016-11-24 11:17:39 -03:00
grauser
68fbb634d0 Fit : Add some Garmin products
fix #2196
2016-11-23 22:28:48 +01:00
Damien Grauser
91aaf95e47 Merge pull request #2196 from hunnymonster/patch-1
Update FitRideFile.cpp
2016-11-23 22:27:26 +01:00
Alejandro Martinez
3ac770a3fb Merge pull request #2194 from UgoBor/master
Edit Italian Translation
2016-11-23 10:57:34 -03:00
Mark Liversedge
aed160decc CI Deprecate support for QT4 on Mac
.. we no longer build with QT4, so deprecate it in Travis

.. there are still some users that build with QT4 on Linux/OpenBSD
   but we no longer seek to support this configuration officially
2016-11-22 03:11:03 +00:00
grauser
ffff355416 DataFilter : Match exact name for XDATA series 2016-11-21 21:14:22 +01:00
hunnymonster
68e60d8701 Update FitRideFile.cpp
Adding support for Garmin Edge 820 (unit type 2530)
2016-11-21 16:02:00 +00:00
UgoBor
2ba2f5bef1 Edit Italian Translation 2016-11-20 18:28:55 +01:00
Mark Liversedge
ee426ce9c7 Undo accidental edit in src.pro
.. that removed VideoWindow for non-Mac.
2016-11-20 16:39:20 +00:00
Mark Liversedge
c0b6e37366 VERSION 3.4 SIERRA BUILD
.. fixup build id and version strings for Sierra build.
2016-11-20 16:12:32 +00:00
Mark Liversedge
ea548944bf Splash screen size
.. on hdpi the fonts get squished by spacing
2016-11-20 15:50:08 +00:00
Mark Liversedge
6271d51257 Fixup to enable build on QT 5.8 and Xcode 8.1
.. remove all custom widgets and prepare for next commit that
   replaces use of QTKit with AV Foundation on MacOS
2016-11-20 14:52:34 +00:00
grauser
6919b7fd13 FIT: improvement when we have values for same native type 2016-11-18 19:11:53 +01:00
Mark Liversedge
3fd4be33a4 VERSION 3.4
.. update the release versioning for release.
2016-11-18 09:20:52 +00:00
Mark Liversedge
4fe26a2a83 Fix SML rounding of speed
.. fixes #2184
2016-11-18 09:17:22 +00:00
Stefan Schake
f15e3c7e59 Don't assume a perfect 1 second between every telemetry sample
Instead record the actual recording time and use that to draw individual samples
2016-11-17 01:56:37 +01:00
Mark Liversedge
5109e6c88f Disable R OpenGL rendering on Linux
.. it breaks on hi dpi screens
2016-11-16 15:59:11 +00:00
grauser
c49bfce684 FIT : Initialise native and scale value for CIQ field 2016-11-15 23:19:25 +01:00
Mark Liversedge
dfc177b6a3 Snippet Interval Metric Names
.. as long name not symbol name.
2016-11-14 17:18:52 +00:00
Joern
ad02b6058f Merge pull request #2186 from Joern-R/DE
Update Translation DE
2016-11-14 13:26:34 +01:00
Joern
f1ab209db1 Update Translation DE 2016-11-14 13:25:42 +01:00
Mark Liversedge
1f796d8349 Snippets output intervals
.. not sure how useful that is, but now includes the metrics
   for any intervals in the ride.
2016-11-14 10:15:58 +00:00
grauser
2c8dc17d6e FIT : Compatibility with first Moxy CIQ fields 2016-11-13 23:21:43 +01:00
Mark Liversedge
6d7242e02f Flyer for V3.4
.. just a one page overview of whats new in 3.4
   to use in the what's new tutorial.
2016-11-13 11:51:59 +00:00
Joern
fb79ee91b1 Merge pull request #2182 from Joern-R/diagram-scaling
Fix Y-Scaling for dataseries with 2 graphs
2016-11-13 10:24:56 +01:00
Mark Liversedge
a38696e25d Data Processor 'On Save' and Snippets
.. a data processor can now be configured to run on save

.. in addition, the data processor is now passed the operation
   that is triggering it: "Manual", "ADD", "UPDATE", "DELETE",
   "IMPORT".

.. a new data processor has been added to write a JSON file to
   the snippet directory (added to the athlete structure).

.. this is so we can output a snippet every time an activity is
   added, updated or deleted (i.e. runs "on save").

.. these JSON snippets can be used to update external datastores
   where coaches use other analytic software but don't want to
   manually sync GC changes with there external stores.
2016-11-12 22:36:44 +00:00
Joern
00636edf77 Fix Y-Scaling for dataseries with 2 graphs
- Pedal Center Offset
- Power Phase
2016-11-12 11:06:17 +01:00
Mark Liversedge
6965d88cf1 Fix UserMetric calculation error
.. add a reference count for clones and originals, noting
   that for user metrics the factory gets a clone and the
   original is always deleted at startup.

.. additionally when the clone in the factory is deleted
   on metric changes we finally delete the program that
   was created initially.

.. note there is also a fix to let the configuration
   settings spot when aggregate zero and istime change
   in options as these were not spotted before.
2016-11-11 19:45:24 +00:00
Alejandro Martinez
2fb8124e00 Merge pull request #2179 from amtriathlon/MetricOverrides
Do not override metrics for intervals
2016-11-10 16:08:27 +02:00
Alejandro Martinez
ab215a9196 Revert "Don't override Duration and Distance for Manual Workouts with laps"
This reverts commit f78d37a525, which was
a temporary fix to avoid issue #2078
2016-11-10 09:43:52 -03:00
Alejandro Martinez
a0196713ee Do not override metrics for intervals
Fixes #2078
2016-11-10 09:39:20 -03:00
Mark Liversedge
66744907f3 Version 3.4 RC2
.. update versioning
2016-11-05 11:19:40 +00:00
grauser
b0242c6dab LTM: Correction for table without highlight
Thank you Ale
2016-11-04 22:18:30 +01:00
grauser
1a108a49b1 LTM : Highlight higher or lower values in table view
fix #2168
2016-11-04 00:09:24 +01:00
Alejandro Martinez
d32a6f082f Merge pull request #2171 from amtriathlon/master
Fixed RideSummary refresh when selected ride changes while not visible
2016-11-01 22:20:08 +02:00
Alejandro Martinez
d02cc5efbd Fixed RideSummary refresh when selected ride changes while not visible
Fixes #2170
2016-11-01 15:38:47 -03:00
grauser
bf93faab90 FIT : Changes in CIQ reading 2016-10-31 23:13:33 +01:00
grauser
75c17b9669 Small correction 2016-10-31 23:08:37 +01:00
grauser
6a095bffc8 Translation 2016-10-31 23:08:37 +01:00
Alejandro Martinez
49d9240866 Merge pull request #2157 from amtriathlon/master
Set Sport to Bike and process defaults on Download
2016-10-31 19:32:50 +02:00
Mark Liversedge
9d9b8362f6 Merge pull request #2162 from lumanz/master
Chinese Translation Update
2016-10-30 22:52:24 +00:00
lumanz
80b5bcbd54 Chinese Translation Update 2016-10-30 23:17:45 +08:00
Mark Liversedge
092c7c8f8c Fix infinite loop hang in DanielsPoints
.. the attenuation loop would run forever if values computed were
   infinite or not a number.
2016-10-30 11:03:45 +00:00
Mark Liversedge
a45a840e3f Merge pull request #2159 from bstegmaier/bugfix/2158_wheel_perimeter
Fix bug in wheel perimeter calculation
2016-10-28 10:43:34 +01:00
Benedikt Stegmaier
4e630d86bf Fix bug in wheel perimeter calculation
fixes #2158

Issue:
The contents of the combo box, the array holding the raw mm values and
the index range checks were out of sync.
This led to wrong or no values at all during the wheel perimeter
calculation.

Changes:
* Add missing rim diameter 584mm
* Adjust rouding error in tire casing diameter
* Make index range checks more robust by using the actual array size
  instead of just assuming a length
* Display ISO5775/ETRTO mm values in combo box
2016-10-28 11:06:46 +02:00
Alejandro Martinez
0606bcac19 Set Sport to Bike and process defaults on Download
When the device is isBikeOnly, default to true for all currently
supported devices, except Moxy.
Fixes #2156
2016-10-27 13:43:59 -03:00
Alejandro Martinez
d55701143e Merge pull request #2155 from amtriathlon/master
Process linked defaults on Manual Entry
2016-10-27 17:42:25 +02:00
Alejandro Martinez
3e3a4d0693 Process linked defaults on Manual Entry
Fixes #2154
2016-10-27 10:18:29 -03:00
Antonius Riha
993a7312ea Close log file descriptor after duplicating it 2016-10-26 20:00:40 +02:00
Mark Liversedge
442f21ef46 Merge pull request #2153 from amtriathlon/master
Added Simple Average trend type to Metrics Trends charts
2016-10-26 14:54:59 +01:00
Mark Liversedge
d3d3a9da48 Merge pull request #2151 from antoniusriha/fix_seg_fault_after_close
Fix seg fault that occurs after closing app
2016-10-26 14:52:30 +01:00
Mark Liversedge
7d76b34923 Merge pull request #2150 from antoniusriha/fix_leak_in_refreshCustomTable
Fix a leak in refreshCustomTable
2016-10-26 14:51:52 +01:00
Alejandro Martinez
f33cf61ca3 Added Simple Average trend type to Metrics Trends charts
Combined with the Group By feature, it allows a simple way
to see weekly, monthly and yearly averages for cumulative
metrics s.t. Duration, Distance, TSS, etc.
2016-10-26 10:01:07 -03:00
Antonius Riha
5e26607b7c Free application object before returning from main 2016-10-25 18:48:43 +02:00
Antonius Riha
230b694945 Fix a leak in refreshCustomTable 2016-10-25 16:50:05 +02:00
Mark Liversedge
7c78c928a8 Reduce compiler warnings from gcc5
.. lots of warnings about unused global variables that
   are being used to call functions before main

.. a few other smaller nits that could be fixed easily

.. now get fewer warnings and more meaningful to then
   review and resolve them
2016-10-23 11:19:56 +01:00
Alejandro Martinez
304a961cb2 Merge pull request #2142 from amtriathlon/BestTime
Changed BestTime metrics units to minutes for better charting
2016-10-20 10:03:22 -03:00
grauser
ea50e015bd Fit : Small correction for native fields 2016-10-19 23:20:00 +02:00
Alejandro Martinez
b7ced302ad Changed BestTime metrics units to minutes for better charting
It is a more natural unit is most cases and allows enhanced
plotting in LTM charts since seconds are converted to hours.
Labels and ToolTip are shown in sexagesimal format.
2016-10-19 15:28:08 -03:00
grauser
e3f1bad775 XData : Add copy/paste 2016-10-19 17:46:21 +02:00
Mark Liversedge
e735d5fa8d Merge pull request #2117 from Joern-R/Sorting
Improve sorting in ride navigator
2016-10-19 14:29:25 +01:00
Mark Liversedge
1e2d31a2c6 Fix SEGV on delete season phase
.. the code was never written, so the season code just
   crashes using an index of -1 into the season array

.. updated LTMSidebar.cpp to catch delete phase and handle
   it appropriately, but the real fix should be to abstract
   the code added into the Season/Phase classes.

Fixes #2139.
2016-10-17 12:12:40 +01:00
Alejandro Martinez
d9cddc8027 Merge pull request #2138 from amtriathlon/CalendarPopup
Added Calendar Popup to QDateEdit fields with default format
2016-10-16 13:17:52 -03:00
Mark Liversedge
afbd85f5ef Revert "Fix ComparePane Memory Leak"
This reverts commit f6c218873c.

Since it has a major regression.

Fixes #2112
2016-10-16 12:23:17 +01:00
Alejandro Martinez
c3e014f864 Added Calendar Popup to QDateEdit fields with default format
To enhance usability, specially when the locale uses 2 digits years.
Fixes #2123
In some places s.t. TPDowloadDialog and FileStore it was already set.
Not added to RideMetadata and RideImportWizard where 4 digits year is fixed.
2016-10-15 09:08:41 -03:00
Joern
e777305cb1 Fix QT4 build errors ...
... for sorting improvement
2016-10-02 19:50:39 +02:00
Joern
4138621512 Improve sorting in
... compare pane for time/duration fields
... ride navigator for numeric fields e.g. average speed (which were sorted as string before)
2016-10-02 17:57:45 +02:00
756 changed files with 784472 additions and 107745 deletions

5
.gitattributes vendored Normal file
View File

@@ -0,0 +1,5 @@
# Added this line to .gitattributes
*.pbxproj -crlf -diff -merge
src/translations/* linguist-documentation
src/Resources/translations/* linguist-documentation
test/* linguist-vendored

4
.gitignore vendored
View File

@@ -13,6 +13,7 @@ Makefile
*.prl
*.swp
*.user
*.AppImage
# osx noise
.DS_Store
@@ -49,3 +50,6 @@ qwt/src/Makefile.Debug
qwt/textengines/mathml/debug/
qwt/textengines/mathml/release/
build.pro.user
build.pro.user.*
doc/contrib/WASP Packet Protocol.pdf

View File

@@ -1,124 +1,60 @@
branches:
- master
language:
- objective-c
compiler:
- clang
- gcc
only:
- master
- /^[vV]\d+\.\d+(\.\d+)?(-\S*)?$/
os:
- osx
- linux
dist: xenial
language: c++
env:
matrix:
- BRANCH=master QT=qt4 QT_PATH=qt
- BRANCH=master QT=qt5 QT_PATH=qt5 QT_VER=5.5.1
global:
- BRANCH=master
- secure: iqYW7f3//ZkMVzeCEarYn0S0DqKjFU9juBh0KF6WTlUsKX902Jtsk7dFoJlNDYBf63HLgV+wW2Hc6MxI9sGiUkom0gY9/To/aeGIJFGEX2sLm/e0Ok3qN521FA0Q/OiCFsD0RC6J+yrHxzI+rf8Z1rujceUsz2KgsrfAjYYv+BY=
- secure: C6f58PXwvvHeVOjCLbyDRjgyF0tk+bXjCNUDur8VJLhJEGNdnrt+rH+d3azYaX0n348ZnQZ14as4M4rHjN1A/3DRbdUdOS7PQZrkj/n363ck1tvYOG/tzYqkEcVoQyjIJ7ZoTuBXDQry/VJmLxQjM0glTa2upNFHMOMwqZNkF+I=
- secure: mgf181ok4rJTHxAdSaeIb/OzUx7PQc6UjJYfhJQcZDjN1Nou+Um6OHpnooMHeEq0CdGuLSiv2xVmuQnRjI5MfG5re/a3l39hSzi9tPLWi1y7uOLCtQFooJw3H+LhiKZcgAtEnkTmEhUCEu5uZ7cp4lWhrQZWCR5mCDNtJrGHjiw=
- secure: UkW6SpgeACb6enGZADTAtPPRe23Tffne/SRQoBsZ3kGbKzgv8kTCLY0G5N71B1xEGdLB/36piOa0yji2SMW1jbflxR7tdOsiNpfd9R5qYqWVZRulY0qite8ZCwU5dqgy87pp4ECC1hNSOTq17aa4Sc4G4egg9AOy8cntLBTtxJA=
- secure: rb/MKPHEK8yOK5uYpXq2o+MQ7h65ft+c/xE9XmLFk1jLnK0oxe6+KeoSFlQ0n5UwLSsHrytMXVaUHex6EEt0TheXFlohi7BcNFWRWXr+wLucuaPjMnU49VErrSigjJ5VW/rcR7fORmnDwn5y06r3Rer9SC1hImCxf/pqF8hFZps=
- secure: FXJzm98lwbc1R2eh9/CvVReVRHEPLDm+sCRjiV9HJgeCveIUauLasp9Skamz0c6OKLmkjLY8JERPT491ZgCG8YcQ9x1bM8HGbmRqnn9xSUxINIRzVmyTiLMBoT/ibHHeFjFpyiGfukOAkHwMNNsrSrbaekhiJuekaXo7iTwYQB0=
- secure: K9+6ufffQ2a6dCTwVSI5ZtrGE+JSsj2ZeQwJ8Xk/y1yhSlbnW6Uptfs5oZ4XJ/BAQbuKbctnczP/jwDtGBG/Y0WOxn8m1DYBrkeLeToc0JZ8dn2lF6H6BEcB3VI3iPUtxAXWHNeSCk2qaC83z80Ydjc5GCxoAOwlw5/BEsRYI/s=
- secure: n6khzr3bPnvh2lTE1NmcaPWRWkqLBUcXZL20EO0Q0HyhH2O22fwsKfnODCDtP1UEQxW+E0G3DkedSz/RmpMWbv1KpWKNNKl74wIdUE53nRIBLTULRoypCq1tDZzQqkoogbXu3pWrb23YoUuM2p5zxM9l3TiNbcrdZeQ+PInVL6o=
- secure: mJEJUwt1jhx5qx5h5C8gnYJyaUb5fItSJGU/Tgp0IMCPCUSXtjHf9QTKITAKvg/hY8zggSwo+Vg2VzdMypdxDKqAeH/xAjq/o1+4linWphSjWpUGTqF/B8sR37WtduXtetamX+ctsbG4I77Xw+7y8OPPoCPxDct9hWxfCw6eBrI=
- secure: BX7lVlMs6c6qOCMc7Eu0s3G7/es+3h/EGElS/4wjw4/nxp91bd0RbkOmGmgEKOFw5XRFl8gV0kEzmFhrJTdGfTnWHmdsGjSo2VzwePgW/PbDdQrTVD2rYBmmPoeTXf3S3v0P7d3pBrpuxAqkmj7bFkpnvviCN9erC4bUhSg6jEI=
- secure: AC6pelym0R1Pq6GgcAy7E/BmlNWrni+41P8V8PMtjBKEtiyJ3tQa+KCn5g0UfGzktRHk+0l+szz3Wdy+bzl+ifiJVhXXs95B9F9El03p33UQLFPi+wFlivddP5DLc+4vIsDUiaNX97p89vo1/R96OLjpF1mUzfOMKYmAiMGP/Co=
- secure: QXyyyutxesRVae/WFi75dxlNw2qTyWc6WQ3vmRER9BFhlrNtt8lmE+M6ghMDOhxigzSXWxHcG9r66BLOw4DML7AXg4f3NIAIYuYQrpfsWQ1TKGC/vVvIPDlNBKL62zSOoNowjup1HfZpB575wl4JkmHjoMPDfQ4yM/JVR+MKmIM=
- secure: lefpL3SB8yN0Vn1R2e0hAFpJgFnu4rJ/vn7DucSKQvJ61K7t3LrUHFXElDQGFZMbytx4OJDeYsJtrccrIHjcsSAEIyW8TTcwn5/JopnyeQ3ukV5AYpEoQusym09XKru9E7awqvnZrXz6mdoIum5JP7+H116mPN4vsvz5nkNWxeg=
- secure: RAGPq/thN9x6STNueDbeJWGUN75OLNcUVUkLHI/eZwPrkMaiQPfxIaJ+8eO2PszDcBojw3eYVhzbRvLnLiXmHL3buwD6oXMTyYnxGzCZ61DeDQ2cQa8ynKmRim5JL3viKMqtdyasXVoGf/u0GqMsgaLcqN6e/vXuXMGu6kkUPEQ=
- secure: Lydms45scczE9gZvkWze2fXVbEInKW48DOCIRJWziEzxKkvXUE7WPy74fLvfvL+0JW0LH/ZLZ9EbgHcJAYYs8CBrfAeOOtnyo2DZ0ouEO13RmomSZneEKSpJxRtErcPIu+B0LzcEGyAgf7bxPVevEte50CK0pZJ7z7bHMhU23pY=
- secure: cc0pAJjkmFNw2bO3zVACmtyHTwINAHALrtUxi+nRD+FhOO9KxuxuuwvcKCZKfp9EUOjz5PrYWKV1ZH/zt/jMix8A4Gyue2mWX8WYih7aTmJBcJWsFNTCybnClreKBCh18kHdWWhkmhk8EMINDvlqxzJZGpcNO04gxhL9wuLLrNQ=
- secure: em0xXIm69rMHsHXYQiizeJB7dEFBkX33PsWDHwBNrX6lFBued23eL96KJC4RVbk6A+AHFtXFATrreZ14D5JH/E/37CXhe3X2R93WqiPUSH0s7NI4fFA1BroKUNAlqO4bMqDBidtNmwMPaLTXjaOnOZyvbAG7z+QV3TKC8tOeZDU=
- secure: VFaSERlgsjzjiDQhKw8XFvQrjdvFzHHL7V3NQg+RfELHoT6I1pAGFdl/+lRBIVOiVkbQ6XnpBA28nlf0QydPHElRZdqmh0azQV/bkUXD4ffPE8q0iSqeqhAZ+5L05K5K+Gby/y8TZE4FX6e/7trFL7oq+h9x0gq5RQO8rAcTV84=
matrix:
include:
- os: osx
osx_image: xcode10.1
compiler: clang
- os: linux
compiler: gcc
before_install:
## try early just to check, can delete later
- date
- brew update
- sh travis/install-qt.sh
##- brew install $QT
- brew install libical
- brew install libusb libusb-compat
- brew install srmio
- brew install libsamplerate
- brew tap homebrew/science
- brew install r
## Disable KML for now
##- brew install --HEAD travis/libkml.rb
- sudo chmod -R +w /usr/local
- curl -O http://www.ftdichip.com/Drivers/D2XX/MacOSX/D2XX1.2.2.dmg
- git clone --depth 1 https://github.com/sintegrial/qwtplot3d.git qwtplot3d
- cd qwtplot3d
- CC=clang CXX=clang++ /usr/local/opt/$QT_PATH/bin/qmake -makefile -recursive QMAKE_CXXFLAGS_WARN_ON+="-Wno-unused-private-field -Wno-c++11-narrowing"
- CC=clang CXX=clang++ make -j2
- cd ..
- git clone --branch 0.98 https://github.com/kypeli/kQOAuth.git kQOAuth-0.98
- cd kQOAuth-0.98
- CC=clang CXX=clang++ /usr/local/opt/$QT_PATH/bin/qmake -makefile -recursive QMAKE_CXXFLAGS_WARN_ON+="-Wno-unused-private-field -Wno-c++11-narrowing"
- CC=clang CXX=clang++ make -j2 qmake_all
- CC=clang CXX=clang++ sudo make install
- cd ..
- hdiutil mount D2XX1.2.2.dmg
- travis/$TRAVIS_OS_NAME/before_install.sh
before_script:
- mkdir D2XX
- cp /Volumes/release/D2XX/Object/10.5-10.7/x86_64/libftd2xx.1.2.2.dylib D2XX
- sudo cp /Volumes/release/D2XX/Object/10.5-10.7/x86_64/libftd2xx.1.2.2.dylib /usr/local/lib
- cp /Volumes/release/D2XX/bin/*.h D2XX
- sed -i "" "s|libftd2xx.dylib|@executable_path/../Frameworks/libftd2xx.1.2.2.dylib|"
src/FileIO/D2XX.cpp
- cp qwt/qwtconfig.pri.in qwt/qwtconfig.pri
- cp src/gcconfig.pri.in src/gcconfig.pri
- /usr/local/opt/$QT_PATH/bin/lupdate src/src.pro
- sed -i "" "s|#\(CONFIG += release.*\)|\1 static |" src/gcconfig.pri
- sed -i "" "s|#\(QMAKE_LRELEASE\).*|\1 += /usr/local/opt/$QT_PATH/bin/lrelease|"
src/gcconfig.pri
- sed -i "" "s|#\(QMAKE_CXXFLAGS\).*|\1_RELEASE += -mmacosx-version-min=10.7 -arch
x86_64|" src/gcconfig.pri
- sed -i "" "s|^#CloudDB|CloudDB|" src/gcconfig.pri
- sed -i "" "s|^#LIBZ|LIBZ|" src/gcconfig.pri
- sed -i "" "s|#\(SRMIO_INSTALL =.*\)|\1 /usr/local|" src/gcconfig.pri
- sed -i "" "s|#\(D2XX_INCLUDE =.*\)|\1 ../D2XX|" src/gcconfig.pri
- sed -i "" "s|#\(D2XX_LIBS =.*\)|\1 -L../D2XX -lftd2xx.1.2.2|" src/gcconfig.pri
- sed -i "" "s|#\(KQOAUTH_INSTALL =.*\)|\1 /usr/local|" src/gcconfig.pri
- sed -i "" "s|#\(KQOAUTH_INCLUDE =.*\)|\1 \$\$[QT_INSTALL_LIBS]/kqoauth.framework/Headers|"
src/gcconfig.pri
- sed -i "" "s|#\(KQOAUTH_LIBS =.*\)|\1 -F\$\$[QT_INSTALL_LIBS] -framework kqoauth|"
src/gcconfig.pri
- sed -i "" "s|#\(QWT3D_INSTALL =.*\)|\1 ../qwtplot3d|" src/gcconfig.pri
## Disable KML for now
##- sed -i "" "s|#\(KML_INSTALL =\).*|\1 /usr/local|" src/gcconfig.pri
##- sed -i "" "s|#\(KML_LIBS =.*\)|\1 -L/usr/local/lib -lkmlxsd -lkmlregionator -lkmldom
## -lkmlconvenience -lkmlengine -lkmlbase|" src/gcconfig.pri
- sed -i "" "s|#\(ICAL_INSTALL =.*\)|\1 /usr/local|" src/gcconfig.pri
- sed -i "" "s|#\(ICAL_LIBS =.*\)|\1 -L/usr/local/lib -lical|" src/gcconfig.pri
- sed -i "" "s|#\(LIBUSB_INSTALL =\).*|\1 /usr/local|" src/gcconfig.pri
- sed -i "" "s|#\(LIBUSB_LIBS =.*\)|\1 -L/usr/local/lib -lusb -lusb-1.0|" src/gcconfig.pri
- sed -i "" "s|#\(SAMPLERATE_INSTALL =\).*|\1 /usr/local|" src/gcconfig.pri
- sed -i "" "s|#\(SAMPLERATE_LIBS =\).*|\1 -L/usr/local/lib -lsamplerate|" src/gcconfig.pri
- sed -i "" "s|#\(DEFINES += GC_HAVE_LION*\)|\1|" src/gcconfig.pri
- sed -i "" "s|#\(HTPATH = ../httpserver.*\)|\1 |" src/gcconfig.pri
- sed -i "" "s|#\(DEFINES += GC_WANT_ROBOT.*\)|\1 |" src/gcconfig.pri
- sed -i "" "s|\(DEFINES += GC_VIDEO_NONE.*\)|#\1 |" src/gcconfig.pri
- sed -i "" "s|#\(DEFINES += GC_VIDEO_QUICKTIME.*\)|\1 |" src/gcconfig.pri
##Issues with c++11 and stdlib on travis and dependencies (e.g. plot3d)
- sed -i "" "s|#\(DEFINES += GC_WANT_R.*\)|\1 |" src/gcconfig.pri
- echo "QMAKE_CFLAGS_RELEASE += -mmacosx-version-min=10.7 -arch x86_64" >> src/gcconfig.pri
- sed -i "" "s/__GC_GOOGLE_CALENDAR_CLIENT_SECRET__/"$GC_GOOGLE_CALENDAR_CLIENT_SECRET"/" src/Core/Secrets.h
- sed -i "" "s/__GC_STRAVA_CLIENT_SECRET__/"$GC_STRAVA_CLIENT_SECRET"/" src/Core/Secrets.h
- sed -i "" "s/__GC_DROPBOX_CLIENT_SECRET__/"$GC_DROPBOX_CLIENT_SECRET"/" src/Core/Secrets.h
- sed -i "" "s/__GC_CYCLINGANALYTICS_CLIENT_SECRET__/"$GC_CYCLINGANALYTICS_CLIENT_SECRET"/" src/Core/Secrets.h
- sed -i "" "s/__GC_TWITTER_CONSUMER_SECRET__/"$GC_TWITTER_CONSUMER_SECRET"/" src/Core/Secrets.h
- cat src/gcconfig.pri
- travis/$TRAVIS_OS_NAME/before_script.sh
script:
- CC=clang CXX=clang++ /usr/local/opt/$QT_PATH/bin/qmake -makefile -recursive QMAKE_CXXFLAGS_WARN_ON+="-Wno-unused-private-field -Wno-c++11-narrowing"
- CC=clang CXX=clang++ make qmake_all
- CC=clang CXX=clang++ make -j4 sub-qwt --silent
- CC=clang CXX=clang++ make -j4 sub-src
- travis/$TRAVIS_OS_NAME/script.sh
after_success:
- cd src
- ls -laR GoldenCheetah.app
- GoldenCheetah.app/Contents/MacOS/GoldenCheetah --help
- /usr/local/opt/$QT_PATH/bin/macdeployqt GoldenCheetah.app -verbose=2 -dmg
## fix up the bundle with macdeployqtfix
- python ../travis/macdeployqtfix.py GoldenCheetah.app /usr/local/opt/$QT_PATH
- brew remove $QT
- mv GoldenCheetah.dmg GoldenCheetah_$QT.dmg
- hdiutil mount GoldenCheetah_$QT.dmg
- cd /Volumes/GoldenCheetah
- ls -laR GoldenCheetah.app
- GoldenCheetah.app/Contents/MacOS/GoldenCheetah --help
##deploy broken in travis, read-only filesystem error
##before_deploy:
##- gem install mime-types -v 2.6.2
##deploy:
## provider: releases
## api_key: $GH_OAUTH_TOKEN
## file: GoldenCheetah_$QT.dmg
## skip_cleanup: true
## on:
## tags: true
- if [[ $TRAVIS_OS_NAME == "osx" ]]; then
export FINAL_NAME=dev-prerelease-branch-master-build-${TRAVIS_BUILD_NUMBER}.dmg;
else
export FINAL_NAME=dev-prerelease-branch-master-build-${TRAVIS_BUILD_NUMBER}.AppImage;
fi
- travis/$TRAVIS_OS_NAME/after_success.sh
deploy:
provider: releases
api_key:
secure: KlfkRM8oGP02y5LhbdxetnhqUG3YzVylvyhT8BTYjdoJtkJr7YXYpdhj9byZ9aiy1gSWI/g7A1X6/P8/McqRtgt4dEYr4Zg8QO7Y7QdTpgNQEwu8ZrkyyG/7b/rSkfFHDjrOAHslLVXuBNwWgi8YW1aTn0rY2AqDbOri7u6tt9Q=
file: src/$FINAL_NAME
skip_cleanup: true
on:
tags: true
repo: GoldenCheetah/GoldenCheetah

49
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,49 @@
## How to get help
#### **Do you have questions about how to use GoldenCheetah?**
* Ask any question about how to use GoldenCheetah on [golden-cheetah-users mailing list](https://groups.google.com/forum/#!forum/golden-cheetah-users), ideally after watching the corresponding [tutorials](https://www.goldencheetah.org/#section-tutorials) and/or reading the relevant parts of the [documentation](https://github.com/GoldenCheetah/GoldenCheetah/wiki).
#### **Do you have questions about the source code?**
* Ask any question about how to build GoldenCheetah or anything related to the source code in the [golden-cheetah-developers mailing list](https://groups.google.com/forum/#!forum/golden-cheetah-developers), please see the [GoldenCheetah Developers Guide](https://github.com/GoldenCheetah/GoldenCheetah/wiki/Developers-guide) for addtional information.
## How to contribute to GoldenCheetah
#### **Did you find a bug?**
* **Ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/GoldenCheetah/GoldenCheetah/issues).
* If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/GoldenCheetah/GoldenCheetah/issues/new). Be sure to include a **title and clear description**, as much relevant information as possible, and **steps to reproduce the problem** or a **test file** demonstrating the expected behavior that is not occurring.
#### **Did you write a patch that fixes a bug?**
* Open a new GitHub pull request with the patch.
* Ensure the PR description clearly describes the problem and solution. Include the relevant issue number if applicable.
* See [GoldenCheetah Guidelines for submitting a patch](https://github.com/GoldenCheetah/GoldenCheetah/wiki/Guidelines-for-submitting-a-patch) for additional information.
#### **Did you fix whitespace, format code, or make a purely cosmetic patch?**
Changes that are cosmetic in nature and do not add anything substantial to the stability or functionality of GoldenCheetah will generally not be accepted.
#### **Do you intend to add a new feature or change an existing one?**
* Suggest your change in the [golden-cheetah-developers mailing list](https://groups.google.com/forum/#!forum/golden-cheetah-developers) and start writing code.
* Do not open an issue on GitHub until you have collected positive feedback about the change. GitHub issues are primarily intended for bug reports and fixes.
#### **Do you want to contribute to GoldenCheetah translations?**
* Translators are very welcome, please see [GoldenCheetah Guidelines for translators](https://github.com/GoldenCheetah/GoldenCheetah/wiki/Guidelines-for-translators)
#### **Do you want to contribute to GoldenCheetah documentation?**
* The [GoldenCheetah wiki](https://github.com/GoldenCheetah/GoldenCheetah/wiki) is open to user's contributions. feel free to add what you consider relevant to make other's users experience smoother.
GoldenCheetah is a volunteer effort. Contributions are welcome!
Thanks!
GoldenCheetah Team

873
COPYING
View File

@@ -1,622 +1,281 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Version 2, June 1991
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
13. Use with the GNU Affero General Public License.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
14. Revised Versions of this License.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
NO WARRANTY
15. Disclaimer of Warranty.
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
@@ -628,15 +287,15 @@ free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
@@ -644,32 +303,38 @@ the "copyright" line and a pointer to where the full notice is found.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View File

@@ -21,7 +21,6 @@ CONTENTS
- FTDI D2XX
- SRMIO
- liboauth
- QwtPlot3d
- libkml
3. ADDING OPTIONAL DEPENDENCIES WHEN BUILDING VERSION 3
@@ -34,7 +33,7 @@ CONTENTS
1. BASIC INSTALLATION WITH MANDATORY DEPENDENCIES
=================================================
Installed Ubuntu 11.04 from CD image amd-64.iso. You will not need to do this if you
Installed Linux distribution of choice on platforms i386 or amd-64 (currently Debian-based distributions and Arch-based distributions are covered). You will not need to do this if you
already have a Linux distribution installed. Left this step in to highlight the
Linux distribution the commands below were executed on.
@@ -42,8 +41,12 @@ login and open a terminal to get a shell prompt
Download MANDATORY DEPENDENCIES (browser)
-----------------------------------------
Download and install the Qt 4.8 SDK from http://qt-project.org/
Once that is completed test qmake is ok with: qmake --version (should report 4.7.0 or higher)
Download and install the Qt SDK from http://qt-project.org/
Once that is completed test qmake is ok with: qmake --version (should report 4.9.8 or higher)
DEBIAN-BASED DISTRIBUTION INSTRUCTIONS
--------------------------------------
Install git with:
$ sudo apt-get install git
@@ -55,6 +58,20 @@ Install FLEX and BISON
You will need flex v2.5.9 or later
$ sudo apt-get install bison
$ sudo apt-get install flex
-----------------------------------
ARCH-BASED DISTRIBUTION INSTRUCTIONS
------------------------------------
Install git:
$ sudo pacman -S git
INSTALL FLEX and BISON
----------------------
$ sudo pacman -S flex bison
NEXT STEPS
----------
$ vi gcconfig.pri
Ensure you have the following lines (which are now also in gcconfig.pri.in which has
@@ -74,6 +91,20 @@ $ make clean
$ qmake
$ make
To compile translation you need QT tool - lrelease
If it is not found using he defaults in src/src.pro then set the full path and filename in gcconfig.pri
QMAKE_LRELEASE = /usr/bin/lrelease
When build first time you get number of error messages on .qm files missing:
"RCC: Error in 'Resources/application.qrc': Cannot find file 'translations/gc_fr.qm'"
You can ignore these messages for your build. The .qm files will be created during the
build at a later point in time via the "lrelease" command you configured in gcconfig.pri)
If your QT build includes its own local compress libs then you should comment the line below in gcconfig.pri,
otherwise you will need to have the compress libraries installed separately.
#LIBZ_INCLUDE =
#LIBZ_LIBS = -lz
You will now have a release3 binary but with none of the release3 dependencies compiled in.
Get latest GOLDEN CHEETAH source files
--------------------------------------
@@ -175,96 +206,6 @@ $ make
You now have SRM support built in.
OAUTH/CRYPT - For Tweet my ride (twitter) support
-------------------------------------------------
You should be able to install liboauth and dependencies
directly with:
$ sudo apt-get install liboauth-dev
If this does not work then:
Download the source from: http://sourceforge.net/projects/liboauth/files/liboauth-0.9.4.tar.gz/download and
unpack it into ~/Projects/liboauth-0.9.4 using archive manager
$ cd ~/Projects/liboauth-0.9.4
You may find that libcurl is not installed (which liboauth depends upon) so download it
from http://curl.haxx.se/download/curl-7.21.6.tar.gz and unpack it into ~/Projects/curl-7.21.6
using archive manager to drag and drop into your Projects folder
$ cd ~/Projects/curl-7.21.6
$ ./configure
$ make
$ sudo make install
You should now have libcurl and friends installed in /usr/local
You may find that liboauth also requires the openssl libs installed, these are available
pre-packaged thankfully so:
$ sudo apt-get install libssl-dev
This will also install zlibg which liboauth also desires.
$ cd ~/Projects/liboauth-0.9.4
$ ./configure
$ make
$ sudo make install
Now we have liboauth and libcurl in /usr/local and libssl in /usr/lib, so we can go back to
GoldenCheetah and update the gcconfig.pri to point at the right places:
$ cd ~/Projects/Live/GoldenCheetah/src
$ vi gcconfig.pri
Make sure the following are set:
LIBOAUTH_INSTALL = /usr/local
LIBCRYPTO_INSTALL = -lcrypto
LIBCURL_INSTALL=-lcurl
Make clean is needed if you have previously built, since source files examine #defines before
including this feature. You can skip it if you know why ;)
$ make clean
$ qmake
$ make
You can now tweet your rides and amaze your friends, or alternatively tweet your rides but
omit to mention average power to hide your weaknesses.
LIBQWTPLOT3D - For 3D plot
--------------------------
Download the tarball from http://qwtplot3d.svn.sourceforge.net/viewvc/qwtplot3d/branches/maintain_0_2_x/qwtplot3d/?view=tar
and unarchive it into your Projects directory using archive manager. There is no version number it just creates a
subdirectory called qwtplot3d
You will need to install libgl and extensions, this can be done with;
$ sudo apt-get install libgl1-mesa-dev
$ sudo apt-get install libglu-dev
On Ubuntu 12.10 I also ran
$ sudo apt-get install freeglut3 freeglut3-dev
$ cd ~/Projects/qwtplot3d
Edit the qwtplot3d.pri and add
CONFIG += staticlib
You will find that on modern Linuxes you also need to fix include/qwt3d_global.h by adding the line:
#include <GL/glu.h>
then build
$ qmake
$ make
Then to let gc know where the qwtplot3d libs are you need to edit gcconfig.pri;
$ cd ~/Projects/Live/GoldenCheetah/src
$ vi gcconfig.pri
And uncomment the following line and set the install directory to where you build
QWT3D_INSTALL = ~/Projects/qwtplot3d
LIBKML - For export to Google Earth
-----------------------------------

View File

@@ -20,8 +20,6 @@ CONTENTS
2. ADDING OPTIONAL DEPENDENCIES
- FTDI D2XX
- SRMIO
- kQOAuth
- QwtPlot3d
- libkml
- libusb
- libical
@@ -210,6 +208,11 @@ $ cd .. #this should put you in the top level dir containing this file
$ qmake -recursive
$ make
When build first time you get number of error messages on .qm files missing:
"RCC: Error in 'Resources/application.qrc': Cannot find file 'translations/gc_fr.qm'"
You can ignore these messages for your build. The .qm files will be created during the
build at a later point in time via the "lrelease" command you configured in gcconfig.pri)
If make fails to find a Makefile then qmake is configured, by default, to create
an xcode project file. You will need to change the qmake command above to tell it
to create a makefile with the following:
@@ -223,12 +226,21 @@ $ open src/GoldenCheetah.app
And you're up and running.
Now, if you would like to use XCode to debug the project, you can generate
the necessary project file.
$ qmake --recursive -spec macx-xcode
This will create a project as: build.xcodeproj Please be sure to build via
the standard method before checkin to prevent build errors. If the build
fails to launch with "couldn't be opened because you don't have permission
to view it" Then a work around would be to open the project and attach
the debugger.
$ open src/GoldenCheetah.app
2. ADDING OPTIONAL DEPENDENCIES
===============================
- SRMIO
- kQOAuth
- QwtPlot3d
- libkml
- libusb
- libical
@@ -244,24 +256,7 @@ should be taken into account.
SRMIO (git)
./configure CFLAGS="-isysroot /Developer/SDKs/MacOSX10.7.sdk -arch x86_64" CPPFLAGS=-I/usr/local/D2XX/ --disable-dependency-tracking
2.2 kQOAuth - For OAuth Authentication
--------------------------------------
kQOauth (0.98)
qmake
2.3 QwtPlot3d - For 3d plot support
-----------------------------------
qwtplot3d (maintain_0_2_x)
Add the following to qwtplot3d.pro:
CONFIG += x86_64 static
QMAKE_MAC_SDK=/Developer/SDKs/MacOSX10.7.sdk
2.4 libkml - For export to Google Earth
2.2 libkml - For export to Google Earth
---------------------------------------
expat (2.0.1)
@@ -273,7 +268,7 @@ libkml (pulled down from the svn repo)
note: the added CXXFLAGS helped clear the -Werror flag that stopped compilation.
2.5 libusb - For Garmin USB2 stick support
2.3 libusb - For Garmin USB2 stick support
------------------------------------------
libusb (0.1.12)
@@ -290,7 +285,7 @@ make install
note: that the sed line updates some commands in libtool. not sure why the arch clags are not getting passed.
2.6 libical
2.4 libical
-----------
libical (0.46)

View File

@@ -1,117 +1,207 @@
Please note: This is an old build instruction set for Version 2.x.
Most of it is still fairly valid for version 3.x.
Minimum build requirements are: Qt 4.8 with Qt.4.8.4 recommended.
All other libs are find the best that you can except for libusb which requires 0.1.12.
I have found that the cross compiler at http://mxe.cc/ to be great for building GC and SRMIO.
+++++++++++++++++++++++
WIN32 BUILD WALKTHROUGH
+++++++++++++++++++++++
Gareth Coco
Joern Rischmueller
May 2011
February 2017
For my install, I am installing all my files into the directory: d:\coding.
You can use any directory structure you like, youll just have to change paths.
Just ensure that any folder path you use does not have a space in it.
This instruction will guide you through a standard build of GoldenCheetah (without external
dependencies or API based services included).
Download the NSI installer application. I use the Portable Apps version from:
http://portableapps.com/apps/development/nsis_portable
- Install in D:\Coding\NSISPortable\
Prerequisites:
Download Qt SDK from:
http://qt.nokia.com/downloads/sdk-windows-cpp
(File I am using is qt-sdk-win-opensource-2010.02.1.exe)
- Install in D:\Coding\Qt
To build on Windows you need the necessary toolchain to be installed. Since 2017
GoldenCheetah is enabled to be build with the Microsoft Visual C++ 2015 toolchain,
which is also the recommended toolchain to be used. Building with the "mingw" toolchain
might still be possible, but may conflict with features needed from the Qt library
which are no longer supported by the "mingw" version of Qt.
Download the D2XX drivers:
http://www.ftdichip.com/Drivers/D2XX.htm
(File I am using is: CDM 202.06.00 WHQL Certified.zip)
- Install in D:\Coding\D2XX
Disclaimer:
Download qwt-plot3d from:
http://sourceforge.net/projects/qwtplot3d/files/
(File I am using is qwtplot3d-0.2.7.zip)
- Install in D:\Coding\qwtplot3d
For any of the downloads and tools the document refers to, please check if you comply
with the license agreements. I cannot any responsibility for any of the downloads you
are doing.
Edit D:\coding\qwtplot3d\src\qwt3d_function.cpp
- Add at top of file: #include <cstdio>
Edit D:\coding\qwtplot3d\qwtplot3d.pro
- Comment out: #win32:TEMPLATE = vclib
You need:
Then I start the “Qt Command Prompt” from the Qt SDK folder.
- Microsoft Visual C++ 2015 - which is part of Visual Studio 2015
-- Download from Microsoft - they offer a "Community Edition" which is sufficient
to build GoldenCheetah
- Microsoft Windows SDK - which needs to be installed separately
-- Download from here: https://developer.microsoft.com/de-de/windows/downloads/windows-10-sdk
-- I am using the Windows 10 SDK - version 10.0.14393.795(since I build on Windows 10) -
Note: building on other Windows Version(s) may require other SDK Version to be installed
but was not tested
-- When installing the SDK you have several options - for GoldenCheetah you need the "SDK" itself and
in case you want to Debug also the "Debugging Tools" to be installed. All other parts (to my experience)
are not required.
- Flex and Bison (below the version working for me)
-- Download from here: https://sourceforge.net/projects/winflexbison/
-- Use the "win_flex_bison-latest.zip" version
-- Unzip whereever you like and make sure that the location "win_bison.exe" and "win_flex.exe
are added to your "Path" environment variable
- Qt C++ Framework
-- As of today, please use Qt 5.8.0 (which is the most recent official release) for Microsoft VC2015
-- Download is available here: https://www.qt.io/download/ - the OpenSource version is sufficient
to build GoldenCheetah
You need to decide if you go for the 32Bit or the 64Bit version, all further descriptions will refer
to the 64Bit version of Qt and the 64Bit Version of the Visual C++ Toolchain.
32 Bit follows the same concepts, you just need to download and/or configure the tools for 32 bit.
The
-- Install Qt and make sure that the \bin directory of Qt is added to your "Path" environment variable
(default path of Qt is C:\Qt\Qt5.8.0\5.8\msvc2015_64\bin)
-- To build GoldenCheetah we recommend to use "jom.exe" which is an "nmake" clone - see https://wiki.qt.io/Jom
With your Qt installation you also get QtCreator installed which is the free IDE for Qt. Jom is
part of the QtCreator installation. For the later build process, make sure that the path to "jom.exe"
is added to your "Path" environment variable.
(default path of QtCreator/Jom is C:\Qt\Qt5.8.0\Tools\QtCreator\bin)
Note: Building a 32bit version / Building for Windows XP
-- 32bit follows the same concepts, you just need to download and/or configure the tools for 32 bit.
-- The Visual Studio standard toolchain as well as the SDK do not support Windows XP any more.
d:
cd d:\coding\qwtplot3d\
qmake -win32
mingw32-make release
Building from command line without additional dependencies:
Now check out your favourite web sites until the code is built.
For this build, I am installing all source code,... into the directory: c:\coding
Leave the Qt Command Prompt window open as we use it later.
- Download GoldenCheetah source (either using Git or downloading the ZIP file)
-- Download from here: https://github.com/GoldenCheetah/GoldenCheetah
-- Install in c:\coding\GoldenCheetah
- Setup the configuration of GoldenCheetah for the Qt windows build
-- Copy C:\coding\GoldenCheetah\qwt\qwtconfig.pri.in to C:\coding\GoldenCheetah\qwt\qwtconfig.pri
-- Copy C:\coding\GoldenCheetah\src\gccconfig.pri.in to C:\coding\GoldenCheetah\src\gccconfig.pri
-- Edit the "gcconfig.pri" file (see also instructions in the file itself)
Lines to be changed (from Default to New - or Add(ed):
Default New
#CONFIG += release CONFIG += release
#DEFINES += NOWEBKIT DEFINES += NOWEBKIT
#QMAKE_LRELEASE = /usr/bin/lrelease QMAKE_LRELEASE = lrelease
Default
#WINKIT_INSTALL= "C:/Program Files (x86)/Windows Kits/8.1/Lib/winv6.3/um/x64"
New
WINKIT_INSTALL= "C:/Program Files (x86)/Windows Kits/10/Lib/10.0.14393.0/um/x64"
Note: This is the default path for the SDK - depending on how you installed the
SDK the path my deviate from the example.
Add Lines
CONFIG += lex
CONFIG += yacc
Default New
#QMAKE_LEX = win_flex QMAKE_LEX = win_flex --wincompat
#QMAKE_YACC = win_bison QMAKE_YACC = win_bison --file-prefix=y -t
Add Lines
# Make sure that LEX/YACC is executed first (to allow multi-core compilation via Jom)
lex.CONFIG += target_predeps
yacc_impl.CONFIG += target_predeps
yacc_decl.CONFIG += target_predeps
Download GoldenCheetah source
(Either use GIT git://github.com/GoldenCheetah/GoldenCheetah.git
or download the zip file:
http://github.com/GoldenCheetah/GoldenCheetah/zipball/master)
- Install in D:\Coding\GoldenCheetah
- Open the console tool of your choice in folder c:\coding\GoldenCheetah to run the build process
(I assume cmd.com with prompt ">")
-- Initialize the Visual C++ compile for 64 Bit Builds
>CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
-- Run "qmake" to prepare the build for Qt
>qmake build.pro -spec win32-msvc2015
-- Run "jom" to prepare and run the GoldenCheetah build
>jom qmake_all && jom
Note: When build first time you get number of error messages on .qm files missing.
"RCC: Error in 'Resources\application.qrc': Cannot find file 'translations/gc_fr.qm'"
You can ignore these messages for your build. The .qm files will be created during
the build at a later point in time via the "lrelease.exe" command you configured in
gcconfig.pri)
Hint: In some (still inpredictable cases) the build stops during compilation of the "qwt"
library. Just re-start it by running "jom" again, without any other action. Your
build will continue without problems.
- Wait - the compile with "jom" just uses 1 core. If you want to use more of your machine,
you may use "jom" with option "-j <no_of_cores>" e.g. "jom -j 4".
- Since your are doing an "in-source" build you will find a release version of "GoldenCheetah.exe"
in folder: "C:\coding\GoldenCheetah\src\release". You can run the .exe from that location as long
as the Qt libraries are on your "Path".
- To run GoldenCheetah.exe on a different machine (withoug Qt being installed), you need to collect
the Qt libraries. Easiest way is the "windeployqt" tool provided with Qt.
Details can be found here: http://doc.qt.io/qt-5/windows-deployment.html
Copy D:\Coding\GoldenCheetah\src\gccconfig.pri.in
to D:\Coding\GoldenCheetah\src\gccconfig.pri and edit
- Set: D2XX_INCLUDE = d:/coding/D2XX
- Comment out #SRMIO_INSTALL
- Comment out: CONFIG += debug
- Uncomment: CONFIG += static
Copy D:\Coding\GoldenCheetah\qwt\qwtconfig.pri.in
to D:\Coding\GoldenCheetah\qwt\qwtconfig.pri and edit
- Set win32 { INSTALLBASE = D:/Coding/Qt }
- In #Qt4 win32 { section
Comment out: #CONFIG += debug # release/debug/debug_and_release
Add in: CONFIG += release
Building with additional dependencies:
We use a number of libraries for specific functions of GoldenCheetah. You find the list of dependencies
and their sources documented in "gccconfig.pri.in". Here just a short summary which of those libraries
are available in the official GoldenCheetah builds and some hints how to build them to be usable.
Using the “Qt Command Prompt” window from before:
Info: I plan to provide a pre-compiled set of the dependencies for the Windows version of GoldenCheetah,
so that not everybody has to invest the efforts to build the .dll's for the different tools.
- SRM download support via SRMIO
-- Is NOT part of the official Windows builds since I was not able to create a .DLL which works
with an MSVC2015 based build of GoldenCheetah. If anybody finds a solution to add this dependency
again - highly welcome.
- D2XX device download support
-- Is part of the official Windows builds - we use the libs and do static linking.
The version currently used is: "CDM v2.10.00 WHQL Certified" - while there are more recent
version available for download.
- Google Earth .kml files (export)
-- Is part of the official build as a static lib - build is done with MSVC2015 - the build uses Release 1.2
(path of source code has changed to https://github.com/google/libkml)
cd d:\coding\GoldenCheetah
qmake -win32 -recursive
mingw32-make release
- iCal Calendar support (prerequisite for the "Diary" view)
-- Is part of the official build as a static lib - the build uses Release 1.0.1
- USB1 support via USBExpress
-- Is part of the official build as .dll - the build uses Release 3.5.1
- USB2 support via libusb
-- Is part of the official build - the build uses the pre-compiled release 1.2.6.0
- Video Playback via VLC
-- Is part of the official build as .dll - the build uses the pre-compiled release 2.2.1
- Resampling via libsamplerate
-- Is part of the official build as .dll - the build uses
Go back to checking your email or favourite web sites while this builds.
Building with integration to external services (via APIs)
When all is finished, you should have a release version in:
As of today a number of integrations with external services like Strava, Cyclinganalytics,
Google Calendar, Dropbox, Today's Plan, Google Drive, CloudDB) exist in the official GoldenCheetah
builds. The permission to use API's of such services requires a dedicated registration (in this case
for "GoldenCheetah" as the consumer of the services) where in return the GoldenCheetah team get's
specific credentials to access the services.
D:\Coding\GoldenCheetah\src\release\
All of the services request that the access credentials are kept private and are under responsibility
of the team/company/individual who has registered for the API use with the company providing the services.
Next , move required build files into the d:\coding\GoldenCheetah\src\release directory.
You can always start your personal registration process with the services to get your own credentials
to build GoldenCheetah version which can use the service APIs. But you are doing that on your own full
responsibility.
*****************************************************************************************************
Have fun to build your own version. Feedback/Contributions to this guide are welcome. The easiest way
to contribute is to provide a pull-request.
Cheers.
Joern
cd d:\coding\GoldenCheetah
copy /y ..\Qt\qt\bin\mingwm10.dll src\release\
copy /y ..\Qt\qt\bin\QtCore4.dll src\release\
copy /y ..\Qt\qt\bin\QtGui4.dll src\release\
copy /y ..\Qt\qt\bin\QtSql4.dll src\release\
copy /y ..\Qt\qt\bin\QtXml4.dll src\release\
copy /y ..\Qt\qt\bin\QtNetwork4.dll src\release\
copy /y ..\Qt\qt\bin\QtOpenGL4.dll src\release\
copy /y ..\Qt\qt\bin\QtWebKit4.dll src\release\
copy /y ..\Qt\qt\bin\QtXmlPatterns4.dll src\release\
copy /y ..\Qt\qt\bin\phonon4.dll src\release\
copy /y ..\Qt\qt\bin\libgcc_s_dw2-1.dll src\release\
copy /y ..\qwtplot3d\lib\qwtplot3d.dll src\release\
mkdir src\release\sqldrivers
copy /y ..\Qt\qt\plugins\sqldrivers\qsqlite4.dll src\release\sqldrivers\
mkdir src\release\imageformats
copy /y ..\Qt\qt\plugins\imageformats\qjpeg4.dll src\release\imageformats\
To build the self installer:
cd d:\coding\GoldenCheetah\src\win32
d:\coding\NSISPortable\App\NSIS\makensis.exe GoldenCheetahInstall.nsi
You should find the installer file in the directory you are in.
Install and enjoy.

1
ISSUE_TEMPLATE.md Normal file
View File

@@ -0,0 +1 @@
Issue tracker is **only** for Bugs and Features, before to open a new issue please read the Contributing document (link at the right) and use the forums if you need help.

View File

@@ -1,9 +1,30 @@
<img src="src/Resources/images/gc.png" height="25%" width="25%">
# GoldenCheetah
## About
GoldenCheetah is an open-source data analysis tool primarily written in C++
with Qt for cyclists and triathletes
with support for training as well.
GoldenCheetah can connect with indoor trainers and cycling equipment such
as cycling computers and power meters to import data.
In addition, GoldenCheetah can connect to cloud services.
It can then manipulate and view the data, as well as analyze it.
## Installing
Golden Cheetah install and build instructions are documented
for each platform;
INSTALL-WIN32 For building on Microsoft Windows
INSTALL-LINUX For building on Ubuntu Linux
INSTALL-LINUX For building on Linux
INSTALL-MAC For building on Apple OS X
@@ -14,6 +35,6 @@ Windows: [![Build status](https://ci.appveyor.com/api/projects/status/i6dwn4m8oy
[![Coverity Status](https://scan.coverity.com/projects/7503/badge.svg)](https://scan.coverity.com/projects/goldencheetah-goldencheetah)
Alternatively official builds are available from http://www.goldencheetah.org
Alternatively, official builds are available from http://www.goldencheetah.org
whilst latest developer builds are available from https://github.com/GoldenCheetah/GoldenCheetah/releases
whilst the latest developer builds are available from https://github.com/GoldenCheetah/GoldenCheetah/releases

View File

@@ -2,9 +2,9 @@ version: ci.{build}
image: Visual Studio 2015
clone_depth: 1
init:
# Setup QT 5.6.0 - 64Bit
# Setup QT 5.9 - 64Bit
- set QTDIR=C:\Qt\5.6\msvc2015_64
- set QTDIR=C:\Qt\5.9\msvc2015_64
- set PATH=%QTDIR%\bin;%PATH%
# Setup MSVC - VS 2015
@@ -22,7 +22,7 @@ install:
- copy c:\libs\gcconfig64-Release.appveyor.pri src\gcconfig.pri
build_script:
- qmake.exe build.pro -r -spec win32-msvc2015
- qmake.exe build.pro -r -spec win32-msvc
- nmake
#notifications:

View File

@@ -1,7 +1,4 @@
TEMPLATE = subdirs
SUBDIRS = qwt
unix:!macx {
SUBDIRS += kqoauth
}
SUBDIRS += src
CONFIG += ordered

View File

@@ -702,7 +702,7 @@ ModelDataProvider::ModelDataProvider (ModelPlot &plot, ModelSettings *settings)
xscale = 1;
yscale = (maxbinx-minbinx)/(maxbiny-minbiny);
zscale = (maxbinx-minbinx)/(maxz-minz);
} else if ((maxbiny-minbiny) >= (maxbinx-minbinx) && (maxbiny >= minbiny) >= (maxz-minz)) {
} else if ((maxbiny-minbiny) >= (maxbinx-minbinx) && (maxbiny-minbiny) >= (maxz-minz)) {
// scale is set off the y-axis
xscale = (maxbiny-minbiny)/(maxbinx-minbinx);
yscale = 1;

707
deprecated/OAuthManager.cpp Normal file
View File

@@ -0,0 +1,707 @@
/*
* Copyright (c) 2010 Justin Knotzke (jknotzke@shampoo.ca)
* Copyright (c) 2017 Mark Liversedge (liversedge@gmail.com)
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "Secrets.h"
#include "OAuthManager.h"
#include "OAuthDialog.h"
#include "Athlete.h"
#include "Context.h"
#include "Settings.h"
#include "Colors.h"
#include "TimeUtils.h"
#if QT_VERSION > 0x050000
#include "GoogleDrive.h"
#include "PolarFlow.h"
#include <QJsonParseError>
#endif
OAuthManager::OAuthManager(Context *context, OAuthSite site, CloudService *service, QString baseURL, QString clientsecret) :
context(context), site(site), service(service), baseURL(baseURL), clientsecret(clientsecret)
{
if (service) { // ultimately this will be the only way this works
if (service->id() == "Strava") site = this->site = STRAVA;
if (service->id() == "Dropbox") site = this->site = DROPBOX;
if (service->id() == "Cycling Analytics") site = this->site = CYCLING_ANALYTICS;
if (service->id() == "Google Drive") site = this->site = GOOGLE_DRIVE;
if (service->id() == "University of Kent") site = this->site = KENTUNI;
if (service->id() == "Today's Plan") site = this->site = TODAYSPLAN;
if (service->id() == "Withings") site = this->site = WITHINGS;
if (service->id() == "PolarFlow") site = this->site = POLAR;
if (service->id() == "SportTracks.mobi") site = this->site = SPORTTRACKS;
if (service->id() == "Xert") site = this->site = XERT;
}
// check if SSL is available - if not - message and end
if (!QSslSocket::supportsSsl()) {
QString text = QString(tr("SSL Security Libraries required for 'Authorise' are missing in this installation."));
QMessageBox sslMissing(QMessageBox::Critical, tr("Authorization Error"), text);
sslMissing.exec();
noSSLlib = true;
return;
}
// ignore responses to false, used by POLARFLOW when binding the user
ignore = false;
// SSL is available - so authorisation can take place
noSSLlib = false;
}
void
OAuthManager::authorize()
{
//
// All services have some kind of initial authorisation URL where the user needs
// to login and confirm they are willing to authorise the particular app and
// provide a temporary token to get the real token with
//
QString urlstr = "";
if (site == STRAVA) {
urlstr = QString("https://www.strava.com/oauth/authorize?");
urlstr.append("client_id=").append(GC_STRAVA_CLIENT_ID).append("&");
urlstr.append("scope=view_private,write&");
urlstr.append("redirect_uri=http://www.goldencheetah.org/&");
urlstr.append("response_type=code&");
urlstr.append("approval_prompt=force");
} else if (site == DROPBOX) {
urlstr = QString("https://www.dropbox.com/oauth2/authorize?");
#ifdef GC_DROPBOX_CLIENT_ID
urlstr.append("client_id=").append(GC_DROPBOX_CLIENT_ID).append("&");
#endif
urlstr.append("redirect_uri=https://goldencheetah.github.io/blank.html&");
urlstr.append("response_type=code&");
urlstr.append("force_reapprove=true");
} else if (site == CYCLING_ANALYTICS) {
urlstr = QString("https://www.cyclinganalytics.com/api/auth?");
urlstr.append("client_id=").append(GC_CYCLINGANALYTICS_CLIENT_ID).append("&");
urlstr.append("scope=modify_rides&");
urlstr.append("redirect_uri=http://www.goldencheetah.org/&");
urlstr.append("response_type=code&");
urlstr.append("approval_prompt=force");
#if QT_VERSION >= 0x050000
} else if (site == GOOGLE_DRIVE) {
const QString scope = service->getSetting(GC_GOOGLE_DRIVE_AUTH_SCOPE, "drive.appdata").toString();
// OAUTH 2.0 - Google flow for installed applications
urlstr = QString("https://accounts.google.com/o/oauth2/auth?");
// We only request access to the application data folder, not all files.
urlstr.append("scope=https://www.googleapis.com/auth/" + scope + "&");
urlstr.append("redirect_uri=urn:ietf:wg:oauth:2.0:oob&");
urlstr.append("response_type=code&");
urlstr.append("client_id=").append(GC_GOOGLE_DRIVE_CLIENT_ID);
} else if (site == KENTUNI) {
const QString scope = service->getSetting(GC_UOK_GOOGLE_DRIVE_AUTH_SCOPE, "drive.appdata").toString();
// OAUTH 2.0 - Google flow for installed applications
urlstr = QString("https://accounts.google.com/o/oauth2/auth?");
// We only request access to the application data folder, not all files.
urlstr.append("scope=https://www.googleapis.com/auth/" + scope + "&");
urlstr.append("redirect_uri=urn:ietf:wg:oauth:2.0:oob&");
urlstr.append("response_type=code&");
urlstr.append("client_id=").append(GC_GOOGLE_DRIVE_CLIENT_ID);
#endif
} else if (site == TODAYSPLAN) {
//urlstr = QString("https://whats.todaysplan.com.au/en/authorize/"); //XXX fixup below when pages.cpp goes
if (baseURL=="") baseURL=service->getSetting(GC_TODAYSPLAN_URL, "https://whats.todaysplan.com.au").toString();
urlstr = QString("%1/authorize/").arg(baseURL);
urlstr.append(GC_TODAYSPLAN_CLIENT_ID);
} else if (site == POLAR) {
// OAUTH 2.0 - Google flow for installed applications
urlstr = QString("%1?").arg(GC_POLARFLOW_OAUTH_URL);
// We only request access to the application data folder, not all files.
urlstr.append("response_type=code&");
urlstr.append("client_id=").append(GC_POLARFLOW_CLIENT_ID);
} else if (site == SPORTTRACKS) {
// We only request access to the application data folder, not all files.
urlstr = QString("https://api.sporttracks.mobi/oauth2/authorize?");
urlstr.append("redirect_uri=http://www.goldencheetah.org&");
urlstr.append("state=xyzzy&");
urlstr.append("response_type=code&");
urlstr.append("client_id=").append(GC_SPORTTRACKS_CLIENT_ID);
} else if (site == WITHINGS) {
// Withings is the only service that uses KQOauth for now.
#ifdef GC_HAVE_KQOAUTH
oauthRequest = new KQOAuthRequest;
oauthManager = new KQOAuthManager(this);
connect(oauthManager, SIGNAL(temporaryTokenReceived(QString,QString)), this, SLOT(onTemporaryTokenReceived(QString, QString)));
connect(oauthManager, SIGNAL(authorizationReceived(QString,QString)), this, SLOT( onAuthorizationReceived(QString, QString)));
connect(oauthManager, SIGNAL(accessTokenReceived(QString,QString)), this, SLOT(onAccessTokenReceived(QString,QString)));
connect(oauthManager, SIGNAL(requestReady(QByteArray)), this, SLOT(onRequestReady(QByteArray)));
connect(oauthManager, SIGNAL(authorizationPageRequested(QUrl)), this, SLOT(onAuthorizationPageRequested(QUrl)));
oauthRequest->initRequest(KQOAuthRequest::TemporaryCredentials, QUrl("https://oauth.withings.com/account/request_token"));
//oauthRequest->setEnableDebugOutput(true);
oauthRequest->setHttpMethod(KQOAuthRequest::GET);
oauthRequest->setConsumerKey(GC_WITHINGS_CONSUMER_KEY);
oauthRequest->setConsumerSecretKey(GC_WITHINGS_CONSUMER_SECRET);
//oauthRequest->setCallbackUrl(QUrl("http://www.goldencheetah.org"));
oauthManager->setHandleUserAuthorization(true); // false to use callback
oauthManager->setHandleAuthorizationPageOpening(false);
oauthManager->executeRequest(oauthRequest);
#endif
} else if (site == XERT) {
getTokenWithCode("");
}
//
// STEP 1: LOGIN AND AUTHORISE THE APPLICATION
//
/*if (site == DROPBOX || site == STRAVA || site == CYCLING_ANALYTICS || site == POLAR || site == SPORTTRACKS || site == GOOGLE_DRIVE || site == KENTUNI || site == TODAYSPLAN) {
url = QUrl(urlstr);
view->setUrl(url);
// connects
connect(view, SIGNAL(urlChanged(const QUrl&)), this, SLOT(urlChanged(const QUrl&)));
connect(view, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool)));
}*/
}
// just ignore SSL handshake errors at all times
void
OAuthManager::onSslErrors(QNetworkReply *reply, const QList<QSslError>&)
{
reply->ignoreSslErrors();
}
#ifdef GC_HAVE_KQOAUTH
//
// KQOauth call backs
//
void
OAuthManager::onTemporaryTokenReceived(QString, QString)
{
//qDebug() << "onTemporaryTokenReceived";
QUrl userAuthURL;
if (site == WITHINGS) {
userAuthURL = "https://oauth.withings.com/account/authorize";
}
if(oauthManager->lastError() == KQOAuthManager::NoError) {
oauthManager->getUserAuthorization(userAuthURL);
} else
qDebug() << "error" << oauthManager->lastError();
}
void
OAuthManager::onAuthorizationReceived(QString, QString)
{
//qDebug() << "Authorization token received: " << token << verifier;
if (site == WITHINGS) {
oauthManager->getUserAccessTokens(QUrl("https://oauth.withings.com/account/access_token"));
}
if(oauthManager->lastError() != KQOAuthManager::NoError) {
QString error = QString(tr("Error fetching OAuth credentials - Endpoint: /oauth/access_token"));
QMessageBox oautherr(QMessageBox::Critical, tr("Authorization Error"), error);
oautherr.exec();
//accept();
}
}
void
OAuthManager::onAccessTokenReceived(QString token, QString tokenSecret)
{
//qDebug() << "Access token received: " << token << tokenSecret;
QString info;
if (site == WITHINGS) {
service->setSetting(GC_WITHINGS_TOKEN, token);
service->setSetting(GC_WITHINGS_SECRET, tokenSecret);
appsettings->setCValue(context->athlete->cyclist, GC_NOKIA_REFRESH_TOKEN, "");
info = QString(tr("Nokia Health (Withings) authorization was successful."));
}
QMessageBox information(QMessageBox::Information, tr("Information"), info);
information.exec();
//accept();
}
void
OAuthManager::onAuthorizedRequestDone() {} // request sent - do nothing
void
OAuthManager::onRequestReady(QByteArray response)
{
//qDebug() << "Response received: " << response;
QString r = response;
if (r.contains("\"errors\"", Qt::CaseInsensitive)) {
QMessageBox oautherr(QMessageBox::Critical, tr("Error in authorization"),
tr("There was an error during authorization. Please check the error description."));
oautherr.setDetailedText(r); // probably blank
oautherr.exec();
} else {
if (site == WITHINGS) {
QString userid;
#if QT_VERSION > 0x050000
QUrlQuery params;
params.setQuery(response);
#else
QUrl params;
params.setEncodedQuery(response);
#endif
userid = params.queryItemValue("userid");
if (userid.isEmpty() == false) {
service->setSetting(GC_WIUSER, userid);
}
}
}
}
void OAuthManager::onAuthorizationPageRequested(QUrl url) {
// open Authorization page in view
view->setUrl(url);
}
#endif // KQOAuth callbacks used by Withings only
//
// STEP 2: AUTHORISATION REDIRECT WITH TEMPORARY CODE
//
// When the URL changes, it will be the redirect with the temporary token after
// the initial authorisation. The URL will have some parameters to indicate this
// if they exist we should intercept the redirect to get the permanent token.
// If they don't get passed then we don't need to do anything.
//
void
OAuthManager::getTokenWithCode(QString code)
{
QString authheader;
// sites that use this scheme
if (site == DROPBOX || site == STRAVA || site == CYCLING_ANALYTICS || site == TODAYSPLAN || site == POLAR || site == SPORTTRACKS || site == XERT) {
// sporttracks insists on passing state
if (code.endsWith("&state=xyzzy")) code = code.mid(0,code.length()-12);
QByteArray data;
#if QT_VERSION > 0x050000
QUrlQuery params;
#else
QUrl params;
#endif
QString urlstr = "";
// now get the final token to store
if (site == DROPBOX) {
urlstr = QString("https://api.dropboxapi.com/oauth2/token?");
urlstr.append("redirect_uri=https://goldencheetah.github.io/blank.html&");
params.addQueryItem("grant_type", "authorization_code");
#ifdef GC_DROPBOX_CLIENT_ID
params.addQueryItem("client_id", GC_DROPBOX_CLIENT_ID);
#endif
#ifdef GC_DROPBOX_CLIENT_SECRET
params.addQueryItem("client_secret", GC_DROPBOX_CLIENT_SECRET);
#endif
} else if (site == POLAR) {
urlstr = QString("%1?").arg(GC_POLARFLOW_TOKEN_URL);
urlstr.append("redirect_uri=http://www.goldencheetah.org");
params.addQueryItem("grant_type", "authorization_code");
#if (defined GC_POLARFLOW_CLIENT_ID) && (defined GC_POLARFLOW_CLIENT_SECRET)
authheader = QString("%1:%2").arg(GC_POLARFLOW_CLIENT_ID).arg(GC_POLARFLOW_CLIENT_SECRET);
#endif
} else if (site == SPORTTRACKS) {
urlstr = QString("https://api.sporttracks.mobi/oauth2/token?");
params.addQueryItem("client_id", GC_SPORTTRACKS_CLIENT_ID);
params.addQueryItem("client_secret", GC_SPORTTRACKS_CLIENT_SECRET);
params.addQueryItem("redirect_uri","http://www.goldencheetah.org");
params.addQueryItem("grant_type", "authorization_code");
} else if (site == STRAVA) {
urlstr = QString("https://www.strava.com/oauth/token?");
params.addQueryItem("client_id", GC_STRAVA_CLIENT_ID);
#ifdef GC_STRAVA_CLIENT_SECRET
params.addQueryItem("client_secret", GC_STRAVA_CLIENT_SECRET);
#endif
} else if (site == CYCLING_ANALYTICS) {
urlstr = QString("https://www.cyclinganalytics.com/api/token?");
params.addQueryItem("client_id", GC_CYCLINGANALYTICS_CLIENT_ID);
#ifdef GC_CYCLINGANALYTICS_CLIENT_SECRET
params.addQueryItem("client_secret", GC_CYCLINGANALYTICS_CLIENT_SECRET);
#endif
params.addQueryItem("grant_type", "authorization_code");
} else if (site == TODAYSPLAN) {
if (baseURL=="") baseURL=service->getSetting(GC_TODAYSPLAN_URL, "https://whats.todaysplan.com.au").toString();
urlstr = QString("%1/rest/oauth/access_token?").arg(baseURL);
params.addQueryItem("client_id", GC_TODAYSPLAN_CLIENT_ID);
#ifdef GC_TODAYSPLAN_CLIENT_SECRET
if (clientsecret != "") //XXX get rid when pages.cpp goes
params.addQueryItem("client_secret", clientsecret);
else if (service->getSetting(GC_TODAYSPLAN_USERKEY, "").toString() != "")
params.addQueryItem("client_secret", service->getSetting(GC_TODAYSPLAN_USERKEY, "").toString());
else
params.addQueryItem("client_secret", GC_TODAYSPLAN_CLIENT_SECRET);
#endif
params.addQueryItem("grant_type", "authorization_code");
params.addQueryItem("redirect_uri", "https://goldencheetah.github.io/blank.html");
} else if (site == XERT) {
urlstr = QString("https://www.xertonline.com/oauth/token");
params.addQueryItem("username", service->getSetting(GC_XERTUSER, "").toString());
params.addQueryItem("password", service->getSetting(GC_XERTPASS, "").toString());
params.addQueryItem("grant_type", "password");
authheader = QString("%1:%1").arg("xert_public");
}
// all services will need us to send the temporary code received
params.addQueryItem("code", code);
#if QT_VERSION > 0x050000
data.append(params.query(QUrl::FullyEncoded));
#else
data=params.encodedQuery();
#endif
// trade-in the temporary access code retrieved by the Call-Back URL for the finale token
QUrl url = QUrl(urlstr);
QNetworkRequest request = QNetworkRequest(url);
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
// client id and secret are encoded and sent in the header for POLAR and XERT
if (site == POLAR || site == XERT) request.setRawHeader("Authorization", "Basic " + authheader.toLatin1().toBase64());
// now get the final token - but ignore errors
manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError> & )), this, SLOT(onSslErrors(QNetworkReply*, const QList<QSslError> & )));
//connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(networkRequestFinished(QNetworkReply*)));
QNetworkReply *reply = manager->post(request, data);
QEventLoop loop;
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
networkRequestFinished(reply);
}
}
//
// GOOGLE DRIVE gets the code in the HTML title field (different to other services)
//
void
OAuthManager::loadFinished(bool ok)
{
if (site == GOOGLE_DRIVE || site == KENTUNI) {
if (ok && url.toString().startsWith("https://accounts.google.com/o/oauth2/auth")) {
// retrieve the code from the HTML page title
QString title = view->title();
if (title.contains("code")) {
QString code = title.right(title.length()-title.indexOf("code=")-5);
QByteArray data;
#if QT_VERSION > 0x050000
QUrlQuery params;
#else
QUrl params;
#endif
QString urlstr = "https://www.googleapis.com/oauth2/v3/token?";
params.addQueryItem("client_id", GC_GOOGLE_DRIVE_CLIENT_ID);
if (site == GOOGLE_DRIVE || site == KENTUNI) {
params.addQueryItem("client_secret", GC_GOOGLE_DRIVE_CLIENT_SECRET);
}
params.addQueryItem("code", code);
params.addQueryItem("redirect_uri", "urn:ietf:wg:oauth:2.0:oob");
params.addQueryItem("grant_type", "authorization_code");
#if QT_VERSION > 0x050000
data.append(params.query(QUrl::FullyEncoded));
#else
data=params.encodedQuery();
#endif
// trade-in the temporary access code retrieved by the
// Call-Back URL for the finale token
QUrl url = QUrl(urlstr);
QNetworkRequest request = QNetworkRequest(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
// not get the final token - ignoring errors
manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError> & )), this, SLOT(onSslErrors(QNetworkReply*, const QList<QSslError> & )));
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(networkRequestFinished(QNetworkReply*)));
manager->post(request, data);
}
}
}
}
#if QT_VERSION < 0x050000
static QString RawJsonStringGrab(const QByteArray& payload,
const QString& needle) {
// A RegExp based JSON string parser. Not the best, but it does the job.
QString regex =
// This matches the key.
"(" + needle + "|\"" + needle + "\"|'" + needle + "')"
// Matches the separator.
"[\\s]*:[\\s]*"
// matches the value.
"(\"\\S+\"|'\\S+')";
QRegExp q(regex);
if (!q.isValid()) {
// Somehow failed to build the regex.
return "";
}
int start = q.indexIn(payload);
int pos = q.pos(2);
if (start == -1 || pos == -1) {
// Failed to find the key or the value.
return "";
}
QString ret = payload.mid(pos, q.matchedLength() + start - pos);
// Remove " or ' from the value.
ret.remove(0, 1);
ret.remove(ret.size() - 1, 1);
return ret;
}
#endif
//
// STEP 3: REFRESH AND ACCESS TOKEN RECEIVED
//
// this is when we get the refresh or access tokens after a redirect has been loaded
// so pretty much at the end of the process. Each service can have slightly special
// needs and certainly needs to set the right setting anyway.
//
void
OAuthManager::networkRequestFinished(QNetworkReply *reply)
{
// we've been told to ignore responses (used by POLAR, maybe others in future)
if (ignore) return;
// we can handle SSL handshake errors, if we got here then some kind of protocol was agreed
if (reply->error() == QNetworkReply::NoError || reply->error() == QNetworkReply::SslHandshakeFailedError) {
QByteArray payload = reply->readAll(); // JSON
QString refresh_token;
QString access_token;
double polar_userid=0;
// parse the response and extract the tokens, pretty much the same for all services
// although polar choose to also pass a user id, which is needed for future calls
#if QT_VERSION > 0x050000
QJsonParseError parseError;
QJsonDocument document = QJsonDocument::fromJson(payload, &parseError);
if (parseError.error == QJsonParseError::NoError) {
refresh_token = document.object()["refresh_token"].toString();
access_token = document.object()["access_token"].toString();
if (site == POLAR) polar_userid = document.object()["x_user_id"].toDouble();
}
#else
refresh_token = RawJsonStringGrab(payload, "refresh_token");
access_token = RawJsonStringGrab(payload, "access_token");
#endif
// if we failed to extract then we have a big problem
// google uses a refresh token so trap for them only
if (((site == GOOGLE_DRIVE || site == KENTUNI) && refresh_token == "") || access_token == "") {
// Something failed.
// Only Google uses both refresh and access tokens.
QString error = QString(tr("Error retrieving authoriation credentials"));
QMessageBox oautherr(QMessageBox::Critical, tr("Authorization Error"), error);
oautherr.setDetailedText(error);
oautherr.exec();
return;
}
// now set the tokens etc
if (site == DROPBOX) {
service->setSetting(GC_DROPBOX_TOKEN, access_token);
QString info = QString(tr("Dropbox authorization was successful."));
QMessageBox information(QMessageBox::Information, tr("Information"), info);
information.exec();
} else if (site == SPORTTRACKS) {
service->setSetting(GC_SPORTTRACKS_TOKEN, access_token);
service->setSetting(GC_SPORTTRACKS_REFRESH_TOKEN, refresh_token);
service->setSetting(GC_SPORTTRACKS_LAST_REFRESH, QDateTime::currentDateTime());
QString info = QString(tr("SportTracks authorization was successful."));
QMessageBox information(QMessageBox::Information, tr("Information"), info);
information.exec();
} else if (site == POLAR) {
service->setSetting(GC_POLARFLOW_TOKEN, access_token);
service->setSetting(GC_POLARFLOW_USER_ID, polar_userid);
// we now need to bind the user, this is a one time deal.
QString url = QString("%1/v3/users").arg(GC_POLARFLOW_URL);
// request using the bearer token
QNetworkRequest request(url);
request.setRawHeader("Authorization", (QString("Bearer %1").arg(access_token)).toLatin1());
request.setRawHeader("Accept", "application/json");
request.setRawHeader("Content-Type", "application/json");
// data to post
QByteArray data;
data.append(QString("{\"member-id\":\"%1\"}").arg(context->athlete->cyclist));
// the request will fallback to this method on networkRequestFinished
// but we are done, so set ignore= true to get this function to just
// return without doing anything
ignore=true;
QNetworkReply *bind = manager->post(request, data);
// blocking request
QEventLoop loop;
connect(bind, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
// Bind response lists athlete details, we ignore them for now
QByteArray r = bind->readAll();
//qDebug()<<bind->errorString()<< "bind response="<<r;
QString info = QString(tr("PolarFlow authorization was successful."));
QMessageBox information(QMessageBox::Information, tr("Information"), info);
information.exec();
} else if (site == STRAVA) {
service->setSetting(GC_STRAVA_TOKEN, access_token);
QString info = QString(tr("Strava authorization was successful."));
QMessageBox information(QMessageBox::Information, tr("Information"), info);
information.exec();
} else if (site == CYCLING_ANALYTICS) {
service->setSetting(GC_CYCLINGANALYTICS_TOKEN, access_token);
QString info = QString(tr("Cycling Analytics authorization was successful."));
QMessageBox information(QMessageBox::Information, tr("Information"), info);
information.exec();
} else if (site == KENTUNI) {
service->setSetting(GC_UOK_GOOGLE_DRIVE_REFRESH_TOKEN, refresh_token);
service->setSetting(GC_UOK_GOOGLE_DRIVE_ACCESS_TOKEN, access_token);
service->setSetting(GC_UOK_GOOGLE_DRIVE_LAST_ACCESS_TOKEN_REFRESH, QDateTime::currentDateTime());
QString info = QString(tr("Kent University Google Drive authorization was successful."));
QMessageBox information(QMessageBox::Information, tr("Information"), info);
information.exec();
} else if (site == GOOGLE_DRIVE) {
service->setSetting(GC_GOOGLE_DRIVE_REFRESH_TOKEN, refresh_token);
service->setSetting(GC_GOOGLE_DRIVE_ACCESS_TOKEN, access_token);
service->setSetting(GC_GOOGLE_DRIVE_LAST_ACCESS_TOKEN_REFRESH, QDateTime::currentDateTime());
QString info = QString(tr("Google Drive authorization was successful."));
QMessageBox information(QMessageBox::Information, tr("Information"), info);
information.exec();
} else if (site == TODAYSPLAN) {
service->setSetting(GC_TODAYSPLAN_TOKEN, access_token);
QString info = QString(tr("Today's Plan authorization was successful."));
QMessageBox information(QMessageBox::Information, tr("Information"), info);
information.exec();
} else if (site == XERT) {
service->setSetting(GC_XERT_TOKEN, access_token);
service->setSetting(GC_XERT_REFRESH_TOKEN, refresh_token);
// Try without Message Box
//QString info = QString(tr("Xert authorization was successful."));
//QMessageBox information(QMessageBox::Information, tr("Information"), info);
//information.exec();
service->message = "Xert authorization was successful.";
}
} else {
// general error getting response
QString error = QString(tr("Error retrieving access token, %1 (%2)")).arg(reply->errorString()).arg(reply->error());
QMessageBox oautherr(QMessageBox::Critical, tr("SSL Token Refresh Error"), error);
oautherr.setDetailedText(error);
oautherr.exec();
}
// job done, dialog can be closed
//accept();
}

128
deprecated/OAuthManager.h Normal file
View File

@@ -0,0 +1,128 @@
/*
* Copyright (c) 2009 Justin F. Knotzke (jknotzke@shampoo.ca)
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef OAUTHMANAGER_H
#define OAUTHMANAGER_H
#include "GoldenCheetah.h"
#include "Pages.h"
#include "CloudService.h"
#ifdef GC_HAVE_KQOAUTH
#include <kqoauthmanager.h>
#endif
#include <QObject>
#include <QtGui>
#include <QWidget>
#include <QStackedLayout>
#include <QUrl>
#include <QSslSocket>
#ifndef NOWEBKIT
#include <QtWebKit>
#include <QWebView>
#include <QWebFrame>
#endif
// QUrl split into QUrlQuerty in QT5
#if QT_VERSION > 0x050000
#include <QUrlQuery>
#endif
// QWebEngine if on Mac, -or- we don't have webkit
#if defined(NOWEBKIT) || ((QT_VERSION > 0x050000) && defined(Q_OS_MAC))
#include <QWebEngineHistory>
#include <QWebEngineHistoryItem>
#include <QWebEnginePage>
#include <QWebEngineView>
#include <QWebEngineProfile>
#if (QT_VERSION >= 0x050600)
#include <QWebEngineCookieStore>
#endif
#endif
class OAuthManager : QObject
{
Q_OBJECT
G_OBJECT
public:
typedef enum {
NONE=0,
STRAVA,
DROPBOX,
CYCLING_ANALYTICS,
GOOGLE_DRIVE,
SPORTTRACKS,
TODAYSPLAN,
WITHINGS,
POLAR,
KENTUNI,
XERT
} OAuthSite;
// will work with old config via site and new via cloudservice (which is null for calendar and withings for now)
OAuthManager(Context *context, OAuthSite site, CloudService *service, QString baseURL="", QString clientsecret="");
void authorize();
void getTokenWithCode(QString code);
bool sslLibMissing() { return noSSLlib; }
private slots:
// Strava/Cyclinganalytics/Google
void loadFinished(bool ok);
void networkRequestFinished(QNetworkReply *reply);
void onSslErrors(QNetworkReply *reply, const QList<QSslError>&error);
#ifdef GC_HAVE_KQOAUTH
void onTemporaryTokenReceived(QString, QString);
void onAuthorizationReceived(QString, QString);
void onAccessTokenReceived(QString token, QString tokenSecret);
void onAuthorizedRequestDone();
void onRequestReady(QByteArray response);
void onAuthorizationPageRequested (QUrl pageUrl);
#endif
private:
Context *context;
bool noSSLlib;
bool ignore;
OAuthSite site;
CloudService *service;
QString baseURL; // can be passed, but typically is blank (used by Todays Plan)
QString clientsecret; // can be passed, but typicall is blank (used by Todays Plan)
QVBoxLayout *layout;
// QUrl split into QUrlQuerty in QT5
#if defined(NOWEBKIT) || ((QT_VERSION > 0x050000) && defined(Q_OS_MAC))
QWebEngineView *view;
#else
QWebView *view;
#endif
QNetworkAccessManager* manager;
QUrl url;
#ifdef GC_HAVE_KQOAUTH
KQOAuthManager *oauthManager;
KQOAuthRequest *oauthRequest;
#endif
};
#endif // OAUTHMANAGER_H

View File

@@ -31,6 +31,7 @@
// access to metrics
#include "RideMetric.h"
#include "JsonRideFile.h"
#include "TcxRideFile.h"
#ifdef Q_CC_MSVC
@@ -55,6 +56,13 @@ ShareDialogUploader::wasUploaded()
return false;
}
// just ignore handshake errors
void
ShareDialogUploader::onSslErrors(QNetworkReply *reply, const QList<QSslError>&)
{
reply->ignoreSslErrors();
}
//
// Utility function to create a QByteArray of data in GZIP format
// This is essentially the same as qCompress but creates it in
@@ -130,6 +138,15 @@ ShareDialog::ShareDialog(Context *context, RideItem *item) :
}
vbox1->addWidget(rideWithGPSChk,0,col++);
todaysPlanUploader = new TodaysPlanUploader(context, ride, this);
todaysPlanChk = new QCheckBox(tr("Today's Plan"));
if( ! todaysPlanUploader->canUpload( err ) ){
todaysPlanChk->setEnabled( false );
} else if( ! todaysPlanUploader->wasUploaded() ){
todaysPlanChk->setChecked( true );
}
vbox1->addWidget(todaysPlanChk,0,col++);
cyclingAnalyticsUploader = new CyclingAnalyticsUploader(context, ride, this);
cyclingAnalyticsChk = new QCheckBox(tr("Cycling Analytics"));
if( ! cyclingAnalyticsUploader->canUpload( err ) ){
@@ -239,15 +256,17 @@ ShareDialog::ShareDialog(Context *context, RideItem *item) :
commuteChk = new QCheckBox(tr("Commute"));
trainerChk = new QCheckBox(tr("Trainer"));
const RideFileDataPresent *dataPresent = ride->ride()->areDataPresent();
altitudeChk->setEnabled(dataPresent->alt);
altitudeChk->setChecked(dataPresent->alt);
powerChk->setEnabled(dataPresent->watts);
powerChk->setChecked(dataPresent->watts);
cadenceChk->setEnabled(dataPresent->cad);
cadenceChk->setChecked(dataPresent->cad);
heartrateChk->setEnabled(dataPresent->hr);
heartrateChk->setChecked(dataPresent->hr);
if (ride) {
const RideFileDataPresent *dataPresent = ride->ride()->areDataPresent();
altitudeChk->setEnabled(dataPresent->alt);
altitudeChk->setChecked(dataPresent->alt);
powerChk->setEnabled(dataPresent->watts);
powerChk->setChecked(dataPresent->watts);
cadenceChk->setEnabled(dataPresent->cad);
cadenceChk->setChecked(dataPresent->cad);
heartrateChk->setEnabled(dataPresent->hr);
heartrateChk->setChecked(dataPresent->hr);
}
QGridLayout *vbox3 = new QGridLayout();
//vbox3->addWidget(gpsChk,0,0);
@@ -297,6 +316,7 @@ ShareDialog::upload()
if ( !rideWithGPSChk->isChecked() && !selfLoopsChk->isChecked()
&& !veloHeroChk->isChecked() && !trainingstagebuchChk->isChecked()
&& !stravaChk->isChecked() && !cyclingAnalyticsChk->isChecked()
&& !todaysPlanChk->isChecked()
&& !sportplushealthChk->isChecked() //&& !garminChk->isChecked()
) {
QMessageBox aMsgBox;
@@ -318,6 +338,9 @@ ShareDialog::upload()
if (rideWithGPSChk->isChecked()) {
shareSiteCount ++;
}
if (todaysPlanChk->isChecked()) {
shareSiteCount ++;
}
if (cyclingAnalyticsChk->isChecked()) {
shareSiteCount ++;
}
@@ -343,6 +366,9 @@ ShareDialog::upload()
if (rideWithGPSChk->isEnabled() && rideWithGPSChk->isChecked()) {
doUploader( rideWithGpsUploader );
}
if (todaysPlanChk->isEnabled() && todaysPlanChk->isChecked()) {
doUploader( todaysPlanUploader );
}
if (cyclingAnalyticsChk->isEnabled() && cyclingAnalyticsChk->isChecked()) {
doUploader( cyclingAnalyticsUploader );
}
@@ -417,6 +443,13 @@ ShareDialog::doUploader( ShareDialogUploader *uploader )
uploader->upload();
}
//
// Uploader
//
// Strava
// ----------------
StravaUploader::StravaUploader(Context *context, RideItem *ride, ShareDialog *parent) :
ShareDialogUploader( tr("Strava"), context, ride, parent)
{
@@ -489,6 +522,8 @@ StravaUploader::requestUploadStrava()
// trap network response from access manager
networkManager->disconnect();
connect(networkManager, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError> & )), this,
SLOT(onSslErrors(QNetworkReply*, const QList<QSslError> & )));
connect(networkManager, SIGNAL(finished(QNetworkReply*)), this,
SLOT(requestUploadStravaFinished(QNetworkReply*)));
connect(networkManager, SIGNAL(finished(QNetworkReply *)), eventLoop,
@@ -706,6 +741,9 @@ StravaUploader::requestVerifyUploadFinished(QNetworkReply *reply)
}
}
// RideWithGps
// ----------------
RideWithGpsUploader::RideWithGpsUploader(Context *context, RideItem *ride, ShareDialog *parent) :
ShareDialogUploader( tr("Ride With GPS"), context, ride, parent)
{
@@ -767,6 +805,7 @@ RideWithGpsUploader::requestUploadRideWithGPS()
QTime rideTime = QTime(hour, minute, second);
QDateTime rideDateTime = QDateTime(rideDate, rideTime);
connect(&networkMgr, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError> & )), this, SLOT(onSslErrors(QNetworkReply*, const QList<QSslError> & )));
connect(&networkMgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestUploadRideWithGPSFinished(QNetworkReply*)));
connect(&networkMgr, SIGNAL(finished(QNetworkReply *)), &eventLoop, SLOT(quit()));
QString out, data;
@@ -889,6 +928,161 @@ RideWithGpsUploader::requestUploadRideWithGPSFinished(QNetworkReply *reply)
}
}
// Today's Plan
// ----------------
TodaysPlanUploader::TodaysPlanUploader(Context *context, RideItem *ride, ShareDialog *parent) :
ShareDialogUploader(tr("TodaysPlan"), context, ride, parent)
{
todaysPlanUploadId = ride->ride()->getTag("TodaysPlan uploadId", "0").toInt();
}
bool
TodaysPlanUploader::canUpload( QString &err )
{
#ifdef GC_TODAYSPLAN_CLIENT_SECRET
token = appsettings->cvalue(context->athlete->cyclist, GC_TODAYSPLAN_TOKEN, "").toString();
if( token!="" )
return true;
err = tr("no Today's Plan token set. Please authorize in Settings.");
#else
err = tr("Today's Plan support isn't enabled in this build");
#endif
return false;
}
bool
TodaysPlanUploader::wasUploaded()
{
return todaysPlanUploadId>0;
}
void
TodaysPlanUploader::upload()
{
// OAuth no more login
token = appsettings->cvalue(context->athlete->cyclist, GC_TODAYSPLAN_TOKEN, "").toString();
if (token=="")
return;
requestUploadTodaysPlan();
if(!uploadSuccessful)
{
parent->progressLabel->setText(tr("Error uploading to Today's Plan"));
}
else
{
parent->progressLabel->setText(tr("Successfully uploaded to Today's Plan"));
}
}
void
TodaysPlanUploader::requestUploadTodaysPlan()
{
parent->progressLabel->setText(tr("Upload to Today's Plan..."));
parent->progressBar->setValue(parent->progressBar->value()+10/parent->shareSiteCount);
QEventLoop eventLoop;
QNetworkAccessManager networkMgr;
connect(&networkMgr, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError> & )), this, SLOT(onSslErrors(QNetworkReply*, const QList<QSslError> & )));
connect(&networkMgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestUploadTodaysPlanFinished(QNetworkReply*)));
connect(&networkMgr, SIGNAL(finished(QNetworkReply *)), &eventLoop, SLOT(quit()));
QString url = QString("%1/rest/files/upload")
.arg(appsettings->cvalue(context->athlete->cyclist, GC_TODAYSPLAN_URL, "https://whats.todaysplan.com.au").toString());
QNetworkRequest request(url);
QString boundary = QVariant(qrand()).toString()+QVariant(qrand()).toString()+QVariant(qrand()).toString();
//TcxFileReader reader;
JsonFileReader reader;
QByteArray file = zCompress(reader.toByteArray(context, ride->ride(), parent->altitudeChk->isChecked(), parent->powerChk->isChecked(), parent->heartrateChk->isChecked(), parent->cadenceChk->isChecked()));
QString rideName = ride->fileName;
rideName.append(".gz");
// MULTIPART *****************
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
multiPart->setBoundary(boundary.toLatin1());
request.setRawHeader("Authorization", (QString("Bearer %1").arg(token)).toLatin1());
QHttpPart jsonPart;
jsonPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"json\""));
QString json = QString("{ filename: \"%1\"; name: \"%2\" }").arg(rideName).arg(parent->titleEdit->text());
jsonPart.setBody(json.toLatin1());
QHttpPart attachmentPart;
attachmentPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"attachment\"; type=\"text/xml\""));
attachmentPart.setBody(file);
multiPart->append(jsonPart);
multiPart->append(attachmentPart);
networkMgr.post(request, multiPart);
parent->progressBar->setValue(parent->progressBar->value()+30/parent->shareSiteCount);
parent->progressLabel->setText(tr("Upload... Sending to Today's Plan"));
eventLoop.exec();
}
void
TodaysPlanUploader::requestUploadTodaysPlanFinished(QNetworkReply *reply)
{
parent->progressBar->setValue(parent->progressBar->value()+50/parent->shareSiteCount);
parent->progressLabel->setText(tr("Upload to Today's Plan finished."));
uploadSuccessful = false;
QString uploadError;
try {
// parse the response
QString response = reply->readAll();
//qDebug() << "response" << response;
MVJSONReader jsonResponse(string(response.toLatin1()));
// get values
QString state = jsonResponse.root->getFieldString("state").c_str();
if (state == "error")
uploadError = jsonResponse.root->getFieldString("message").c_str();
todaysPlanUploadId = jsonResponse.root->getFieldInt("id");
} catch(...) {
// problem!
uploadError = "bad response or parser exception.";
todaysPlanUploadId = 0;
}
// if not there clean out
if (uploadError.toLower() == "none" || uploadError.toLower() == "null")
uploadError = "";
if (uploadError.length()>0 || reply->error() != QNetworkReply::NoError) {
//qDebug() << "Error " << reply->error() ;
//qDebug() << "Error " << uploadError;
parent->errorLabel->setText(parent->errorLabel->text()+ tr(" Error from Today's Plan: ") + uploadError + "\n" );
} else {
// Success
ride->ride()->setTag("TodaysPlan uploadId", QString("%1").arg(todaysPlanUploadId));
ride->setDirty(true);
//qDebug() << "uploadId: " << todaysPlanUploadId << rideName;
parent->progressBar->setValue(parent->progressBar->value()+10/parent->shareSiteCount);
uploadSuccessful = true;
}
}
// CyclingAnalytics
// ----------------
CyclingAnalyticsUploader::CyclingAnalyticsUploader(Context *context, RideItem *ride, ShareDialog *parent) :
ShareDialogUploader(tr("CyclingAnalytics"), context, ride, parent)
{
@@ -945,6 +1139,7 @@ CyclingAnalyticsUploader::requestUploadCyclingAnalytics()
QEventLoop eventLoop;
QNetworkAccessManager networkMgr;
connect(&networkMgr, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError> & )), this, SLOT(onSslErrors(QNetworkReply*, const QList<QSslError> & )));
connect(&networkMgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestUploadCyclingAnalyticsFinished(QNetworkReply*)));
connect(&networkMgr, SIGNAL(finished(QNetworkReply *)), &eventLoop, SLOT(quit()));
@@ -1038,6 +1233,9 @@ CyclingAnalyticsUploader::requestUploadCyclingAnalyticsFinished(QNetworkReply *r
}
}
// SelfLoops
// ----------------
SelfLoopsUploader::SelfLoopsUploader(Context *context, RideItem *ride, ShareDialog *parent) :
ShareDialogUploader(tr("SelfLoops"),context, ride, parent)
{
@@ -1098,6 +1296,7 @@ SelfLoopsUploader::requestUploadSelfLoops()
QEventLoop eventLoop;
QNetworkAccessManager networkMgr;
connect(&networkMgr, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError> & )), this, SLOT(onSslErrors(QNetworkReply*, const QList<QSslError> & )));
connect(&networkMgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestUploadSelfLoopsFinished(QNetworkReply*)));
connect(&networkMgr, SIGNAL(finished(QNetworkReply *)), &eventLoop, SLOT(quit()));

View File

@@ -63,6 +63,10 @@ protected:
Context *context;
RideItem *ride;
ShareDialog *parent;
private slots:
void onSslErrors(QNetworkReply *reply, const QList<QSslError>&error);
};
// uploader to strava.com
@@ -123,6 +127,33 @@ private:
bool loggedIn, uploadSuccessful;
};
// uploader to todaysplan.com
class TodaysPlanUploader : public ShareDialogUploader
{
Q_OBJECT
G_OBJECT
public:
TodaysPlanUploader(Context *context, RideItem *item, ShareDialog *parent = 0);
virtual bool canUpload( QString &err );
virtual bool wasUploaded();
virtual void upload();
private slots:
void requestUploadTodaysPlan();
void requestUploadTodaysPlanFinished(QNetworkReply *reply);
private:
QString token;
bool loggedIn, uploadSuccessful;
QString uploadStatus;
int uploadProgress;
int todaysPlanUploadId;
};
// uploader to cyclinganalytics.com
class CyclingAnalyticsUploader : public ShareDialogUploader
{
@@ -261,6 +292,7 @@ private:
QCheckBox *stravaChk;
QCheckBox *todaysPlanChk;
QCheckBox *cyclingAnalyticsChk;
QCheckBox *rideWithGPSChk;
QCheckBox *selfLoopsChk;
@@ -272,6 +304,7 @@ private:
RideItem *ride;
ShareDialogUploader *stravaUploader;
ShareDialogUploader *todaysPlanUploader;
ShareDialogUploader *cyclingAnalyticsUploader;
ShareDialogUploader *rideWithGpsUploader;
ShareDialogUploader *selfLoopsUploader;

View File

@@ -21,6 +21,7 @@
#include "Context.h"
#include "Settings.h"
#include "TimeUtils.h"
#include "Secrets.h"
#include <QUrl>
#include <kqoauthmanager.h>
#include <kqoauthrequest.h>

View File

@@ -228,6 +228,7 @@ void KQOAuthManager::executeRequest(KQOAuthRequest *request) {
urlWithParams.setQuery(query);
#endif
networkRequest.setUrl(urlWithParams);
qDebug() << "urlWithParams:" << urlWithParams;
// Submit the request including the params.
QNetworkReply *reply = d->networkManager->get(networkRequest);

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
doc/design/Flow UX4.eddx Normal file

Binary file not shown.

BIN
doc/design/GC Personas.odt Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
doc/user/GC V3.4 Flyer.pdf Normal file

Binary file not shown.

View File

@@ -0,0 +1,4 @@
date,weightkg,fatkg,boneskg,musclekg,leankg,fatpercent,comment
2017-01-01T12:00:00Z,2,3,4,5,6,7,Useless data - but valid format
2017-01-02T12:00:00Z,80.15,12.10,5.4,0,32.5,11.57,Test Value
2017-01-03T12:00:00Z,81.15,12.10,5.4,0,32.5,12.57,"Here the comment text contain commas itself, so it needs quotes"
1 date weightkg fatkg boneskg musclekg leankg fatpercent comment
2 2017-01-01T12:00:00Z 2 3 4 5 6 7 Useless data - but valid format
3 2017-01-02T12:00:00Z 80.15 12.10 5.4 0 32.5 11.57 Test Value
4 2017-01-03T12:00:00Z 81.15 12.10 5.4 0 32.5 12.57 Here the comment text contain commas itself, so it needs quotes

View File

@@ -0,0 +1,4 @@
ts,weightkg,fatkg,boneskg,musclekg,leankg,fatpercent,comment
1,2,3,4,5,6,7,Is a technically valid entry but the timestamp is 1 second of Epoch so it will never be in the possible time range
1479632565,80.15,12.10,5.4,0,32.5,11.57,Test Value
1479632865,81.15,12.10,5.4,0,32.5,12.57,"Here the comment text contain commas itself, so it needs quotes"
1 ts weightkg fatkg boneskg musclekg leankg fatpercent comment
2 1 2 3 4 5 6 7 Is a technically valid entry but the timestamp is 1 second of Epoch so it will never be in the possible time range
3 1479632565 80.15 12.10 5.4 0 32.5 11.57 Test Value
4 1479632865 81.15 12.10 5.4 0 32.5 12.57 Here the comment text contain commas itself, so it needs quotes

View File

@@ -0,0 +1,59 @@
Description of File-Format for "Body Measures - .CSV Import" function
---------------------------------------------------------------------
Example for Timestamp is provided here:
----
ts,weightkg,fatkg,boneskg,musclekg,leankg,fatpercent,comment
1,2,3,4,5,6,7,Is a technically valid entry, but the timestamp is 1 second of Epoch
1479632565,80.15,12.10,5.4,0,32.5,1157,Test Value
1479632865,80.15,12.10,5.4,0,32.5,1157,"Here the comment text contain commas itself, so it needs quotes"
----
Example for Date/Time is provided here:
date,weightkg,fatkg,boneskg,musclekg,leankg,fatpercent,comment
2017-01-01T12:00:00Z,2,3,4,5,6,7,Useless data - but valid format
2017-01-02T12:00:00Z,80.15,12.10,5.4,0,32.5,1157,Test Value
2017-01-02T12:00:00Z,80.15,12.10,5.4,0,32.5,1157,"Here the comment text contain commas itself, so it needs quotes"
a) Header Line
First Line of a valid file has to contain header information. This has to be a comma-separated
list of the measures provided in the data lines. You do not need to provide all possible measures,
but at least "ts" and "weightkg".
As mandatory field you need time/date of the measures. There are 2 options:
- "ts" - Unix timestamp (in seconds) since Epoch. The value can be calcuated in XLS - just Google how-to.
OR
- "date" - ISO8601 formatted Date/Time String
The mandatory measure is:
- "weightkg" - Athlete weight in kilograms
The optional measures are:
- "fatkg" - Fat mass in kg
- "boneskg" - Bone mass in kg
- "musclekg" - Muscle mass in kg
- "leankg" - Lean mass in kg
- "fatpercent" - Fat percentage
- "comment" - A description of the measures
Data formats:
- "ts" is a 64Bit Integer - any other time will be rejected
- "date" is a ISO8601 formated date/time
- "comment" is a String - if it contains "commas" itself the string must be enclosed by "string with comma, and more comment"
- all other measures are float/double in format <xxxxxxx.yyy>
There are very strict format checks when importing. Only if the whole
file is correct the data is imported. Any error (even in a single entry)
will block the complete import.
The following error will stop the import.
- Unknown measures in header
- Number of measures in header is different to number in an item
- Item measure in wrong format
- "ts" or "weightkg" is missing

View File

@@ -23,6 +23,10 @@ isinf(p1)
isnan(p1)
LIST / VECTOR REDUCE FUNCTIONS
Vectors are about collecting data from across a date range, specified as
expression[[Date_From:Date_To]]
where dates can be absolute s.t. 2017/09/19 or relative s.t. Date-7
you can use them within a formula using the following functions:
sum(...)
mean(...)
max(...)
@@ -77,6 +81,9 @@ DATA PROCESSOR FUNCTIONS
autoprocess(filter)
postprocess(processor, filter)
DAILY MEASURES ACCESS
measure(date, "group", "field")
RIDE SAMPLE DATA
SECS

View File

@@ -0,0 +1,47 @@
Description of File-Format for "HRV Measures - .CSV Import" function
---------------------------------------------------------------------
Example file:
timestamp_measurement,HR,AVNN,SDNN,rMSSD,pNN50,LF,HF,HRV4T_Recovery_Points
2017-04-01 09:56:21 +0000,43.92,1364.75,84.05,67.54,40.48,0.0418,0.0339,8.37
2017-04-02 09:27:24 +0000,43.42,1348,59.46,56.38,32.56,0.0655,0.0331,8.09
2017-04-03 07:37:03 +0000,41.38,1502.73,76.92,72.04,60.53,0.0476,0.0516,8.47
this was generated by HRV4Training App with unsupported columns and empty lines removed using a spreasheet.
a) Header Line
First Line of a valid file has to contain header information. This has to be a comma-separated
list of the measures provided in the data lines. You do not need to provide all possible measures,
but at least "timestamp_measure" and "rMSSD".
As mandatory field you need time/date of the measures:
- "timestamp_measure" - ISO8601 formatted Date/Time String
The mandatory measure is:
- "rMSSD" - Square root of the mean of the squares of differences between adjacent NN intervals
The optional measures are:
- "HR" - Average HR
- "AVNN" - Average of all NN interval
- "SDNN" - Standard deviation of all NN intervals
- "pNN50" - Percentage of differences between adjacent NN intervals that are greater than 50 ms
- "LF" - Power at Low Frequencies
- "HF" - Power at High Frequencies
- "HRV4T_Recovery_Points" - A log transform of rMSSD
Data formats:
- "date" is a ISO8601 formated date/time
- all other measures are float/double in format <xxxxxxx.yyy>
There are very strict format checks when importing. Only if the whole
file is correct the data is imported. Any error (even in a single entry)
will block the complete import.
The following error will stop the import.
- Unknown measures in header
- Number of measures in header is different to number in an item
- Item measure in wrong format
- "timestamp_measure" or "rMSSD" is missing

View File

@@ -31,3 +31,8 @@ http://localhost:12021 Default base URL
before=yyyy/mm/dd
series=xxx where xxx is one of watts,hr,cad,speed,nm,vam.xPower,NP
Returns an aggregate of the best mean maximal values over the date range
/<athlete>/measures List supported measures groups (Body/Hrv for now)
/<athlete>/measures/<group> Fetch Measures from <group> for a Date Range
since=yyyy/mm/dd
before=yyyy/mm/dd

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 KiB

BIN
doc/wiki/HRV_Filter_R-R.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
doc/wiki/HRV_Measures.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

BIN
doc/wiki/HRV_xData.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Some files were not shown because too many files have changed in this diff Show More