Skip to content

Releases: ChrisThoma/tomesole

v0.1.8

Choose a tag to compare

@ChrisThoma ChrisThoma released this 29 Jul 13:50

The project page moved to https://dreamrot.dev/projects/tomesole/.

Crate metadata is fixed at publish time, so the new homepage URL only reaches crates.io by way of a release. That is the whole of this one — there are no code changes, and 0.1.7 remains functionally identical.

v0.1.7

Choose a tag to compare

@ChrisThoma ChrisThoma released this 27 Jul 18:01

A bug fix release for libraries that have moved.

The library kept each book by the path it was downloaded to, and looked nowhere else. Change where downloads land, move your books to the new place, and every one of them read as missing, with nothing on offer but forgetting the book and fetching it again.

A file that is no longer where it was written is now looked for by name in the directory downloads go to now, and adopted if the size agrees. The entry keeps its timestamp, its MD5 and its verification, since a move is not a new download.

The relative path made this worse than it looks. The default download directory is . when there is no ~/Downloads, which is the ordinary state of a fresh WSL home, and that relative path went into the history as written. A book then only resolved from the directory you were standing in when you fetched it: start tomesole anywhere else and it read as missing with nobody having touched it. Destinations are now recorded absolute.

A book moved somewhere other than your download directory still reads as missing, since there is nowhere bounded to look for it.

v0.1.6

Choose a tag to compare

@ChrisThoma ChrisThoma released this 27 Jul 17:41

A hardening release. Everything a mirror sends is now treated as attacker-controlled on the way out as well as on the way in, and the Windows paths are fixed.

  • Displayed metadata is stripped of control characters, so a mirror cannot put an escape sequence in a title and repaint the terminal with it. Numeric entities naming a control character are refused in the scanner, so every consumer inherits the guard.
  • A redirect or interstitial link carrying a URL inside a query parameter — /out.php?u=https://cdn.example/f — now resolves against its base instead of failing several steps later with an error naming the wrong thing.
  • Windows: a book opens through ShellExecuteW rather than cmd /C start, which split a filename at an ampersand; Explorer no longer receives the \\?\ path that made reveal open the wrong folder; and the config, cache, history and downloads follow %USERPROFILE% instead of landing in whatever directory you ran from. If you used an earlier version on Windows, your history is in that directory.
  • A reader may carry arguments (mupdf -r 120), and a program whose path contains a space still launches. Quote the path if it also takes options.
  • Cover art is decoded and scaled on the worker thread, so a hostile image cannot stall the interface past Ctrl-C, and the thumbnail map is capped.
  • Downloads install by copy where hard links are unavailable, so a library on exFAT works.
  • Mirror discovery matches the registrable domain, so libgen.attacker.example is not treated as a mirror.
  • Errors say what to do next, and are no longer cut off mid-sentence in the interface.

The redirect loop is now covered end to end against a local server, and CI compiles the crate with the declared MSRV of 1.91.

v0.1.5

Choose a tag to compare

@ChrisThoma ChrisThoma released this 25 Jul 14:39

A docs-and-branding release; the binary is unchanged from 0.1.4.

  • New monogram-T icon (vector source at docs/icon.svg).
  • The social preview card is rebuilt from an HTML source (docs/social-card.html), fixing the garbled wordmark.
  • The demo video set is re-recorded without compression artifacts.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FvMqP1YMVrzqjcGafuJgvs

v0.1.4

Choose a tag to compare

@ChrisThoma ChrisThoma released this 25 Jul 13:44

Documentation release: the README is about half its former length, with a quick start at the top. No code changes.

tomesole 0.1.3

Choose a tag to compare

@ChrisThoma ChrisThoma released this 25 Jul 01:19

Corrects the minimum supported Rust version: the code uses floor_char_boundary (stable since 1.91) and file locking (stable since 1.89), so the MSRV is 1.91, not the 1.85 the README claimed and 0.1.2 briefly declared. rust-version = "1.91" is now set in Cargo.toml, and clippy's incompatible_msrv lint keeps it honest in CI. No behaviour changes.

Install

cargo install tomesole

tomesole 0.1.2

Choose a tag to compare

@ChrisThoma ChrisThoma released this 25 Jul 01:17

Documentation release. No behaviour changes; the README on crates.io is served from the published version, so these corrections needed a cut to appear there.

Install

cargo install tomesole

Changes

  • Corrects README claims that had drifted from the code, found by a line-by-line review: the record and cover sit in a band along the bottom (there is no side panel or poster-size cover), Tab switches tabs even while typing but 1/2/3 work while browsing, the batch and library strips use plain spacing, the ignored cover test's real name, the TUI test size sweep, and the platform-exact test counts (308, one Linux-only).
  • Notes that the JPEG accuracy comparison against Apple's decoder was a development-time measurement, not an in-tree test, and that the Windows reveal path is the one place a shell (cmd /C start) appears.
  • Declares rust-version = "1.85" in Cargo.toml so Cargo enforces the MSRV the README states.

tomesole 0.1.1

Choose a tag to compare

@ChrisThoma ChrisThoma released this 25 Jul 00:59

Documentation release. No behaviour changes; the README on crates.io is served from the published version, so these corrections needed a cut to appear there.

Install

cargo install tomesole

Changes

  • Documents the Settings tab, which edits the same values as the config file: cover art, history, download verification and size limits, reader, download directory, result limit, collections, preferred mirrors and cleartext HTTP.
  • Config and history paths are given as $XDG_CONFIG_HOME / $XDG_DATA_HOME with their defaults, rather than hardcoded ~/.config and ~/.local/share.
  • Corrects the cover fallback order: the Library tab reads the cover out of the book file first, then the cache, then asks the mirror.
  • Notes windows-sys for atomic file replacement on Windows alongside xattr on Unix.
  • Drops the stale h key; the Library tab shows the download list.
  • Adds the demo recording, and CI, crates.io, release and licence badges.
  • next_tag uses ? for the comment and doctype skips, matching what clippy 1.97 asks for.

Full Changelog: v0.1.0...v0.1.1

tomesole 0.1.0

Choose a tag to compare

@ChrisThoma ChrisThoma released this 25 Jul 00:49

First release. A terminal client for searching and downloading from Library Genesis, with both a full-screen interface and a scriptable CLI.

Install

cargo install tomesole

Needs Rust 1.85 or newer (2024 edition). No other build dependencies.

What's here

  • Full-screen interface. Search and Library tabs, filtering by format, language and author with live counts, sorting by relevance, title, author, year or size, all in place with no re-search. Covers drawn as real pixels in kitty, Ghostty, WezTerm and iTerm2, half-blocks elsewhere.
  • Scriptable CLI. tomesole dune, tomesole get <md5>, tomesole history, --json for piping, --first to take the top hit unattended.
  • Mirror discovery. The health check runs a real search and requires parseable results back, so a mirror that serves a healthy front page over a dead search endpoint counts as down. The result is a pool; a mirror that fails partway through falls through to the next.
  • Hostile-input handling throughout. MD5 verified as the bytes stream past, filenames built from catalogue metadata rather than Content-Disposition, allowlisted extensions, redirects re-validated at every hop against private and reserved ranges, responses size-capped twice.

304 tests, no network needed. Four dependencies; everything else is in-tree.

MIT licensed. This is a client for a public search index; what you download with it, and whether you are entitled to, is your call and your responsibility.