mansuf / mangadex-downloader

A command-line tool to download manga from MangaDex, written in Python.
https://mangadex-dl.mansuf.link/
MIT License
472 stars 37 forks source link

Conversion to .cbz failed #74

Closed MFijak closed 1 year ago

MFijak commented 1 year ago

What happened ?

Hello all,

I tried to download a manga series with this tool. The download of the first chapter was successful, but the conversion to .cbz failed. The tool then stopped completely.

managedexdownloader  | [INFO] XXXX has finished download, converting to cbz...
Convert:   0%|                                    | 0.00/29.0 [00:00
managedexdownloader  |     self.worker.submit(lambda: self.convert(self.chapter_zip, images))
managedexdownloader  |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
managedexdownloader  |   File "/usr/lib/python3.11/site-packages/mangadex_downloader/format/comic_book.py", line 115, in convert
managedexdownloader  |     zip_obj.write(im_path, im_path.name)
managedexdownloader  |   File "/usr/lib/python3.11/zipfile.py", line 1768, in write
managedexdownloader  |     raise ValueError(
managedexdownloader  | ValueError: Attempt to write to ZIP archive that was already closed
managedexdownloader  | [ERROR] Unhandled exception, ValueError: Attempt to write to ZIP archive that was already closed
managedexdownloader  | Traceback (most recent call last):
managedexdownloader  |   File "/usr/lib/python3.11/site-packages/mangadex_downloader/cli/__init__.py", line 76, in _main
managedexdownloader  |     download(args)
managedexdownloader  |   File "/usr/lib/python3.11/site-packages/mangadex_downloader/cli/download.py", line 33, in download
managedexdownloader  |     url(args, args.type)
managedexdownloader  |   File "/usr/lib/python3.11/site-packages/mangadex_downloader/cli/url.py", line 166, in __call__
managedexdownloader  |     self.func(self.id, args)
managedexdownloader  |   File "/usr/lib/python3.11/site-packages/mangadex_downloader/cli/url.py", line 97, in download_manga
managedexdownloader  |     dl_manga(*args)
managedexdownloader  |   File "/usr/lib/python3.11/site-packages/mangadex_downloader/main.py", line 167, in download
managedexdownloader  |     download_manga(manga, base_path)
managedexdownloader  |   File "/usr/lib/python3.11/site-packages/mangadex_downloader/main.py", line 137, in download_manga
managedexdownloader  |     fmt.main()
managedexdownloader  |   File "/usr/lib/python3.11/site-packages/mangadex_downloader/format/base.py", line 501, in main
managedexdownloader  |     self.download_chapters(cache)
managedexdownloader  |   File "/usr/lib/python3.11/site-packages/mangadex_downloader/format/base.py", line 459, in download_chapters
managedexdownloader  |     self.on_finish(file_path, chap_class, images)
managedexdownloader  |   File "/usr/lib/python3.11/site-packages/mangadex_downloader/format/comic_book.py", line 187, in on_finish
managedexdownloader  |     self.worker.submit(lambda: self.convert(self.chapter_zip, images))
managedexdownloader  |   File "/usr/lib/python3.11/site-packages/mangadex_downloader/utils.py", line 196, in submit
managedexdownloader  |     raise err
managedexdownloader  |   File "/usr/lib/python3.11/site-packages/mangadex_downloader/utils.py", line 217, in run
managedexdownloader  |     job()
managedexdownloader  |   File "/usr/lib/python3.11/site-packages/mangadex_downloader/format/comic_book.py", line 187, in 
managedexdownloader  |     self.worker.submit(lambda: self.convert(self.chapter_zip, images))
managedexdownloader  |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
managedexdownloader  |   File "/usr/lib/python3.11/site-packages/mangadex_downloader/format/comic_book.py", line 115, in convert
managedexdownloader  |     zip_obj.write(im_path, im_path.name)
managedexdownloader  |   File "/usr/lib/python3.11/zipfile.py", line 1768, in write
managedexdownloader  |     raise ValueError(
managedexdownloader  | ValueError: Attempt to write to ZIP archive that was already closed
managedexdownloader exited with code 1

I then grabbed the source and tried to fix it myself.

By removing this line I could successfully download and convert the series.

I did not create a pull request, because I'm not sure if removing this line is safe in general.

What did you expect to happen ?

To successfully download and convert the series to .cbz

OS version

I'm running this tool in a Docker container.

Host: Ubuntu 22.04.2 LTS Container: Alpine Linux version 3.18.2

App version

managedexdownloader  | mangadex-downloader v2.10.0 (https://github.com/mansuf/mangadex-downloader)
managedexdownloader  | Python: 3.11.4
managedexdownloader  | arch: x64
managedexdownloader  | bundled executable: no

Installation origin

PyPI (Python Package Index)

Installation origin (other sources)

No response

Reproducible command

mangadex-dl /urls.txt --language "English" --save-as "cbz" --folder "/output"

Additional context

No response

mansuf commented 1 year ago

Oh dear, I'm really sorry. I forgot to remove that line of code when developing for #65. Feel free to make pull request, it's totally safe to remove that code. The chapter_zip was supposed to close in CBZFile.convert()

https://github.com/mansuf/mangadex-downloader/blob/9c5161b61a1931b9b8b9780643c20fbed0f39e7f/mangadex_downloader/format/comic_book.py#L110-L118

MFijak commented 1 year ago

No problem! I created the pull request #75