Skip to content

Commit 902fa84

Browse files
committed
Add request workflow, metadata enrichment, scoring, admin dashboard, uploads, Deluge + Transmission
Request system: - User request/approval workflow (like Jellyseerr) - Request state machine: pending → approved → searching → downloading → completed - Admin approve, cancel, retry, select result endpoints - In-app notifications (request_completed, request_failed, request_approved) Metadata enrichment: - Open Library metadata fetching (covers, descriptions, series, ISBN) - In-memory cache with 30-min TTL - Metadata included in search API responses Search scoring: - 0-100 confidence scoring with breakdown (title, author, format, seeders, size) - Results auto-sorted by score - High/medium/low confidence labels Admin dashboard: - Library stats, active downloads, source health, recent activity - Paginated activity log with user/action filters - Bulk retry/cancel for failed requests - Service health checks (Prowlarr, qBit, SABnzbd, ABS, Kavita, Calibre) File uploads: - Multipart upload for ebooks and audiobooks (max 500MB) - Auto-organize via existing pipeline + library scan trigger Download clients: - Deluge JSON-RPC client - Transmission RPC client (with session-id handling) - Config: DELUGE_URL, TRANSMISSION_URL env vars Activity logging throughout all major actions.
1 parent af2b429 commit 902fa84

27 files changed

Lines changed: 3544 additions & 35 deletions

.github/workflows/release.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
name: Release
2+
on:
3+
push:
4+
tags:
5+
- 'v*'
6+
7+
permissions:
8+
contents: write
9+
10+
jobs:
11+
release:
12+
runs-on: ubuntu-latest
13+
env:
14+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
15+
steps:
16+
- uses: actions/checkout@v4
17+
with:
18+
fetch-depth: 0
19+
- uses: actions/setup-go@v5
20+
with:
21+
go-version: '1.24'
22+
- name: Run tests
23+
run: go test ./... -count=1
24+
- name: Run GoReleaser
25+
uses: goreleaser/goreleaser-action@v6
26+
with:
27+
version: latest
28+
args: release --clean
29+
env:
30+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/test.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ on:
88
jobs:
99
test:
1010
runs-on: ubuntu-latest
11+
env:
12+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
1113
steps:
1214
- uses: actions/checkout@v4
1315
- uses: actions/setup-go@v5
1416
with:
15-
go-version: '1.22'
17+
go-version: '1.24'
1618
- name: Build
1719
run: go build -o librarr ./cmd/librarr/
1820
- name: Test

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,6 @@
77
/data/
88
/tmp/
99
vendor/
10+
node_modules/
11+
package-lock.json
12+
package.json

.goreleaser.yml

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
version: 2
2+
3+
builds:
4+
- main: ./cmd/librarr/
5+
binary: librarr
6+
env:
7+
- CGO_ENABLED=0
8+
goos:
9+
- linux
10+
- darwin
11+
- windows
12+
goarch:
13+
- amd64
14+
- arm64
15+
- arm
16+
goarm:
17+
- "7"
18+
ldflags:
19+
- -s -w
20+
- -X github.com/JeremiahM37/librarr/internal/api.Version={{.Version}}
21+
- -X github.com/JeremiahM37/librarr/internal/api.BuildTime={{.Date}}
22+
23+
archives:
24+
- formats: ['tar.gz']
25+
format_overrides:
26+
- goos: windows
27+
formats: ['zip']
28+
name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}"
29+
30+
checksum:
31+
name_template: "checksums.txt"
32+
33+
changelog:
34+
sort: asc
35+
filters:
36+
exclude:
37+
- "^docs:"
38+
- "^test:"
39+
- "^ci:"

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Self-hosted book, audiobook, and manga search and download manager.
44

55
Librarr aggregates 13 search sources into a single interface, handles downloads via qBittorrent or SABnzbd, and automatically organizes files into your Calibre, Audiobookshelf, Kavita, or Komga libraries. It exposes a Torznab/Newznab API so it can act as an indexer in Prowlarr or Readarr, and an OPDS 1.2 feed for e-readers.
66

7+
78
## Features
89

910
- **13 search sources** in one UI (see table below)

cmd/librarr/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ func main() {
108108
go scanner.Start(ctx)
109109

110110
// Create HTTP server.
111-
server := api.NewServer(cfg, database, searchMgr, downloadMgr, qb, sab)
111+
server := api.NewServer(cfg, database, searchMgr, downloadMgr, qb, sab, organizer, targets)
112112

113113
httpServer := &http.Server{
114114
Addr: fmt.Sprintf(":%d", cfg.Port),

0 commit comments

Comments
 (0)