diff --git a/backend.py b/backend.py index e84f4c5..96eb23a 100644 --- a/backend.py +++ b/backend.py @@ -8,12 +8,17 @@ import subprocess import os from logger import setup_logger -from config import TMP_DIR, MAIN_LOOP_SLEEP_TIME, INGEST_DIR, CUSTOM_SCRIPT +from config import TMP_DIR, MAIN_LOOP_SLEEP_TIME, INGEST_DIR, CUSTOM_SCRIPT, USE_BOOK_TITLE from models import book_queue, BookInfo, QueueStatus, SearchFilters import book_manager logger = setup_logger(__name__) +def _sanitize_filename(filename: str) -> str: + """Sanitize a filename by replacing spaces with underscores and removing invalid characters.""" + keepcharacters = (' ','.','_') + return "".join(c for c in filename if c.isalnum() or c in keepcharacters).rstrip() + def search_books(query: str, filters: SearchFilters) -> List[Dict[str, Any]]: """Search for books matching the query. @@ -114,7 +119,13 @@ def _download_book(book_id: str) -> bool: """ try: book_info = book_queue._book_data[book_id] - book_path = TMP_DIR / f"{book_id}.{book_info.format}" + + if USE_BOOK_TITLE: + book_name = _sanitize_filename(book_info.title) + else: + book_name = book_id + book_name += f".{book_info.format}" + book_path = TMP_DIR / book_name success = book_manager.download_book(book_info, book_path) if not success: @@ -124,7 +135,7 @@ def _download_book(book_id: str) -> bool: logger.info(f"Running custom script: {CUSTOM_SCRIPT}") subprocess.run([CUSTOM_SCRIPT, book_path]) - final_path = INGEST_DIR / f"{book_id}.{book_info.format}" + final_path = INGEST_DIR / book_name if os.path.exists(book_path): shutil.move(book_path, final_path) diff --git a/config.py b/config.py index a462d69..09850ca 100644 --- a/config.py +++ b/config.py @@ -18,6 +18,8 @@ TMP_DIR = Path(os.getenv("TMP_DIR", "/tmp/cwa-book-downloader")) INGEST_DIR = Path(os.getenv("INGEST_DIR", "/cwa-book-ingest")) STATUS_TIMEOUT = int(os.getenv("STATUS_TIMEOUT", 3600)) +USE_BOOK_TITLE = os.getenv("USE_BOOK_TITLE", "false").lower() in ["true", "yes", "1", "y"] + # Create necessary directories TMP_DIR.mkdir(exist_ok=True) LOG_DIR.mkdir(exist_ok=True) diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 19b731b..b5dd979 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -8,6 +8,7 @@ services: FLASK_PORT: 8084 FLASK_DEBUG: false BOOK_LANGUAGE: en + USE_BOOK_TITLE: true ports: - 8084:8084 restart: unless-stopped diff --git a/readme.md b/readme.md index 6d9c839..d328029 100644 --- a/readme.md +++ b/readme.md @@ -73,6 +73,7 @@ If logging is enabld, log folder default location is `/var/log/cwa-book-download | `SUPPORTED_FORMATS` | Supported book formats | `epub,mobi,azw3,fb2,djvu,cbz,cbr` | | `BOOK_LANGUAGE` | Preferred language for books | `en` | | `AA_DONATOR_KEY` | Optional Donator key for Anna's Archive fast download API | `` | +| `USE_BOOK_TITLE` | Use book title as filename instead of ID | `false` | If you change `BOOK_LANGUAGE`, you can add multiple comma separated languages, such as `en,fr,ru` etc.