.. 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.
.. 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
.. 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.
... 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
.. 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.
Adds isMetricRelevantForRides(specification, metric) to RideCache
to check if a metric isRelevant for some of the activities passing
the specification
Also reduces from 3 to 1 the calls to getRideTypeCounts