Systematically resolved 30 identified potential crash vectors and established automated regression testing to prevent strict reoccurrence.
Key Changes:
- Fixed 11 instances of unsafe `QObject::connect` calls (missing context object) in srd/Charts/AgendaWindow.cpp, FixSpikes.cpp, src/FileIO/FixSpikes.cpp, src/Gui/Agenda.cpp, src/Gui/BatchProcessingDialog.cpp, and src/Gui/IconManager.cpp. This prevents crashes caused by signals firing after the receiver has been destroyed.
- Fixed 19 instances of unsafe `QTreeWidgetItem` child access in src/Charts/LTMChartParser.cpp, src/Gui/ColorButton.cpp, src/Gui/AthletePages.cpp, and src/Gui/Pages.cpp by adding defensive `nullptr` checks before dereferencing.
- Added Python detection scripts util/check_unsafe_connects.py and util/check_unsafe_tree_child.py to statically analyze the codebase for these specific unsafe patterns.
- Integrated detection scripts into the regression test suite under `unittests/Core/signalSafety`, verifying the fixes and enforcing a strict zero-tolerance policy for future regressions.
- Added `testSplineCrash` to cover edge cases with empty spline lookups.
* Improve the build speed by 2-3X by using PCH. This avoids rebuilding large parts of QT and C++ std headers over and over.
* Unfortunately QMake is too opinionated for this to work on macOS so it is used on Windows and Linux only.
* Remove qwindowsvistastyle.dll opengl32sw.dll from QT6 as they're not needed.
* Revert fa84a37 since we don't need it anymore.
Fixes#4512
* Added additional time range options for user defined seasons
* Relative start (e.g. 3 months ago)
* Duration after start / Duration before end (e.g. 2 months)
* Year to Date end, defining the end as the closest day with todays
day and month after start
* Refactored Season.h/cpp and SeasonParser.h/cpp for better testability
* Kept Season, Phase, SeasonEvent, SeasonOffset, SeasonLength in
Season.h/cpp
* Moved all UI related classes to SeasonDialogs.h/cpp
* Renamed SeasonParser.h/cpp to Seasons.h/cpp, moved class Seasons
there
* Replaced deprecated Qt classes
* Replaced QRegExp by QRegularExpression in SeasonParser
* Rewrote parsing seasons.xml to use QXmlStreamReader instead of
QXmlSimpleReader
* Unittesting
* Added a simple way to implement and execute (make check) unittests
in Golden Cheetahs source tree based on Qt Test
(https://doc.qt.io/qt-6/qttest-index.html), tested on Linux and
Windows
* Implemented unittests for classes (mostly before refactoring)
* Season
* SeasonParser
* SeasonOffset
Added support to
* filter workouts by multiple metrics
* rate and tag workouts
* view detailed information about the selected workout
* Preserving user-content in trainDB on rescan for workouts
Fixes#411
.. run make in src/doc/doxygen to generate documentation for the
source code in html and latex format.
.. doing this to get some basic docs going, since the codebase is
now so large its getting difficult for even the core team to
remember.
.. the subdirectories generated are ignored (see .gitignore)
[skip ci]
Fixup crashes and major issues created by porting
to QT5. These have included;
* Fix CP plot log scale
* AllPlot axes and tooltip
* DBAccess prepare/bind bug
* LTMSettings crash
* LTMWindow zoomer/picker crash
* LTMPlot axes hack
There are still issues remaining but we can start
working through them at leisure -- the product now
builds and runs.