cldf 1.4.1
cldf: ^1.4.1 copied to clipboard
A Dart implementation of the Crushlog Data Format (CLDF) for climbing data exchange.
Changelog #
1.4.1 #
Fixed #
- Java Schema Compatibility - Fixed manifest serialization to comply with Java schema validation
creationDatenow includes timezone suffix (RFC 3339 format) - converts to UTC with 'Z' suffix- Removed
descriptionfield from manifest (not defined in schema) - Null fields (
author,exportOptions, etc.) are now omitted from JSON instead of being included asnull - Added
includeIfNull: falseto all@JsonSerializableannotations in manifest models
Changed #
- Manifest
creationDatefield now always serializes to UTC timezone format - Test expectations updated to compare UTC timestamps for consistency
1.4.0 #
Changed #
- CLID Generation Alignment - Aligned with Java implementation for consistency
- Removed
RouteTypeenum from CLID route model (simplified to name, grade, firstAscent, height) - Route type no longer affects CLID generation - routes are uniquely identified by location + name + grade
- Updated
CLIDGeneratorto exclude route type from deterministic components - Simplified route validation by removing type-specific checks
- Updated
CLDFClidAdapterto work without route type mapping
- Removed
Improved #
- Better separation between CLID generation models and main data models
- Reduced coupling between route metadata and CLID generation
- Improved maintainability through model simplification
1.3.1 #
Fixed #
- Code Quality Improvements - Resolved SonarCloud analysis issues
- Fixed grade systems to match schema specification - removed unsupported systems
- Now only supports the 5 official grade systems: vScale, font, french, yds, uiaa
Changed #
- Refactored QR generation code for better maintainability
- Improved date parsing with clearer method separation
1.3.0 #
Added #
- CLID Support - Initial implementation of Crushlog IDs (CLIDs)
- CLIDs use versioned format
clid:v1:type:uuidfor unique entity identification - New
CLIDGeneratorclass for generating v1 CLIDs - Full CLID validation and parsing support
- QR code generation and cross-platform QR code scanning between Java and Dart implementations
- CLIDs use versioned format
1.2.3 #
Added #
- Unified Media Model - Complete overhaul of media support across all entities
- Media can now be attached to routes, locations, and sectors (in addition to climbs)
- New
MediaDesignationenum for semantic categorization of media purpose:topo- Route diagrams and mapsbeta- How-to information and technique videosapproach- Access and trail informationlog- Climb documentation and send photosoverview- General views and panoramasconditions- Current state and conditionsgear- Equipment and protection informationdescent- Down-climb or rappel informationother- Unspecified purpose (default)
- New fields in
MediaItem:designation- Purpose/type of media contentcaption- User-provided descriptiontimestamp- When the media was created or taken
- Added
externaltoMediaSourceenum for external URLs (YouTube, etc.) - Enhanced metadata structure with coordinate support
Changed #
- Renamed
FlexibleMediaItemtoMediaItemfor consistency with Java implementation - Renamed old
MediaItemtoMediaMetadataItemto clarify its use for standalone media files - Media model is now consistent across Java and Dart implementations
Enhanced #
- Route, Location, and Sector models now include optional
mediafield - Schema validation updated to support media on all entity types
- Comprehensive test coverage for new media functionality
1.2.2 #
Added #
- Comprehensive logging for import and export operations
- Detailed progress tracking during CLDF archive reading
- Error logging with specific failure reasons for each parsing step
- Export operation logging with file sizes and checksums
- Summary statistics on successful import/export
- Fine-grained logging levels for debugging
- Round-trip integration tests to ensure data integrity
- Tests for minimal archives with required data only
- Tests for complete archives with all optional data
- Tests for media file handling
- Tests for custom field preservation
- Tests for empty collection handling
- Support for date-time strings in date fields
FlexibleLocalDateConverternow accepts ISO date-time strings (e.g., "2024-01-29T12:00:00Z")- Extracts the date part from date-time strings for fields that require date-only values
- Maintains compatibility with all existing date formats
1.2.1 #
Fixed #
- Session model now uses strongly typed enums instead of strings
climbTypenow usesClimbTypeenumrockTypenow usesRockTypeenumterrainTypenow usesTerrainTypeenum
1.2.0 #
Added #
Statsclass to Manifest for export statistics (matching schema and Java implementation)- Includes counts for: climbs, sessions, locations, routes, sectors, tags, media
DateRangeclass for ExportConfig to support date-filtered exportssourcefield to Manifest for tracking the source applicationwebsitefield to Author class (previously Creator)- Comprehensive Platform enum tests with validation
Enhanced #
- CLDFWriter now automatically calculates stats when writing archives if stats are not already provided
- Counts for: climbs, sessions, locations, routes, sectors, tags, media
- Preserves existing stats if already present in the manifest
Changed #
- Renamed
Creatorclass toAuthorto match schema and Java implementation ExportConfignow includesdateRangefield for date-filtered exportsexportConfigfield in Manifest now maps to JSON propertyexportOptionsto match schema
Fixed #
- Platform enum values updated to match schema specification exactly
- Changed from:
desktop,mobile,web,api - Changed to:
iOS,Android,Web,Desktop
- Changed from:
- All references to
Platform.mobileupdated toPlatform.iOSin tests and examples
Breaking Changes #
- Major version bump due to breaking changes in Platform enum and Creator/Author rename
Creatorclass renamed toAuthor- update all referencesPlatform.mobilehas been removed - usePlatform.iOSorPlatform.androidinsteadPlatform.apihas been removed - not part of the schema specification- Author class no longer has
userIdfield (not in schema)
1.1.1 #
1.1.0 #
Added #
- Flexible media model support with new
MediaandFlexibleMediaItemclasses MediaSourceenum extended with:local,cloud,referencevaluesRouteCharacteristicsenum for route protection types (trad/bolted)- New fields in models:
Tag: Added requiredisPredefinedfieldLocation: Addedstarred(bool) andcreatedAt(DateTime?) fieldsSector: AddedisDefault(bool),createdAt(DateTime?), andapproach(String?) fieldsRoute: AddedrouteCharacteristics(RouteCharacteristics?) andgearNotes(String?) fieldsSession: AddedisOngoing(bool) field with default value of false
- Comprehensive test coverage for all model updates
Changed #
MediaItem.idchanged from String to int for consistencyTag.categorychanged from required to optionalLocation.countrychanged from required to optionalProtectionRatingenum updated to match schema values: bombproof, good, adequate, runout, serious, xRockTypeenum updates:- Changed
tufftovolcanicTuff - Added: dolomite, slate, gabbro, andesite, chalk
- Changed
SessionTypeenum added: multiPitch, boardSessionMediaSourceenum maintains backward compatibility with legacy values
Fixed #
- Schema synchronization issues between Dart and Java implementations
- Type consistency across all CLDF components
1.0.0 #
- Initial release
- Full support for CLDF 1.0.0 specification
- Read and write CLDF archives
- JSON serialization/deserialization for all models
- Type-safe Dart models
- Archive creation with automatic checksums