Emersont1 / itchio

https://pypi.org/project/itchiodl/
MIT License
99 stars 17 forks source link

Crash - FileNotFoundError: [Errno 2] No such file or directory when filename contains unusual symbols #86

Open JohnDiGriz opened 1 year ago

JohnDiGriz commented 1 year ago

I have this exception

Traceback (most recent call last):
  File "/run/media/johndigriz/Transcend/Itchiodl/itchiodl-fix-no-hash/itchiodl/library.py", line 108, in download_library
    for _ in r:
  File "/usr/lib/python3.10/concurrent/futures/_base.py", line 621, in result_iterator
    yield _result_or_cancel(fs.pop())
  File "/usr/lib/python3.10/concurrent/futures/_base.py", line 319, in _result_or_cancel
    return fut.result(timeout)
  File "/usr/lib/python3.10/concurrent/futures/_base.py", line 451, in result
    return self.__get_result()
  File "/usr/lib/python3.10/concurrent/futures/_base.py", line 403, in __get_result
    raise self._exception
  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/run/media/johndigriz/Transcend/Itchiodl/itchiodl-fix-no-hash/itchiodl/library.py", line 99, in dl
    g.download(self.login, platform)
  File "/run/media/johndigriz/Transcend/Itchiodl/itchiodl-fix-no-hash/itchiodl/game.py", line 99, in download
    self.do_download(d, token)
  File "/run/media/johndigriz/Transcend/Itchiodl/itchiodl-fix-no-hash/itchiodl/game.py", line 232, in do_download
    if utils.md5sum(out_file) != d["md5_hash"]:
  File "/run/media/johndigriz/Transcend/Itchiodl/itchiodl-fix-no-hash/itchiodl/utils.py", line 54, in md5sum
    with path.open("rb") as f:
  File "/usr/lib/python3.10/pathlib.py", line 1119, in open
    return self._accessor.open(self, mode, buffering, encoding, errors,
FileNotFoundError: [Errno 2] No such file or directory: 'darkjaguar8/a-fairys-day-adventure/A Fairy’s Day Adventure into the Human World.pdf'

The error happens with files that contain any non-English letters, a single quote and some other symbols

ForestFeather commented 1 year ago

Coming to say I've hit this as well recently.

undeadrattler commented 1 year ago

Friend and I found a temporary fix by setting whatever your environment is to UTF-8, copying the mangled file to the correct name, and adjusting utils.py to have the MD5 check section updated as follows:

    """Returns the md5sum of a file"""
    md5 = hashlib.md5()
    #with path.open("rb") as f:
    with open(path, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            md5.update(chunk)
    return md5.hexdigest()
TheFrenchGhosty commented 5 months ago

@undeadrattler Seems to work thanks, I really wonder why it doesn't download in the correct encoding format... it just dies if a filename has a apostrophe...