Skip to content

v0.8

Choose a tag to compare

@cmolnar65 cmolnar65 released this 26 Oct 02:35
· 570 commits to main since this release
5b4aa84

What's Changed

Version 0.8 expands workout import compatibility, improves FIT data fidelity, adds workout photos, and strengthens workout rebuilding and import recovery.

Workout Import Improvements

  • Added support for compressed workout files:
    • .fit.gz, including TrainingPeaks exports
    • .zip, including FORM workout exports
    • Compressed FIT, CSV, GPX, and TCX sources where applicable
  • Added validation and safety controls for compressed files, including expanded-size limits and ZIP content validation.
  • Preserved original compressed source files so workouts can be rebuilt from their original data.
  • Improved failed-import recovery so a failed import can be retried safely using its previously preserved source file.
  • Preserved duplicate-import protection while allowing legitimate retries of failed imports.

Apple Watch FIT Support

  • Improved identification of Apple Watch FIT files when the FIT manufacturer value does not directly identify Apple.
  • Apple Watch model information is now retained when available.
  • Improved Apple Watch pool-swim parsing, including:
    • Average heart rate
    • Maximum heart rate
    • Calories
    • Active lengths
    • Rest lengths
    • Pool length
    • Stroke type
    • Per-length stroke counts
  • Added support for historical FIT local timestamps so older workouts are assigned the correct local workout time rather than relying solely on the current WordPress timezone.

Per-Length Stroke Counts

  • Added storage and display of individual-length stroke counts from FIT files.
  • Supports FIT sources that provide standard per-length total_strokes data, including tested Apple Watch and Garmin workouts.
  • Workout Details now displays a Strokes column when stroke-count data is available.
  • Existing workouts can acquire the newly supported stroke-count information by rebuilding them from their preserved FIT source.

Workout Rebuilding

  • Corrected workout rebuilding so FIT, CSV, GPX, and TCX parser dependencies are loaded reliably.
  • Rebuilds now use the same archive-aware parsing path as normal imports.
  • Preserved .fit.gz and other compressed sources can therefore be decompressed and reparsed correctly during a rebuild.
  • Rebuild operations remain transactional so failed reparsing does not leave partially rebuilt workout data.

Workout Photos

  • Added support for attaching up to three photos to a workout.
  • Supports JPEG, PNG, GIF, and WebP images.
  • Photos can be uploaded, replaced, and deleted from the workout administration interface.
  • Workout photos are maintained separately from imported workout source data and survive workout rebuilds.

Release Packaging

  • Updated the release builders so WordPress.org listing assets are excluded from the installable plugin ZIP.
  • WordPress.org banners, icons, and screenshots remain separate from the plugin installation package.

Reliability and Testing

  • Added regression coverage for compressed workout extraction, workout rebuilding, failed-import retries, release packaging, database schema migration, FIT timestamps, and stroke-count handling.
  • Added private regression testing against historical Apple Watch FIT data.
  • Added validation against real Garmin FIT per-length stroke-count data.
  • Corrected an import database-table initialization issue discovered during production testing.
  • Added SHA-256 validation before reusing a protected source from a failed import.

Database Update

Version 0.8 introduces the database changes required to store per-length stroke counts. Existing installations are upgraded automatically through the plugin's database migration process.

Validation

The final v0.8 release passed:

  • PHP 7.4
  • PHP 8.0
  • PHP 8.1
  • PHP 8.2
  • PHP 8.3
  • PHP 8.4
  • PHPUnit test suite
  • WordPress Plugin Check release-package validation

The final release was also tested with real Apple Watch and Garmin FIT workout data.

Full Changelog: v0.7...v0.8