This commit is based on https://github.com/GoldenCheetah/GoldenCheetah/pull/3956
with the following additions / changes:
* Upgraded to the latest version of the multiaxes-branch, thus eliminating crashes of GoldenCheetah on startup
* Disabled the emitting of Layout Requests on geometry changes of QwtScaleWidget - without this, CPU utilization was up to 100% on one core
* Added the class SplineLookup, reusing small portions of code from Qwt 6.1
* Re-added the splines in WPrime and RideFile (resampling), using the new interface of QwtSpline
* Appveyor: qwt in cache-section now depends on qwt/qwtconfig.prin.in for refresh on version change
.. if a ride has sport "Aero" or has "AERO" xdata then it is
identified as an aero ride file
.. isBike will now also check for isAero and return true, so
you can record aero data but the ride is still treat as a
bike ride in filters
a3760bb Upgrade Travis-ci builds to macOS 12.6
6b1dbf4 Added Bluetooth pairing to the device wizard (#4422)
c0c8f57 Update FIT SDK definitions to 21.126 (#4423)
0dd4bf6 Cursor in text workout editor was invisible
6e5b950 Fix crash on metadata config
1dd7faa Interval Metadata
d9abb58 Datafilter xdataseries(), xdataunits() and xdatavalues()
5fb3bbf FIT parser bounds check when adding new series
943deb6 Generic Support for Session and Lap in FIT files
146f9ea Fix Weekly tiles in default Trends layouts
ec0653f ErgFilePlot - realtime curves honor FFWD/RWND and lap F/B
43368ad Mapview: Added interactivity to the Smallplot (#4408)
72de6bb Fix lap data auto-reset in slope workouts
c2f440c Fix broken workout directory check for the first start (#4410)
b095b40 Fix shortcuts not available due to translations
e6ff1a1 Python Chart Editor Cosmetics
00e182c Better user experience when drawing segments on the map (#4403)
f746f73 GPX parser - support ns3 TrackPointExtension name
9ae7521 Upgrade Travis-ci macOS version to macOS 11.6
e8132b1 Upgrade Travis-ci Linux version to Ubuntu 20.04
8f2ba0e Special case Start Date and Time in the cache
110652b Update German translation
fabc344 Add Wahoo PowrLink
f783814 Train library - add path to the list of possible errors
48d91d0 Fix issues after perspective switch (#786)
59a8ca2 Implemented compare mode for RideMapWindow (#786)
733db9c Ignore dot folders on athlete open/backup/delete
951e5f3 Fix crash on invalid perspective filter
[publish binaries]
* Added Bluetooth pairing to the device wizard
The wizard will now search (but not connect) for available Bluetooth
devices. The result is a simple list with all device names. The user can
now choose the desired devices in a multi select list and save them as a
"allow list" in the global training mode configuration. If no device is
selected, the profile will use the old behaviour and the connect button
searches for available devices.
* Fixed allow list check and extracted check into its own method
* Allow all devices if allow list is empty
* Selecting "No sensors found..." did create an invalid Bluetooth allow list (;;) which denied all devices
Added checks for a valid Bluetooth configuration for saving and loading.
* Remove separator from display name
If a user (some devices allow custom names) or a vendor uses ';' or ','
in the display name, we will replace them. We identify devices by MAC
or UUID, so this does not break the allow list. The display name is
stored for easy identification by users and following features
Fix#4318
Changed the background to a lighter color to get the cursor visible again. To achive a good contrast, the text color for the selected line is now black. This combination works for dark and light mode.
You can define metadata fields with
* indicator it is interval specific
* expression to disable/enable the field
Metadata configuration is updated on upgrade to
include a couple of new interval specific fields
just to get the user started (if interval specific
fields already exist this is skipped).
If the user does not maintain interval specific
data it will not be stored in saved Json files.
Within the metadata chart if a field is defined as
being interval related then an interval selector will
be shown at the top of that tab. When intervals are
selected in the sidebar the selection is also changed.
Interval tags are stored in the RideFileInterval to avoid
linking and tracking changes to interval info like name, start
and so on. This is therefore separate from the current practice
of storing general tags in the RideFile class.
Along the way I fixed rideitem opening the ride itself before emitting
the signal rideselected- since some functions that process the ride
selected will not neccessarily reference via RideItem::ride() before
working with metadata and intervals.
Interval metadata is written to the TAGS in a Json file with a name
of "<interval name>##<field name>" and openRideFile post processes
metadata read from the TAGS and places into the relevant
RideFileInterval.
NOTE: This is experimental and likely contains some bugs, the expression
added to a field definition is also not yet implemented.
Fixes#4418
.. New datafilter functions to help access generic XDATA
xdataseries("LAP") - returns list of all series
xdataunits("LAP") - returns list of all units
xdatavalues("LAP") - returns values in sequence suitable
for use with overview tiles
GENERIC SUPPORT FOR PARSING INTO XDATA
.. Generically parse FIT file messages into XDATA. The current
implementation does this for session, lap and totals messages
but could very easily be extended to any other message type
.. Generic parsing uses metadata rather than hard coding the
message and field types and so on
.. The FIT metadata (FITmetadata.json) has been expanded to
include definitions of message types and all the standard
fields within the message types
.. The existing hard-coded parsing remains to extract data
and apply directly to ridefile samples and metadata. The
generic parser simply adds additional tabs on the data
view as XDATA so users can access it.
CODE REFACTORING, COMMENTS AND BUG FIXES
.. At some point the code needs to be refactored as it is
janky and needs to align with the rest of the codebase
.. Includes a mild refactor renaming some of the classes/structs
and variables to reflect what they actually are, for example:
FitFileReadState -> FitFileParser
FitDefinition -> FitMessage
.. Added lots of code comments and re-organised the code
into clear sections to help navigate what is a very
cumbersome source file, this breaks git blame history
but is worth the loss (you can checkout an earlier commit
to do a full blame)
.. Changed debugging levels to be more helpful
.. Generally I did not change any code, but there were a
couple of serious bugs that needed to be corrected:
Field definitions gets the type wrong in a couple of
places since the type is stored in the low 4 bits:
type = value & 0x1F
The decodeDeveloperFieldDescription function did not
check for NA_VALUEs for scale, offset, native field
.. For less serious bugs I added FIXME comments throughout the code
Fixes#4416
Summary of changes from v3.6 release:
ec0653f81 ErgFilePlot - realtime curves honor FFWD/RWND and lap F/B
43368addf Mapview: Added interactivity to the Smallplot (#4408)
72de6bbee Fix lap data auto-reset in slope workouts
c2f440c1c Fix broken workout directory check for the first start (#4410)
b095b403b Fix shortcuts not available due to translations
e6ff1a157 Python Chart Editor Cosmetics
00e182c41 Better user experience when drawing segments on the map
(#4403)
f746f7361 GPX parser - support ns3 TrackPointExtension name
9ae7521e5 Upgrade Travis-ci macOS version to macOS 11.6
e8132b1a5 Upgrade Travis-ci Linux version to Ubuntu 20.04
8f2ba0e11 Special case Start Date and Time in the cache
110652bf4 Update German translation
fabc344aa Add Wahoo PowrLink
f78381466 Train library - add path to the list of possible errors
48d91d02d Fix issues after perspective switch (#786)
59a8ca231 Implemented compare mode for RideMapWindow (#786)
733db9cb1 Ignore dot folders on athlete open/backup/delete
951e5f360 Fix crash on invalid perspective filter
[publish binaries]
* Added a tooltip showing data about the current position (Altitude, Power,
HR, Time)
* Added a marker to the map corresponding to the current mouse position
(both Google and OSM)
* Changed scaling of the smallplot: Chart is now between lowest point and
highest point instead of sea level and highest point
+ Lap Distance was wrong until the first lap due to currentLap
not checking the lap lower bound.
+ Lap Time was not reset due to workoutLap being also modified in
guiUpdate, so the newLap signal was never generated.
+ Additionally newLap slot remove duplicate functions called on newLap signal
and moved counters reset to the signal handling slot.
Fixes#4411
Fix1:
appsettings->value default fallback "0" if no fallback value was given.
So a new GoldenCheetah installation will always use path "0" until a
workout directory was set in the settings.
We now use an empty string as fallback to get the condition working
again
Fix2:
Instead of using the athlete->home parent folder, the old code returned
the parent's parent folder. Until a workout directory was set in the
settings, the user had to navigate to the (hidden) athletes folder
everytime by hand.
.. when working with a light background the syntax highlighting
renders the text almost impossible to read because it uses
very light colors
.. additionally, when the colors/theme are changed the python
editor does not reflect the change until a restart
.. we should likely apply the same changes to the datafilter
editor in the user chart
* Increased the area in which points are searched when clicking / hovering a
track, easing the process of starting segment creation and giving more
precision while drawing
* Hovering the track when drawing segments is not blocked any more by highlighted
segments / parts of the current segment (i.e. segments can be shrinked during
creation)
Fixes#4394
To test v3.6 building on currently supported OS versions:
* Windows 10 (no change here)
* macOS 10.14 changed to macOS 11.6
* Ubuntu 18.04 changed to Ubuntu 20.04
Additionally it contains a fix to possible crashes with invalid
perspective filters, some cosmetic fixes and a new feature:
- Compare mode is now available for the Map chart
Please stay with the release version unless you are willing to
collaborate with testing.
[publish binaries]
* Upgraded leaflet to 1.9.4
* Fixed the condition when chart must be set to blank
* Fixed the zoom-level for OSM when switching perspective for the first time
Update errors member from DataFiltererrors on constructor
and use it in evaluate functions, since they can be used when
DataFiltererrors no longer corresponds to this expression.
Fixes#4384