Skip to content

v2.3.0

Choose a tag to compare

@github-actions github-actions released this 12 May 09:35
· 73 commits to master since this release

Highlights

  • Added intra-dataset file/folder copy (POST /obj/copy) and cross-dataset copy-without-move semantics (keepSource) on the Transfer endpoint.
  • Point cloud build format migrated from EPT to COPC (copc/cloud.copc.laz); existing EPT datasets fall back automatically until rebuilt.
  • [Hub] Added full clipboard Copy/Cut/Paste system with Ctrl+C/X/V shortcuts and context menu, supporting intra-dataset and cross-dataset operations.

Added / Changed

  • Added POST /obj/copy endpoint for intra-dataset file and folder copy operations with optional overwrite support.
  • Added keepSource parameter to the POST /transfer endpoint; when true, the source entry is preserved (copy semantics instead of move).
  • Added POST /system/cleanup endpoint (admin only) to remove stale index entries and orphaned build artifacts; runs synchronously for a single dataset, or asynchronously (Hangfire job) for an organization or all datasets.
  • Added recurring dataset cleanup job scheduled daily at midnight by default; configurable via DatasetCleanupCron in appsettings.json (set to empty to disable).
  • Added BuildJobFailureFilter Hangfire state filter to invalidate build-pending cache when a build job permanently enters the Failed state.
  • Changed point cloud build source to COPC (copc/cloud.copc.laz) with automatic fallback to legacy EPT for datasets not yet rebuilt.
  • Added typed DdbBuildInProgressException to distinguish concurrent build conflicts from generic errors, enabling retry strategies without string matching.
  • Moved dataset visibility cache preload to a background task so server startup is not blocked on large installations.
  • Improved GetOrganization to lazy-load datasets on demand (opt-in via withDatasets), reducing unnecessary JOIN queries on organization lookups.
  • Updated release artifact filenames to include the version tag (e.g., Registry-v2.3.0-Win64.zip).
  • [CI] Updated dependencies: Microsoft.EntityFrameworkCore 10.0.7, NUnit 4.6.0, Microsoft.NET.Test.Sdk 18.5.1, Scalar.AspNetCore 2.14.11, System.IdentityModel.Tokens.Jwt 8.18.0.
  • [Docker] Replaced Directory.Delete with mount-point-safe EmptyDirectoryContents during Hub and DDB installation reset to prevent "Device or resource busy" errors on Linux bind-mount volumes.
  • [DroneDB] Added ddb cleanup CLI command and DDBCleanup() C API to remove stale database entries and orphaned build artifacts, returning structured results (entries, builds).
  • [DroneDB] Added Untwine as an optional COPC accelerator; falls back to PDAL automatically when the binary is not present. Configurable via DDB_COPC_BACKEND, DDB_UNTWINE_PATH, and DDB_USE_PDAL_COPC.
  • [DroneDB] Added kernel-managed advisory build locking (F_OFD_SETLK on Linux, flock() on macOS/BSD), replacing PID-based stale lock detection; orphaned locks from crashed or container-recycled processes are reclaimed transparently.
  • [DroneDB] Added DDBERR_BUILDINPROGRESS = 3 C API error code returned by DDBBuild when a concurrent build is detected.
  • [DroneDB] Added recognition and indexing of additional video formats: WEBM, M4V, AVI, and MKV.
  • [Hub] Added clipboard Copy/Cut/Paste with Ctrl+C/X/V shortcuts and right-click context menu, supporting intra-dataset copy/move and cross-dataset transfer; clipboard state persists across page reloads via sessionStorage.
  • [Hub] Added video lightbox for in-browser playback of video files (MP4, MOV, WEBM, M4V, AVI, MKV).
  • [Hub] Added paste conflict resolution dialog (Skip All / Overwrite All) and paste result summary dialog.
  • [Hub] Refactored drag-and-drop: centralized logic in dragDropMixin + itemDnDMixin; added per-item drop-target highlight, correct multi-selection drag, and fixed double-move events.
  • [Hub] Updated point cloud viewer to use COPC (copc/cloud.copc.laz) instead of EPT; reads coordinate system metadata via copc.js.
  • [Hub] Updated fileAvailabilityChecker to check copc/cloud.copc.laz instead of ept/ept.json for build readiness.
  • [Hub] Organizations page now persists page number and scroll position across navigation.
  • [Hub] Measurement storage now isolates 2D (OL_MEASURE_OWNED_TYPES) and 3D Potree (POTREE_OWNED_TYPES) measurement types to prevent each viewer from overwriting the other's features.

Fixed

  • Fixed Transfer to always copy (never move) build folders, preventing orphaned index entries for other files that share the same content hash; orphaned source artifacts are reclaimed by the recurring cleanup job.
  • Fixed directory Transfer rollback to clean up all per-entry destination build paths, not only the last one recorded.
  • [DroneDB] Fixed stale build lock detection: orphaned .building files left by crashed or container-recycled processes are now reclaimed without requiring the force flag.
  • [DroneDB] Fixed force=true incorrectly allowing override of a lock held by an actively running process.
  • [DroneDB] Fixed COPC bounds query format passed to CopcReader (correct [minX, maxX], [minY, maxY] ordering).
  • [Hub] Fixed Potree sidebar header visibility (hidden via CSS).
  • [Hub] Fixed handleMoveItem to correctly block moves onto self or descendants for directory entries.

Breaking changes

  • Point cloud build artifacts have changed format: <hash>/ept/ept.json (plus ept-data/, ept-hierarchy/) is replaced by <hash>/copc/cloud.copc.laz. Registry falls back to EPT automatically for existing datasets, but rebuilding is strongly recommended.
    • Migration: re-run ddb build (or trigger a build from the UI) on each point cloud dataset to generate COPC artifacts. The build pipeline removes legacy EPT folders automatically on the next rebuild. No immediate action is required for read access.
  • [DroneDB] The ddb ept CLI command has been removed and replaced by ddb copc; C++ library API buildEpt() and getEptInfo() have been removed.
    • Migration: replace ddb ept outdir/ *.las with ddb copc outdir/ *.las. Replace buildEpt() with buildCopc() and getEptInfo() with getCopcInfo(). Update any code checking for ept.json to check for cloud.copc.laz or use the new isCopcPath() helper.
  • [DroneDB] DDBERR_BUILDINPROGRESS = 3 has been added to the DDBErr enum. Code using exhaustive switch statements or numeric comparisons on DDBBuild return values may not handle this new code.
    • Migration: add a DDBERR_BUILDINPROGRESS (value 3) case to all DDBBuild error handling and display a "build already in progress" message rather than treating it as a generic error.

Merged PRs

Full Changelog: v2.2.1...v2.3.0