Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FileNotFoundError due to the file path wasn't decoded for UTF-8 #643

Closed
supersonictw opened this issue May 13, 2024 · 2 comments
Closed
Labels
bug Something isn't working
Milestone

Comments

@supersonictw
Copy link
Contributor

What happened?

Not to decode file:// scheme URL characters for regular UTF-8 characters will cause FileNotFoundError.

Tried running from:

  • pipx
  • flatpak
  • appimage

Solution:
https://stackoverflow.com/a/15048213/8258897

It might should be fixed with:

# In "normcap/screengrab/handlers/dbus_portal.py", function "_synchronized_capture".
    uri = result[0]
    parsed_uri = urlparse(uri)
    parsed_path = unquote(parsed_uri.path)

    image_path = Path(parsed_path)
    image = QtGui.QImage(image_path)

How did you install NormCap?

Python Package (pip install)

Operating System + Version?

Debian 12

[Linux only] Display Server (DS) + Desktop environment (DE)?

DS: Wayland, DE: KDE Plasma 5

Debug log output?*

16:53:59 - INFO    - normcap:50 - Start NormCap v0.5.6
16:53:59 - DEBUG   - normcap:100 - Set QT_QPA_PLATFORM=wayland
16:53:59 - DEBUG   - normcap.gui.tray:70 - System info:
{'normcap_version': '0.5.6', 'python_version': '3.11.2', 'cli_args': '/home/user/.local/bin/normcap -v debug', 'is_briefcase_package': False, 'is_flatpak_package': False, 'is_appimage_package': False, 'platform': 'linux', 'desktop_environment': <DesktopEnvironment.KDE: 3>, 'display_manager_is_wayland': True, 'pyside6_version': '6.7.0', 'qt_version': '6.7.0', 'qt_library_path': '/home/user/.local/pipx/venvs/normcap/lib/python3.11/site-packages/PySide6/Qt/plugins, /usr/bin', 'locale': 'zh_CN', 'config_directory': PosixPath('/home/user/.config/normcap'), 'resources_path': PosixPath('/home/user/.local/pipx/venvs/normcap/lib/python3.11/site-packages/normcap/resources'), 'tesseract_path': PosixPath('/usr/bin/tesseract'), 'tessdata_path': None, 'envs': {'TESSDATA_PREFIX': None, 'LD_LIBRARY_PATH': None}, 'screens': [Screen(left=0, top=0, right=1919, bottom=1079, device_pixel_ratio=1.0, index=0, screenshot=None)]}
16:53:59 - DEBUG   - normcap.gui.settings:162 - Skip update of non existing setting (show_introduction: None)
16:53:59 - DEBUG   - normcap.gui.settings:162 - Skip update of non existing setting (cli_mode: False)
16:53:59 - DEBUG   - normcap.gui.settings:162 - Skip update of non existing setting (background_mode: False)
16:53:59 - DEBUG   - normcap.gui.settings:162 - Skip update of non existing setting (clipboard_handler: None)
16:53:59 - DEBUG   - normcap.gui.tray:384 - Listen on local socket v0.5.6-normcap.
16:53:59 - DEBUG   - normcap.screengrab.permissions:222 - Checking screenshot permission
16:53:59 - DEBUG   - normcap.screengrab.handlers.dbus_portal:92 - DBus request message: <PySide6.QtDBus.QDBusMessage(type=MethodReturn, service="", signature="o", contents=([ObjectPath: /org/freedesktop/portal/desktop/request/1_1143/normcap_cebaaeac]) ) at 0x7f9f77ce0f00>
16:53:59 - DEBUG   - normcap.screengrab.handlers.dbus_portal:99 - Request accepted
16:53:59 - DEBUG   - normcap.ocr.tesseract:24 - Executing '/usr/bin/tesseract --list-langs'
16:53:59 - DEBUG   - normcap.ocr.tesseract:37 - Tesseract command output: List of available languages in "/usr/share/tesseract-ocr/5/tessdata/" (5): ¬ chi_tra ¬ chi_tra_vert ¬ eng ¬ jpn ¬ osd ¬
16:53:59 - DEBUG   - normcap.screengrab.handlers.dbus_portal:119 - DBus signal message: <PySide6.QtDBus.QDBusMessage(type=Signal, service=":1.73", path="/org/freedesktop/portal/desktop/request/1_1143/normcap_cebaaeac", interface="org.freedesktop.portal.Request", member="Response", signature="ua{sv}", contents=(0, [Argument: a{sv} {"uri" = [Variant(QString): "file:///home/user/%E5%9C%96%E7%89%87/Screenshot_20240513_165359.png"]}]) ) at 0x7f9f77cd3b00>
16:53:59 - DEBUG   - normcap.screengrab.handlers.dbus_portal:137 - Parse response
16:53:59 - CRITICAL - normcap:148 - Uncaught exception!
Traceback (most recent call last):
  File "/home/user/.local/bin/normcap", line 8, in <module>
    sys.exit(run())
             ^^^^^
  File "/home/user/.local/pipx/venvs/normcap/lib/python3.11/site-packages/normcap/app.py", line 102, in run
    app, tray = _prepare()
                ^^^^^^^^^^
  File "/home/user/.local/pipx/venvs/normcap/lib/python3.11/site-packages/normcap/app.py", line 95, in _prepare
    tray = SystemTray(app, vars(args))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/pipx/venvs/normcap/lib/python3.11/site-packages/normcap/gui/tray.py", line 111, in __init__
    if not self._ensure_screenshot_permission():
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/pipx/venvs/normcap/lib/python3.11/site-packages/normcap/gui/tray.py", line 402, in _ensure_screenshot_permission
    if screengrab.has_screenshot_permission():
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/pipx/venvs/normcap/lib/python3.11/site-packages/normcap/screengrab/permissions.py", line 228, in has_screenshot_permission
    return _dbus_portal_has_screenshot_permission()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/pipx/venvs/normcap/lib/python3.11/site-packages/normcap/screengrab/permissions.py", line 200, in _dbus_portal_has_screenshot_permission
    result = dbus_portal.capture()
             ^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/pipx/venvs/normcap/lib/python3.11/site-packages/normcap/screengrab/handlers/dbus_portal.py", line 241, in capture
    image = _synchronized_capture(interactive=False)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/pipx/venvs/normcap/lib/python3.11/site-packages/normcap/screengrab/handlers/dbus_portal.py", line 209, in _synchronized_capture
    image_path.unlink()
  File "/usr/lib/python3.11/pathlib.py", line 1148, in unlink
    os.unlink(self)
