3.5 KiB
3.5 KiB
Q-Edit v0.6.0 — Release Notes
Date: 2025-08-23
Overview
This release rebrands QDN Editor to Q-Edit and delivers a major overhaul to authentication, content previews, filtering, and support for PRIVATE services on QDN.
Highlights
- Rename: QDN Editor → Q-Edit (UI and docs updated).
- Multi-name auth: New Authenticate flow detects the user’s primary name (fallback to first name) and provides a name switcher in the header.
- Global loading UX: Full-page overlay spinner appears during authenticate, name switching, filter changes, and pagination.
- Preview pipeline: Uses
qortalRequest(FETCH_QDN_RESOURCE)instead of/arbitrary/...to avoid auto-downloads and render inline. - Readiness polling: Uses
GET_QDN_RESOURCE_STATUS(build:trueinitially) and polls until 100%; per-cell “XX% Loaded” progress. - Media previews: Base64 → Blob URLs with lightweight MIME detection, enabling audio/video controls in-browser.
- Images UX: Previews constrained to a max height with aspect preserved. Click to open a fullscreen overlay (also preserves aspect).
- Service chips: Replaced dropdown with toggle chips showing per-service counts. Multiple services can be browsed concurrently.
- Identifier column: Icon-first — Edit (
file-up.png), Delete (red-x.svg), then the identifier text. - PRIVATE services: Decrypt after local build using
qortalRequest({ action: 'DECRYPT_DATA' })(nopublicKeyrequired for the owner’s content). - THUMBNAIL support:
THUMBNAILservices are now treated as images for previews.
Technical Changes
Authentication & Name Handling
- Added
accountLogin()integration withGET_USER_ACCOUNT,GET_ACCOUNT_NAMES,GET_PRIMARY_NAME. - Maintains
isAuthenticated,authStatus,namesStatus; updates top-right UI. - Name switch triggers full refresh (
loadAllResults()+fetchPage()).
Loading & Progress
- Added
showSpinner()/hideSpinner(); cover the content area during longer transitions. waitForResourceReady()pollsGET_QDN_RESOURCE_STATUSand calls anonProgress(pct)callback to update per-cell text.
Previews
- Text-like services try raw first (string/JSON), fallback to base64 → UTF-8 decode; render via sandboxed
iframe.srcdocor<pre>. - Binary/media services fetch base64 only; convert to Blob URLs using detected/guessed MIME.
- PRIVATE services always fetch base64 →
DECRYPT_DATA→ render by base kind. getBaseServiceKind()now mapsTHUMBNAILtoimage.
Filtering & Pagination
loadAllResults()loads all items for the active name once; buildsserviceCounts.selectedServicesis a Set of included services; empty set shows all.applyServiceFilter()derivesfilteredResults,totalResults, andtotalSize.fetchPage()slicesfilteredResultsfor client-side pagination.
Identifier Column
- Replaced text links with icons and moved to Edit, Delete, Identifier ordering.
Fixes & Correctness
- Omit
identifierparameter when empty/"default"to fix default resource fetching. - Resolved duplicate DOM declarations and stray braces from earlier merges.
- Ensured produced ZIPs are flat (no nested folder).
Known Areas / Next
- Optional: mini per-cell spinner alongside percentage.
- Cache last selected services and name in
localStorage. - Add search within results and chip filtering by substring.
- Add lazy pagination for extremely large resource sets.