Files
bookhoard/docs/admin/libraries.md
T
John O'Keefe 3e55ddd88a docs(admin): libraries page — the definition surface, with backlinks
Fifth admin page and the section's hub. Documents library creation
(name/description/type — type fixed at creation, verified in the edit
modal), the card's Force Rescan + Manage controls, and the full panel:
folders (add via Browse or manual path, shallow per-folder scan,
removal-unregisters-only semantics verified in DeleteLibraryFolder —
files and items untouched, archive lifecycle governs the rest; podcast
roots refuse hand scans), User Access visibility checkboxes (default-
allow, DB-enforced), the processing-issues link, and Delete Library's
exact destructive scope (records + reading data gone, files on disk
untouched). Ends with the at-a-glance scan table linking scanning.md.
Adds the Libraries backlinks to the processing-issues and archived
pages. Glossary gains Create Library, Manage, Edit Details, Delete
Library, View Archived, Purge Archived Now, Browse, User Access.
2026-11-02 14:11:25 -05:00

109 lines
4.4 KiB
Markdown

<!-- Ground truth: templates/admin_library.templ (page, modals, panel,
delete-library warnings), internal/router/admin_library.go (create/
edit/delete, folders, browse, visibility endpoints), internal/router/
library.go (per-library scan route), internal/services/library_service.go
(DeleteLibraryFolder removes the mapping only; SetLibraryVisibility),
templates/utils.go (hxValsFolderScan), templates/admin_archived.templ.
Re-verify against these when the page changes. -->
# Libraries
The Libraries page is where a Bookhoard instance is defined: what
libraries exist, which folders on the server they read from, who can see
them, and how they get scanned. Everything here is admin-only — regular
users just see the result.
## Creating a library
**Create Library** opens a modal with three fields:
- **Library Name** (required) — what users see in their sidebar
- **Description** (optional)
- **Library Type** (required) — book, comic, audiobook, podcast; the type
drives how the scanner parses files and how the reader presents them
A library with no folders can't scan — add at least one folder (below)
before expecting anything to appear in it.
## The library card
Each library renders as a card: name, description, a type chip, a folder
count, and two controls:
- **Force Rescan** — starts a force scan of this one library: every file
re-read and re-extracted, hashes recomputed. This is the heavy,
thorough pass ([Scanning](scanning.md) explains force vs. shallow and
when each is worth it). If a scan is already running for the library,
the click tells you instead of stacking a second one.
- **Manage** — opens the library's panel, where everything else lives.
## The library panel
### Folders
Folders are the server-side directories the scanner walks. Each one shows
its path with two icon actions: **Scan this folder** (a shallow scan
scoped to just that folder's subtree — the quick "I just dropped files
here" button) and remove-from-library (confirm-guarded).
Adding one: type a path, or click **Browse** to walk the server's
filesystem in a modal (up with `..`, into a folder by clicking it,
**Select This Folder** to fill the input), then **Add**.
Two things worth knowing:
- **Removing a folder only unregisters it.** The mapping is deleted;
files on disk and existing catalog items are untouched. If no remaining
folder covers those files, later library-wide scans will treat them as
missing — the [Archived Items](archived-items.md) lifecycle takes over,
history kept.
- **Podcast download folders are feed-managed.** The scanner refuses to
scan them by hand; the podcast feed system owns their contents.
### User Access
One checkbox per user. Checked (the default) means the library is visible
to them; unchecking hides it from their browsing, apps, and OPDS —
enforced in the database, so every listing obeys. Hiding a library never
destroys anything: the user simply can't see it.
### Processing issues
When the library has items the scanner couldn't process, a link here
shows the count and leads to its
[Processing Issues](library-processing-issues.md) page.
### Edit Details and Delete Library
**Edit Details** changes the name and description. The library type is
fixed at creation — it can't be edited later.
**Delete Library** is the destructive one, and its confirm dialog says
precisely what it does:
- **Permanently removed, no archive or undo:** the library, its folder
mappings, and all book records — with their reading progress,
highlights, notes, bookmarks, and ratings.
- **Not touched:** media files on disk. Delete the library, keep the
files; re-create the library later and scan them fresh (with empty
reading history).
## The archived banner
When any library has archived (missing-file) items, this page shows a
banner with the total count and two shortcuts: **View Archived** (the
[Archived Items](archived-items.md) page) and **Purge Archived Now** (the
same permanent wipe the archived page's Purge All Archived performs).
## Every scan entry point, at a glance
| Where | Control | Kind |
| --- | --- | --- |
| This page, library card | **Force Rescan** | Force, this library |
| This page, folder row | **Scan this folder** | Shallow, that folder |
| Admin dashboard | **Force Rescan All Libraries** | Force, everything |
| Settings → Scanning | **Auto-Scan** | Shallow, automatic |
| A book's page | **Rescan** | Force, that one item |
Full semantics for each: [Scanning](scanning.md).