FileNotFoundError: [Errno 2] 沒有此一檔案或目錄: '/home/user/%E5%9C%96%E7%89%87/Screenshot_20240513_165359.png'
16:53:59 - CRITICAL - normcap:151 - System info: {'normcap_version': '0.5.6', 'python_version': '3.11.2', 'cli_args': '/home/user/.local/bin/normcap -v debug', 'is_briefcase_package': False, 'is_flatpak_package': False, 'is_appimage_package': False, 'platform': 'linux', 'desktop_environment': <DesktopEnvironment.KDE: 3>, 'display_manager_is_wayland': True, 'pyside6_version': '6.7.0', 'qt_version': '6.7.0', 'qt_library_path': '/home/user/.local/pipx/venvs/normcap/lib/python3.11/site-packages/PySide6/Qt/plugins, /usr/bin', 'locale': 'zh_CN', 'config_directory': PosixPath('/home/user/.config/normcap'), 'resources_path': PosixPath('/home/user/.local/pipx/venvs/normcap/lib/python3.11/site-packages/normcap/resources'), 'tesseract_path': PosixPath('/usr/bin/tesseract'), 'tessdata_path': None, 'envs': {'TESSDATA_PREFIX': None, 'LD_LIBRARY_PATH': None}, 'screens': [Screen(left=0, top=0, right=1919, bottom=1079, device_pixel_ratio=1.0, index=0, screenshot=None)]}
16:53:59 - CRITICAL - normcap:152 - Unfortunately, NormCap has to be terminated due to an unknown problem.
Please help improve NormCap by reporting this error, including the output above, on
https://github.com/dynobo/normcap/issues/new
Thanks!
@supersonictw supersonictw added bug Something isn't working triage Needs confirmation and priotization labels May 13, 2024
@dynobo dynobo removed the triage Needs confirmation and priotization label May 13, 2024
@dynobo
Copy link
Owner

dynobo commented May 13, 2024

Thanks for the excellent error report and already providing a fix!! 🙂

@dynobo dynobo added this to the 0.5.7 milestone May 16, 2024
@dynobo
Copy link
Owner

dynobo commented May 18, 2024

Fix is included in the latest release. Feel free to reopen, if the issue persists.

@dynobo dynobo closed this as completed May 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants