{"name": "ND Data Importer", "package_name": "data_importer", "version": "1.3.4", "experimental": false, "qgis_min": "3.0.0", "qgis_max": "3.99.0", "downloads": 340, "uploaded_by": "needle11", "upload_datetime": "2025-11-09T15:24:28.721324", "changelog": "1.3.4 - Industry-Standard Collar Grouping and Enhanced Layer Metadata\n- BREAKING CHANGE: Collar grouping now uses hole_id + state instead of coordinates\n- Real drill hole IDs preserved from API (no more auto-generated DH0001, DH0002)\n- Hybrid grouping: Primary by (hole_id, state), fallback to coordinates if missing\n- Cross-state disambiguation: Same hole_id in different states kept separate\n- COLLAR LAYER: Added comprehensive fields (company_name, final_depth, datum, hole_type, project_name, avg_value)\n- TRACE LAYER: Added detailed sample fields (sample_id, assay_element, assay_unit, sample_method, company_name, project_name)\n- Added grey dashed lines for gap segments (no assay data) with \"No Assay Data\" legend entry\n- Visual continuity: Full drill hole extent visible from collar to final depth\n- Enhanced data validation with descriptive error messages for missing fields\n- Coordinate-based grouping with warning logs for records without hole_id\n- Auto-generated IDs (AUTO-0001) only for records missing hole_id\n- Fixed progress dialog staying on top after successful import\n- Fixed map zoom showing incorrect location (random sea) after assay import\n- Improved CRS transformation for accurate zoom extent calculation\n- Better alignment with industry geological data standards\n- Improved data integrity and traceability for drill hole analysis\n- Fixed authentication dialog not appearing when user not logged in\n\n1.3.3 - Critical Stability and Authentication Reliability Release\n- CRITICAL: Fixed token refresh race conditions preventing authentication lockouts\n- CRITICAL: Fixed logout not clearing refresh state flags (prevents future login failures)\n- CRITICAL: Fixed division by zero errors in trace visualization calculations\n- CRITICAL: Fixed zero-length line crashes in Qt geometry layer (segfault prevention)\n- HIGH: Added comprehensive data validation for trace visualization (missing field detection)\n- HIGH: Implemented retry logic with exponential backoff for failed token refreshes (2s, 4s, 8s)\n- HIGH: Added token validation on plugin startup (corrupts tokens automatically cleared)\n- HIGH: Implemented refresh failure tracking (stops timer after 3 consecutive failures)\n- MEDIUM: Added subscription expiration check in refresh to prevent wasted API calls\n- MEDIUM: Enhanced settings cleanup with error handling for corrupted QSettings\n- Enhanced wake-from-sleep scenario handling with proper token refresh\n- Improved error messages for subscription expiration vs authentication errors\n- Added comprehensive authentication flow logging for debugging\n- Fixed 403 \"User access expired\" error handling during streaming\n- Fixed trace line overlapping bug (now shows sequential depth segments)\n- Fixed gaps in trace lines between collar and first assay interval\n- Enhanced Qt C++ layer crash prevention with zero-length line detection\n- Production-ready stability improvements for enterprise deployments\n\n1.3.2 - Authentication and Visualization Enhancements\n- Added email autofill for login (password never stored for security)\n- Improved token persistence with proactive refresh at 30 minutes instead of 59 minutes\n- Enhanced token validation with automatic refresh before API calls\n- Better token lifecycle management on plugin startup\n- Added user-configurable trace visibility scale (default 1:50,000)\n- Custom trace range preset now shows generic names (Range 1, Range 2, etc.)\n- Custom preset pre-filled with Industry Standard values as template\n- Comprehensive logging for authentication debugging\n- Production code cleanup (removed all debug print statements)\n- Enhanced user experience with smarter login focus management\n\n1.3.0 - Role-Based Access Control and Data Protection Features\n- Implemented comprehensive role-based access control (tier_1, tier_2, admin)\n- Added JWT token decoding to extract user roles from Firebase auth tokens\n- Tier 1 (Free Trial) users limited to 1,000 records per fetch maximum\n- Disabled \"Fetch all records\" for Free Trial users with informative messaging\n- Added real-time validation for record count input with visual feedback\n- Implemented clickable role badge displaying user tier (Free Trial/Premium/Admin)\n- Role badge shows detailed plan information popup with features and limitations\n- Added latitude and longitude fields to location-only data in Identify Results\n- Fixed tooltip styling for location-only data (white background, dark text)\n- Enhanced hover tooltips to show collar_id as fallback when hole_id is empty\n- Fixed QgsField deprecation warning by migrating to QMetaType.Type\n- Improved \"Reset All\" button to properly re-enable record count field\n- Fixed text field staying disabled after blocking \"Fetch all records\" for Free Trial\n- Added proper error handling and user-friendly messages for all role restrictions\n- Enhanced security with foundational logic for future tier-based feature controls\n\n1.2.0 - Major UI/UX Enhancements and Authentication Improvements\n- Fixed critical dropdown focus issues with proper keyboard input handling\n- Implemented chip display limitations (max 4 + \"view all\" button)\n- Added searchable hole types dropdown with static data (no API calls)\n- Enhanced multi-selection with persistent popup behavior\n- Improved table display: N/A for null values, resizable columns, hover tooltips\n- Migrated plugin messages from QGIS interface to in-plugin message bar\n- Fixed authentication token persistence across plugin sessions\n- Added automatic token validation on plugin open/focus\n- Implemented direct login dialog flow for better UX\n- Added informational icons with help popups for feature explanations\n- Fixed incorrect logout messages when user was never logged in\n- Enhanced error handling and fallback mechanisms throughout\n- Removed debug print statements and improved code quality", "external_deps": null, "download_url": "https://plugins.qgis.org/plugins/data_importer/version/1.3.4/download/"}