Commit Graph

47 Commits

Author SHA1 Message Date
aab0ad796d feat(batcave): add batcave.biz support, delete UI, and FlareSolverr bypass — fixes #6 2026-03-12 10:32:48 -04:00
0925d5ca63 docs: update README for batcave.biz support, delete feature, and FlareSolverr latest 1.3.0 2026-03-12 10:27:01 -04:00
89a5013fb2 fix(web): add comic delete UI and fix container Cloudflare bypass for #6
- Add delete button (SVG X, hover-reveal) and confirmation modal to comic cards
- Add DELETE /api/comics/delete endpoint with path traversal protection
- Fix container downloads: delegate Cloudflare-blocked requests to FlareSolverr
  (headless Chrome sidecar) instead of retrying with Go HTTP client, whose Linux
  TCP fingerprint is flagged by Cloudflare even with network_mode: host
- Add FlareSolverr service to docker-compose; inject FLARESOLVERR_URL env var
- Add diagnostic logging to BatcaveBizMarkup request flow
- Trim URL whitespace before storing in download job
- Guard Archive() against empty filelist; fix runJob error-check ordering
2026-03-12 09:41:03 -04:00
d2c715e973 feat: add batcave.biz support, closes #6
## What changed

- `BatcaveBizMarkup` now accepts a `clientChan chan *http.Client` and
  sends the authenticated cookie jar client back to the caller after
  completing the Cloudflare challenge flow. All error paths send nil so
  the caller never blocks.

- `Comic` struct gains a `Client *http.Client` field. `NewComic` wires
  up the channel, receives the client, and stores it so downstream code
  can reuse the same authenticated session.

- `downloadFile` branches on `c.Client`: when set it builds the request
  manually and only attaches a `Referer: https://batcave.biz/` header
  when the image URL is actually on batcave.biz. Some issues host images
  on third-party CDNs (e.g. readcomicsonline.ru) that actively block
  requests with a batcave Referer, returning 403 — omitting the header
  fixes those.

- `ParseBatcaveBizTitle` extracts the chapter title from the
  `__DATA__.chapters` JSON array by matching the chapter ID in the URL's
  last path segment. The HTML `<title>` on batcave.biz is prefixed with
  "Read " and suffixed with "comics online for free", making it
  unsuitable as a filename. Using the chapter data gives clean titles
  like "Nightwing (1996) 153". "Issue #" and bare "#" are stripped since
  the hash character causes problems on some filesystems and tools.

- `ParseBatcaveBizImageLinks` now unescapes `\/` → `/` in extracted
  URLs. The `__DATA__` JSON often contains forward-slash-escaped URLs
  that would otherwise be stored verbatim.

