Skip to content

Tags: Gman0909/ComicBlaster

Tags

client-v0.5.3

Toggle client-v0.5.3's commit message
Linux client: force X11 backend under Wayland to fix portrait maximise.

The native GDK Wayland path under KWin only covers ~half the screen
when the display is rotated to portrait/tablet mode. Default
GDK_BACKEND=x11 (XWayland) on Wayland sessions unless the user has set
it, which maximises full-screen correctly. Documented the override in
the README.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

client-v0.5.2

Toggle client-v0.5.2's commit message
Client v0.5.2

- Tailscale discovery now emits MagicDNS HTTPS URL alongside raw-IP HTTP so the picker shows the durable, works-anywhere URL.
- Login screen: 'Use a different server' link to return to the picker when a server was selected but never logged in.
- (Server) http_host config field restored — fixes bind collisions when something else holds the port on another interface.

client-v0.5.1

Toggle client-v0.5.1's commit message
Client v0.5.1 (re-tag): pdf.js OpenJPEG WASM fix for JPEG 2000 PDFs

client-v0.5.0

Toggle client-v0.5.0's commit message
client-v0.5.0 — Offline reading.

The native client (Windows / macOS / Linux) can now download comics
to local storage and read them without a server connection. The
web client is unchanged.

What you can do
===============

  - Download a comic for offline reading by clicking the new
    download badge in the bottom-left of any library card. Bulk
    download from the selection toolbar with the Download button.
  - See total local storage usage and free disk space, and remove
    individual or all downloads, from Settings → Offline storage.
  - Open the app without an internet connection. If the server is
    unreachable but you have downloaded comics, the cached library
    appears with a banner; downloaded items are readable, others are
    dimmed and can't be opened. A Retry connection button surfaces
    in the banner.
  - Read pages offline; reader progress is queued locally and
    synced to the server when connectivity returns.

Storage location: <user-config-dir>/ComicBlaster/offline/

  Windows: %APPDATA%\ComicBlaster\offline\
  macOS:   ~/Library/Application Support/ComicBlaster/offline/
  Linux:   ~/.config/comicblaster/offline/

Supported formats: PDF, ePub, CBZ, CBR. The Wails AssetServer
extracts pages from CBZ/CBR on the fly; PDFs and ePubs are loaded
whole-file. No server changes — the entire offline surface is
client-local. Downloads are per-(server, comic) so connecting to
two different ComicBlasters keeps their inventories separate.

Behaviour invariants preserved
==============================

  - Web client: every offline feature gates on isNative(); the
    browser library renders exactly as before.
  - Token semantics: 401/403 still bounces to login, only
    network errors fall back to offline mode.
  - Progress accuracy: server's seq-gated upsert means queue
    replay can't clobber newer positions with older ones.

client-v0.4.1

Toggle client-v0.4.1's commit message
client-v0.4.1 — ePub layout, PDF covers, delete-file safety.

Bug-fix release. Notable changes since client-v0.4.0:

  - ePub reader: skip broken spine items (idref pointing at a missing
    manifest entry) instead of crashing into a black screen. Surface
    a visible error overlay if even the fallback render fails.
  - ePub reader layout: image now fills the viewport (was rendering
    at natural size in a corner), bottom-bar slider + "Page X / Y"
    label, backward navigation works (the OPF omitted linear="yes"
    which broke epub.js's section.prev/next).
  - PDF covers: scanner now extracts a cover thumbnail by shelling
    out to pdftocairo (poppler-utils, present on most Linux
    distros). Previous build's PDFs without covers get backfilled
    automatically on next scan. Falls back silently if pdftocairo
    isn't installed — the manual "Set thumbnail" flow still works.
  - Remove → delete file: when os.Remove fails (typically a
    systemd sandbox forbidding writes to the library mount, or
    permission issues on a network share), the server now adds
    the path to the ignore list as a safety net so the file
    doesn't reappear on the next scan. The client surfaces the
    underlying OS error in the modal instead of silently closing.

If you hit "remove → delete file" failing with an EROFS error: the
service's systemd unit needs the library mount in ReadWritePaths.
Edit /etc/systemd/system/comicblaster.service to add it, then
systemctl daemon-reload + restart.

client-v0.4.0

Toggle client-v0.4.0's commit message
client-v0.4.0 — file browser, scanner resilience, missing-file manage…

…ment.

Notable changes since client-v0.3.1:

  - Settings → Library paths now has a Browse server button that
    drives a server-side filesystem picker, so adding a library
    path works the same whether the client is on the same box as
    the server or talking to it over Tailscale. Manual text entry
    still available for the NFS / SMB / power-user case. Includes
    an inline "New folder" action that mkdirs on the server.
  - Scanner no longer wipes the DB when a library root goes stale.
    A pre-flight ReadDir tells the scanner when a root is empty or
    inaccessible (e.g. a CIFS mount that survives os.Stat but
    returns zero entries because the NAS is asleep); comics under
    such a root are left untouched. Files that ARE genuinely missing
    under a healthy root get flagged with the new missing_since
    column. The row + its progress / labels / collection
    memberships stay intact.
  - Settings → Missing files is the only place hard-delete happens.
    Auto-hides when the count is zero. Shows the count, a toggle to
    surface missing files in the library (greyscale cover + red
    MISSING pill + click disabled), and a bulk-remove button with
    confirmation. No automatic 30-day purge anymore — the user is
    in charge.
  - Library "Hide" renamed to "Remove" throughout (single + bulk).
    When the user picks "Also delete from disk" the server skips
    the ignore-list step — a file that no longer exists doesn't
    need a stale ignore-list pointer.
  - Library "Last read" sort now defaults to descending the first
    time you switch to it, so the comic you're currently reading
    sits at the top instead of one you finished six months ago.

Everything continues to work in the browser, in the Wails native
client, and across same-machine vs cross-machine deployments.

Recovery note: an earlier version of the scanner wiped per-user
state during a NAS outage. If you upgrade from an affected v0.3.x
and lost reading progress / labels / collections, restore from a
snapshot tarball (covers + comicblaster.db) and use the
path-matched merge SQL — the FK targets follow the comic path, so
re-scanning afterwards rewires everything cleanly.

client-v0.3.1

Toggle client-v0.3.1's commit message
Branded release — D2 app icon with proper alpha transparency.

Same code as the deleted prior v0.3.1; only difference is that
client/build/appicon.png now has a transparent background instead of
opaque white from Firefox's default page bg. Wails-generated icon.ico
inherits that, so the taskbar / dock icon composites cleanly on every
OS.

snapshot-2026-05-21

Toggle snapshot-2026-05-21's commit message
Snapshot before next stretch of work.

State at this point:
  - Reader pagination + save-on-exit fully working (CBZ, PDF, ePub).
  - Library progress bars rendered for all formats including PDF + ePub.
  - Mobile sort collapsed into icon popover (search bar usable on phones).
  - WCAG 2.1 AA pass: 0 violations across library, library/collections,
    reader (CBZ + PDF), and settings.
  - Reader top bar resized for both desktop and mobile.
  - README has setup + first-run + user-management instructions and
    embedded screenshots.
  - Deployed on the Pi at http://192.168.0.7:8082 (binary, web bundle,
    DB all current).

Restore from this tag:  git checkout snapshot-2026-05-21
Pi data tarball lives next to this tag's date — see commit body / Pi.

client-v0.3.0

Toggle client-v0.3.0's commit message
First native ComicBlaster client release.