Add new settings

This commit is contained in:
2024-03-08 22:38:18 +08:00
parent ccb19875ca
commit c0568543a5
5 changed files with 43 additions and 1 deletions

View File

@@ -21,6 +21,8 @@ class Config:
self._data['type'] = 'epub,txt' self._data['type'] = 'epub,txt'
self._data['export_book_template'] = 'exported/<book_name> - <author_name>.<ext>' # noqa: E501 self._data['export_book_template'] = 'exported/<book_name> - <author_name>.<ext>' # noqa: E501
self._data['export_chapter_template'] = 'exported/<book_id>/<chapter_id>.txt' # noqa: E501 self._data['export_chapter_template'] = 'exported/<book_id>/<chapter_id>.txt' # noqa: E501
self._data['export_nodownload'] = True
self._data['img_cache_dir'] = 'img_cache'
self._data['page_size'] = 10 self._data['page_size'] = 10
self.save() self.save()
@@ -72,6 +74,10 @@ class Config:
def export_epub(self): def export_epub(self):
return self.export_type.find('epub') >= 0 return self.export_type.find('epub') >= 0
@cached_property
def export_nodownload(self):
return self.get_arg('export_nodownload', True)
@cached_property @cached_property
def export_txt(self): def export_txt(self):
return self.export_type.find('txt') >= 0 return self.export_type.find('txt') >= 0

22
epub.py
View File

@@ -360,6 +360,28 @@ class EpubFile:
self.EpubList.append(ch) self.EpubList.append(ch)
self.epub.spine.append(ch) self.epub.spine.append(ch)
def add_nodownload_chapter(self, chapter, division_name: str):
chapter_title = chapter['chapter_title']
chapter_id = chapter['chapter_id']
ch = epub.EpubHtml(
title=f"{chapter_title} (未下载)",
file_name=f'ch{chapter_id}.xhtml',
lang='zh-CN',
uid=f'ch{chapter_id}',
)
if division_name == '作品相关':
ch.is_linear = False
ch.content = f'<h1 style="text-align: center;">{chapter_title}</h1>\n<p>本章未下载</p>' # noqa: E501
self.epub.add_item(ch)
if self.last_division_name != division_name:
self.EpubList.append([epub.Link(ch.file_name, division_name), []])
self.last_division_name = division_name
if isinstance(self.EpubList[-1], list):
self.EpubList[-1][-1].append(ch)
else:
self.EpubList.append(ch)
self.epub.spine.append(ch)
def save_epub_file(self): # save epub file to local def save_epub_file(self): # save epub file to local
# the path to save epub file to local # the path to save epub file to local
self.epub.toc = self.EpubList self.epub.toc = self.EpubList

View File

@@ -100,9 +100,11 @@ def export_book(ncw: NovelCiwei, db: CwmDb, cfg: Config, bn: BooksNew,
if cfg.export_epub: if cfg.export_epub:
epub.add_chapter(chapter, content, division_name) epub.add_chapter(chapter, content, division_name)
count += 1 count += 1
else: elif cfg.export_nodownload:
if cfg.export_txt: if cfg.export_txt:
txt.write(f"{chapter_index}{chapter_title} (未下载)\n\n") # noqa: E501 txt.write(f"{chapter_index}{chapter_title} (未下载)\n\n") # noqa: E501
if cfg.export_epub:
epub.add_nodownload_chapter(chapter, division_name)
chapter_index += 1 chapter_index += 1
print(f'Exported {count} chapters.') print(f'Exported {count} chapters.')
finally: finally:

View File

@@ -3,6 +3,7 @@ from config import Config
from db import CwmDb from db import CwmDb
from novelCiwei import NovelCiwei from novelCiwei import NovelCiwei
from booksnew import BooksNew from booksnew import BooksNew
from utils import parse_bool
parser = ArgumentParser(description='A tool to export CiWeiMao novel cache.') parser = ArgumentParser(description='A tool to export CiWeiMao novel cache.')
@@ -19,6 +20,7 @@ parser.add_argument('-t', '--type', help='Export type. Available types: epub, tx
parser.add_argument('--ebt', '--export-book-template', help='The template of the exported book. Available key: <ext>, <book_id>, <book_name>, <author_name> eta.') # noqa: E501 parser.add_argument('--ebt', '--export-book-template', help='The template of the exported book. Available key: <ext>, <book_id>, <book_name>, <author_name> eta.') # noqa: E501
parser.add_argument('--icd', '--image-cache-dir', help='Path to image cache directory.') # noqa: E501 parser.add_argument('--icd', '--image-cache-dir', help='Path to image cache directory.') # noqa: E501
parser.add_argument('-s', '--page-size', help='Maximum size of a page when asking for choices.', type=int) # noqa: E501 parser.add_argument('-s', '--page-size', help='Maximum size of a page when asking for choices.', type=int) # noqa: E501
parser.add_argument('-a', '--export-nodownload', help='export not downloaded chapter when exporting book.', type=parse_bool) # noqa: E501
parser.add_argument('action', help='The action to do.', choices=['importkey', 'exportchapter', 'exportbook', 'export', 'ik', 'ec', 'eb', 'e'], nargs='?', default='export') # noqa: E501 parser.add_argument('action', help='The action to do.', choices=['importkey', 'exportchapter', 'exportbook', 'export', 'ik', 'ec', 'eb', 'e'], nargs='?', default='export') # noqa: E501

View File

@@ -53,3 +53,13 @@ def ask_choice(cfg: Config, choices: list, prompt='请选择:', fn=None, extra
if index < 0 or index >= count: if index < 0 or index >= count:
continue continue
return choices[index] return choices[index]
def parse_bool(s: str):
if s.lower() in ['y', 'yes', 'true', 't']:
return True
if s.lower() in ['n', 'no', 'false', 'f']:
return False
if s.isnumeric():
return bool(int(s))
raise ValueError(f"Unexpected bool value: {s}")