66 lines
3.5 KiB
Markdown
66 lines
3.5 KiB
Markdown
# 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:true` initially) 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' })` (no `publicKey` required for the owner’s content).
|
||
- **THUMBNAIL support:** `THUMBNAIL` services are now treated as images for previews.
|
||
|
||
## Technical Changes
|
||
|
||
### Authentication & Name Handling
|
||
|
||
- Added `accountLogin()` integration with `GET_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()` polls `GET_QDN_RESOURCE_STATUS` and calls an `onProgress(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.srcdoc` or `<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 maps `THUMBNAIL` to `image`.
|
||
|
||
### Filtering & Pagination
|
||
|
||
- `loadAllResults()` loads all items for the active name once; builds `serviceCounts`.
|
||
- `selectedServices` is a Set of included services; empty set shows all.
|
||
- `applyServiceFilter()` derives `filteredResults`, `totalResults`, and `totalSize`.
|
||
- `fetchPage()` slices `filteredResults` for client-side pagination.
|
||
|
||
### Identifier Column
|
||
|
||
- Replaced text links with icons and moved to **Edit, Delete, Identifier** ordering.
|
||
|
||
### Fixes & Correctness
|
||
|
||
- Omit `identifier` parameter 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.
|