Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0e106e6da6 | |||
| 68eb4a22b7 |
+9
-10
@@ -1,11 +1,10 @@
|
||||
**/__pycache__/
|
||||
**/*.ipynb
|
||||
**/build/
|
||||
.idea/
|
||||
.vscode/
|
||||
**/.venv/
|
||||
**/.env
|
||||
**/.env_template
|
||||
**/*.log
|
||||
**/*.md
|
||||
__pycache__
|
||||
*ipynb
|
||||
build
|
||||
.idea
|
||||
.vscode
|
||||
.venv
|
||||
.env
|
||||
*log
|
||||
*.md
|
||||
src/api/uv.lock
|
||||
|
||||
+9
-6
@@ -1,4 +1,4 @@
|
||||
FROM node:20-alpine
|
||||
FROM node:20
|
||||
|
||||
WORKDIR /build
|
||||
COPY src/frontend/package*.json .
|
||||
@@ -13,12 +13,15 @@ FROM python:3.13-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN apt update && \
|
||||
apt install -y git build-essential python3.13-dev libglib2.0-0 libpango-1.0-0 libpangoft2-1.0-0 && \
|
||||
apt clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
COPY --from=nobodyxu/apt-fast:latest-debian-buster-slim /usr/local/ /usr/local/
|
||||
|
||||
RUN apt update
|
||||
RUN apt install -y aria2
|
||||
RUN apt-fast install -y git build-essential python3.13-dev libgobject-2.0 libpango-1.0 libpangoft2-1.0
|
||||
# aiohttp-client-cache depends on multipart, which requires python3.13-dev to build successfully on 3.13
|
||||
# weasyprint depends on libgoject, libpango, and libpangoft2
|
||||
|
||||
RUN rm -rf /var/lib/apt/lists/*
|
||||
# https://github.com/TheOnlyWayUp/WattpadDownloader/pull/82#discussion_r2470358950
|
||||
|
||||
|
||||
@@ -29,7 +32,7 @@ WORKDIR /app
|
||||
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
|
||||
|
||||
COPY src/api/pyproject.toml /app
|
||||
RUN uv sync && uv cache clean
|
||||
RUN uv sync
|
||||
COPY src/api/ /app
|
||||
COPY --from=0 /build/build /app/src/build
|
||||
|
||||
|
||||
@@ -53,5 +53,5 @@ My thanks to [aerkalov/ebooklib](https://github.com/aerkalov/ebooklib) for a fas
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
<p>TheOnlyWayUp © 2025</p>
|
||||
<p>TheOnlyWayUp © 2026</p>
|
||||
</div>
|
||||
|
||||
+18
-4
@@ -174,12 +174,26 @@ async def handle_download(
|
||||
story_zip = await fetch_story_content_zip(story_id, cookies)
|
||||
archive = ZipFile(story_zip, "r")
|
||||
|
||||
part_trees: list[BeautifulSoup] = [
|
||||
# Transform part metadata into an easily-indexable dictionary
|
||||
part_id_title_dictionary = {
|
||||
str(part["id"]): part["title"] for part in metadata["parts"]
|
||||
}
|
||||
|
||||
part_trees: list[BeautifulSoup] = []
|
||||
|
||||
for id in archive.namelist():
|
||||
if (
|
||||
id not in part_id_title_dictionary
|
||||
): # If a part is deleted and the old story_zip is cached, this is needed to avoid a KeyError exception
|
||||
continue
|
||||
|
||||
part_trees.append(
|
||||
clean_tree(
|
||||
part["title"], part["id"], archive.read(str(part["id"])).decode("utf-8")
|
||||
part_id_title_dictionary[id],
|
||||
id,
|
||||
archive.read(id).decode("utf-8"),
|
||||
)
|
||||
)
|
||||
for part in metadata["parts"]
|
||||
]
|
||||
|
||||
images = (
|
||||
[await fetch_tree_images(tree) for tree in part_trees]
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
href="https://github.com/TheOnlyWayUp"
|
||||
class="underline"
|
||||
target="_blank">TheOnlyWayUp</a
|
||||
> © 2025
|
||||
> © 2026
|
||||
</p>
|
||||
</aside>
|
||||
</footer>
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
>
|
||||
</div>
|
||||
<p>
|
||||
Copyright © 2025 - All rights reserved by <a
|
||||
Copyright © 2026 - All rights reserved by <a
|
||||
href="https://rambhat.la"
|
||||
class="link"
|
||||
target="_blank"
|
||||
|
||||
Reference in New Issue
Block a user