From fd2b3d0f61c5e098abe047944e459b669d3317d3 Mon Sep 17 00:00:00 2001 From: MarekWo Date: Fri, 8 May 2026 09:36:00 +0200 Subject: [PATCH] docs: cover sidebar sort/favorites, Quick Access placement, console transcript, sidebar breakpoint User-guide: sidebar channels now sort by latest activity with favorites pinned first (star in Manage Channels), Quick Access per-item placement + Hide switch in Appearance tab, new Notifications settings tab, sidebar breakpoint in Interface tab, console change_path / reset_path / 'direct' keyword, persistent transcript with jump-to-latest button. Architecture: is_favorite in read_status, channels/favorites + console/output API endpoints. Co-Authored-By: Claude Sonnet 4.6 --- docs/architecture.md | 6 ++++++ docs/user-guide.md | 35 +++++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index fcd86ae..09f4645 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -137,6 +137,7 @@ Key tables: - `settings` - Application settings (migrated from .webui_settings.json) - `regions` - User-curated MeshCore flood scopes (`name`, `key_hex`, `is_default`) - `channel_scopes` - Per-channel region mapping (`channel_idx` → `region_id`, CASCADE on region delete; absent row = no override → firmware default applies) +- `read_status` - Per-channel read counters and favorites (`is_favorite` column; used to pin channels in the sidebar/dropdown sort order) The use of SQLite allows for fast queries, reliable data storage, full-text search, and complex filtering (such as contact ignoring/blocking) without the risk of file corruption inherent to flat JSON files. @@ -205,6 +206,8 @@ The use of SQLite allows for fast queries, reliable data storage, full-text sear | POST | `/api/channels//mute` | Toggle channel mute | | GET | `/api/channels/scopes` | Bulk per-channel region mapping for UI | | PUT | `/api/channels//scope` | Assign/clear region scope (`{region_id: int\|null}`) | +| GET | `/api/channels/favorites` | List favorite channel indices | +| POST | `/api/channels//favorite` | Set favorite state (`{favorite: bool}`) | ### Regions (MeshCore flood scopes) @@ -272,6 +275,9 @@ The use of SQLite allows for fast queries, reliable data storage, full-text sear | GET | `/api/console/history` | Get console command history | | POST | `/api/console/history` | Save console command | | DELETE | `/api/console/history` | Clear console history | +| GET | `/api/console/output` | Get persisted console output transcript (capped at 500 entries) | +| POST | `/api/console/output` | Append entry to transcript | +| DELETE | `/api/console/output` | Clear transcript | | GET | `/api/logs` | Get application logs | --- diff --git a/docs/user-guide.md b/docs/user-guide.md index 0607179..9028356 100644 --- a/docs/user-guide.md +++ b/docs/user-guide.md @@ -23,6 +23,7 @@ This guide covers all features and functionality of mc-webui. For installation i - [Database Backup](#database-backup) - [Network Commands](#network-commands) - [PWA Notifications](#pwa-notifications) +- [Notifications Tab](#notifications-tab) --- @@ -96,6 +97,8 @@ On narrow screens, tap the channel selector in the navbar to open a searchable p On wide screens (tablets/desktops), use the channel sidebar on the left. Each sidebar entry shows the channel name, time of the last message, unread badge, and a two-line message preview. +Both the dropdown and the sidebar sort channels by most recent message first. **Favorited channels are pinned above non-favorites**, so your most-used channels stay at the top regardless of activity. Toggle the star icon ★ next to any channel in the **Manage Channels** modal to favorite or unfavorite it. + Your selection is remembered between sessions. --- @@ -492,11 +495,13 @@ The console supports a comprehensive set of MeshCore commands organized into cat - `set_clock ` - Sync repeater clock **Contact Management:** -- `contacts` - List all device contacts +- `contacts` - List all device contacts (paths shown with commas, e.g. `D1,90,05,54`) - `.contacts` - List contacts (JSON format) - `.pending_contacts` - List pending contacts - `add_pending ` - Approve pending contact - `remove_contact ` - Remove contact +- `change_path ` - Change contact's routing path. Accepts comma-separated hex bytes (`D1,90,05`), continuous hex (`D19005`), or space-separated bytes. Use the keyword `direct` to set a Direct (0-hop) path. Hash size is auto-detected from the chunk length. Use `reset_path ` to switch back to Flood +- `path ` - Show the current path for a contact **Device & Channel Management:** - `infos` / `ver` - Device info / firmware version @@ -511,6 +516,8 @@ The console supports a comprehensive set of MeshCore commands organized into cat - **Command history** - Navigate with up/down arrows, or use the history dropdown - **Persistent history** - Saved on server, accessible across sessions +- **Persistent transcript** - Output from previous sessions is restored (faded) above a separator line when you reopen the console. Use the trash button (🗑) to clear the saved transcript +- **Jump-to-latest button** - A floating button appears when you scroll up through the transcript; click it to jump back to the newest entry - **Auto-reconnect** - WebSocket reconnects automatically on disconnect - **Status indicator** - Green/yellow/red dot shows connection status - **Human-readable output** - Clock times, statistics, and telemetry formatted for readability @@ -568,6 +575,8 @@ Tap the toggle button (short click, no drag) to hide or show the rest of the FAB ### Customization Open Settings → **Appearance** tab to adjust: +- **Hide Quick Access** - Master switch: hides the FAB cluster entirely and moves all actions to the Main Menu +- **Per-item placement** - Choose whether each of the 11 actions appears in the FAB or in the Main Menu. Changes take effect immediately - **Button size** - 28 to 72 pixels (default: 56) - **Spacing** - 2 to 24 pixels between buttons (default: 12) - **Reset position** - Reset both main chat and DM FAB positions to their defaults @@ -583,7 +592,7 @@ Access the Settings modal to configure application behavior: 1. Click the menu icon (☰) in the navbar (or tap the gear FAB button) 2. Select "Settings" from the menu -The modal is organized into tabs: **Device**, **Messages**, **Group Chat**, **Interface**, **Appearance**, **Contacts**, and **Regions**. A global **Close** button at the bottom of the modal dismisses Settings from any tab. +The modal is organized into tabs: **Device**, **Messages**, **Group Chat**, **Interface**, **Appearance**, **Contacts**, **Regions**, and **Notifications**. A global **Close** button at the bottom of the modal dismisses Settings from any tab. ### Device Tab @@ -643,12 +652,17 @@ Controls small notification toasts shown after actions (e.g. "Advert Sent", erro - **Don't close automatically** - Toasts stay visible until dismissed via their close button - **Position on screen** - Top-left / Top-right / Bottom-left / Bottom-right / Center +**Layout:** +- **Sidebar breakpoint (px)** - Screen width above which the channel/DM list is shown as a sidebar instead of a top dropdown. Default: 992 px, range: 600–2000. Saved per browser in local storage + ### Appearance Tab **Theme:** - **Dark / Light** - Toggle between dark and light UI themes. The preference is saved in local browser storage **Quick Access Buttons:** +- **Hide Quick Access** - Master switch that hides the entire floating FAB cluster and moves all items to the Main Menu (slide-out) +- **Per-item placement** - A table of all 11 configurable actions (Filter, Search, Direct Messages, Contacts, Settings, Send Advert, Flood Advert, Backup, Cleanup Contacts, System Log, Repeater Mgmt). Each row has two radio buttons: **Quick Access** (shows in FAB) and **Main Menu** (shows in the slide-out). Changes take effect immediately - **Button size (px)** - Adjust the size of FAB buttons (default: 56) - **Spacing (px)** - Space between FAB buttons (default: 12) - **Position** - Reset FAB position to default (top-right) @@ -662,6 +676,15 @@ Manage MeshCore region scopes (also called flood scopes). See [Region Scopes](#r - Pick **None** to clear the firmware default - Delete regions you no longer need (channels using a deleted region revert to "no scope") +### Notifications Tab + +Enable or disable browser push notifications for new messages received while the app is hidden or in the background. + +- Click **Notifications** to toggle the browser permission on or off +- The badge next to the button shows the current state: **Enabled** (green) or **Disabled** (gray) + +See [PWA Notifications](#pwa-notifications) for platform support and troubleshooting. + --- ## System Log @@ -727,10 +750,10 @@ The application supports Progressive Web App (PWA) notifications to alert you of ### Enabling Notifications -1. Click the menu icon (☰) in the navbar -2. Click "Notifications" in the menu -3. Browser will request permission - click "Allow" -4. Status badge will change from "Disabled" to "Enabled" (green) +1. Open Settings (gear FAB or menu → Settings) +2. Switch to the **Notifications** tab +3. Click the **Notifications** button — the browser will request permission, click "Allow" +4. The status badge changes from "Disabled" to "Enabled" (green) ### How It Works