Add source filters and a full-window media view
This commit is contained in:
+1
-1
@@ -83,7 +83,7 @@ The daemon exposes MCP over Streamable HTTP. The default address is `http://127.
|
||||
| `get_media_scrape` | One scrape by ID. |
|
||||
| `stop_media_scrape` | Stop a scrape; it pauses after the current page. |
|
||||
| `get_media_storage` | Usage against the limit, per-kind sizes, and the scrape list. |
|
||||
| `query_media` | Media items across scrapes (`kind?`, `scrapeId?`, `limit?`, `offset?`). |
|
||||
| `query_media` | Media items across scrapes (`kind?`, `source?`, `scrapeId?`, `channelId?`, `limit?`, `offset?`). |
|
||||
| `get_media_item` | One media item by `scrapeId` and `itemId`. |
|
||||
| `delete_media_scrape` | Delete a scrape and its files. Irreversible. |
|
||||
| `run_commands` | Run several read-only tools in one call, in order. |
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ interface MediaService {
|
||||
}
|
||||
```
|
||||
|
||||
`MediaQuery` (implemented): `kind`, `scrapeId`, `limit`, `offset`. Planned: `channelId`,
|
||||
`MediaQuery` (implemented): `kind`, `source`, `scrapeId`, `channelId`, `limit`, `offset`. Planned:
|
||||
`guildId`, `authorId`, `after`, `before`, `text`.
|
||||
|
||||
`StorageStatus`: `usedBytes`, `limitBytes`, `warnPercent`, `overrunPercent`, `byKind`,
|
||||
|
||||
+5
-3
@@ -129,9 +129,11 @@ that deletion is irreversible. The delete button is disabled for a 5 second coun
|
||||
|
||||
## Web UI
|
||||
|
||||
- **Media** tab: filter chips (All, Images, GIFs, Videos, Audio), source channel, date, and text
|
||||
search. Grid with lazy loading; click opens a lightbox with the source message link, the
|
||||
original URL, and a download button. A scrape-status strip shows progress with Start and Stop.
|
||||
- **Media** tab: filter chips (All, Images, GIFs, Videos, Audio), a source filter (any,
|
||||
attachments, stickers, embeds), and a source-channel filter built from the scrape list. Date and
|
||||
text search are planned. Grid with lazy loading; previews come from the cache, then the local
|
||||
file, then the CDN. A scrape-status strip shows progress with Start and Stop. The view fills the
|
||||
window below the header and the call strip.
|
||||
- **Bot** tab: slopbot connection state, the scrape queue, and the storage limit with a usage bar.
|
||||
The bar is segmented and colour coded by media kind (images, GIFs, video, audio, other) plus the
|
||||
database overhead.
|
||||
|
||||
+9
-6
@@ -121,11 +121,14 @@ box live in Chat, not Call, and the connection stats are not chips yet.
|
||||
|
||||
## Media and Bot
|
||||
|
||||
- **Media** and **Bot** are scope buttons beside Guild and DM. They open overlays over the shell.
|
||||
Mobile is out of scope for the media feature.
|
||||
- Media lists scraped items with kind chips (All, Images, GIFs, Videos, Audio), a channel picker
|
||||
with **Start links** / **Start download**, and the active scrapes with **Stop**. Images and GIFs
|
||||
render from their Discord CDN URLs; videos and audio are link cards.
|
||||
- **Media** and **Bot** are scope buttons beside Guild and DM. They open a full-window view below
|
||||
the header and the call strip (the shell is covered; only the header, and the call strip when it
|
||||
is visible, stay on screen). Mobile is out of scope for the media feature.
|
||||
- Media lists scraped items with kind chips (All, Images, GIFs, Videos, Audio), a source filter
|
||||
(any, attachments, stickers, embeds), a source-channel filter built from the scrape list, a
|
||||
channel picker with **Start links** / **Start download**, and the active scrapes with **Stop**.
|
||||
Images and GIFs render from the cached preview when one exists, then the local file, then the
|
||||
Discord CDN URL; videos and audio are link cards.
|
||||
- Bot shows the slopbot connection state and the scrape queue.
|
||||
- The views are self-contained: `poc/public/media.js` and `media.css`, over the `/api/media/*`
|
||||
routes in the table below. See [media.md](media.md).
|
||||
@@ -249,7 +252,7 @@ replaceable.
|
||||
| POST | `/api/audio/stop` | none | Stop speech and clear the queue |
|
||||
| POST | `/api/audio/capture` | `start` | Start or stop capture |
|
||||
| GET | `/api/transcript` | `limit?`, `sessionId?` | Sessions and captured segments |
|
||||
| GET | `/api/media` | `kind?`, `limit?`, `offset?` | Media items across every scrape, newest first; `localUrl` when a file was downloaded |
|
||||
| GET | `/api/media` | `kind?`, `source?`, `channelId?`, `limit?`, `offset?` | Media items across every scrape, newest first. `source` is `attachment`, `sticker`, or `embed`; `channelId` filters by source channel. `localUrl`/`thumbUrl` when a file or preview exists |
|
||||
| GET | `/api/media/:scrapeId/:itemId/file` | none | The downloaded file, content-typed from its extension |
|
||||
| GET | `/api/media/:scrapeId/:itemId/thumb` | none | The cached WebP preview |
|
||||
| GET | `/api/media/scrapes` | none | Every scrape with state and counters |
|
||||
|
||||
Reference in New Issue
Block a user