# 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 `
`.
- **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.