fix: slugify filenames

This commit is contained in:
eneller
2025-04-06 10:29:19 +02:00
parent b3cd49326f
commit 75974ae119
2 changed files with 10 additions and 3 deletions

View File

@@ -1,6 +1,6 @@
[project] [project]
name = "epub2go" name = "epub2go"
version = "2.2.2" version = "2.2.3"
description = "EPUB converter using wget, pandoc and python glue" description = "EPUB converter using wget, pandoc and python glue"
readme = "README.md" readme = "README.md"
requires-python = ">=3.12" requires-python = ">=3.12"

View File

@@ -7,7 +7,7 @@ from tqdm import tqdm
from pyfzf.pyfzf import FzfPrompt from pyfzf.pyfzf import FzfPrompt
import click import click
import os, subprocess, shlex, logging import os, subprocess, shlex, logging, re
import importlib.resources as pkg_resources import importlib.resources as pkg_resources
from dataclasses import dataclass from dataclasses import dataclass
from typing import List from typing import List
@@ -105,7 +105,7 @@ class GBConvert():
def create_epub(self, author, title, chapters, dir_output): def create_epub(self, author, title, chapters, dir_output):
#TODO --epub-cover-image #TODO --epub-cover-image
#TODO toc if it isnt described by <h> tags, e.g. https://www.projekt-gutenberg.org/adlersfe/maskenba/ #TODO toc if it isnt described by <h> tags, e.g. https://www.projekt-gutenberg.org/adlersfe/maskenba/
filename = f'{title} - {author}.epub' filename = slugify(f'{title} - {author}.epub')
command = f'''pandoc -f html -t epub \ command = f'''pandoc -f html -t epub \
-o "{filename}" \ -o "{filename}" \
--reference-location=section \ --reference-location=section \
@@ -160,6 +160,13 @@ def get_all_books() -> List[Book]:
books.append(book) books.append(book)
return books return books
def slugify(value, replacement='_'):
value = re.sub(r'[<>:"/\\|?*\x00-\x1F]', replacement, value)
# Remove leading/trailing whitespace or dots
value = value.strip().strip(".")
# Optionally truncate to safe length (e.g. 255 chars for most filesystems)
return value[:255] or "untitled"
# run main cli # run main cli
@click.command() @click.command()
#TODO include images flag #TODO include images flag