Skip to content

Releases: fexofenadine/cbzLab

cbzLab 2.1.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 05:34

Downloads: cbzLab-2.1.0-win-x64.exe for Windows, cbzLab-2.1.0-linux-x64 for Linux
(run chmod +x on it first). The -debug.zip files add debug symbols for crash reports;
the .zip/.tar.gz files are for the in-app updater in older versions.

A review-driven fix release: safety, correctness, speed, and settings that had
quietly stopped working.

Safety

  • A settings backup can no longer write files outside the settings folder.
    Import used to trust every path inside the .cbzlab file, so a crafted
    backup could drop a file anywhere you can write; such entries are now
    refused and counted.
  • Converting a book to the other format no longer silently overwrites a file
    that already has the new name. You're asked first, a clash with another book
    open in cbzLab is refused, and the status says the original was kept.
  • 7-Zip is no longer used to write CBR. Asked for a .cbr, it reports success
    but writes its own 7z format, which cbzLab and most readers can't open. Only
    WinRAR's rar tool is used (now also found in its default install folder), and
    every CBR save is checked for the RAR signature before replacing anything.
  • Settings files are written atomically, so a crash mid-write can't truncate
    them, and a hand-edited file with a typo is set aside rather than overwritten.
  • The ComicVine API key no longer ends up in the log.

Things that didn't work

  • Auto Page Count on open, Auto-select first file and Clear filter on open
    were in Settings but did nothing. All three work again.
  • Existing installs never received new themes or fields: schema.json and
    themes.json were copied once on first run and never updated, so Tokyo
    Night, Catppuccin, Gruvbox, True Black and High Contrast silently fell back
    to Solarized Dark. They're now kept current - an untouched copy is replaced,
    an edited one keeps your changes and gains what's missing.
  • ComicVine issue lists were cached forever, so an ongoing series never showed
    its new issues. Cached answers now expire, the cache is capped, and series
    longer than 500 issues are fully reachable.
  • A book with a macOS __MACOSX folder had its junk ._ files counted as
    pages (inflating Page Count), possibly used as the cover, and joined into
    combined books as broken pages. They're now ignored everywhere.
  • Update downloads timed out after 15 seconds, and the updater broke on a
    user folder containing an apostrophe or accented letter.
  • On Linux, two books whose names differ only in case were treated as one.

Metadata

  • Partial dates like 2019-03, March 2019 and Mar 2019 no longer gain a
    made-up day of 1, and a half-typed date no longer writes a wrong year while
    you're still typing it.
  • Validation now enforces Month 1-12, Day 1-31, a four-digit Year and no
    negative counts.
  • Guess from Filename reads "(of 12)" as Count and ignores release tags like
    "(Digital)" in the series name.
  • A duplicated tag now shows the value a save actually edits, new elements are
    written in the ComicInfo schema's order, and a book with unreadable
    ComicInfo.xml says so when opened.
  • ComicVine's plain "artist" credit now fills Penciller and Inker.
  • Trim Footers keeps WebP pages as WebP.

Speed and polish

  • Opening a CBZ and loading its cover read only what's needed instead of the
    whole archive: 2 to 27 times faster per book on the files tested.
  • Batch edits in "Modified first" sort no longer freeze the app.
  • Autosave only rewrites changed files, in the background; covers decode off
    the UI thread, a few at a time.
  • Covers are shown whole instead of cropped at the top and bottom, and field
    boxes keep the same width on every tab.
  • Logs older than 30 days are pruned, and backups no longer include autosave
    drafts.

Full Changelog: v2.0.10...v2.1.0

cbzLab 2.0.10

Choose a tag to compare

@github-actions github-actions released this 26 Sep 15:15

Downloads: cbzLab-2.0.10-win-x64.exe for Windows, cbzLab-2.0.10-linux-x64 for Linux
(run chmod +x on it first). The -debug.zip files add debug symbols for crash reports;
the .zip/.tar.gz files are for the in-app updater in older versions.

  • Fixed Check for Updates being unable to install anything since 2.0.9. The
    updater only looked for a .zip (Windows) or .tar.gz (Linux) download,
    and 2.0.9 stopped publishing those in favour of the bare executable, so it
    could only offer a link. The updater now prefers the bare executable, falls
    back to the archive, and never mistakes a debug zip for an update.
  • Releases publish the .zip/.tar.gz archives again, containing just the
    executable, so installs older than this one can still update themselves.
  • Release notes now open with a short guide to which download to pick.

