2 Commits

Author SHA1 Message Date
eneller
75974ae119 fix: slugify filenames 2025-04-06 10:29:19 +02:00
eneller
b3cd49326f feat: prettier logging 2025-04-05 01:42:20 +02:00
2 changed files with 11 additions and 4 deletions

View File

@@ -1,6 +1,6 @@
[project] [project]
name = "epub2go" name = "epub2go"
version = "2.2.1" 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,8 +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')
logger.debug('Creating epub as "%s"',filename)
command = f'''pandoc -f html -t epub \ command = f'''pandoc -f html -t epub \
-o "{filename}" \ -o "{filename}" \
--reference-location=section \ --reference-location=section \
@@ -115,6 +114,7 @@ class GBConvert():
--metadata author="{author}" \ --metadata author="{author}" \
--epub-title-page=false \ --epub-title-page=false \
{" ".join(chapters)} ''' {" ".join(chapters)} '''
logger.debug('Calling "%s"', command)
subprocess.run(shlex.split(command), cwd=dir_output, check=True) subprocess.run(shlex.split(command), cwd=dir_output, check=True)
return os.path.abspath(os.path.join(dir_output,filename)) return os.path.abspath(os.path.join(dir_output,filename))
@@ -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