v2.3.0
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/copyendpoint for intra-dataset file and folder copy operations with optional overwrite support. - Added
keepSourceparameter to thePOST /transferendpoint; whentrue, the source entry is preserved (copy semantics instead of move). - Added
POST /system/cleanupendpoint (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
DatasetCleanupCroninappsettings.json(set to empty to disable). - Added
BuildJobFailureFilterHangfire 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
DdbBuildInProgressExceptionto 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
GetOrganizationto lazy-load datasets on demand (opt-in viawithDatasets), 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.Deletewith mount-point-safeEmptyDirectoryContentsduring Hub and DDB installation reset to prevent "Device or resource busy" errors on Linux bind-mount volumes. - [DroneDB] Added
ddb cleanupCLI command andDDBCleanup()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, andDDB_USE_PDAL_COPC. - [DroneDB] Added kernel-managed advisory build locking (
F_OFD_SETLKon 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 = 3C API error code returned byDDBBuildwhen 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 viacopc.js. - [Hub] Updated
fileAvailabilityCheckerto checkcopc/cloud.copc.lazinstead ofept/ept.jsonfor 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
.buildingfiles left by crashed or container-recycled processes are now reclaimed without requiring theforceflag. - [DroneDB] Fixed
force=trueincorrectly 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
handleMoveItemto correctly block moves onto self or descendants for directory entries.
Breaking changes
- Point cloud build artifacts have changed format:
<hash>/ept/ept.json(plusept-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.
- Migration: re-run
- [DroneDB] The
ddb eptCLI command has been removed and replaced byddb copc; C++ library APIbuildEpt()andgetEptInfo()have been removed.- Migration: replace
ddb ept outdir/ *.laswithddb copc outdir/ *.las. ReplacebuildEpt()withbuildCopc()andgetEptInfo()withgetCopcInfo(). Update any code checking forept.jsonto check forcloud.copc.lazor use the newisCopcPath()helper.
- Migration: replace
- [DroneDB]
DDBERR_BUILDINPROGRESS = 3has been added to theDDBErrenum. Code using exhaustive switch statements or numeric comparisons onDDBBuildreturn values may not handle this new code.- Migration: add a
DDBERR_BUILDINPROGRESS(value3) case to allDDBBuilderror handling and display a "build already in progress" message rather than treating it as a generic error.
- Migration: add a
Merged PRs
- Migration from EPT to COPC by @HeDo88TH in #341
- Various improvements and optimizations by @HeDo88TH in #342
Full Changelog: v2.2.1...v2.3.0