feat: rename project to BookFlow Metadata Engine
Wiki Sync / Синхронизация Wiki (push) Successful in 1s
Wiki Sync / Синхронизация Wiki (push) Successful in 1s
This commit is contained in:
+1
-1
@@ -1,5 +1,5 @@
|
||||
# =============================================================================
|
||||
# GenAudioBookInfo — пример конфигурации
|
||||
# BookFlow Metadata Engine — пример конфигурации
|
||||
# Скопируй этот файл в .env и заполни своими значениями:
|
||||
# cp .env.example .env
|
||||
# =============================================================================
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# ══════════════════════════════════════════════════════════════════════════════
|
||||
# CI/CD Pipeline: Сборка и публикация релиза GenAudioBookInfo
|
||||
# CI/CD Pipeline: Сборка и публикация релиза BookFlow Metadata Engine
|
||||
# ══════════════════════════════════════════════════════════════════════════════
|
||||
#
|
||||
# ЗАПУСК:
|
||||
@@ -32,7 +32,7 @@ on:
|
||||
|
||||
env:
|
||||
GO_VERSION: "1.24"
|
||||
APP_NAME: genaudiobookinfo
|
||||
APP_NAME: bookflow-metadata
|
||||
BUILD_DIR: build
|
||||
|
||||
# ══════════════════════════════════════════════════════════════════════════════
|
||||
@@ -121,7 +121,7 @@ jobs:
|
||||
VER="${{ steps.ver.outputs.version }}"
|
||||
LDFLAGS="-s -w -X main.version=${VER}"
|
||||
GOFLAGS="-trimpath"
|
||||
CMD="./cmd/genaudiobookinfo"
|
||||
CMD="./cmd/bookflow-metadata"
|
||||
OUT="${BUILD_DIR}"
|
||||
mkdir -p "${OUT}"
|
||||
|
||||
@@ -255,7 +255,7 @@ jobs:
|
||||
|
||||
# ── Начинаем формировать тело релиза ───────────────────────────
|
||||
{
|
||||
echo "## GenAudioBookInfo ${TAG}"
|
||||
echo "## BookFlow Metadata Engine ${TAG}"
|
||||
echo ""
|
||||
|
||||
# Пользовательские заметки (RELEASE_NOTES.md — приоритет)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# Defines project automation or runtime configuration.
|
||||
name: "Wiki Sync"
|
||||
|
||||
on:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# ══════════════════════════════════════════════════════════════════════════════
|
||||
# CI/CD Pipeline: Сборка и публикация релиза GenAudioBookInfo
|
||||
# CI/CD Pipeline: Сборка и публикация релиза BookFlow Metadata Engine
|
||||
# ══════════════════════════════════════════════════════════════════════════════
|
||||
#
|
||||
# ЗАПУСК:
|
||||
@@ -32,7 +32,7 @@ on:
|
||||
|
||||
env:
|
||||
GO_VERSION: "1.24"
|
||||
APP_NAME: genaudiobookinfo
|
||||
APP_NAME: bookflow-metadata
|
||||
BUILD_DIR: build
|
||||
|
||||
# ══════════════════════════════════════════════════════════════════════════════
|
||||
@@ -121,7 +121,7 @@ jobs:
|
||||
VER="${{ steps.ver.outputs.version }}"
|
||||
LDFLAGS="-s -w -X main.version=${VER}"
|
||||
GOFLAGS="-trimpath"
|
||||
CMD="./cmd/genaudiobookinfo"
|
||||
CMD="./cmd/bookflow-metadata"
|
||||
OUT="${BUILD_DIR}"
|
||||
mkdir -p "${OUT}"
|
||||
|
||||
@@ -255,7 +255,7 @@ jobs:
|
||||
|
||||
# ── Начинаем формировать тело релиза ───────────────────────────
|
||||
{
|
||||
echo "## GenAudioBookInfo ${TAG}"
|
||||
echo "## BookFlow Metadata Engine ${TAG}"
|
||||
echo ""
|
||||
|
||||
# Пользовательские заметки (RELEASE_NOTES.md — приоритет)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# Defines project automation or runtime configuration.
|
||||
name: "Wiki Sync"
|
||||
|
||||
on:
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# Excludes generated files and local development data.
|
||||
*.exe
|
||||
*.exe~
|
||||
*.dll
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# GenAudioBookInfo Makefile
|
||||
# BookFlow Metadata Engine Makefile
|
||||
# Работает под Windows (PowerShell), Linux и macOS
|
||||
|
||||
APP_NAME := genaudiobookinfo
|
||||
APP_NAME := bookflow-metadata
|
||||
BUILD_DIR := build
|
||||
CMD_PATH := ./cmd/genaudiobookinfo
|
||||
CMD_PATH := ./cmd/bookflow-metadata
|
||||
GO := go
|
||||
GOFLAGS := -trimpath
|
||||
|
||||
@@ -13,7 +13,7 @@ OUTPUT_DIR := ./result
|
||||
# ── Параметры Gitea для CI/CD-команд ─────────────────────────────────────────
|
||||
# Переопределить через env или CLI: make release-tag GITEA_URL=https://...
|
||||
GITEA_URL ?= https://github.dfv24.com
|
||||
GITEA_REPO ?= fofanov.dmitry/GenAudioBookInfo
|
||||
GITEA_REPO ?= fofanov.dmitry/bookflow-metadata
|
||||
GIT_TOKEN ?=
|
||||
GITEA_TOKEN ?=
|
||||
|
||||
@@ -538,7 +538,7 @@ release:
|
||||
*) OTHER="$$OTHER\n- $$line" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
BODY="## GenAudioBookInfo $$tag\n\n"; \
|
||||
BODY="## BookFlow Metadata Engine $$tag\n\n"; \
|
||||
[ -f RELEASE_NOTES.md ] && BODY="$$BODY$$(cat RELEASE_NOTES.md)\n\n"; \
|
||||
BODY="$$BODY---\n\n### Информация о сборке\n\n| Параметр | Значение |\n|---|---|\n| Коммит | \`$$COMMIT\` |\n| Дата | $$DATE |\n"; \
|
||||
BODY_JSON=$$(printf '%s' "$$BODY" | python3 -c 'import sys,json; print(json.dumps(sys.stdin.read()))'); \
|
||||
@@ -661,12 +661,12 @@ endif
|
||||
## Показать справку
|
||||
help:
|
||||
$(info )
|
||||
$(info GenAudioBookInfo v$(VERSION) — Makefile)
|
||||
$(info BookFlow Metadata Engine v$(VERSION) — Makefile)
|
||||
$(info ─────────────────────────────────────────)
|
||||
$(info )
|
||||
$(info Основные:)
|
||||
$(info make build Сборка для текущей платформы)
|
||||
$(info make build-windows-current Сборка genaudiobookinfo.exe)
|
||||
$(info make build-windows-current Сборка bookflow-metadata.exe)
|
||||
$(info make run Запуск без сборки (workers=8, timeout=60m))
|
||||
$(info make run-custom ARGS="…" Запуск с параметрами)
|
||||
$(info make clean Очистка артефактов сборки)
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
# GenAudioBookInfo
|
||||
# BookFlow Metadata Engine
|
||||
|
||||
[](https://go.dev "Go version")
|
||||
[](https://github.dfv24.com/fofanov.dmitry/GenAudioBookInfo/releases/latest "Latest release")
|
||||
[](https://github.dfv24.com/fofanov.dmitry/GenAudioBookInfo/commits/branch/master "Last Commit")
|
||||
[](https://github.dfv24.com/fofanov.dmitry/GenAudioBookInfo/issues "Open Issues")
|
||||
[](https://github.dfv24.com/fofanov.dmitry/GenAudioBookInfo/issues?type=comment&state=closed "Closed Issues")
|
||||
[](https://github.dfv24.com/fofanov.dmitry/GenAudioBookInfo "Languages")
|
||||
[](https://github.dfv24.com/fofanov.dmitry/bookflow-metadata/releases/latest "Latest release")
|
||||
[](https://github.dfv24.com/fofanov.dmitry/bookflow-metadata/commits/branch/master "Last Commit")
|
||||
[](https://github.dfv24.com/fofanov.dmitry/bookflow-metadata/issues "Open Issues")
|
||||
[](https://github.dfv24.com/fofanov.dmitry/bookflow-metadata/issues?type=comment&state=closed "Closed Issues")
|
||||
[](https://github.dfv24.com/fofanov.dmitry/bookflow-metadata "Languages")
|
||||
|
||||
Go-утилита для обработки аудиокниг: сканирует папки, извлекает/нормализует теги, ищет данные через TorrAPI, (опционально) валидирует через OpenRouter, генерирует metadata.json (AudioBookShelf) и раскладывает по структуре.
|
||||
|
||||

|
||||

|
||||
|
||||
**English summary.** A concurrent Go CLI that turns inconsistent audiobook folders into Audiobookshelf-ready libraries using embedded tags, optional TorrAPI/OpenRouter enrichment and deterministic `metadata.json` output.
|
||||
|
||||
@@ -32,7 +32,7 @@ Go-утилита для обработки аудиокниг: сканируе
|
||||
|
||||
```
|
||||
cmd/
|
||||
genaudiobookinfo/
|
||||
bookflow-metadata/
|
||||
main.go ← Composition Root (точка входа, DI)
|
||||
|
||||
internal/
|
||||
@@ -66,20 +66,20 @@ internal/
|
||||
## Сборка
|
||||
|
||||
```bash
|
||||
go build -o genaudiobookinfo.exe ./cmd/genaudiobookinfo/
|
||||
go build -o bookflow-metadata.exe ./cmd/bookflow-metadata/
|
||||
```
|
||||
|
||||
## Использование
|
||||
|
||||
```bash
|
||||
# Сканировать каталог с аудиокнигами
|
||||
genaudiobookinfo.exe D:\Audiobooks
|
||||
bookflow-metadata.exe D:\Audiobooks
|
||||
|
||||
# Указать количество воркеров
|
||||
genaudiobookinfo.exe -workers 8 D:\Audiobooks
|
||||
bookflow-metadata.exe -workers 8 D:\Audiobooks
|
||||
|
||||
# Установить таймаут
|
||||
genaudiobookinfo.exe -timeout 60s D:\Audiobooks
|
||||
bookflow-metadata.exe -timeout 60s D:\Audiobooks
|
||||
```
|
||||
|
||||
## Поддерживаемые форматы
|
||||
|
||||
@@ -13,11 +13,11 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/fofanov/genaudiobookinfo/internal/domain"
|
||||
"github.com/fofanov/genaudiobookinfo/internal/infrastructure"
|
||||
"github.com/fofanov/genaudiobookinfo/internal/presentation"
|
||||
"github.com/fofanov/genaudiobookinfo/internal/usecase"
|
||||
"github.com/joho/godotenv"
|
||||
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
|
||||
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/infrastructure"
|
||||
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/presentation"
|
||||
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/usecase"
|
||||
)
|
||||
|
||||
var version = "dev" // переопределяется при сборке: -ldflags "-X main.version=X.Y.Z"
|
||||
@@ -78,7 +78,7 @@ func main() {
|
||||
cfg := loadConfig(".env")
|
||||
|
||||
if *showVersion {
|
||||
fmt.Printf("GenAudioBookInfo v%s\n", version)
|
||||
fmt.Printf("BookFlow Metadata Engine v%s\n", version)
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 1.0 MiB |
@@ -1,4 +1,4 @@
|
||||
module github.com/fofanov/genaudiobookinfo
|
||||
module github.dfv24.com/fofanov.dmitry/bookflow-metadata
|
||||
|
||||
go 1.24.2
|
||||
|
||||
|
||||
@@ -6,22 +6,22 @@ import "time"
|
||||
|
||||
// AudioBookInfo — агрегат, содержащий метаданные аудиокниги.
|
||||
type AudioBookInfo struct {
|
||||
FolderPath string // путь к папке с аудиокнигой
|
||||
Title string // название книги
|
||||
Author string // автор
|
||||
Album string // альбом (часто совпадает с названием)
|
||||
Genre string // жанр
|
||||
Year int // год издания
|
||||
Comment string // описание / комментарий
|
||||
Duration time.Duration // длительность первого трека
|
||||
Format string // формат файла (mp3, m4b, ogg …)
|
||||
SourceFile string // файл, из которого извлечены метаданные
|
||||
CoverFound bool // обложка найдена
|
||||
FilesCount int // количество аудиофайлов в папке
|
||||
FolderPath string // путь к папке с аудиокнигой
|
||||
Title string // название книги
|
||||
Author string // автор
|
||||
Album string // альбом (часто совпадает с названием)
|
||||
Genre string // жанр
|
||||
Year int // год издания
|
||||
Comment string // описание / комментарий
|
||||
Duration time.Duration // длительность первого трека
|
||||
Format string // формат файла (mp3, m4b, ogg …)
|
||||
SourceFile string // файл, из которого извлечены метаданные
|
||||
CoverFound bool // обложка найдена
|
||||
FilesCount int // количество аудиофайлов в папке
|
||||
}
|
||||
|
||||
// ScanResult оборачивает результат сканирования одной папки.
|
||||
type ScanResult struct {
|
||||
Info *AudioBookInfo
|
||||
Err error
|
||||
Info *AudioBookInfo
|
||||
Err error
|
||||
}
|
||||
|
||||
+21
-21
@@ -63,10 +63,10 @@ type TorrentDetail struct {
|
||||
type TrackerName string
|
||||
|
||||
const (
|
||||
TrackerRuTracker TrackerName = "RuTracker"
|
||||
TrackerKinozal TrackerName = "Kinozal"
|
||||
TrackerNoNameClub TrackerName = "NoNameClub"
|
||||
TrackerRuTor TrackerName = "RuTor"
|
||||
TrackerRuTracker TrackerName = "RuTracker"
|
||||
TrackerKinozal TrackerName = "Kinozal"
|
||||
TrackerNoNameClub TrackerName = "NoNameClub"
|
||||
TrackerRuTor TrackerName = "RuTor"
|
||||
)
|
||||
|
||||
// TrackerPriority — порядок обхода трекеров.
|
||||
@@ -97,23 +97,23 @@ type EnrichedBookInfo struct {
|
||||
|
||||
// BookMetadata — JSON-структура файла metadata.json.
|
||||
type BookMetadata struct {
|
||||
Tags []string `json:"tags"`
|
||||
Chapters []ChapterInfo `json:"chapters"`
|
||||
Title string `json:"title"`
|
||||
Subtitle string `json:"subtitle"`
|
||||
Authors []string `json:"authors"`
|
||||
Narrators []string `json:"narrators"`
|
||||
Series []string `json:"series"`
|
||||
Genres []string `json:"genres"`
|
||||
PublishedYear string `json:"publishedYear"`
|
||||
PublishedDate string `json:"publishedDate"`
|
||||
Publisher string `json:"publisher"`
|
||||
Description string `json:"description"`
|
||||
ISBN string `json:"isbn"`
|
||||
ASIN string `json:"asin"`
|
||||
Language string `json:"language"`
|
||||
Explicit bool `json:"explicit"`
|
||||
Abridged bool `json:"abridged"`
|
||||
Tags []string `json:"tags"`
|
||||
Chapters []ChapterInfo `json:"chapters"`
|
||||
Title string `json:"title"`
|
||||
Subtitle string `json:"subtitle"`
|
||||
Authors []string `json:"authors"`
|
||||
Narrators []string `json:"narrators"`
|
||||
Series []string `json:"series"`
|
||||
Genres []string `json:"genres"`
|
||||
PublishedYear string `json:"publishedYear"`
|
||||
PublishedDate string `json:"publishedDate"`
|
||||
Publisher string `json:"publisher"`
|
||||
Description string `json:"description"`
|
||||
ISBN string `json:"isbn"`
|
||||
ASIN string `json:"asin"`
|
||||
Language string `json:"language"`
|
||||
Explicit bool `json:"explicit"`
|
||||
Abridged bool `json:"abridged"`
|
||||
}
|
||||
|
||||
// ChapterInfo — информация о главе.
|
||||
|
||||
@@ -45,7 +45,7 @@ func (d *HTTPCoverDownloader) Download(ctx context.Context, url string, destFold
|
||||
if err != nil {
|
||||
return fmt.Errorf("ошибка создания запроса обложки: %w", err)
|
||||
}
|
||||
req.Header.Set("User-Agent", "GenAudioBookInfo/1.0")
|
||||
req.Header.Set("User-Agent", "BookFlow Metadata Engine/1.0")
|
||||
|
||||
resp, err := d.httpClient.Do(req)
|
||||
if err != nil {
|
||||
|
||||
@@ -13,8 +13,8 @@ import (
|
||||
"unicode/utf8"
|
||||
|
||||
"github.com/dhowden/tag"
|
||||
"github.com/fofanov/genaudiobookinfo/internal/domain"
|
||||
"github.com/fofanov/genaudiobookinfo/internal/nameparser"
|
||||
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
|
||||
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/nameparser"
|
||||
)
|
||||
|
||||
// TagMetadataExtractor реализует domain.MetadataExtractor.
|
||||
|
||||
@@ -14,7 +14,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/fofanov/genaudiobookinfo/internal/domain"
|
||||
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
|
||||
)
|
||||
|
||||
// OpenRouterClient реализует интерфейс domain.LLMClient для работы с OpenRouter API.
|
||||
|
||||
@@ -17,9 +17,9 @@ import (
|
||||
"unicode/utf8"
|
||||
|
||||
"github.com/dhowden/tag"
|
||||
"github.com/fofanov/genaudiobookinfo/internal/domain"
|
||||
"github.com/fofanov/genaudiobookinfo/internal/nameparser"
|
||||
"github.com/tcolgate/mp3"
|
||||
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
|
||||
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/nameparser"
|
||||
)
|
||||
|
||||
// FSResultWriter реализует domain.ResultWriter.
|
||||
|
||||
@@ -14,7 +14,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/fofanov/genaudiobookinfo/internal/domain"
|
||||
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
|
||||
)
|
||||
|
||||
// TorrAPIClient реализует domain.TorrentSearcher.
|
||||
|
||||
@@ -11,7 +11,7 @@ import (
|
||||
"strings"
|
||||
"unicode"
|
||||
|
||||
"github.com/fofanov/genaudiobookinfo/internal/domain"
|
||||
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
|
||||
)
|
||||
|
||||
// ============================================================================
|
||||
|
||||
@@ -7,8 +7,8 @@ import (
|
||||
"os"
|
||||
"sync"
|
||||
|
||||
"github.com/fofanov/genaudiobookinfo/internal/domain"
|
||||
"github.com/schollz/progressbar/v3"
|
||||
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
|
||||
)
|
||||
|
||||
// ConsoleLogger реализует domain.ProcessLogger для вывода логов в консоль.
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"strings"
|
||||
"text/tabwriter"
|
||||
|
||||
"github.com/fofanov/genaudiobookinfo/internal/domain"
|
||||
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
|
||||
)
|
||||
|
||||
// ConsolePresenter реализует domain.Presenter для вывода в stdout.
|
||||
|
||||
@@ -14,7 +14,7 @@ import (
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
"github.com/charmbracelet/lipgloss"
|
||||
|
||||
"github.com/fofanov/genaudiobookinfo/internal/domain"
|
||||
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
|
||||
)
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════════════
|
||||
@@ -210,9 +210,9 @@ func (m tuiModel) renderTop(height int) string {
|
||||
elapsed := time.Since(m.startTime).Round(time.Second)
|
||||
var titleStr string
|
||||
if m.version != "" {
|
||||
titleStr = tuiStyleHeader.Render("GenAudioBookInfo") + " " + tuiStyleVersion.Render("v"+m.version)
|
||||
titleStr = tuiStyleHeader.Render("BookFlow Metadata Engine") + " " + tuiStyleVersion.Render("v"+m.version)
|
||||
} else {
|
||||
titleStr = tuiStyleHeader.Render("GenAudioBookInfo")
|
||||
titleStr = tuiStyleHeader.Render("BookFlow Metadata Engine")
|
||||
}
|
||||
b.WriteString(fmt.Sprintf(" %s %s\n", titleStr, tuiStyleTime.Render(elapsed.String())))
|
||||
|
||||
|
||||
@@ -17,8 +17,8 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/fofanov/genaudiobookinfo/internal/domain"
|
||||
"github.com/fofanov/genaudiobookinfo/internal/nameparser"
|
||||
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
|
||||
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/nameparser"
|
||||
)
|
||||
|
||||
// ProcessingConfig содержит настройки конвейера обработки.
|
||||
|
||||
+4
-3
@@ -1,3 +1,4 @@
|
||||
# Implements Windows project automation.
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Полный локальный релиз: сборка + архивы + тег + публикация в Gitea.
|
||||
@@ -21,10 +22,10 @@
|
||||
param(
|
||||
[Parameter(Mandatory)][string]$Version,
|
||||
[string]$Token,
|
||||
[string]$AppName = "genaudiobookinfo",
|
||||
[string]$AppName = "bookflow-metadata",
|
||||
[string]$BuildDir = "build",
|
||||
[string]$GiteaUrl = "https://github.dfv24.com",
|
||||
[string]$GiteaRepo = "fofanov.dmitry/GenAudioBookInfo",
|
||||
[string]$GiteaRepo = "fofanov.dmitry/bookflow-metadata",
|
||||
[string]$GoVersion = "unknown"
|
||||
)
|
||||
|
||||
@@ -166,7 +167,7 @@ $other = @()
|
||||
}
|
||||
|
||||
# Формируем тело релиза
|
||||
$body = "## GenAudioBookInfo $tag`n`n"
|
||||
$body = "## BookFlow Metadata Engine $tag`n`n"
|
||||
|
||||
if (Test-Path 'RELEASE_NOTES.md') {
|
||||
$body += (Get-Content 'RELEASE_NOTES.md' -Raw) + "`n`n"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Архитектура
|
||||
|
||||
GenAudioBookInfo построен по принципам **Чистой архитектуры** (Clean Architecture / Hexagonal Architecture).
|
||||
BookFlow Metadata Engine построен по принципам **Чистой архитектуры** (Clean Architecture / Hexagonal Architecture).
|
||||
Бизнес-логика не зависит от внешних библиотек, баз данных или UI-фреймворков.
|
||||
|
||||
---
|
||||
@@ -9,7 +9,7 @@ GenAudioBookInfo построен по принципам **Чистой арх
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────┐
|
||||
│ cmd/genaudiobookinfo/main.go (Composition Root / DI) │
|
||||
│ cmd/bookflow-metadata/main.go (Composition Root / DI) │
|
||||
├──────────────────────────────────────────────────────────┤
|
||||
│ presentation/ TUI, ConsoleLogger, Presenter │
|
||||
├──────────────────────────────────────────────────────────┤
|
||||
@@ -29,9 +29,9 @@ GenAudioBookInfo построен по принципам **Чистой арх
|
||||
## Структура папок
|
||||
|
||||
```
|
||||
genaudiobookinfo/
|
||||
bookflow-metadata/
|
||||
├── cmd/
|
||||
│ └── genaudiobookinfo/
|
||||
│ └── bookflow-metadata/
|
||||
│ └── main.go # Точка входа, DI, TUI запуск
|
||||
├── internal/
|
||||
│ ├── domain/
|
||||
|
||||
+10
-10
@@ -3,7 +3,7 @@
|
||||
## Синтаксис
|
||||
|
||||
```
|
||||
genaudiobookinfo [опции] [путь к каталогу с аудиокнигами]
|
||||
bookflow-metadata [опции] [путь к каталогу с аудиокнигами]
|
||||
```
|
||||
|
||||
Если путь не передан, используется `dir.in` из `config.yaml`.
|
||||
@@ -35,37 +35,37 @@ CLI-флаг > config.yaml > встроенные defaults
|
||||
### Минимальный запуск (всё из config.yaml)
|
||||
|
||||
```bash
|
||||
./genaudiobookinfo
|
||||
./bookflow-metadata
|
||||
```
|
||||
|
||||
### Указать входной каталог явно
|
||||
|
||||
```bash
|
||||
./genaudiobookinfo D:\Audiobooks
|
||||
./bookflow-metadata D:\Audiobooks
|
||||
```
|
||||
|
||||
### Переопределить количество воркеров
|
||||
|
||||
```bash
|
||||
./genaudiobookinfo -workers 6 D:\Audiobooks
|
||||
./bookflow-metadata -workers 6 D:\Audiobooks
|
||||
```
|
||||
|
||||
### Другой сервер TorrAPI
|
||||
|
||||
```bash
|
||||
./genaudiobookinfo -api http://192.168.1.10:9200 D:\Audiobooks
|
||||
./bookflow-metadata -api http://192.168.1.10:9200 D:\Audiobooks
|
||||
```
|
||||
|
||||
### Указать нестандартную папку результатов
|
||||
|
||||
```bash
|
||||
./genaudiobookinfo -result E:\ProcessedBooks D:\Audiobooks
|
||||
./bookflow-metadata -result E:\ProcessedBooks D:\Audiobooks
|
||||
```
|
||||
|
||||
### Полный набор параметров
|
||||
|
||||
```bash
|
||||
./genaudiobookinfo \
|
||||
./bookflow-metadata \
|
||||
-workers 4 \
|
||||
-timeout 30m \
|
||||
-api http://localhost:9200 \
|
||||
@@ -76,8 +76,8 @@ CLI-флаг > config.yaml > встроенные defaults
|
||||
### Проверить версию
|
||||
|
||||
```bash
|
||||
./genaudiobookinfo -version
|
||||
# GenAudioBookInfo v2.0.0
|
||||
./bookflow-metadata -version
|
||||
# BookFlow Metadata Engine v2.0.0
|
||||
```
|
||||
|
||||
---
|
||||
@@ -90,7 +90,7 @@ CLI-флаг > config.yaml > встроенные defaults
|
||||
|
||||
```bash
|
||||
export OPENROUTER_API_KEY=sk-or-v1-xxxx
|
||||
./genaudiobookinfo D:\Audiobooks
|
||||
./bookflow-metadata D:\Audiobooks
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -90,7 +90,7 @@ OPENROUTER_RETRY_BACKOFF_MAX=8s
|
||||
|
||||
```bash
|
||||
export OPENROUTER_API_KEY=sk-or-...
|
||||
./genaudiobookinfo
|
||||
./bookflow-metadata
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
+6
-6
@@ -1,4 +1,4 @@
|
||||
# GenAudioBookInfo
|
||||
# BookFlow Metadata Engine
|
||||
|
||||
> Автоматический каталогизатор аудиокниг с обогащением метаданных из торрент-трекеров и LLM.
|
||||
|
||||
@@ -15,20 +15,20 @@
|
||||
|
||||
```bash
|
||||
# Сборка
|
||||
go build -o genaudiobookinfo ./cmd/genaudiobookinfo
|
||||
go build -o bookflow-metadata ./cmd/bookflow-metadata
|
||||
|
||||
# Первичная настройка
|
||||
cp .env.example .env
|
||||
# Отредактировать .env: задать DIR_IN, TORRAPI_URL, OPENROUTER_API_KEY
|
||||
|
||||
# Запуск (входная папка из DIR_IN в .env)
|
||||
./genaudiobookinfo
|
||||
./bookflow-metadata
|
||||
|
||||
# Явное указание каталога
|
||||
./genaudiobookinfo D:\Audiobooks
|
||||
./bookflow-metadata D:\Audiobooks
|
||||
|
||||
# С переопределением параметров
|
||||
./genaudiobookinfo -workers 4 -timeout 10m D:\Audiobooks
|
||||
./bookflow-metadata -workers 4 -timeout 10m D:\Audiobooks
|
||||
```
|
||||
|
||||
Полная документация по флагам: [[CLI-Usage]].
|
||||
@@ -58,7 +58,7 @@ cp .env.example .env
|
||||
|
||||
## Ссылки
|
||||
|
||||
- Репозиторий: `https://github.dfv24.com/fofanov/genaudiobookinfo`
|
||||
- Репозиторий: `https://github.dfv24.com/fofanov.dmitry/bookflow-metadata`
|
||||
- Документация OpenRouter: [[OpenRouter]]
|
||||
|
||||
Sync test 2026-02-23T14:27:00
|
||||
|
||||
@@ -12,14 +12,14 @@
|
||||
|
||||
```bash
|
||||
# Клонировать репозиторий
|
||||
git clone https://github.dfv24.com/fofanov/genaudiobookinfo.git
|
||||
cd genaudiobookinfo
|
||||
git clone https://github.dfv24.com/fofanov.dmitry/bookflow-metadata.git
|
||||
cd bookflow-metadata
|
||||
|
||||
# Загрузить зависимости
|
||||
go mod tidy
|
||||
|
||||
# Сборка
|
||||
go build -o genaudiobookinfo ./cmd/genaudiobookinfo
|
||||
go build -o bookflow-metadata ./cmd/bookflow-metadata
|
||||
|
||||
# Или через Makefile
|
||||
make build
|
||||
@@ -28,7 +28,7 @@ make build
|
||||
### Windows
|
||||
|
||||
```powershell
|
||||
go build -o genaudiobookinfo.exe ./cmd/genaudiobookinfo
|
||||
go build -o bookflow-metadata.exe ./cmd/bookflow-metadata
|
||||
```
|
||||
|
||||
## Зависимости
|
||||
@@ -69,7 +69,7 @@ TORRAPI_URL=http://localhost:9200 # адрес TorrServer
|
||||
4. Запустить:
|
||||
|
||||
```bash
|
||||
./genaudiobookinfo
|
||||
./bookflow-metadata
|
||||
```
|
||||
|
||||
## Проверка сборки
|
||||
@@ -77,7 +77,7 @@ TORRAPI_URL=http://localhost:9200 # адрес TorrServer
|
||||
```bash
|
||||
go vet ./...
|
||||
go test ./...
|
||||
./genaudiobookinfo -version
|
||||
./bookflow-metadata -version
|
||||
```
|
||||
|
||||
## Обновление
|
||||
|
||||
+25
-25
@@ -10,16 +10,16 @@
|
||||
|
||||
| Переменная | Значение по умолчанию | Назначение |
|
||||
|---------------|-----------------------------------|----------------------------------------------------|
|
||||
| `APP_NAME` | `genaudiobookinfo` | Имя исполняемого файла |
|
||||
| `APP_NAME` | `bookflow-metadata` | Имя исполняемого файла |
|
||||
| `VERSION` | `2.0.0` | Версия, встраивается в бинарник через `-ldflags` |
|
||||
| `BUILD_DIR` | `build` | Директория для артефактов сборки |
|
||||
| `CMD_PATH` | `./cmd/genaudiobookinfo` | Путь к `main.go` |
|
||||
| `CMD_PATH` | `./cmd/bookflow-metadata` | Путь к `main.go` |
|
||||
| `GO` | `go` | Команда Go-компилятора |
|
||||
| `GOFLAGS` | `-trimpath` | Флаги компилятора (убирает пути хоста из бинарника)|
|
||||
| `LDFLAGS` | `-s -w -X main.version=$(VERSION)`| Линковщик: strip debug, strip DWARF, встроить версию |
|
||||
| `OUTPUT_DIR` | `./result` | Директория с результатами работы программы |
|
||||
| `GITEA_URL` | `https://github.dfv24.com` | Адрес Gitea-инстанции |
|
||||
| `GITEA_REPO` | `fofanov/genaudiobookinfo` | Владелец/репозиторий в Gitea |
|
||||
| `GITEA_REPO` | `fofanov/bookflow-metadata` | Владелец/репозиторий в Gitea |
|
||||
| `GITEA_TOKEN` | *(пусто)* | Токен API Gitea (нужен только для `ci-release`) |
|
||||
|
||||
Переменные можно переопределять при вызове:
|
||||
@@ -56,9 +56,9 @@ make all
|
||||
|
||||
| ОС | Результирующий файл |
|
||||
|---------|----------------------------------|
|
||||
| Windows | `build/genaudiobookinfo.exe` |
|
||||
| Linux | `build/genaudiobookinfo` |
|
||||
| macOS | `build/genaudiobookinfo` |
|
||||
| Windows | `build/bookflow-metadata.exe` |
|
||||
| Linux | `build/bookflow-metadata` |
|
||||
| macOS | `build/bookflow-metadata` |
|
||||
|
||||
Флаги компилятора: `-trimpath -ldflags "-s -w -X main.version=2.0.0"`.
|
||||
|
||||
@@ -70,7 +70,7 @@ make build VERSION=2.1.0 # встроить другую версию
|
||||
---
|
||||
|
||||
### `make build-windows-current`
|
||||
Компилирует `genaudiobookinfo.exe` (Windows/amd64) **в корневой директории проекта** (не в `build/`). Удобно для быстрой локальной проверки на Windows без отдельной папки.
|
||||
Компилирует `bookflow-metadata.exe` (Windows/amd64) **в корневой директории проекта** (не в `build/`). Удобно для быстрой локальной проверки на Windows без отдельной папки.
|
||||
|
||||
```bash
|
||||
make build-windows-current
|
||||
@@ -182,7 +182,7 @@ make tidy
|
||||
### `make clean`
|
||||
Удаляет артефакты сборки:
|
||||
- папку `build/`
|
||||
- файл `genaudiobookinfo.exe` в корне (от `build-windows-current`)
|
||||
- файл `bookflow-metadata.exe` в корне (от `build-windows-current`)
|
||||
- файлы `coverage.out` и `coverage.html`
|
||||
|
||||
```bash
|
||||
@@ -229,22 +229,22 @@ make build-all VERSION=2.1.0
|
||||
|
||||
| Команда make | GOOS | GOARCH | Доп. флаг | Файл |
|
||||
|-------------------------|---------|----------|---------------|---------------------------------------------|
|
||||
| `build-linux-amd64` | linux | amd64 | — | `genaudiobookinfo-linux-amd64` |
|
||||
| `build-linux-386` | linux | 386 | — | `genaudiobookinfo-linux-386` |
|
||||
| `build-linux-arm64` | linux | arm64 | — | `genaudiobookinfo-linux-arm64` |
|
||||
| `build-linux-arm7` | linux | arm | GOARM=7 | `genaudiobookinfo-linux-armv7` |
|
||||
| `build-darwin-amd64` | darwin | amd64 | — | `genaudiobookinfo-darwin-amd64` |
|
||||
| `build-darwin-arm64` | darwin | arm64 | — | `genaudiobookinfo-darwin-arm64` |
|
||||
| `build-windows-amd64` | windows | amd64 | — | `genaudiobookinfo-windows-amd64.exe` |
|
||||
| `build-windows-386` | windows | 386 | — | `genaudiobookinfo-windows-386.exe` |
|
||||
| `build-windows-arm64` | windows | arm64 | — | `genaudiobookinfo-windows-arm64.exe` |
|
||||
| `build-arm-mips` | linux | mips | GOMIPS=softfloat | `genaudiobookinfo-linux-mips` |
|
||||
| `build-arm-mipsle` | linux | mipsle | GOMIPS=softfloat | `genaudiobookinfo-linux-mipsle` |
|
||||
| `build-arm-riscv64` | linux | riscv64 | — | `genaudiobookinfo-linux-riscv64` |
|
||||
| `build-freebsd-amd64` | freebsd | amd64 | — | `genaudiobookinfo-freebsd-amd64` |
|
||||
| `build-freebsd-arm64` | freebsd | arm64 | — | `genaudiobookinfo-freebsd-arm64` |
|
||||
| `build-openbsd-amd64` | openbsd | amd64 | — | `genaudiobookinfo-openbsd-amd64` |
|
||||
| `build-netbsd-amd64` | netbsd | amd64 | — | `genaudiobookinfo-netbsd-amd64` |
|
||||
| `build-linux-amd64` | linux | amd64 | — | `bookflow-metadata-linux-amd64` |
|
||||
| `build-linux-386` | linux | 386 | — | `bookflow-metadata-linux-386` |
|
||||
| `build-linux-arm64` | linux | arm64 | — | `bookflow-metadata-linux-arm64` |
|
||||
| `build-linux-arm7` | linux | arm | GOARM=7 | `bookflow-metadata-linux-armv7` |
|
||||
| `build-darwin-amd64` | darwin | amd64 | — | `bookflow-metadata-darwin-amd64` |
|
||||
| `build-darwin-arm64` | darwin | arm64 | — | `bookflow-metadata-darwin-arm64` |
|
||||
| `build-windows-amd64` | windows | amd64 | — | `bookflow-metadata-windows-amd64.exe` |
|
||||
| `build-windows-386` | windows | 386 | — | `bookflow-metadata-windows-386.exe` |
|
||||
| `build-windows-arm64` | windows | arm64 | — | `bookflow-metadata-windows-arm64.exe` |
|
||||
| `build-arm-mips` | linux | mips | GOMIPS=softfloat | `bookflow-metadata-linux-mips` |
|
||||
| `build-arm-mipsle` | linux | mipsle | GOMIPS=softfloat | `bookflow-metadata-linux-mipsle` |
|
||||
| `build-arm-riscv64` | linux | riscv64 | — | `bookflow-metadata-linux-riscv64` |
|
||||
| `build-freebsd-amd64` | freebsd | amd64 | — | `bookflow-metadata-freebsd-amd64` |
|
||||
| `build-freebsd-arm64` | freebsd | arm64 | — | `bookflow-metadata-freebsd-arm64` |
|
||||
| `build-openbsd-amd64` | openbsd | amd64 | — | `bookflow-metadata-openbsd-amd64` |
|
||||
| `build-netbsd-amd64` | netbsd | amd64 | — | `bookflow-metadata-netbsd-amd64` |
|
||||
|
||||
Каждую платформу можно собирать независимо:
|
||||
|
||||
@@ -319,7 +319,7 @@ make release-tag VERSION=2.1.0 # 2. создаём тег → CI запу
|
||||
> **Внимание**: если `VERSION` не изменён (остался `2.0.0`), команда выведет предупреждение, но тег всё равно будет создан. Обязательно указывайте нужную версию явно.
|
||||
|
||||
После создания тега статус CI доступен по адресу:
|
||||
`https://github.dfv24.com/fofanov/genaudiobookinfo/actions`
|
||||
`https://github.dfv24.com/fofanov.dmitry/bookflow-metadata/actions`
|
||||
|
||||
---
|
||||
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
# OpenRouter (LLM интеграция)
|
||||
|
||||
GenAudioBookInfo поддерживает опциональную нормализацию метаданных через LLM с помощью [OpenRouter](https://openrouter.ai/) — унифицированного API-шлюза к сотням AI-моделей.
|
||||
BookFlow Metadata Engine поддерживает опциональную нормализацию метаданных через LLM с помощью [OpenRouter](https://openrouter.ai/) — унифицированного API-шлюза к сотням AI-моделей.
|
||||
|
||||
---
|
||||
|
||||
@@ -34,7 +34,7 @@ openrouter:
|
||||
|
||||
```bash
|
||||
export OPENROUTER_API_KEY=sk-or-v1-xxxx
|
||||
./genaudiobookinfo
|
||||
./bookflow-metadata
|
||||
```
|
||||
|
||||
Переменная `OPENROUTER_API_KEY` проверяется если `api_key` в конфиге пуст.
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
# TorrAPI (Поиск на трекерах)
|
||||
|
||||
GenAudioBookInfo использует [TorrServer](https://github.com/YouROK/TorrServer) / TorrAPI-совместимый сервер для поиска аудиокниг на торрент-трекерах и получения метаданных раздач.
|
||||
BookFlow Metadata Engine использует [TorrServer](https://github.com/YouROK/TorrServer) / TorrAPI-совместимый сервер для поиска аудиокниг на торрент-трекерах и получения метаданных раздач.
|
||||
|
||||
---
|
||||
|
||||
@@ -40,7 +40,7 @@ torrapi:
|
||||
|
||||
Можно переопределить флагом:
|
||||
```bash
|
||||
./genaudiobookinfo -api http://192.168.1.10:9200 D:\Audiobooks
|
||||
./bookflow-metadata -api http://192.168.1.10:9200 D:\Audiobooks
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
## GenAudioBookInfo
|
||||
## BookFlow Metadata Engine
|
||||
|
||||
- [[Home]]
|
||||
- [[Installation]]
|
||||
|
||||
Reference in New Issue
Block a user