2 Commits

Author SHA1 Message Date
Aron BenDaniel 0e106e6da6 Update copyright year to 2026 2026-01-08 01:12:06 +05:30
Aron BenDaniel 68eb4a22b7 fix(api): Restructure archive parsing to iterate through archive items 2026-01-07 00:48:15 +05:30
6 changed files with 40 additions and 24 deletions
+9 -10
View File
@@ -1,11 +1,10 @@
**/__pycache__/ __pycache__
**/*.ipynb *ipynb
**/build/ build
.idea/ .idea
.vscode/ .vscode
**/.venv/ .venv
**/.env .env
**/.env_template *log
**/*.log *.md
**/*.md
src/api/uv.lock src/api/uv.lock
+9 -6
View File
@@ -1,4 +1,4 @@
FROM node:20-alpine FROM node:20
WORKDIR /build WORKDIR /build
COPY src/frontend/package*.json . COPY src/frontend/package*.json .
@@ -13,12 +13,15 @@ FROM python:3.13-slim
WORKDIR /app WORKDIR /app
RUN apt update && \ COPY --from=nobodyxu/apt-fast:latest-debian-buster-slim /usr/local/ /usr/local/
apt install -y git build-essential python3.13-dev libglib2.0-0 libpango-1.0-0 libpangoft2-1.0-0 && \
apt clean && \ RUN apt update
rm -rf /var/lib/apt/lists/* 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 # aiohttp-client-cache depends on multipart, which requires python3.13-dev to build successfully on 3.13
# weasyprint depends on libgoject, libpango, and libpangoft2 # weasyprint depends on libgoject, libpango, and libpangoft2
RUN rm -rf /var/lib/apt/lists/*
# https://github.com/TheOnlyWayUp/WattpadDownloader/pull/82#discussion_r2470358950 # 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 --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
COPY src/api/pyproject.toml /app COPY src/api/pyproject.toml /app
RUN uv sync && uv cache clean RUN uv sync
COPY src/api/ /app COPY src/api/ /app
COPY --from=0 /build/build /app/src/build COPY --from=0 /build/build /app/src/build
+1 -1
View File
@@ -53,5 +53,5 @@ My thanks to [aerkalov/ebooklib](https://github.com/aerkalov/ebooklib) for a fas
--- ---
<div align="center"> <div align="center">
<p>TheOnlyWayUp © 2025</p> <p>TheOnlyWayUp © 2026</p>
</div> </div>
+19 -5
View File
@@ -174,12 +174,26 @@ async def handle_download(
story_zip = await fetch_story_content_zip(story_id, cookies) story_zip = await fetch_story_content_zip(story_id, cookies)
archive = ZipFile(story_zip, "r") archive = ZipFile(story_zip, "r")
part_trees: list[BeautifulSoup] = [ # Transform part metadata into an easily-indexable dictionary
clean_tree( part_id_title_dictionary = {
part["title"], part["id"], archive.read(str(part["id"])).decode("utf-8") 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_id_title_dictionary[id],
id,
archive.read(id).decode("utf-8"),
)
) )
for part in metadata["parts"]
]
images = ( images = (
[await fetch_tree_images(tree) for tree in part_trees] [await fetch_tree_images(tree) for tree in part_trees]
+1 -1
View File
@@ -19,7 +19,7 @@
href="https://github.com/TheOnlyWayUp" href="https://github.com/TheOnlyWayUp"
class="underline" class="underline"
target="_blank">TheOnlyWayUp</a target="_blank">TheOnlyWayUp</a
> © 2025 > © 2026
</p> </p>
</aside> </aside>
</footer> </footer>
+1 -1
View File
@@ -44,7 +44,7 @@
> >
</div> </div>
<p> <p>
Copyright © 2025 - All rights reserved by <a Copyright © 2026 - All rights reserved by <a
href="https://rambhat.la" href="https://rambhat.la"
class="link" class="link"
target="_blank" target="_blank"