- `archive.go`: `filepath.Walk` was called on `filepath.Dir(sourcePath)`
  (the library root) instead of `sourcePath` (the comic's own folder).
  This caused any leftover image files from previous downloads in sibling
  directories to be included in every new CBZ. Fixed by walking
  `sourcePath` directly.

- `BatcaveBizMarkup` client now has a 30s `Timeout`. Without it, a
  single stalled CDN connection would hang the worker goroutine
  indefinitely, causing `Download()` to block forever waiting for a
  result that never arrives.

- Fixed `for e := range err` in `cli/root.go` — ranging over `[]error`
  with one variable yields the index, not the error value.
2026-03-11 20:55:03 -04:00
9cb26f27ec build: keep latest git tag in sync with each versioned release 2026-03-11 18:35:18 -04:00
855e97f72f chore: bump version to 1.2.1 2026-03-11 18:31:40 -04:00
ca891fc6c0 build: skip --note flag in gitea-release when NOTES is empty 2026-03-11 18:30:29 -04:00
9ec1301317 Merge pull request 'fix: extract title from h1 or URL slug when page title starts with #' (#5) from feat/title-h1-fallback into main
Reviewed-on: #5
1.2.1
2026-03-11 22:16:25 +00:00
dcb41deea9 fix: extract title from h1 or URL slug when page title starts with #
When readallcomics.com pages have a <title> containing only the issue
number (e.g. '#018 (2026)'), fall back to the h1 element first, then
derive the title from the URL slug by stripping the trailing year and
title-casing the hyphen-separated segments.

Closes #4
2026-03-11 18:13:14 -04:00
a7c3b632a5 docs: add local packaging screenshot to README 2026-03-09 22:34:35 -04:00
d53af6b84f build: add release pipeline targets to Makefile
Add tag, gitea-release, and release targets to encode the corrected
versioning process (no v-prefix). VERSION is now overridable via the
command line for use in make release VERSION=x.y.z.
2026-03-09 22:22:38 -04:00
9cd4af9bb6 Merge pull request 'feat(web): local image packaging — drag-and-drop or folder picker to CBZ' (#2) from feature/upload into main
Some checks failed
Release / Build and Release (push) Has been cancelled
1.2.0
2026-03-10 01:49:55 +00:00
96f9301b32 feat(web): add local image packaging — drag-and-drop or folder picker to CBZ 2026-03-09 21:41:40 -04:00
16b7545757 docs: add UI screenshot to README; simplify port binding in compose 2026-03-09 14:58:43 -04:00
412438fa22 feat(web): SVG download overlay, toast icons, initials placeholder, empty state hint, footer 2026-03-09 10:47:52 -04:00
551a5b2b2a fix(web): replace literal en-dashes with HTML entities in sort buttons 2026-03-09 09:04:06 -04:00
1a567a19fe feat(web): add pagination and fix port binding for Tailscale access
- Paginate comic grid at 48 per page with smart page number controls
- Bind container port to 0.0.0.0 so Tailscale traffic can reach WSL2
2026-03-09 08:53:26 -04:00
9d1ca16704 feat(web): improve UI responsiveness, polish, and update docs
- Add mobile/tablet responsive breakpoints to web UI
- Redesign cards as full-bleed poster layout with gradient overlay
- Add skeleton loading state, comic count badge, and search icon
- Switch to Docker image format for registry compatibility
- Add docker-build and docker-push Makefile targets with versioned tags
- Update README to document web UI, Docker deployment, and serve command
2026-03-08 23:06:50 -04:00
25eee6f76a feat(web): add dockerized web UI with comic library browser
Adds a `yoink serve` command that starts an HTTP server with a
Sonarr/MeTube-inspired dark UI. Features a URL input bar for
triggering downloads, a 150x300 cover grid with filter and sort
controls, a live download queue strip, and toast notifications.

Includes Dockerfile (multi-stage, distroless runtime) and
docker-compose.yml for easy deployment.
2026-03-08 22:02:38 -04:00
5d7c324fb7 docs(yoink): fix releases URL in README 2026-03-06 23:39:53 -05:00
a0ee2db58f ci(yoink): rewrite release workflow using Makefile and softprops/action-gh-release 2026-03-06 22:42:20 -05:00
70e201c54e build(yoink): add Makefile for windows, linux, and darwin
Some checks failed
Build and Release / Build and Release for Linux (push) Has been cancelled
Build and Release / Build and Release for Windows (push) Has been cancelled
v1.1.0
2026-03-06 22:06:31 -05:00
dcb8c380f3 docs(yoink): write README with usage, configuration, and dependencies 2026-03-06 21:54:19 -05:00
Bryan Bailey
d639e72a40 build(yoink): configuring release 2024-08-31 00:23:51 -04:00
Bryan Bailey
327dfa9fa5 build(yoink): configuring release 2024-08-30 23:50:54 -04:00
Bryan Bailey
a2b932e717 build(yoink): configuring release 2024-08-30 23:44:40 -04:00
Bryan Bailey
7dd9a05447 build(yoink): configuring release 2024-08-30 23:32:43 -04:00
Bryan Bailey
57f49e16f8 build(yoink): configuring release 2024-08-30 23:11:47 -04:00
Bryan Bailey
8c5b6183f7 build(yoink): configuring release 2024-08-30 15:54:35 -04:00
Bryan Bailey
4a074c9709 build(yoink): configuring release 2024-08-30 15:48:52 -04:00
Bryan Bailey
435bed8b4c build(yoink): configuring release 2024-08-30 15:44:39 -04:00
Bryan Bailey
259d9b6980 build(yoink): configuring release 2024-08-30 15:36:11 -04:00
Bryan Bailey
902335a7e2 build(yoink): configuring release 2024-08-30 15:30:40 -04:00
Bryan Bailey
98b111de72 build(yoink): configuring release 2024-08-30 15:25:51 -04:00
Bryan Bailey
10fc3fea54 build(yoink): configuring release 2024-08-30 15:21:28 -04:00
Bryan Bailey
7ff5e28c61 build(yoink): configuring release 2024-08-30 15:08:15 -04:00
Bryan Bailey
a8300d03ab build(yoink): configuring release 2024-08-30 14:46:43 -04:00
Bryan Bailey
ce2a7618c6 build(yoink): configuring release 2024-08-30 14:42:14 -04:00
Bryan Bailey
59b821d6f3 build(yoink): configuring release 2024-08-30 14:39:34 -04:00
Bryan Bailey
bf091db791 build(yoink): configuring actions 2024-08-30 14:35:17 -04:00
Bryan Bailey
0090469fbb build(yoink): updated actions runs-on to self-hosted 2024-08-30 14:32:03 -04:00
Bryan Bailey
cbe39ee18a docs(yoink): updated usage in README.md 2024-08-29 22:47:33 -04:00
Bryan Bailey
4f505f246c docs(yoink): added README.md 2024-08-29 22:41:44 -04:00
Bryan Bailey
c2a9516c1a build(yoink): added release action 2024-08-29 15:59:41 -04:00
Bryan Bailey
38aa011199 refactor(error): moved error logic into correct modules 2024-08-27 18:26:30 -04:00
Bryan Bailey
b3e99092fc docs: added docstrings 2024-08-26 22:59:37 -04:00
Bryan Bailey
e8bd6e4179 yoink-go initial commit 2024-08-26 22:49:26 -04:00