What's Changed

Full Changelog: v2.0.9...v2.0.10

cbzLab 2.0.9

Choose a tag to compare

@github-actions github-actions released this 26 Sep 14:29
  • GitHub releases no longer bundle debug symbols into the main download. Each
    release now ships four assets: a plain Windows exe and a plain Linux binary
    (no .pdb, no zip - the executable is the whole download), plus a
    win-x64/linux-x64 debug zip for each platform containing the executable
    together with its .pdb, for anyone who actually needs to debug a crash.
  • Fixed a version-string drift bug: 2.0.8's release bumped cbzLab.csproj's
    <Version> but missed MainWindow.axaml.cs's DisplayVersion constant and
    MainWindow.axaml's Title, so the title bar and the About/Check for
    Updates dialogs kept reporting 2.0.7 even after 2.0.8 shipped. All three are
    back in sync as of this release.

Full Changelog: v2.0.8...v2.0.9

cbzLab 2.0.8

Choose a tag to compare

@github-actions github-actions released this 21 Sep 14:05
  • Fixed the CI build, which had been failing since SkiaSharp was auto-bumped
    from 3.119.4 to 4.152.1. The app compiled fine, but every FooterTrimService
    test crashed at runtime: the managed SkiaSharp had jumped to 152 while the
    native libSkiaSharp bundled by Avalonia.Skia stayed at 119, and the two
    refuse to run together. SkiaSharp is pinned back to 3.119.4, the version
    Avalonia.Skia actually resolves, and told to move only when Avalonia does.
  • Told Dependabot to leave SkiaSharp alone, so the same incompatible bump
    cannot land again on its own.

What's Changed

  • Bump SkiaSharp from 3.119.4 to 4.152.1 by @dependabot[bot] in #16
  • Bump Microsoft.NET.Test.Sdk from 18.10.0 to 18.10.1 by @dependabot[bot] in #15

Full Changelog: v2.0.7...v2.0.8

cbzLab 2.0.7

Choose a tag to compare

@github-actions github-actions released this 13 Sep 13:16
  • Extracting a "Publisher - Year" header from the summary is now a Tools
    command rather than something that happens on open. Running on every open
    meant a folder import could mark hundreds of files dirty at once, before
    anyone had asked for it. Tools > Extract Publisher/Year from Summary applies
    it to the selected files, or to every open file when nothing is selected,
    the same scope rule Find and Replace uses, and reports how many it changed.
  • Dropped the settings toggle that went with the old behaviour. A command you
    choose to run needs no switch, and a switch that gates nothing is just
    another setting that appears to do something and does not.

Full Changelog: v2.0.6...v2.0.7

cbzLab 2.0.6

Choose a tag to compare

@github-actions github-actions released this 13 Sep 12:58
  • Some sources put the publisher and year at the top of the Summary instead of
    in the proper fields, as a "Publisher - Year" line followed by a blank line.
    On open, that line is now read: the publisher and year go into those fields
    if they are empty, and the line is removed from the summary along with the
    blank line and any surrounding whitespace. Fields that already have a value
    are never overwritten, and the edit is left unsaved so it shows in the editor
    and can be reverted. Controlled by a new Settings toggle, on by default.
  • The match is deliberately fussy, because getting it wrong would eat someone's
    prose: the line must stand alone, end in a four digit year, and be followed
    by a blank line or nothing. A summary opening "Batman - 1939 was the year it
    all began." is left completely alone. Any of the three dash characters works
    as the separator, since the summary was written by whoever packaged the book.

Full Changelog: v2.0.5...v2.0.6

cbzLab 2.0.5

Choose a tag to compare

@github-actions github-actions released this 13 Sep 12:19
  • New File > Open Folder... (Ctrl+Shift+O, and an optional toolbar button):
    opens every cbz/cbr/zip/rar under a folder, including subfolders, in one go.
    An unreadable branch is skipped rather than aborting the scan, results are
    natural-sorted so issue 10 follows issue 2, and opening more than 100 at once
    asks first. Verified on a 2000-book tree spread across 17 subfolders: the scan
    found all 2000 and the import completed in about 3 seconds.
  • Files opened this way save back to exactly where they came from. Each file
    carries its own absolute path and every save path writes to it, so a book in
    a nested subfolder is rewritten in place - confirmed by editing the most
    deeply nested book in a test tree, saving, and checking that the file on disk
    changed while the folder structure and every other book stayed untouched.
  • File rows now show their full path as a tooltip, since after a recursive open
    two books in different subfolders can easily share a filename.

Full Changelog: v2.0.4...v2.0.5

cbzLab 2.0.4

Choose a tag to compare

@github-actions github-actions released this 13 Sep 12:02
  • Opening a large batch of archives is dramatically faster. Measured on 2000
    books, a bulk import went from 6.52s to 0.12s (53x), and 10,000 books now
    import in 0.81s at a flat 0.08ms per book. Three things were responsible:
    the file list was re-filtered and re-sorted once per file (O(n^2 log n)
    overall), the whole settings file was rewritten to disk once per file for a
    recent-files list that only keeps 8 entries, and archives were read strictly
    one at a time. Reads are now parallel, and the list and settings are each
    updated once at the end.
  • Cover thumbnails load lazily, per visible row, instead of being decoded for
    every open file up front. Holding one decoded cover per book cost ~234KB
    each - about 457MB at 2000 books - which was the real ceiling on library
    size rather than speed. Memory is now bounded by what is on screen, and a
    bulk import no longer pays for a second pass through each archive just to
    extract a cover it may never show.

Full Changelog: v2.0.3...v2.0.4

cbzLab 2.0.3

Choose a tag to compare

@github-actions github-actions released this 13 Sep 11:14
  • New Tools → Combine Archives…, for reassembling a TPB that was released split
    across several files. Select two or more open archives, order them (defaulting
    to alphabetical by filename, with up/down reordering and Sort A–Z / Reverse),
    and they're joined into one new CBZ: every source's pages in order, renumbered
    into a single continuous sequence that follows the first book's own naming
    convention, plus the first book's ComicInfo.xml. The joined book is then opened
    and selected in the editor with its Page Count corrected and any trailing
    "(Part 1)"-style marker trimmed off Title/Series — left unsaved and visible, so
    the change can be reviewed or reverted rather than applied silently. Also
    available as an optional "Combine…" toolbar button.
  • New Tools → Trim Branding Footers…, which finds and cuts the strip some
    sources graft onto the bottom of pages (a solid bar carrying a site name).
    It is self-calibrating — the bar's height is measured from the book itself,
    so nothing needs configuring per source and no reference images are stored —
    and every detected band is shown as an actual image strip in the dialog, so
    what would be cut can be checked before anything is written. Only the pages
    you confirm are re-encoded; every other page is copied through byte-for-byte,
    and the result is always written to a new file. Also available as an optional
    "Trim Footers…" toolbar button.
  • These are the first features that write page images, which the project's
    founding constraint previously ruled out entirely. The constraint is now
    narrower rather than gone: both only ever write a new archive and leave
    every source file untouched on disk. Combining additionally copies page bytes
    verbatim without decoding them; footer trimming is the one path that genuinely
    re-encodes, and only for the pages actually being cropped.

What's Changed

  • Bump Microsoft.NET.Test.Sdk from 18.9.0 to 18.10.0 by @dependabot[bot] in #14

Full Changelog: v2.0.2...v2.0.3

cbzLab 2.0.2

Choose a tag to compare

@github-actions github-actions released this 05 Sep 13:30

What's Changed

  • build(deps): bump actions/deploy-pages from 4 to 5 by @dependabot[bot] in #7
  • build(deps): bump actions/configure-pages from 5 to 6 by @dependabot[bot] in #8
  • build(deps): bump actions/upload-pages-artifact from 3 to 5 by @dependabot[bot] in #9
  • build(deps): bump actions/setup-python from 6 to 7 by @dependabot[bot] in #10
  • Bump Avalonia and Avalonia.Desktop by @dependabot[bot] in #12

Full Changelog: v2.0.1...v2.0.2